Подготовка к собеседованию — Python-разработчик
Колода из 508+ карточек с вопросами для собеседования по направлению «Python-разработчик» — по темам и уровню сложности, с повторениями по вашим оценкам. Посмотрите несколько карточек ниже, затем выберите доступ, чтобы учить всё направление по расписанию в стиле Anki (SM-2).
Новым подписчикам месяца или года может быть доступно 7 дней бесплатно. Условия и сумму подтвердит страница оплаты.
С чего начать
Нужно уметь писать простые функции на Python и читать SQL. Направление использует общие модули Python, баз данных, бэкенда и инженерных основ.
Первый проход: Python → Базы данных. Начните с базовых вопросов в этих модулях, затем продолжайте по плану. К сложным и senior-вопросам возвращайтесь по требованиям вакансии; все карточки доступны с самого начала.
Общие темы могут входить в несколько направлений и сохраняют одну историю повторений. План ниже отмечает общие основы и профильные модули; выбирайте глубину под свою вакансию.
Что внутри
Все темы направления, сгруппированные так, как вы будете их учить.
Python
122 карточкиОбщие основы
Базы данных
104 карточкиОбщие основы
Бэкенд
169 карточекОбщие основы
Основы CS
43 карточкиОбщие основы
DevOps и инфраструктура
35 карточекОбщие основы
Поведенческое интервью
35 карточекОбщие основы
Примеры вопросов
Несколько карточек из колоды — откройте ответ, затем выберите доступ, чтобы учить весь набор по расписанию.
Чем отличаются изменяемые (mutable) и неизменяемые (immutable) типы?
Чем отличаются изменяемые (mutable) и неизменяемые (immutable) типы?
Короткий ответ: Изменяемый объект можно менять на месте (list, dict, set), неизменяемый — нельзя (int, str, tuple). Перепривязка переменной и изменение объекта — разные действия.
items = [1, 2]
alias = items
items.append(3)
assert alias is items and alias == [1, 2, 3]
text = "hello"
original = text
text += " world"
assert original == "hello" # исходная строка не изменилась
Подробно:
id()идентифицирует объект и постоянен в течение его жизни. То, что это адрес памяти, — деталь реализации CPython.- В кортеже нельзя заменить элементы, но вложенный список может изменяться. Неизменяемость не означает автоматически глубокую неизменяемость или потокобезопасность.
- Ключ словаря и элемент множества должны быть хешируемыми: хеш остаётся стабильным, а равные объекты имеют равные хеши. Кортеж со списком нехешируем. Изменяемый экземпляр пользовательского класса может хешироваться по идентичности: хешируемость не синоним неизменяемости.
- Функция получает ссылки на объекты. Мутация аргумента может быть видна вызывающему коду; перепривязка локального параметра не перепривязывает переменную снаружи.
Источники: Хешируемость Python, идентичность объектов.
Что делает SELECT и в каком порядке выполняются части запроса?
Что делает SELECT и в каком порядке выполняются части запроса?
Короткий ответ: SELECT извлекает строки из таблиц. Логический порядок выполнения НЕ совпадает с порядком написания: сначала FROM, затем WHERE, GROUP BY, HAVING, SELECT, DISTINCT, ORDER BY, LIMIT.
Подробно:
Порядок написания (синтаксический):
SELECT DISTINCT col1, agg(col2)
FROM t
WHERE cond
GROUP BY col1
HAVING agg_cond
ORDER BY col1
LIMIT 10 OFFSET 20;
Логический порядок исполнения:
1. FROM / JOIN -- какие таблицы, как соединить
2. WHERE -- фильтр строк ДО группировки
3. GROUP BY -- группировка
4. HAVING -- фильтр групп ПОСЛЕ агрегации
5. SELECT -- вычисление выражений, алиасов
6. DISTINCT -- удаление дублей
7. ORDER BY -- сортировка
8. LIMIT / OFFSET -- срез
⚠️ Ловушка: алиас из SELECT нельзя использовать в WHERE (т.к. WHERE выполняется раньше SELECT), но можно в ORDER BY и часто в GROUP BY (зависит от СУБД). Пример ошибки:
SELECT salary * 12 AS annual FROM emp WHERE annual > 100000; -- ОШИБКА
SELECT salary * 12 AS annual FROM emp ORDER BY annual; -- ОК
Что такое HTTP и как устроен цикл запрос-ответ?
Что такое HTTP и как устроен цикл запрос-ответ?
Короткий ответ: HTTP (HyperText Transfer Protocol) — текстовый прикладной протокол клиент-сервер поверх TCP (в HTTP/3 — поверх QUIC/UDP). Клиент отправляет запрос, сервер возвращает ответ; соединение без сохранения состояния между запросами (stateless).
Подробно:
Запрос состоит из стартовой строки (метод + путь + версия), заголовков и опционального тела:
POST /api/v1/users HTTP/1.1
Host: api.example.com
Content-Type: application/json
Accept: application/json
Content-Length: 38
{"name": "Анна", "email": "a@ex.com"}
Ответ состоит из строки статуса (версия + код + reason phrase), заголовков и тела:
HTTP/1.1 201 Created
Content-Type: application/json
Location: /api/v1/users/42
{"id": 42, "name": "Анна", "email": "a@ex.com"}
⚠️ Ловушка: «HTTP работает только поверх TCP» — неверно для HTTP/3, который использует QUIC поверх UDP. И reason phrase («OK», «Created») носит чисто информативный характер — клиенты должны опираться на числовой код, а не на текст.
Что такое Big O нотация?
Что такое Big O нотация?
Короткий ответ: Big O описывает, как растёт время работы или потребление памяти алгоритма при увеличении размера входных данных n, отбрасывая константы и младшие члены. Это верхняя оценка скорости роста.
Подробно:
Big O отвечает на вопрос «что произойдёт, когда n станет очень большим?». Нас не интересует точное число операций, а только характер роста. Поэтому O(2n + 100) упрощается до O(n), а O(3n² + n) — до O(n²).
Основные классы роста (от лучшего к худшему):
# O(1) — константа: не зависит от n
def first(arr):
return arr[0] if arr else None
# O(log n) — логарифм: каждый шаг делит задачу пополам (бинарный поиск)
def binary_search(arr, target):
lo, hi = 0, len(arr) - 1
while lo <= hi:
mid = (lo + hi) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
lo = mid + 1
else:
hi = mid - 1
return -1
# O(n) — линейная: один проход
def total(arr):
s = 0
for x in arr: # n итераций
s += x
return s
# O(n log n) — эффективные сортировки (merge, quick, Timsort)
def sort_it(arr):
return sorted(arr)
# O(n^2) — квадрат: вложенный цикл
def has_dup_naive(arr):
for i in range(len(arr)):
for j in range(i + 1, len(arr)):
if arr[i] == arr[j]:
return True
return False
# O(2^n) — экспонента: наивный Фибоначчи, перебор подмножеств
def fib_naive(n):
if n < 2:
return n
return fib_naive(n - 1) + fib_naive(n - 2)
Ориентир по росту при n = 1 000 000: O(1) — 1 операция, O(log n) — ~20, O(n) — миллион, O(n log n) — ~20 млн, O(n²) — триллион (уже слишком), O(2^n) — нереально даже при n = 50.
⚠️ Ловушка: Big O — это про асимптотику (поведение при больших n), а не про реальное время. O(n) алгоритм может быть медленнее O(n²) на маленьких данных из-за больших констант. Также путают: Big O (верхняя граница, Ω — нижняя, Θ — точная), в собесах под «O» обычно подразумевают Θ.
Что такое Docker и какую проблему он решает?
Что такое Docker и какую проблему он решает?
Короткий ответ: Docker упаковывает приложение и его зависимости пользовательского пространства в образ, а затем запускает из него изолированный процесс. Это уменьшает различия между разработкой, CI и продакшеном.
Для Go-сервиса образ может содержать бинарник, сертификаты CA и необходимые динамические библиотеки. Совместимые ядро и архитектуру CPU предоставляет хост; конфигурация, секреты, лимиты ресурсов и внешние сервисы задаются отдельно.
docker build -t myapp:1.0 .
docker run -d -p 127.0.0.1:8000:8000 --name myapp myapp:1.0
docker logs -f myapp
Приложение должно слушать интерфейс контейнера, например :8000. Здесь порт опубликован только на loopback хоста для локальной работы.
Ограничение: одинаковый образ не гарантирует одинаковое поведение на любой машине. Linux-контейнеры на macOS/Windows обычно работают внутри Linux-VM; архитектура CPU, возможности ядра, сеть и внешняя конфигурация остаются важны. Собирай варианты для нужных платформ и проверяй реальное окружение запуска.
Источники: Документация 1, Документация 2.
Что означает STAR и что включать в каждую часть ответа?
Что означает STAR и что включать в каждую часть ответа?
Короткий ответ: STAR — Situation, Task, Action, Result: ситуация, задача, действия и результат. Структура помогает рассказать о конкретном прошлом опыте так, чтобы собеседник понял проблему, ваш вклад и исход.
| Часть | Что включить |
|---|---|
| Situation | Краткий контекст: проект, участники и значимые ограничения. |
| Task | Цель и ваша личная зона ответственности. |
| Action | Конкретные шаги, рассмотренные варианты и причины решений. |
| Result | Что произошло, откуда это известно и чему вы научились. |
Большую часть ответа посвятите действиям и доказательствам. Универсальной разбивки по процентам или обязательной длительности нет; следуйте вопросу интервьюера и оставьте место для уточнений.
Пример плана: Сервис замедлился при запуске → вы отвечали за диагностику → сняли профиль и проверили точечное изменение → объяснили наблюдаемый эффект и что улучшили бы в следующий раз. Подставляйте собственные факты; правдивый качественный результат лучше выдуманной метрики.
Готовы лучше запоминать?
Посмотрите пример, выберите направление и настройте регулярную практику под свою подготовку.
Вопросы об этом направлении
Как готовиться к собеседованию на «Python-разработчик»?
Учите концепции, которые придётся объяснять, а не только те, что умеете кодить. Направление «Python-разработчик» в RecallDeck даёт 508+ отобранных вопросов и возвращает каждый по расписанию в стиле Anki (SM-2), основанному на ваших оценках — чтобы тренировать вспоминание и объяснение. Дополняйте повторения кодингом и пробными собеседованиями.
Какие темы охватывает направление «Python-разработчик»?
Направление «Python-разработчик» разбито на ключевые области, которые реально проверяют на таких собеседованиях, — по темам и уровню сложности (Concept, Junior, Middle, Senior). Полный план и примеры вопросов можно посмотреть выше до входа.
Помогает ли интервальное повторение в подготовке к «Python-разработчик»?
Да. Активное вспоминание и честная самооценка помогают закреплять знания. RecallDeck назначает повторения карт по направлению «Python-разработчик» на основе ваших оценок: знакомые карты возвращаются реже, а сложные получают больше практики.
Можно попробовать направление «Python-разработчик» до оплаты?
Новым подписчикам месячного или годового тарифа может быть доступен пробный период семь дней со всем направлением «Python-разработчик» и всеми функциями. Право на него и сумму подтвердит страница оплаты; при повторной подписке списание может быть сразу. Отмените подписку онлайн до конца пробного периода, чтобы избежать первого списания. У вечного доступа пробного периода нет.