Bezdepbonusu7Программирование: статьи и ответы

Карьера в Python

Собеседование Python junior: частые вопросы и ответы

Редакция Bezdepbonusu77 мин чтения

Вопросы на собеседовании Python junior повторяются из компании в компанию: типы данных, функции, ООП, GIL, базы данных и простые задачи на live coding. Собрали самые частые с короткими ответами и примерами кода, а в конце дали план подготовки на две недели.

Переговорная для собеседования на позицию Python junior
Фото: Takver from Australia, CC BY-SA 2.0, Wikimedia Commons
Содержание
  1. Этапы собеседования
  2. Типы данных
  3. Функции
  4. ООП
  5. GIL и многопоточность
  6. SQL, Git, HTTP
  7. Live coding
  8. Как подготовиться
  9. Частые вопросы

Как проходит собеседование на Python junior в 2026 году

Формат почти везде одинаковый: короткий звонок с рекрутером, техническое интервью и иногда тестовое задание. Крупные компании добавляют алгоритмическую секцию с живым кодом.

ЭтапДлительностьЧто проверяют
Скрининг с HR15-30 минутМотивация, опыт, ожидания по зарплате, формат работы
Техническое интервью60-90 минутТеория Python, ООП, базы данных, Git, разбор ваших проектов
Live coding30-60 минутРешение 1-2 задач в редакторе, рассуждение вслух
Тестовое заданиеОт нескольких часов до пары днейКод, структура проекта, README, тесты

Ниже собраны вопросы, которые чаще всего встречаются в подборках с реальных собеседований на Хабре, Tproger и Stepik, с короткими ответами. Отвечать на интервью лучше своими словами и с примером: заученная формулировка без примера выдает зубрежку.

Вопросы по типам данных и базовому синтаксису

Какие типы данных изменяемые, а какие нет?

Неизменяемые: int, float, bool, str, tuple, frozenset, bytes. Изменяемые: list, dict, set, bytearray. Изменить неизменяемый объект нельзя, любая операция создает новый.

Чем список отличается от кортежа?

Список изменяемый, кортеж нет. Кортеж можно использовать ключом словаря (если внутри только неизменяемые элементы), он занимает чуть меньше памяти. Кортеж подходит для фиксированных записей, список - для коллекций, которые меняются.

Чем is отличается от ==?

== сравнивает значения, is проверяет, что это один и тот же объект в памяти. is используют для сравнения с None: if x is None.

Что может быть ключом словаря?

Любой хешируемый объект: числа, строки, кортежи из хешируемых элементов. Список ключом быть не может, будет TypeError: unhashable type.

Что выведет этот код?

def add(item, items=[]):
    items.append(item)
    return items

print(add(1))
print(add(2))

Выведет [1], а затем [1, 2]. Значение по умолчанию вычисляется один раз при создании функции, и список общий для всех вызовов. Правильно писать items=None и создавать список внутри.

Чем copy отличается от deepcopy?

copy.copy создает новый контейнер, но вложенные объекты остаются общими. copy.deepcopy рекурсивно копирует все уровни.

Функции, декораторы и генераторы

Что такое *args и **kwargs?

Способ принять произвольное число аргументов. *args собирает позиционные в кортеж, **kwargs - именованные в словарь. Имена условные, работают звездочки.

Что такое декоратор?

Функция, которая принимает функцию и возвращает новую, добавляя поведение до или после вызова. Работает благодаря тому, что функции в Python - объекты первого класса.

import time
from functools import wraps

def timer(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        start = time.perf_counter()
        result = func(*args, **kwargs)
        print(f"{func.__name__}: {time.perf_counter() - start:.3f} c")
        return result
    return wrapper

@timer
def work():
    time.sleep(0.5)

Часто спрашивают, зачем @wraps: он сохраняет имя и docstring исходной функции.

Что такое замыкание?

Вложенная функция, которая запоминает переменные внешней функции после ее завершения. Декоратор выше - пример замыкания: wrapper помнит func.

Чем генератор отличается от списка?

Генератор выдает значения по одному через yield и не хранит их все в памяти. Подходит для больших файлов и бесконечных последовательностей. Пройти генератор можно только один раз.

def read_lines(path):
    with open(path, encoding="utf-8") as f:
        for line in f:
            yield line.strip()

Чем итератор отличается от итерируемого объекта?

Итерируемый объект (список, строка) умеет выдать итератор через __iter__. Итератор хранит текущую позицию и возвращает следующий элемент через __next__, а в конце бросает StopIteration.

Вопросы по ООП в Python

Назовите принципы ООП

Инкапсуляция, наследование, полиморфизм, часто добавляют абстракцию. Будьте готовы привести пример каждого на Python: полиморфизм - разные классы с методом area(), которые вызываются одинаково.

Чем __init__ отличается от __new__?

__new__ создает объект и возвращает его, __init__ инициализирует уже созданный. Переопределять __new__ нужно редко, например для синглтона или наследования от неизменяемых типов.

Чем classmethod отличается от staticmethod?

@classmethod получает первым аргументом класс (cls) и часто используется как альтернативный конструктор. @staticmethod не получает ни класса, ни экземпляра, это обычная функция внутри пространства имен класса.

Что такое MRO?

Method Resolution Order - порядок поиска методов при множественном наследовании. Python строит его алгоритмом C3, посмотреть можно через ClassName.__mro__.

Есть ли в Python приватные атрибуты?

Строго нет. Одно подчеркивание (_x) - соглашение "не трогать снаружи". Два подчеркивания (__x) включают искажение имени в _ClassName__x, но доступ все равно возможен.

GIL, потоки, процессы и asyncio

Этот блок почти гарантированно будет на интервью, даже на junior.

Что такое GIL?

Global Interpreter Lock - блокировка в CPython, из-за которой в один момент байт-код выполняет только один поток. Поэтому потоки не ускоряют вычисления на CPU, но хорошо подходят для ожидания сети и диска. С версии 3.13 есть экспериментальная сборка без GIL (free-threaded), а в 3.14 она получила статус официально поддерживаемой, но по умолчанию обычный Python по-прежнему с GIL.

ИнструментДля каких задачПример
threadingВвод-вывод: сеть, диск, ожидание ответаСкачивание десятков страниц
multiprocessingТяжелые вычисления на нескольких ядрахОбработка изображений
asyncioТысячи одновременных сетевых операций в одном потокеTelegram-бот, веб-сервер на FastAPI

Как Python управляет памятью?

Основной механизм - подсчет ссылок: когда счетчик объекта падает до нуля, память освобождается. Для циклических ссылок есть сборщик мусора (модуль gc), который периодически ищет недостижимые циклы.

Вопросы по SQL, Git и HTTP

Junior на Python почти всегда работает с базой и репозиторием, поэтому эти темы спрашивают наравне с языком.

  • Какие бывают JOIN? INNER возвращает только совпадения, LEFT - все строки левой таблицы плюс совпадения справа, FULL - все строки обеих. Примеры запросов есть в подборке SQL-запросов с примерами.
  • Что такое индекс? Структура (обычно B-дерево), которая ускоряет поиск по столбцу ценой места на диске и более медленной записи.
  • Что такое транзакция и ACID? Группа операций, которая выполняется целиком или не выполняется вовсе. ACID: атомарность, согласованность, изолированность, долговечность.
  • Чем merge отличается от rebase? merge создает коммит слияния и сохраняет историю как была, rebase переносит ваши коммиты поверх другой ветки и делает историю линейной.
  • Чем GET отличается от POST? GET получает данные и не должен менять состояние сервера, POST отправляет данные в теле запроса. Коды ответов вроде 201, 404 и 500 разобраны в справочнике HTTP-кодов ответов.

Задачи на live coding с решениями

На junior обычно дают простые задачи и смотрят, как вы рассуждаете. Проговаривайте план вслух, начните с простого решения, потом оцените сложность.

Проверить, является ли строка палиндромом

def is_palindrome(s: str) -> bool:
    clean = [c.lower() for c in s if c.isalnum()]
    return clean == clean[::-1]

Найти два числа с заданной суммой

Решение перебором дает O(n^2), со словарем O(n):

def two_sum(nums, target):
    seen = {}
    for i, n in enumerate(nums):
        if target - n in seen:
            return seen[target - n], i
        seen[n] = i
    return None

Посчитать самые частые слова в тексте

from collections import Counter

def top_words(text, n=3):
    return Counter(text.lower().split()).most_common(n)

Интервьюер оценит, если вы знаете стандартную библиотеку: Counter, defaultdict, itertools, а не пишете все циклами вручную.

Как подготовиться к собеседованию за 2 недели

  1. Пройдитесь по вопросам из этой статьи и ответьте на каждый вслух, без подсказок. Где сбились, запишите и перечитайте документацию.
  2. Решайте по 2-3 задачи в день уровня Easy на LeetCode или Codewars, засекайте 20 минут.
  3. Подготовьте рассказ о двух своих проектах: что делает, почему такой стек, что было сложно, что бы переделали.
  4. Повторите SQL: SELECT с JOIN, GROUP BY, HAVING, подзапросы.
  5. Проведите пробное интервью с другом или запишите себя на видео.

Совет: если не знаете ответа, скажите, как бы вы его искали и что предполагаете. Для junior это лучше, чем молчание или выдумка: интервьюер проверяет ход мысли, а не память.

По рынку: на октябрь 2026 года стартовые вакансии junior Python на Хабр Карьере часто предлагают от 70-80 тысяч рублей, в Москве выше, в регионах ниже. Вакансий junior заметно меньше, чем senior, поэтому подготовка к техническому этапу окупается. Если база пока не уверенная, вернитесь к плану изучения Python с нуля, а все материалы по языку собраны в разделе Python.

Частые вопросы

Какие вопросы задают на собеседовании Python junior чаще всего?

Изменяемые и неизменяемые типы, list и tuple, is и ==, *args и **kwargs, декораторы, генераторы, принципы ООП, GIL, базовый SQL и Git. Обычно добавляют 1-2 простые задачи на live coding.

Нужно ли знать алгоритмы для junior Python?

Нужна база: сложность O-нотация, работа со списками, словарями и множествами, простые сортировки и поиск. Сложные алгоритмы спрашивают в основном крупные компании.

Спрашивают ли Django или FastAPI на собеседовании junior?

Если вакансия про backend, да: ORM, миграции, обработка запросов, middleware. Для вакансий по автоматизации или данным фреймворки обычно не спрашивают.

Что делать, если не знаю ответа на вопрос?

Честно сказать об этом и порассуждать: что вы предполагаете и где бы проверили. Интервьюеры ценят ход мысли больше, чем заученные определения.

Сколько длится техническое собеседование?

Обычно 60-90 минут. В крупных компаниях этапов больше: отдельные секции по алгоритмам и по проектированию, плюс тестовое задание.

Источники

  • Python Frequently Asked Questions, Python documentation, 2026
  • Python support for free threading, Python documentation, 2026
  • Собеседование VS реальная работа: какие навыки пригодятся начинающим Python-разработчикам, Tproger, 2025
  • Вакансии Junior Python Developer, Хабр Карьера, 2026

Python

Похожие материалы

Версии программ и команды проверены на дату публикации. Если что-то изменилось, сверяйтесь с официальной документацией. Нашли неточность? Напишите на admin@bezdepbonusu7.win.