Библиотека собеса по Python | вопросы с собеседований
6.03K subscribers
670 photos
14 videos
519 links
Вопросы с собеседований по Python и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/6587aafa

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Почему NumPy предпочтительнее Matlab, Octave, Idl или Yorick?

NumPy — высокопроизводительная библиотека с открытым исходным кодом, которая обеспечивает сложные математические и научные вычислительные возможности. Она поддерживает следующее:

⚡️Мощные функции для выполнения сложных математических операций с многомерными матрицами и массивами. Операции с ndarrays NumPy примерно на 50% быстрее по сравнению с операциями с встроенными списками с использованием циклов. Эта эффективность очень полезна, когда массивы содержат миллионы элементов
⚡️Предоставляет синтаксис индексации для легкого доступа к частям данных в большом массиве
⚡️Предоставляет встроенные функции, которые помогают легко выполнять операции, связанные с линейной алгеброй и статистикой
⚡️Для выполнения сложных вычислений с использованием NumPy требуется всего несколько строк кода


Библиотека собеса по Python
🔥3👍1
CPU-bound пайплайн распараллелен через multiprocessing, но под нагрузкой стал работать медленнее: рост RSS, высокий overhead и низкая утилизация CPU. Как диагностировать и починить?

Померить накладные расходы на IPC/пиклинг (профилировщики, замеры времени map/submit). Укрупнить задачи (batch/chunksize), передавать большие данные через shared memory (multiprocessing.shared_memory, NumPy shared arrays / mmap) вместо копий, инициализировать тяжёлые объекты один раз в initializer воркера. Ограничить число процессов до числа ядер, избегать возврата больших результатов (писать в общий sink).

Библиотека собеса по Python
3
В FastAPI-сервисе каждые ~60 сек появляются p95/p99 всплески латентности. Профилирование показывает короткие стопы event loop во время циклических сборок мусора CPython. Как диагностировать и сгладить проблему, не «просто отключая GC»?

Включить телеметрию GC (callbacks, gc.get_stats()/get_threshold()) и пламеграфы (py-spy) вокруг пауз; найти источники циклов (крупные графы объектов, замыкания/кеши) через tracemalloc/objgraph. Снизить аллокации и циклы: __slots__, иммутабельные структуры, orjson, реюз буферов. Настроить GC: поднять пороги gc.set_threshold(...), вынести gc.collect() в фоновую периодику/idle-хуки, для hot-path — локально отключать циклический GC на время обработки и снова включать. Проверить, что паузы ушли и p99 сгладился.

Библиотека собеса по Python
8
🔥 Не пропустите событие осени для AI-комьюнити

24 сентября, 19:00 Мск — бесплатный вебинар с Максимом Шаланкиным «ИИ-агенты: новая фаза развития искусственного интеллекта»

😤 Пока все спорят, «боты это или нет», мы покажем, как работают настоящие агенты: с планированием, инструментами и памятью. За час Максим разберёт:
— почему ИИ-агенты сейчас на пике инвестиций
— чем они отличаются от ChatGPT и обычных моделей
— цикл агента: восприятие → планирование → действие → обучение
— живое демо простого агента
— как бизнес уже получает ROI до 80%

⚡️ Хотите спросить у Максима всё, что обычно остаётся «за кадром»? Ловите шанс — только в прямом эфире.

Мест мало, регистрация закроется, как только забьём комнату
1
Как корректно завершить FastAPI/asyncio-сервис без потерь данных: остановить фоновые задачи, закрыть соединения (DB/HTTP/Redis) и не зависнуть на выключении?

Обработать SIGTERM/SIGINT через lifespan (@asynccontextmanager или app.router.lifespan): пометить приложение как «not-ready», перестать принимать новые задания, отправить отмену всем фоновым задачам (хранить ссылки/TaskGroup), дождаться их с таймаутом (await asyncio.gather(..., return_exceptions=True)), корректно закрыть пулы (await pool.close()), опустошить/дренировать очереди. Критичные операции обернуть в asyncio.shield/идемпотентность, прокидывать CancellationToken/timeouts, логировать незавершённые таски.

Библиотека собеса по Python
👍3
Как реализовать exactly-once обработку событий в Python-сервисе с Kafka (consume → обработка → запись в БД/другую тему) при возможных падениях сервиса?

Строим at-least-once + идемпотентность. Варианты:

Transactional outbox: пишем результат и outbox-запись в одной БД-транзакции; отдельный паблишер надёжно читает outbox и шлёт в Kafka, после чего помечает запись.
Или Kafka EOS: confluent-kafka с enable.idempotence=true и
transactional.id; оборачиваем read-process-write и commit offset в одну Kafka-транзакцию.

В обоих случаях делаем операции идемпотентными (ключи/версионирование), коммитим оффсеты только после durable-записи результата, храним processed keys (или используем upsert).


Библиотека собеса по Python
👍1
Сегодня премьера

В 19:00 МСК стартует бесплатный вебинар с Максимом Шаланкиным«ИИ-агенты: новая фаза развития искусственного интеллекта».

В программе:
— почему агенты ≠ чат-боты;
— живое демо простого агента;
— и как эта тема встроена в курс, который разработан под руководством Никиты Зелинского.

Это прямой эфир: подключиться можно через лендинг курса.
👍2
Долгоживущий Python-сервис после пиков удерживает высокий RSS, хотя счётчик объектов стабилен и tracemalloc показывает, что большинство аллокаций освобождены. Почему память «не возвращается ОС» и как это чинить?

Это не утечка в логике, а фрагментация/поведение аллокаторов: pymalloc и glibc malloc держат арены/пулы, ОС не всегда может их отдать обратно. Смешение «долгоживущих» и «короткоживущих» объектов усугубляет фрагментацию.
Лечение: снижать churn и фрагментацию (reuse буферов, __slots__, пулы объектов, векторизация/NumPy вместо мелких аллокаций), разводить по жизненным циклам крупные структуры, выносить большие буферы в управляемые bytearray/мемпулы. На уровне рантайма — использовать jemalloc или аккуратно вызывать malloc_trim(0) (Linux) в моменты покоя. Архитектурно — модель процессов с ротацией воркеров (gunicorn --max-requests/--max-requests-jitter, uvicorn multiple workers), чтобы «сбрасывать» фрагментированную память. Профилировать: сравнивать RSS vs tracemalloc, смотреть malloc_info(), psutil и горячие аллокации.

Библиотека собеса по Python
👍1
Что такое ROC-кривая? Что такое AUC?

ROC-кривая — кривая рабочих характеристик (Receiver Operating Characteristics curve). Используется для анализа поведения классификаторов при различных пороговых значениях. Позволяет рассмотреть все пороговые значения для данного классификатора. Показывает долю ложно положительных примеров (англ. false positive rate, FPR) в сравнении с долей истинно положительных примеров (англ. true positive rate, TPR).

Или так: ROC-кривая — это кривая роста процента истинно позитивных результатов по мере роста процента ложных позитивных результатов. Полностью случайное предсказание будет изображаться прямой диагональной линией (черная штриховая линия на рисунке). Оптимальная модель будет как можно более близкой к оси y и к линии «y=1».

Одна из метрик того, насколько близка кривая ROC к этим линиям – AUC, или площадь под кривой (Area Under Curve). Чем выше AUC, тем лучше работает модель.


Библиотека собеса по Python
👏2👍1
🤫 Курс «ИИ-агенты для DS-специалистов»

Каждый технологический скачок оставляет позади тех, кто «подождал ещё чуть-чуть». ИИ-агенты — это новый рывок.

Уже через пару лет именно они будут драйвить аналитику и автоматизацию. Хотите остаться на гребне?

🖥️ На курсе «ИИ-агенты для DS-специалистов» мы разберём:

— создание AI-агентов с нуля
— сборку собственной RAG-системы
— интеграцию LLM под задачи бизнеса

📌 Курс подходит:

→ ML/AI инженерам (middle+ / senior)
→ Data Scientists
→ Backend и platform-инженерам
→ Advanced CS/DS студентам

⚡️ Старт уже скоро — 3 октября.

💰 До 28 сентября действует скидка — 57.000 ₽ вместо 69.000 ₽ (по промокоду datarascals).

🔗 Узнать больше о курсе и записаться

З.ы. если вы не успели на вебинар «ИИ-агенты: новая фаза развития искусственного интеллекта» — запись уже доступна
2
Асинхронный сервис под нагрузкой «раздувается» по памяти: создаются тысячи задач через asyncio.create_task, но нагрузка на CPU низкая. Как ограничить параллелизм и удержать память?

Ввести backpressure: использовать ограниченную очередь/семафор (asyncio.Semaphore, asyncio.Queue) или TaskGroup с лимитом; батчировать работу, await-ить завершение перед запуском новых задач, таймауты/отмена подвисших тасков, и не хранить ссылки на завершённые задачи (во избежание удержания памяти).

Библиотека собеса по Python
👍3
🚀 Всё о курсе «ИИ-агенты для DS-специалистов»

Зачем нужны ИИ-агенты?

Это системы, которые берут на себя задачи аналитики и автоматизации. Именно они становятся основой для работы с корпоративными данными и для поддержки принятия решений.

Зачем мне курс?

Курс отвечает на три ключевых вопроса:

— Как построить собственную систему агентов с нуля?
— Каким образом использовать RAG-подход для работы с корпоративными данными?
— Как адаптировать LLM под реальные задачи бизнеса?

Подходит ли это мне?

Курс рассчитан на специалистов уровня middle+ и senior: ML/AI инженеров, Data Scientists, backend и platform-разработчиков. Подойдёт и студентам CS/DS, если вы готовы к продвинутым практикам.

Запись вводной встречи «ИИ-агенты: новая фаза развития искусственного интеллекта» доступна по ссылке.

Когда старт?

Обучение начинается 3 октября.

Сколько стоит?

До 28 сентября действует скидка → 57 000 ₽ вместо 69 000 ₽ (промокод datarascals).

🔗 Описание программы и регистрация
👍1
Объясните, как в Python осуществляется управление памятью.

В Python объекты и структуры данных data structures находятся в закрытой динамически выделяемой области private heap, которая управляется менеджером памяти Python. Он делегирует часть работы программам распределения ресурсов allocators, закрепленным за конкретными объектами, и одновременно с этим следит, чтобы они не выходили за пределы динамически выделяемой области.

По факту данной областью управляет интерпретатор interpreter. Пользователь никак не контролирует данный процесс, даже когда манипулирует ссылками объектов на блоки памяти внутри динаической области. Менеджер памяти Python распределяет пространство динамической области среди объектов и другие внутренние буферы по требованию.


Библиотека собеса по Python
3
🔥 Сегодня последний день скидки!

На недавнем вебинаре «ИИ-агенты: новая фаза развития AI» мы показали, как агенты уже меняют работу Data Scientists и инженеров.

Что тебя ждёт на курсе:

⚡️ создашь своего ИИ-агента с нуля
⚡️ соберёшь RAG-систему
⚡️ научишься адаптировать LLM под реальные данные бизнеса

До конца этого дня цена на курс 57 000 ₽. Уже завтра будет 69 000 ₽. Успевай записаться (используй промокод datarascals).

🔗 Записаться на курс
1👍1
Последние часы со скидкой!

Мы уже закрыли вебинар «ИИ-агенты: новая фаза развития AI», но запись всё ещё доступна.

А дальше остаётся только практика. На курсе «ИИ-агенты для DS-специалистов» ты научишься разрабатывать агентов, собирать RAG-системы и адаптировать LLM под бизнес.

Сегодня цена ещё 57.000 ₽ с промокодом datarascals.
Завтра — 69.000 ₽.

👉 Успеть оплатить до полуночи
👍2🥱1
🤖 Как работают менеджеры контекста в Python, и в каких случаях их полезно использовать?

Менеджеры контекста используются для управления ресурсами, такими как файлы, сетевые подключения или блокировки, с автоматическим освобождением этих ресурсов по завершении работы. Основное их применение — в тех случаях, когда требуется гарантированное освобождение ресурсов, даже в случае возникновения ошибок. Менеджеры контекста создаются с помощью ключевого слова with, которое автоматически вызывает методы enter и exit у объекта.

Пример использования ⚙️
# Пример менеджера контекста для работы с файлами
with open('example.txt', 'w') as file:
file.write('Hello, world!')

# Файл автоматически закроется после выхода из блока 'with', даже если возникнет ошибка

Библиотека собеса по Python
👍3
🤖 Курс «ИИ-агенты для DS-специалистов»

Последняя возможность в этом году освоить ИИ-агентов — курс стартует уже 3 октября! Первый вебинар пройдёт в день старта, а подробности вебинара можно найти на сайте.

📚 Бонус: при оплате до 30 сентября вы получите дополнительный лонгрид для подготовки к курсу. Это отличный способ подойти к занятиям уже с базой.

🔥 А ещё после прохождения курса у вас будет достаточно знаний, чтобы участвовать в хакатоне с призовым фондом 1 125 000 ₽.

🔗 Записаться на курс и узнать подробности
👍1
Как проверить файл .py на синтаксические ошибки без его выполнения?

Для проверки файла .py на синтаксические ошибки без его запуска можно воспользоваться утилитой py_compile.

Можно использовать командную строку или терминал, чтобы проверить файл .py на наличие синтаксических ошибок, не выполняя его. Для этого применяется флаг -m с модулем py_compile.

Откройте командную строку или терминал и перейдите в папку, где находится ваш файл .py. Имя файла, который вы хотите проверить, обозначено как yourfile.py:

python -m py_compile yourfile.py

Библиотека собеса по Python
👍5
🤖 Курс «ИИ-агенты для DS-специалистов»

Последняя возможность в этом году освоить ИИ-агентов с Proglib— старт живых вебинаров на курсе уже 3 октября!

Уже 24 студента изучают 5 лонгридов подготовительного модуля, чтобы сформировать базу к старту живых вебинаров с Никитой Зелинским.

📚 Бонус: при оплате до 30 сентября вы получите дополнительный лонгрид для подготовки к курсу. Это отличный способ подойти к занятиям уже с базой.

🔥 А ещё после прохождения курса у вас будет достаточно знаний, чтобы участвовать в хакатоне с призовым фондом 1 125 000 ₽.

🔗 Записаться на курс и узнать подробности
Как Python решает, что вернуть при obj.attr? Укажи роль data/non-data дескрипторов, __getattribute__, __getattr__ и MRO.

Сначала вызывается type(obj).__getattribute__ (если переопределён — он рулит). Далее порядок:

1. Ищем data-descriptor на классе по C3 MRO (есть __set__/__delete__) → вызываем его __get__.
2. Иначе смотрим obj.__dict__.
3. Иначе ищем на классе/MRO: если non-data descriptor (функция, property без __set__ и т.п.) — вызываем __get__, иначе возвращаем значение.
4. Если не нашли — вызывается __getattr__. Итого приоритет: data-descriptor > instance dict > non-data/class attr, поиск по классам — по __mro__ (C3).


Библиотека собеса по Python
👍5
Объясните, как устроен импорт в Python: роль sys.modules (кэш), цепочка sys.meta_path/finders/ModuleSpec/loaders, что происходит при циклических зависимостях, и почему importlib.reload() не «обновляет» ссылки в других модулях.

При import сначала проверяется sys.modules; если модуля нет, по sys.meta_path ищут spec, создают объект модуля, сразу кладут его в sys.modules (для разрыва циклов) и затем loader.exec_module() исполняет код. В циклическом импорте второй участник видит частично инициализированный модуль (атрибутов ещё нет) → AttributeError/тонкие баги. Помогает отложить импорт внутрь функций/блоков, импортировать модуль целиком вместо from X import Y. reload() переисполнить код в том же объекте модуля: старые ссылки в других модулях остаются на прежние объекты, состояние/сайд-эффекты не откатываются — безопасно только при продуманном, идемпотентном коде и контроле точек связывания. Для кастомных источников добавляют свои finders/ loaders в sys.meta_path; namespace-пакеты работают по PEP 420 без __init__.py.

Библиотека собеса по Python
👍21