Backend Python — техническое интервью
60 минут, middle → senior. Python 3.11+, типы, async, ORM, тесты.
- Questions
- 14
- Live coding
- 2
Разогрев: опыт и контекст
Опыт с Python
Сколько лет на Python в продакшене? Django, FastAPI, asyncio — что использовали?
Scoring rubric (0–10)
3–5: «Несколько лет Python» без фреймворков. 6–8: Конкретный стек, тип проекта, версия Python. 9–10: Миграции 2→3, typing adoption; честно про глубину async. Красный флаг: только скрипты без web/backend на middle+.
Interviewer notes
2–3 минуты.
Язык и runtime
GIL
Что такое GIL и как он влияет на CPU-bound и I/O-bound задачи?
Scoring rubric (0–10)
3–5: «GIL мешает потокам» без деталей. 6–8: Один поток байткода; I/O освобождает GIL; multiprocessing для CPU. 9–10: asyncio vs threads; когда ProcessPoolExecutor; C extensions. Красный флаг: «async быстрее для любых задач».
Interviewer notes
4 минуты.
Mutable default args
Почему def f(x=[]) — антипаттерн? Что пойдёт не так?
Scoring rubric (0–10)
3–5: «Список общий» без объяснения. 6–8: Default eval once; shared state между вызовами; None sentinel. 9–10: dataclass field(default_factory); immutability patterns. Красный флаг: «в Python так можно, bug не воспроизводится у меня».
Interviewer notes
3 минуты.
Typing и generics
Зачем list[str] vs List[str]? Что даёт TypedDict или Protocol?
Scoring rubric (0–10)
3–5: «Для mypy» без примеров. 6–8: PEP 585; Optional/Union; TypedDict для JSON shapes. 9–10: Protocol для structural subtyping; Generics в своих контейнерах. Красный флаг: «typing не нужен, Python динамический».
Interviewer notes
4 минуты.
async/await
Когда asyncio уместен, а когда лучше sync + threads/processes?
Scoring rubric (0–10)
3–5: «async всегда быстрее». 6–8: Event loop; await points; blocking call в async ломает loop. 9–10: asyncio.gather; semaphores; hybrid with run_in_executor. Красный флаг: time.sleep в async handler.
Interviewer notes
5 минут.
N+1 в ORM
Что такое N+1 query problem в Django/SQLAlchemy и как лечить?
Scoring rubric (0–10)
3–5: «Много запросов» без механизма. 6–8: select_related/prefetch_related или joinedload; explain на примере. 9–10: Monitoring query count; dataloaders pattern. Красный флаг: «ORM сам оптимизирует всегда».
Interviewer notes
4 минуты.
Практика: живой код
LRU cache
Реализуйте класс LRUCache с get и put за O(1) (capacity фиксирован).
Scoring rubric (0–10)
3–5: dict без порядка eviction. 6–8: OrderedDict или dict + linked list idea. 9–10: functools.lru_cache когда достаточно; thread-safety обсуждает. Красный флаг: O(n) eviction на каждый put.
Interviewer notes
15–20 минут.
Flatten JSON
Напишите функцию, которая «разворачивает» вложенный dict в плоский с ключами через точку.
Scoring rubric (0–10)
3–5: Только один уровень вложенности. 6–8: Рекурсия; пропуск lists или индексы 0.1.2. 9–10: Iterator без лишних копий; типизация. Красный флаг: json.dumps hack.
Interviewer notes
10 минут.
Тесты и API
Тесты
Как организуете фикстуры в pytest для API-тестов с БД?
Scoring rubric (0–10)
3–5: «pytest и assert». 6–8: conftest.py; transaction rollback per test; factory_boy. 9–10: testcontainers; parallel isolation; markers. Красный флаг: shared prod DB in tests.
Interviewer notes
4 минуты.
FastAPI dependencies
Как работает Depends в FastAPI и зачем это нужно?
Scoring rubric (0–10)
3–5: «Внедрение зависимостей». 6–8: Generator deps для session; override in tests. 9–10: Scope; security deps; composition. Красный флаг: global session in route.
Interviewer notes
4 минуты.
Инженерная культура и вопросы
Run an interview with this template
Sign up free: copy the template to your org, schedule an interview, and run it in a room with live coding.
Get started in FlashTalk