P
prepair.app
Пройти інтерв'ю →
EnglishУкраїнськаРусскийDeutsch
🐍

Middle Python BackendПитання на співбесіді Python розробника

Middle · 2–4 роки досвіду

Співбесіда Python-розробника охоплює внутрішню будову мови, асинхронність, Django або FastAPI і роботу з базою. Нижче — найчастіші питання з еталонними відповідями. Middle: глибше розуміння, оптимізацію та реальні робочі ситуації.

Спробувати — без реєстрації
Готуємо питання…

Теми для підготовки

Типи даних і структури
Декоратори та генератори
GIL і конкурентність
asyncio та async/await
Django / FastAPI
ORM і оптимізація SQL

7 питань рівня Middle з відповідями

1

Що насправді блокує GIL і коли потоки все ж допомагають?

Відповідь

Global Interpreter Lock дозволяє виконувати байткод Python лише одному потоку водночас, тож чистий Python-код ніколи не йде паралельно по ядрах. Потоки допомагають там, де робота — це очікування, а не обчислення: мережа, диск, база. Під час блокувального вводу-виводу блокування відпускається. Для обчислювального навантаження потрібні процеси, C-розширення, що відпускає GIL, або винесення гарячої частини з Python.

2

Що саме робить await і коли async марний?

Відповідь

await повертає керування циклу подій, щоб той зайнявся чимось іншим, доки операція не завершиться; потік при цьому не створюється і паралельно нічого не виконується. Async марний на обчислювальному навантаженні: довге обчислення блокує цикл, а разом із ним і всі інші задачі. Марний він і якщо в ланцюжку є синхронна бібліотека — один блокувальний драйвер бази зупиняє весь цикл.

3

Напишіть декоратор. Навіщо йому functools.wraps?

Відповідь

Декоратор — функція, що приймає функцію і повертає заміну, зазвичай замикання, яке викликає оригінал. Без functools.wraps заміна несе власне імʼя і docstring, і декорована функція представляється як wrapper — ламається інтроспекція, help() і будь-який фреймворк, що маршрутизує за іменем функції. wraps переносить метадані.

4

У вас N+1 в ORM. Як його знайти і як виправити?

Відповідь

Знаходиться за журналом запитів або дебаг-панеллю: один запит на кожен рядок списку. Причина — ліниве завантаження всередині циклу. select_related розвʼязує для прямих зовнішніх ключів через join, prefetch_related — для зворотних і many-to-many другим запитом зі складанням у памʼяті. Пастка в тому, щоб вилікувати симптом кешуванням результату замість самого запиту.

5

Коли ви повернете генератор замість списку?

Відповідь

Коли той, хто викликає, проходить дані один раз і вони не мусять уміщатися в памʼять: читання великого файлу, потокова вибірка, конвеєр перетворень. Ціна в тому, що генератор витрачається: у нього не можна взяти довжину, звернутися за індексом чи пройти двічі без матеріалізації. Повернення генератора з публічного API дивує тих, хто чекає послідовність, тож це рішення варто задокументувати.

6

Що гарантує контекстний менеджер?

Відповідь

Що __exit__ виконається незалежно від того, завершився блок нормально чи впав — тому файлові дескриптори, блокування і транзакції живуть саме там. У варіанті через contextlib.contextmanager код до yield це підготовка, після — прибирання, але лише якщо воно у finally, інакше виняток його пропустить. Гарантія стосується очищення, а не приглушення помилки.

7

Що ви мокаєте в тестах, а що ні?

Відповідь

Мокають те, чим не володіють і не керують: сторонні API, час, випадковість, надсилання пошти. Не мокають власну доменну логіку — інакше тест перевіряє, що мок поводиться так, як ви його написали. Мокати базу теж зазвичай помилка: транзакція з відкотом після кожного тесту дає справжню поведінку майже безкоштовно, а помилки ORM — саме ті, які моки ховають.

🦎

Прочитати відповіді недостатньо

На співбесіді ти говориш вголос під тиском. Кем поставить ті самі питання, оцінить кожну відповідь і покаже, що саме підтягнути.

Пройти інтерв'ю Middle Python Backend →
Безкоштовно · 3 інтерв'ю на місяць

Інші рівні — Python Backend

Junior Python BackendSenior Python BackendУсі питання Python Backend

Інші спеціалізації

🔍Middle QA Manual🤖Middle QA AutomationMiddle Java Backend🐘Middle PHP Backend🦫Middle Go Backend🟢Middle Node.js Backend💎Middle Ruby on Rails🟣Middle .NET Backend Developer🔷Middle C++🟨Middle JavaScript