Вопросы на собеседовании Python junior
Типы данных, коллекции, функции, генераторы, ООП и конкурентность — то, о чём спрашивают начинающих Python-разработчиков почти на каждом собеседовании.
- 01Что такое *args и **kwargs?
args собирает лишние позиционные аргументы в кортеж, kwargs — лишние именованные в словарь.
Junior - 02Как передаются аргументы в функцию — по значению или по ссылке?
Ни то ни другое в классическом смысле: передаётся ссылка на объект (call by sharing).
Junior - 03Как работают async и await?
async def создаёт корутину, await — точка, где она отдаёт управление циклу событий, пока ждёт.
Junior - 04Как запустить несколько корутин одновременно и получить их результаты?
Точка входа — asyncio.run(main()): создаёт цикл событий и выполняет корутину. Несколько корутин одновременно запускают asyncio.gather(a(), b(), c()) — результаты приходят в том же…
Junior - 05Что такое self и __init__ в классе?
self — ссылка на текущий экземпляр, Python передаёт её в метод первым аргументом.
Junior - 06Что такое замыкание?
Замыкание — вложенная функция, которая помнит переменные внешней функции после её завершения.
Junior - 07Какая сложность у основных операций со списком, словарём и множеством?
Список — массив: доступ по индексу и append — O(1), вставка в начало и поиск in — O(n).
Junior - 08Чем list comprehension отличается от генераторного выражения?
[...] сразу строит весь список в памяти, (...) — ленивый генератор.
Junior - 09Что такое контекстный менеджер и как работает with?
Контекстный менеджер гарантирует подготовку и очистку вокруг блока with, даже при исключении.
Junior - 10Чем поверхностная копия отличается от глубокой?
Поверхностная копия создаёт новый контейнер со старыми элементами, глубокая — копирует всё рекурсивно.
Junior - 11Что такое декоратор и как его написать?
Декоратор — функция, которая принимает функцию и возвращает новую; @dec — сахар для f = dec(f).
Junior - 12Как устроен словарь в Python?
dict — хеш-таблица: по hash(key) находится место ключа, поиск в среднем за O(1).
Junior - 13Что такое магические методы? Чем __str__ отличается от __repr__?
Магические методы (__имя__) — крючки, через которые объект поддерживает встроенные операции языка.
Junior - 14Как написать простой HTTP API на FastAPI?
Создать приложение app = FastAPI(), объявить обработчики декораторами @app.get, @app.post и др. Параметр из пути (/items/{item_id}) становится аргументом функции, остальные…
Junior - 15Что такое генератор и чем он полезен?
Генератор — функция с yield: отдаёт значения по одному и замирает между ними, сохраняя состояние.
Junior - 16Что такое GIL?
GIL — блокировка в CPython: байткод Python в один момент выполняет только один поток.
Junior - 17Как работают наследование, super() и MRO?
MRO — порядок, в котором Python ищет метод по иерархии классов; super() вызывает следующий класс в MRO.
Junior - 18Чем отличается is от ==?
== сравнивает значения, is — что это один и тот же объект.
Junior - 19Чем итератор отличается от итерируемого объекта?
Итерируемый объект умеет выдать итератор (__iter__), итератор выдаёт значения по одному (__next__).
Junior - 20Как работать с JSON в Python и что делать с датами и своими объектами?
json.dumps(obj) превращает объект в строку, json.loads(s) — строку в объект; dump/load — то же для файлов. Поддерживаются только dict, list, str, int, float, bool, None; кортеж…
Junior - 21Чем список отличается от кортежа?
Список изменяемый, кортеж — нет; отсюда остальные различия.
Junior - 22Почему нельзя использовать изменяемый объект как значение аргумента по умолчанию?
Значение по умолчанию вычисляется один раз — при определении функции, а не при каждом вызове.
Junior - 23Чем изменяемые типы отличаются от неизменяемых?
Изменяемый объект меняется на месте, неизменяемый — только заменяется новым.
Junior - 24Как подключить проверку типов mypy или pyright к проекту?
mypy и pyright — статические анализаторы: читают код и аннотации без запуска и находят несоответствия типов (передали str вместо int, забыли проверить None, вызвали несуществующий…
Junior - 25Зачем нужна конструкция if __name__ == "__main__"?
Код под if __name__ == "__main__": выполняется, только когда файл запущен как скрипт, а не импортирован.
Junior - 26Что такое @property и зачем он нужен?
@property превращает метод в атрибут: снаружи obj.area, внутри — вычисление или проверка.
Junior - 27Как проверять входные данные с помощью Pydantic?
Pydantic проверяет и преобразует данные во время выполнения по аннотациям класса-наследника BaseModel: строку «42» превратит в int, а «abc» для int отклонит с понятной ошибкой…
Junior - 28Как писать тесты на pytest — assert, запуск, параметризация?
Тест — функция с именем test_… в файле test_.py, проверки — обычный assert: pytest показывает, какие значения не совпали. Запуск — команда pytest (или pytest путь::имя_теста)…
Junior - 29Как правильно делать HTTP-запросы из Python — requests и httpx?
requests — синхронная библиотека, httpx — похожий интерфейс плюс асинхронный клиент и HTTP/2. Обязательные привычки: всегда задавать timeout (по умолчанию requests ждёт…
Junior - 30Как работают области видимости в Python?
Имя ищется по цепочке LEGB: Local → Enclosing → Global → Built-in.
Junior - 31Что такое множество (set) и когда его использовать?
set — неупорядоченный набор уникальных хешируемых элементов на хеш-таблице.
Junior - 32Как работают срезы в Python?
seq[start:stop:step] — новая последовательность с start включительно до stop не включая.
Junior - 33Чем @staticmethod отличается от @classmethod?
@classmethod получает класс (cls), @staticmethod не получает ничего — это обычная функция внутри класса.
Junior - 34Чем отличаются threading, multiprocessing и asyncio?
Потоки и asyncio — для ожидания ввода-вывода, процессы — для вычислений на нескольких ядрах.
Junior - 35Как работают try, except, else и finally?
try — опасный код, except — обработка, else — если ошибки не было, finally — всегда.
Junior - 36Что такое аннотации типов и проверяются ли они при выполнении?
Аннотации — подсказки о типах для людей и инструментов; интерпретатор их не проверяет.
Junior - 37Как аннотировать списки, словари, необязательные значения и объединения типов?
Коллекции: list[int], dict[str, float], set[str], tuple[int, str] (фиксированный) и tuple[int, ...] (любой длины) — встроенные типы в скобках с Python 3.9. Необязательное значение…
Junior - 38Зачем нужно виртуальное окружение и как управлять зависимостями?
Виртуальное окружение — отдельная копия Python со своими пакетами для каждого проекта.
Junior
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.