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

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

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

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Ваш Python-сервис использует asyncio и под нагрузкой работает стабильно, но при длительном тесте вы замечаете утечку памяти. Garbage Collector не освобождает объекты, хотя ссылки на них вроде бы удалены. Как будете искать и устранять проблему?

Проверю циклические ссылки и висящие таски, которые не завершаются. Использую tracemalloc, objgraph, gc.get_objects() для анализа живых объектов. Часто причиной бывает забытый asyncio.Task без await или глобальные кэши. Решение — правильно завершать корутины, использовать weakref, ограничивать размер кэшей (например, LRUCache) и при необходимости контролировать GC-паузы.

Библиотека собеса по Python
❤‍🔥2👍2
🔥 Последняя неделя перед стартом курса по AI-агентам

Старт курса уже 15го числа! Если вы планировали вписаться — сейчас ПОСЛЕДНИЙ шанс забронировать место

На курсе:
разложим LLM по косточкам: токенизация, SFT, PEFT, инференс
— соберём RAG и научимся оценивать его адекватно
— построим настоящую мультиагентную систему — архитектуру, которая умеет расти
— разберём CoPilot, сломаем через prompt injection (спасибо Максу)
— и наконец, посмотрим, как это работает в MCP и реальных кейсах

📍 Это 5 живых вебинаров + раздатка + домашки + чат с преподавателями

И главное — возможность реально разобраться, как проектировать системы на LLM, а не просто «поиграться с API»

Промокод на 5.000₽: LASTCALL

👉 Курс здесь
Async-сервис читает сообщения из Kafka и для каждого делает asyncio.create_task(process(msg)). Под пиковыми нагрузками растут задержки и RSS памяти, при этом CPU невысокий. В чём причина и как это исправить?

“Fire-and-forget” порождает неограниченное число задач, накапливается бэклог и объекты удерживаются в памяти до завершения тасков. Введите backpressure: ограничьте параллелизм через Semaphore/bounded Queue, батчируйте и await’ьте завершение (например, через пул воркеров или лимитированный gather), используйте pause/resume у Kafka-клиента, таймауты/отмену подвисших задач и корректные finally для освобождения ресурсов.

Библиотека собеса по Python
👍2
Что такое функциональное программирование?

Функциональное программирование — это парадигма программирования, в которой основными строительными блоками являются функции.
В функциональном программировании функции рассматриваются как математические функции — они принимают входные данные и возвращают результат.

Основные принципы функционального программирования:

Чистота функций: функции не должны иметь побочных эффектов и зависеть только от своих аргументов.

Иммутабельность: данные в функциональном программировании неизменяемы.

Рекурсия вместо циклов: в функциональном программировании циклы заменены на рекурсивные вызовы функций.

Высшего порядка функции: функции могут принимать на вход и возвращать другие функции.

Ленивые вычисления: вычисления откладываются до тех пор, пока результат не потребуется.


Библиотека собеса по Python
👍41
👀 Что такое Duck typing?

🦆Duck typing — это концепция в программировании, характерная для языков с динамической типизацией, таких как Python. Основная идея duck typing заключается в том, что тип объекта определяется его поведением (методами и свойствами), а не через явно заданный интерфейс или базовый класс.

🐍 В Python duck typing часто иллюстрируется фразой: «Если что-то выглядит как утка, плавает как утка и крякает как утка, то, вероятно, это и есть утка».

Библиотека собеса по Python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
В чём различие между __getattribute__ и __getattr__, и когда вызывается каждый?

Короткий ответ: __getattribute__ вызывается при каждом обращении к атрибуту; __getattr__ — только если атрибут не найден обычным способом. Внутри __getattribute__ нужно делегировать в super().__getattribute__, иначе будет бесконечная рекурсия.

Библиотека собеса по Python
👍1
FastAPI + SQLAlchemy 2.0 (async). Под нагрузкой растёт latency, пул соединений к БД забит, запросы «висят». Как диагностировать и починить без тупого увеличения пула?

Включить метрики/логирование пула (в т.ч. pool_size, overflow, время ожидания), найти долгие запросы (slow query log/EXPLAIN) и утечки сессий. Гарантировать жизненный цикл через контекст: async with AsyncSession() as s: .../sessionmaker, закрывать курсоры. Настроить pool_pre_ping/pool_recycle, таймауты (connect/statement). Ввести backpressure: лимитировать параллелизм (Semaphore/очередь), кратковременно ретраить. Оптимизировать SQL/индексы; при необходимости — кэш/батчи/денормализация.

Библиотека собеса по Python
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
📅 24 сентября в 19:00 МСК — бесплатный вебинар с Максимом Шаланкиным.

Тема: «ИИ-агенты: новая фаза развития искусственного интеллекта».

🔹 Почему все говорят про ИИ-агентов и куда вливаются миллиарды инвестиций.
🔹 Чем они отличаются от ChatGPT и обычных ботов.
🔹 Как работает цикл агента: восприятие → планирование → действие → обучение.
🔹 Живое демо простого агента.
🔹 Потенциал для бизнеса: автоматизация процессов и ROI до 80%.

Не придёшь — будешь потом рассказывать, что «агенты — это как чат-боты», и ловить косые взгляды от коллег 😏

👉 Регистрируйтесь через форму на лендинге
Какие отличия между модулем, пакетом и библиотекой?

Модуль — это отдельный файл на Python, который можно импортировать в скрипты или другие модули. В нем содержатся функции, классы и глобальные переменные.

Пакет — это коллекция модулей, объединенных в одной папке для обеспечения единой функциональности. Пакеты импортируются так же, как и модули. Обычно они содержат файл __init__.py, который сообщает интерпретатору Python, что папка является пакетом.

Библиотека — это совокупность пакетов.


Библиотека собеса по Python
👍5🔥1
⚡️ Бесплатный вебинар — ИИ-агенты: новая фаза развития AI

24 сентября в 19:00 МСК состоится бесплатный вебинар с Максимом Шаланкиным — Data Science Team Lead в финтех-команде MWS, а познакомиться с ним ближе можно в его тг-канале.

Тема:
«ИИ-агенты: новая фаза развития искусственного интеллекта».


На вебинаре разберёмся, почему агенты — это следующий шаг после ChatGPT, чем они отличаются от обычных моделей и как уже приносят бизнесу ROI до 80%. А дальше я покажу, как эта тема ложится в наш курс по ИИ-агентам, который разработан под руководством Никиты Зелинского.

Подробности рассказываем в гс выше — включай, чтобы не пропустить.
Почему 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