ГлавнаяБлог95 вопросов по Python на собеседовании: что реально проверяют
Собеседования

95 вопросов по Python на собеседовании: что реально проверяют

Разбираем реальные вопросы по Python на собеседованиях: что проверяют на самом деле, а что просто тест на память. Готовьтесь эффективно.

Al
Редакция Algolitalgolit.ru
12 мин чтения17 июня 2026 г.

Почему большинство списков вопросов по Python тратят ваше время зря

Python встречается на собеседованиях повсеместно, потому что он повсеместно используется в работе. В опросе Stack Overflow Developer Survey 2025 57,9% разработчиков сообщили об использовании Python — рост на семь пунктов за год, самый большой скачок среди всех основных языков. Он уступает только JavaScript, HTML/CSS и SQL. Если вы проходите собеседование на программную инженерию, data science, ML или аналитику, экран по Python почти гарантирован.

Эта популярность — причина, по которой типовые списки вопросов вас подводят. Когда тема настолько широка, список из 95 вопросов вынужден оставаться поверхностным, чтобы охватить всё. Вы получаете пятнадцать вариаций на тему «в чём разница между списком и кортежем» и ничего о вопросах, которые действительно разделяют кандидатов: чтение незнакомого кода, отладка под давлением, выбор правильной структуры данных, когда это важно.

Есть и вторая проблема. Интервьюеры знают о существовании таких списков и адаптировались. В опросе interviewing.io 2025 года среди 67 интервьюеров (52 из FAANG) 81% подозревали кандидатов в использовании ИИ для обмана, а 75% считали, что помощь ИИ позволяет слабым кандидатам проходить собеседования, которые они иначе провалили бы. Ответная реакция — больше уточняющих вопросов, больше «проведи меня через то, почему ты это сделал», больше проверки, понимаете ли вы код на экране. Заученный ответ выдерживает первый вопрос и разваливается на втором.

Цель — изучать вопросы, которые развивают переносимое мышление, и выявлять чистые факты, чтобы тратить на факты пять минут вместо пятидесяти.

Как читать этот список

Каждый вопрос ниже содержит две заметки. Сигнал — что сильный ответ говорит интервьюеру о вашей работе. Скорость обработки данных, инстинкт отладки, идиоматический стиль, знание библиотек, системное мышление. Это причина, по которой вопрос задают, даже если интервьюер не может её сформулировать. Фактологический налог — флаг, когда вопрос в основном вознаграждает за то, что вы его уже видели. Такие вопросы всё ещё задают, поэтому ответы знать нужно, но их заучивание не учит ничему полезному для настоящего кода. Учите быстро и двигайтесь дальше.

Чтобы внести ясность: оценки сигнала и фактологического налога здесь — редакционное суждение, основанное на опыте проведения собеседований, а не результат формального исследования. Там, где я привожу цифры, они взяты из названных публичных источников со ссылками. Примеры вопросов взяты из реальных собеседований и из банка практических вопросов Four-Leaf.

Основы языка и идиомы

Здесь интервьюеры проверяют, пишете ли вы на Python или пишете на каком-то другом языке, используя синтаксис Python. Вопросы выглядят базовыми. Сигнал — в том, насколько идиоматичен ваш ответ.

В чём разница между списком и кортежем, и когда что использовать?

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

Сигнал: думаете ли вы об изменяемости как о проектном решении, а не просто свойстве.
Фактологический налог: частичный. Определение — зубрёжка, но «когда что использовать» превращает его в реальный вопрос.

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

Оно строит список в одном выражении: [x * 2 for x in nums if x > 0]. Сильный ответ включает «не»: не используйте включения, когда логика требует нескольких операторов или побочных эффектов, и не стройте полный список, когда выражение-генератор может лениво передавать значения.

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

Объясните *args и **kwargs.

*args собирает лишние позиционные аргументы в кортеж, **kwargs собирает лишние именованные аргументы в словарь. Они используются для функций, которые передают аргументы дальше или принимают гибкую сигнатуру.

Сигнал: низкий сам по себе. Важен с уточняющим вопросом: напишите декоратор, работающий с любой функцией, что заставляет реально использовать оба.
Фактологический налог: да, изолированно. Знайте наизусть, не тратьте время.

Что такое декоратор? Напишите один.

Декоратор — это функция, которая принимает функцию и возвращает новую функцию, используется для обёртывания поведения (тайминг, логирование, кеширование) без изменения исходной. Чистый ответ использует functools.wraps для сохранения имени и докстринга обёрнутой функции.

import functools
import time

def timed(fn):
    @functools.wraps(fn)
    def wrapper(*args, **kwargs):
        start = time.perf_counter()
        result = fn(*args, **kwargs)
        print(f"{fn.__name__} took {time.perf_counter() - start:.4f}s")
        return result
    return wrapper

Сигнал: высокий. Декораторы находятся на пересечении замыканий, функций первого класса и *args/**kwargs. Кандидат, который пишет их чисто, понимает многое в Python одновременно. Деталь с functools.wraps отличает тех, кто выкатывал декораторы в прод, от тех, кто только читал о них.

В чём разница между is и ==?

== сравнивает значения, is сравнивает идентичность (указывают ли два имени на один и тот же объект). Ловушка — интернирование маленьких целых чисел и строк, где a is b может быть True для 256, но False для 257.

Сигнал: понимаете ли вы, что переменные — это ссылки на объекты. Интернирование — отвлекающий манёвр.
Фактологический налог: граничный случай интернирования — чистая фактология. Понимание модели ссылок под ним — нет.

Как Python обрабатывает изменяемые аргументы по умолчанию?

Значение по умолчанию вычисляется один раз, при определении функции, поэтому def f(x, acc=[]) разделяет один список между всеми вызовами. Исправление: acc=None, затем acc = acc or [] внутри тела.

Сигнал: высокий и недооценённый. Это реальная ошибка, которая попадает в продакшн. Кандидат, который с ней столкнулся, написал достаточно Python, чтобы обжечься, — именно такой опыт интервьюеры и проверяют.

Что такое генераторы и зачем их использовать?

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

Сигнал: осознание памяти и понимание ленивости. Кандидаты, которые используют генераторы для задачи «обработать этот 10ГБ файл», показывают реальный инстинкт.

Объясните, как GIL влияет на многопоточность в Python.

Глобальная блокировка интерпретатора (GIL) означает, что только один поток выполняет байт-код Python в любой момент времени, поэтому потоки не ускоряют CPU-ёмкие задачи. Для I/O-ёмких задач потоки всё ещё полезны (GIL отпускается во время ожидания I/O), а для параллелизма CPU-bound используйте multiprocessing или нативные расширения.

Сигнал: высокий для бэкенд-ролей. Уточняющий вопрос «когда вообще использовать потоки» отделяет тех, кто запомнил «GIL плох», от тех, кто понимает случай I/O-bound.

В чём разница между @staticmethod, @classmethod и обычным методом?

Обычные методы принимают self, методы класса принимают cls и могут конструировать или настраивать класс, статические методы не принимают ни то, ни другое и являются просто функциями в пространстве имён класса. Методы класса — идиоматический способ написания альтернативных конструкторов.

Сигнал: умеренный. Использование classmethod для альтернативных конструкторов — часть, показывающая настоящее владение ООП.
Фактологический налог: частичный. Определения — зубрёжка, «когда использовать classmethod» — нет.

Что делает if __name__ == "__main__":?

Он защищает код, который должен выполняться только при прямом запуске файла, а не при импорте как модуля. Без него побочные эффекты скрипта сработают при импорте.

Сигнал: низкий. Полезная идиома, но знание её почти ничего не говорит об инженерных способностях.
Фактологический налог: да. Один из самых переспрашиваемых вопросов по Python. Знайте односложный ответ, двигайтесь дальше.

В чём разница между поверхностным и глубоким копированием?

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

Сигнал: умеренный. Связан с моделью ссылок и реальным классом ошибок. Кандидаты, которые отлаживали ошибку общего вложенного объекта, отвечают убедительно.

Структуры данных и алгоритмы в Python

Здесь язык менее важен, чем рассуждения, но Python-специфичные инструменты (dict, set, collections, heapq, срезы) — именно то, что интервьюеры хотят видеть в вашем арсенале. Решение с правильным инструментом из стандартной библиотеки само по себе сигнал.

Суммировать все числа во вложенном списке произвольной глубины.

Рекурсия: если элемент — список, рекурсивно зайти в него, иначе добавить. Используйте isinstance(item, list), а не type(item) == list, чтобы работали подклассы.

Сигнал: чистая рекурсия и деталь с isinstance. Деталь мала, но это инстинкт корректности, который проявляется везде в реальном коде.

Проверить, можно ли переставить символы строки так, чтобы получить палиндром.

Посчитать частоты символов; палиндром допускает не более одного символа с нечётным количеством. collections.Counter плюс один проход по счётчикам.

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

Найти минимальное окно в строке, содержащее все символы целевой строки.

Скользящее окно со счётчиком «не хватает»: расширяйте правую границу, пока окно не станет валидным, затем сжимайте слева, отслеживая лучшее окно. Это сложный вопрос, и интервьюеры это знают.

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

Реализовать LRU-кеш с операциями get и put за O(1).

В Python короткий путь — collections.OrderedDict с move_to_end при доступе и popitem(last=False) при вытеснении. Более глубокий ответ — хеш-карта плюс двусвязный список, что вы написали бы, если бы попросили сделать без стандартной библиотеки.

Сигнал: высокий, и это отличный вопрос именно потому, что у него две допустимые высоты. Знание трюка с OrderedDict показывает владение Python; способность опуститься до связного списка показывает, что вы понимаете, почему это O(1).

Реализовать топологическую сортировку.

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

Сигнал: графовое мышление и понимание обнаружения циклов. Встречается чаще, чем ожидается, потому что упорядочивание зависимостей — реальная проблема (системы сборки, планировщики задач).

Посчитать количество островов в двумерной сетке.

Сканируйте сетку; на каждой непосещённой ячейке суши увеличьте счётчик и выполните заливку (DFS или BFS), чтобы пометить связную область. Мутация посещённых ячеек на месте избавляет от отдельного множества visited.

Сигнал: высокий. Проверяет, можете ли вы реализовать DFS/BFS чисто и осознать, что мутация входных данных допустима (если не оговорено иное).

Практический вывод: что делать прямо сейчас

Не пытайтесь выучить все 95 вопросов. Сосредоточьтесь на тех, которые дают высокий сигнал: декораторы, изменяемые аргументы по умолчанию, генераторы, скользящее окно, LRU-кеш. Для вопросов с фактологическим налогом (__name__, is vs ==, *args/**kwargs) запомните односложный ответ и потратьте сэкономленное время на практику с реальными задачами.

Лучший способ подготовиться — писать код под таймером. Откройте LeetCode или аналогичную платформу, выберите задачу средней сложности и решите её за 20 минут, комментируя свои мысли вслух. Это имитирует реальное собеседование и строит переносимые навыки, которые останутся с вами, даже если вопросы изменятся.

#собеседование по Python#вопросы по Python#подготовка к собеседованию#алгоритмы Python
Al
Редакция Algolit

Пишем про алгоритмы, подготовку к собеседованиям и карьеру в IT — так, чтобы было понятно и полезно.

Хочешь закрепить знания на практике?

Решай задачи на Algolit — интерактивная платформа для обучения

Начать бесплатно →
95 вопросов по Python на собеседовании: что реально проверяют | Algolit