Подборка вопросов

Вопросы на собеседовании Python junior

Типы данных, коллекции, функции, генераторы, ООП и конкурентность — то, о чём спрашивают начинающих Python-разработчиков почти на каждом собеседовании.

38вопросов
  1. 01Что такое *args и **kwargs?

    args собирает лишние позиционные аргументы в кортеж, kwargs — лишние именованные в словарь.

    Junior
  2. 02Как передаются аргументы в функцию — по значению или по ссылке?

    Ни то ни другое в классическом смысле: передаётся ссылка на объект (call by sharing).

    Junior
  3. 03Как работают async и await?

    async def создаёт корутину, await — точка, где она отдаёт управление циклу событий, пока ждёт.

    Junior
  4. 04Как запустить несколько корутин одновременно и получить их результаты?

    Точка входа — asyncio.run(main()): создаёт цикл событий и выполняет корутину. Несколько корутин одновременно запускают asyncio.gather(a(), b(), c()) — результаты приходят в том же…

    Junior
  5. 05Что такое self и __init__ в классе?

    self — ссылка на текущий экземпляр, Python передаёт её в метод первым аргументом.

    Junior
  6. 06Что такое замыкание?

    Замыкание — вложенная функция, которая помнит переменные внешней функции после её завершения.

    Junior
  7. 07Какая сложность у основных операций со списком, словарём и множеством?

    Список — массив: доступ по индексу и append — O(1), вставка в начало и поиск in — O(n).

    Junior
  8. 08Чем list comprehension отличается от генераторного выражения?

    [...] сразу строит весь список в памяти, (...) — ленивый генератор.

    Junior
  9. 09Что такое контекстный менеджер и как работает with?

    Контекстный менеджер гарантирует подготовку и очистку вокруг блока with, даже при исключении.

    Junior
  10. 10Чем поверхностная копия отличается от глубокой?

    Поверхностная копия создаёт новый контейнер со старыми элементами, глубокая — копирует всё рекурсивно.

    Junior
  11. 11Что такое декоратор и как его написать?

    Декоратор — функция, которая принимает функцию и возвращает новую; @dec — сахар для f = dec(f).

    Junior
  12. 12Как устроен словарь в Python?

    dict — хеш-таблица: по hash(key) находится место ключа, поиск в среднем за O(1).

    Junior
  13. 13Что такое магические методы? Чем __str__ отличается от __repr__?

    Магические методы (__имя__) — крючки, через которые объект поддерживает встроенные операции языка.

    Junior
  14. 14Как написать простой HTTP API на FastAPI?

    Создать приложение app = FastAPI(), объявить обработчики декораторами @app.get, @app.post и др. Параметр из пути (/items/{item_id}) становится аргументом функции, остальные…

    Junior
  15. 15Что такое генератор и чем он полезен?

    Генератор — функция с yield: отдаёт значения по одному и замирает между ними, сохраняя состояние.

    Junior
  16. 16Что такое GIL?

    GIL — блокировка в CPython: байткод Python в один момент выполняет только один поток.

    Junior
  17. 17Как работают наследование, super() и MRO?

    MRO — порядок, в котором Python ищет метод по иерархии классов; super() вызывает следующий класс в MRO.

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

    == сравнивает значения, is — что это один и тот же объект.

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

    Итерируемый объект умеет выдать итератор (__iter__), итератор выдаёт значения по одному (__next__).

    Junior
  20. 20Как работать с JSON в Python и что делать с датами и своими объектами?

    json.dumps(obj) превращает объект в строку, json.loads(s) — строку в объект; dump/load — то же для файлов. Поддерживаются только dict, list, str, int, float, bool, None; кортеж…

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

    Список изменяемый, кортеж — нет; отсюда остальные различия.

    Junior
  22. 22Почему нельзя использовать изменяемый объект как значение аргумента по умолчанию?

    Значение по умолчанию вычисляется один раз — при определении функции, а не при каждом вызове.

    Junior
  23. 23Чем изменяемые типы отличаются от неизменяемых?

    Изменяемый объект меняется на месте, неизменяемый — только заменяется новым.

    Junior
  24. 24Как подключить проверку типов mypy или pyright к проекту?

    mypy и pyright — статические анализаторы: читают код и аннотации без запуска и находят несоответствия типов (передали str вместо int, забыли проверить None, вызвали несуществующий…

    Junior
  25. 25Зачем нужна конструкция if __name__ == "__main__"?

    Код под if __name__ == "__main__": выполняется, только когда файл запущен как скрипт, а не импортирован.

    Junior
  26. 26Что такое @property и зачем он нужен?

    @property превращает метод в атрибут: снаружи obj.area, внутри — вычисление или проверка.

    Junior
  27. 27Как проверять входные данные с помощью Pydantic?

    Pydantic проверяет и преобразует данные во время выполнения по аннотациям класса-наследника BaseModel: строку «42» превратит в int, а «abc» для int отклонит с понятной ошибкой…

    Junior
  28. 28Как писать тесты на pytest — assert, запуск, параметризация?

    Тест — функция с именем test_… в файле test_.py, проверки — обычный assert: pytest показывает, какие значения не совпали. Запуск — команда pytest (или pytest путь::имя_теста)…

    Junior
  29. 29Как правильно делать HTTP-запросы из Python — requests и httpx?

    requests — синхронная библиотека, httpx — похожий интерфейс плюс асинхронный клиент и HTTP/2. Обязательные привычки: всегда задавать timeout (по умолчанию requests ждёт…

    Junior
  30. 30Как работают области видимости в Python?

    Имя ищется по цепочке LEGB: Local → Enclosing → Global → Built-in.

    Junior
  31. 31Что такое множество (set) и когда его использовать?

    set — неупорядоченный набор уникальных хешируемых элементов на хеш-таблице.

    Junior
  32. 32Как работают срезы в Python?

    seq[start:stop:step] — новая последовательность с start включительно до stop не включая.

    Junior
  33. 33Чем @staticmethod отличается от @classmethod?

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

    Junior
  34. 34Чем отличаются threading, multiprocessing и asyncio?

    Потоки и asyncio — для ожидания ввода-вывода, процессы — для вычислений на нескольких ядрах.

    Junior
  35. 35Как работают try, except, else и finally?

    try — опасный код, except — обработка, else — если ошибки не было, finally — всегда.

    Junior
  36. 36Что такое аннотации типов и проверяются ли они при выполнении?

    Аннотации — подсказки о типах для людей и инструментов; интерпретатор их не проверяет.

    Junior
  37. 37Как аннотировать списки, словари, необязательные значения и объединения типов?

    Коллекции: list[int], dict[str, float], set[str], tuple[int, str] (фиксированный) и tuple[int, ...] (любой длины) — встроенные типы в скобках с Python 3.9. Необязательное значение…

    Junior
  38. 38Зачем нужно виртуальное окружение и как управлять зависимостями?

    Виртуальное окружение — отдельная копия Python со своими пакетами для каждого проекта.

    Junior
Партнёр платформы

Разбор собеседования с sotto

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

Разбор собеседования