Собеседование Middle Python-разработчика: темы, вопросы и примеры ответов
Чем собеседование на Middle отличается от Junior: меньше вопросов на знание синтаксиса, больше — на компромиссы, конкурентность и качество кода. Темы и примеры ответов.

Оглавление
Главное отличие Middle-собеседования от Junior — вопросы реже звучат как «что делает эта функция» и чаще как «почему вы выбрали именно такое решение» и «что будет, если условия изменятся». От Middle ждут не знания синтаксиса, а способности объяснить компромисс.
Чем отличается уровень вопросов
На Junior-собеседовании обычно спрашивают «в чём разница между list и tuple». На Middle тот же факт разворачивают в сценарий: «вы проектируете кеш для часто запрашиваемых объектов — какую структуру данных выберете и почему». Разница не в теме, а в том, что нужно применить знание к контексту, а не пересказать определение.
Если базовые темы Python ещё не закрыты уверенно, сначала стоит пройти вопросы для Junior Python-собеседования — Middle-собеседование эти темы не повторяет с нуля, а достраивает поверх них.
Конкурентность и асинхронность
На Middle-уровне обычно ждут не просто определения asyncio, а понимания, когда его вообще стоит применять:
Ожидаемый ответ: asyncio ускоряет I/O-bound задачи за счёт кооперативной многозадачности на одном потоке, но не помогает при CPU-bound нагрузке — GIL всё равно не даёт двум корутинам считать одновременно на разных ядрах. Здесь код выполнится последовательно, просто внутри одного event loop; для реального ускорения CPU-bound задачи нужен multiprocessing или вынос вычислений во внешний сервис.
Развёрнутая практика по теме — в разделе «Асинхронный Python».
Компромиссы в проектировании кода
Частый формат вопроса на Middle — не «как сделать», а «какие есть варианты и в чём их цена»:
- ORM vs raw SQL — ORM ускоряет разработку и снижает риск SQL-инъекций, но может генерировать неоптимальные запросы (классическая проблема N+1); raw SQL даёт контроль над планом выполнения ценой более многословного кода.
- Синхронный Django vs асинхронный FastAPI — выбор зависит от профиля нагрузки: много блокирующих внешних вызовов (сторонние API, долгие I/O) — аргумент в пользу async-стека; преобладание CPU-bound обработки — разница менее значима.
- Монолит vs выделение сервиса — не архитектурная догма, а вопрос сложности деплоя и организационных границ команды на конкретный момент, а не общее правило «сервисы лучше».
Оценивают не то, какой вариант вы назвали «правильным», а то, назвали ли вы хотя бы два и объяснили условия выбора.
Чтение и ревью чужого кода
Ключевой навык Middle — не только писать код, но и находить проблемы в чужом:
Вопрос на собеседовании: «Здесь есть распространённая ловушка с мутабельными значениями по умолчанию. В чём она и что если бы discount=[] стоял прямо в сигнатуре?» Такие задачи на поиск проблем в реальном коде — отдельный практический навык, который стоит тренировать целенаправленно в тренажёре Code Review: там нужно находить баги, антипаттерны ООП и уязвимости в фрагментах кода, а не только писать свой.
Базы данных на уровне Middle
Помимо синтаксиса JOIN ожидается понимание, почему запрос медленный:
- когда PostgreSQL не использует индекс (например, функция над колонкой в
WHEREбез функционального индекса); - что такое N+1 и как его находят (профилировщик запросов,
select_related/prefetch_relatedв ORM); - разница между уровнями изоляции транзакций и когда важна.
Подробнее — в разделе «PostgreSQL на собеседовании» и тесте по теме.
Как проверить, готовы ли вы к Middle-уровню
Знание списка тем не гарантирует уверенного ответа вслух под давлением времени. Ближайший к реальности способ проверить себя:
- Тест по Python — быстрая проверка теории с указанием слабых тем.
- Голосовое мок-интервью — практика формулировать компромиссы вслух, с разбором сразу после ответа.
- System Design для Python — если позиция подразумевает и архитектурные вопросы.


