17 лютого 2026 · 9 хв читання

Python співбесіда: Django, Flask, алгоритми — топ-20 питань у 2026

Найпопулярніші питання на Python-співбесідах з детальними відповідями. Django, Flask, asyncio, алгоритми, бази даних, тестування — все українською.

🐍 Python основи

1. Які основні типи даних є в Python? Чим відрізняється list від tuple?

В Python є мутабельні типи (list, dict, set) та імутабельні (int, float, str, tuple, frozenset). list — змінюваний, можна додавати/видаляти елементи. tuple — незмінюваний, працює швидше і може бути ключем у словнику.

💡 Порада: На співбесіді згадайте, що tuple використовують для незмінних колекцій (координати, конфігурації), а list — коли потрібна динамічна зміна. Покажіть розуміння hashability.

2. Що таке GIL і як він впливає на багатопотоковість?

Global Interpreter Lock (GIL) — механізм CPython, який дозволяє лише одному потоку виконувати Python-байткод одночасно. Це спрощує управління пам'яттю, але обмежує паралельність для CPU-bound задач. Для I/O-bound задач threading все ще ефективний, бо GIL звільняється під час очікування I/O.

💡 Порада: Згадайте альтернативи: multiprocessing для CPU-bound задач, asyncio для I/O-bound, або інтерпретатори без GIL (PyPy, проєкт nogil у Python 3.13+).

3. Поясніть генератори та декоратори в Python

Генератор — функція з yield, яка повертає ітератор і генерує значення лінивим чином (lazy evaluation), економлячи пам'ять. Декоратор — функція, яка приймає іншу функцію і розширює її поведінку без зміни вихідного коду. Використовує паттерн обгортки (wrapper).

💡 Порада: Приклад генератора: читання великого файлу рядок за рядком. Приклад декоратора: @login_required, @cache. Знайте про functools.wraps для збереження метаданих функції.

🏗️ Django

4. Як працює Django ORM? Що таке QuerySet і коли він виконується?

Django ORM — це абстракція над SQL, яка дозволяє працювати з базою через Python-об'єкти. QuerySet — лінивий (lazy) об'єкт: SQL-запит не виконується, поки ви не ітеруєте результат, не викликаєте list(), len() або зріз. Це дозволяє ланцюжкувати фільтри: Model.objects.filter(...).exclude(...).order_by(...).

💡 Порада: Обов'язково згадайте N+1 проблему та рішення: select_related (JOIN) для ForeignKey і prefetch_related (окремий запит) для ManyToMany.

5. Що таке middleware в Django і для чого використовується?

Middleware — це «хуки» між запитом і відповіддю. Кожен middleware обробляє request (перед view) і response (після view). Вбудовані приклади: SecurityMiddleware, SessionMiddleware, CsrfViewMiddleware. Middleware виконуються у порядку, зазначеному в MIDDLEWARE settings.

💡 Порада: Розкажіть, коли писати свій middleware: логування запитів, rate limiting, додавання кастомних заголовків, модифікація request/response.

6. Що таке Django signals і коли їх варто (і не варто) використовувати?

Signals — механізм pub/sub в Django: pre_save, post_save, pre_delete, post_delete тощо. Дозволяють реагувати на події моделей без прямого зв'язку між компонентами. Наприклад, автоматично створити профіль при реєстрації користувача.

💡 Порада: Сигнали ускладнюють дебагінг і створюють неявні залежності. У більшості випадків краще перевизначити метод save() або використати менеджер. Використовуйте signals тільки для розв'язання (decoupling) між різними додатками.

🌶️ Flask

7. Що таке Blueprint у Flask і для чого він потрібен?

Blueprint — спосіб організації Flask-застосунку на модулі. Кожен Blueprint може мати свої routes, templates, static files. Це аналог Django-додатків (apps). Реєструються через app.register_blueprint(bp, url_prefix='/api').

💡 Порада: Покажіть, що розумієте Application Factory Pattern: create_app() → реєстрація blueprints, extensions, конфігурації. Це стандарт для production-ready Flask.

8. Які основні розширення Flask ви використовували?

Найпоширеніші: Flask-SQLAlchemy (ORM), Flask-Migrate (Alembic міграції), Flask-Login (аутентифікація), Flask-WTF (форми + CSRF), Flask-RESTful або Flask-RESTX (REST API), Flask-Caching (кешування), Flask-Mail (email).

💡 Порада: Не просто перелічуйте — розкажіть, в якому проєкті і чому ви обрали конкретне розширення. Порівняйте Flask-SQLAlchemy з чистим SQLAlchemy Core.

9. Як працює Jinja2 у Flask? Що таке контекстні процесори?

Jinja2 — шаблонізатор Flask з підтримкою наслідування шаблонів (extends), блоків (block), макросів, фільтрів. Контекстний процесор (@app.context_processor) — функція, яка додає змінні у всі шаблони автоматично (наприклад, поточний користувач, рік для footer).

💡 Порада: Згадайте автоескейпінг XSS у Jinja2 (за замовчуванням увімкнений), фільтр |safe та кастомні фільтри через app.template_filter().

🧮 Алгоритми та структури даних

10. Що таке Big O нотація? Наведіть приклади складностей

Big O описує верхню межу зростання часу/пам'яті алгоритму. Основні: O(1) — доступ до dict за ключем; O(log n) — бінарний пошук; O(n) — лінійний пошук; O(n log n) — сортування (Timsort у Python); O(n²) — вкладені цикли; O(2ⁿ) — рекурсивний Fibonacci без мемоізації.

💡 Порада: Завжди аналізуйте і часову, і просторову складність. Вмійте пояснити, чому dict lookup — O(1) амортизовано (хеш-таблиця).

11. Як реалізувати стек і чергу в Python?

Стек (LIFO): простий list з append() і pop(). Черга (FIFO): використовуйте collections.deque з append() і popleft() — O(1) для обох операцій. Не використовуйте list.pop(0) — це O(n), бо зсуває всі елементи.

💡 Порада: Для пріоритетних черг — heapq. Для потокобезпечних — queue.Queue. Знання правильних структур для задачі показує досвід.

12. Поясніть різницю між BFS і DFS. Коли використовувати кожен?

BFS (пошук в ширину) — використовує чергу, знаходить найкоротший шлях у невзваженому графі. DFS (пошук в глибину) — використовує стек/рекурсію, ефективний для пошуку шляху, перевірки зв'язності, топологічного сортування. BFS — O(V+E) пам'яті, DFS — O(V) стеку.

💡 Порада: BFS для найкоротшого шляху, рівневого обходу дерева. DFS для пошуку циклів, лабіринтів, backtracking задач. Вмійте реалізувати обидва ітеративно.

🗄️ Бази даних

13. Що таке індекси в PostgreSQL і коли їх створювати?

Індекс — структура даних (B-tree за замовчуванням), яка прискорює пошук. Створюйте для стовпців у WHERE, JOIN, ORDER BY. PostgreSQL також має GIN (повнотекстовий пошук, JSONB), GiST (геодані), BRIN (великі таблиці з послідовними даними).

💡 Порада: Індекси уповільнюють INSERT/UPDATE. Використовуйте EXPLAIN ANALYZE для перевірки. Знайте про часткові індекси (WHERE active = true) та покривні індекси (INCLUDE).

14. Для чого використовують Redis у Python-проєктах?

Redis — in-memory key-value сховище. Основні кейси: кешування (Django cache backend, Flask-Caching), сесії, черги задач (Celery broker), rate limiting, pub/sub для реального часу, лічильники та лідерборди (sorted sets).

💡 Порада: Знайте типи даних Redis: strings, hashes, lists, sets, sorted sets. Розкажіть про TTL для кешу та стратегії eviction (LRU, LFU). Для Python — бібліотека redis-py або aioredis.

15. Що таке N+1 проблема в ORM і як її вирішити?

N+1 — коли ORM робить 1 запит для основної таблиці та N додаткових для зв'язаних об'єктів. Наприклад, отримали 100 постів → 100 запитів для авторів. Рішення: Django — select_related/prefetch_related; SQLAlchemy — joinedload/subqueryload/selectinload.

💡 Порада: Використовуйте django-debug-toolbar або логування SQL для виявлення. У SQLAlchemy — echo=True на engine. Це одне з найчастіших production-питань.

🧪 Тестування

16. Чим pytest відрізняється від unittest?

unittest — стандартна бібліотека, xUnit-стиль з класами та self.assert*(). pytest — простіший синтаксис (звичайні функції + assert), потужні фікстури, параметризація (@pytest.mark.parametrize), багатий ecosystem плагінів (pytest-cov, pytest-asyncio, pytest-django).

💡 Порада: У 2026 pytest — стандарт індустрії. Знайте фікстури, conftest.py, маркери. pytest сумісний з unittest-тестами — можна мігрувати поступово.

17. Що таке mocking і коли його використовувати?

Mocking — заміна реальних об'єктів на імітації для ізоляції тестів. Бібліотека unittest.mock: Mock, MagicMock, patch. Мокайте зовнішні залежності: API-виклики, БД, файлову систему, час. Ніколи не мокайте те, що тестуєте.

💡 Порада: Правило: patch там, де об'єкт використовується, а не де він визначений. Наприклад: @patch('myapp.views.requests.get'), а не @patch('requests.get').

18. Як тестувати Django views та API endpoints?

Django надає TestCase з self.client для HTTP-запитів. Для DRF — APIClient з rest_framework.test. Тестуйте: status codes, структуру відповіді, авторизацію, валідацію, edge cases. Використовуйте factory_boy або фікстури для тестових даних.

💡 Порада: Тестуйте як успішні сценарії (happy path), так і помилки (401, 403, 404, 422). Використовуйте @pytest.mark.django_db для доступу до БД у pytest.

⚡ Асинхронність

19. Як працює asyncio в Python? Що таке event loop?

asyncio — бібліотека для асинхронного I/O. Event loop — цикл подій, який керує виконанням корутин. async def визначає корутину, await — точку, де виконання може переключитись на іншу корутину. Це кооперативна багатозадачність — код «поступається» контролем явно.

💡 Порада: Знайте різницю між asyncio.gather() (паралельне виконання), asyncio.create_task() (фонова задача) та await (послідовне). Для HTTP — aiohttp або httpx.

20. Що таке Celery і коли його використовувати замість asyncio?

Celery — розподілена черга задач для важких/довготривалих операцій: відправка email, обробка зображень, генерація звітів, scheduled tasks (celery beat). Працює з брокером (Redis/RabbitMQ). asyncio — для конкурентного I/O в одному процесі. Celery — для розподіленого виконання між воркерами.

💡 Порада: asyncio для швидких I/O операцій у межах запиту. Celery — коли задача може тривати секунди/хвилини і не повинна блокувати відповідь користувачу. Часто використовують разом: FastAPI + Celery.

Готовий до Python-співбесіди?

Наш Telegram-бот задає реальні питання з Python, Django, Flask та алгоритмів. Адаптивна складність, миттєвий фідбек та детальний звіт після кожної сесії.

🚀 Почати тренування

Безкоштовно · 5 інтерв'ю без оплати