Python
Вопросы Python на собеседовании
На Python-собеседовании смотрят, умеете ли вы объяснять базовые конструкции и писать простой понятный код. От новичка не ждут знания всего языка, но ждут уверенности в типах, коллекциях, функциях, ошибках и работе с файлами
Готовьтесь так: на каждый вопрос держите короткое объяснение, пример кода и одну типичную ошибку
Типы и базовый синтаксис
Частые вопросы:
- Какие базовые типы данных есть в Python
- Чем список отличается от кортежа
- Что такое
None - Чем
isотличается от== - Как работает условие
if value - Что такое срезы
Пример ответа про is и ==:
== сравнивает значения, а is проверяет, один ли это объект в памяти. Для проверки None обычно используют is None, потому что нас интересует именно специальное значение отсутствия
Код:
name = None
if name is None:
print("Имя не указано")
Такой ответ показывает не только знание оператора, но и привычный стиль Python
По этой теме полезно отдельно посмотреть Составьте еженедельное расписание занятий, чтобы расширить контекст и сравнить подходы
По этой теме полезно отдельно посмотреть Аннотации типов для декораторов в Python, чтобы расширить контекст и сравнить подходы
Списки, словари и множества
Коллекции — основа большинства задач
Что повторить:
list,tuple,dict,setappend,extend,pop- проверка ключа через
in - метод
get - проход по
items - удаление дубликатов
- list comprehension
Пример ответа про словарь:
Словарь удобен, когда нужно быстро получать значение по ключу. Например, если есть id пользователя, словарь поможет найти его карточку без перебора всего списка
Код:
users = {
1: "Anna",
2: "Ivan",
}
print(users.get(2, "Пользователь не найден"))
Покажите, что понимаете разницу между списком для порядка и словарем для доступа по ключу
Функции
Частые вопросы:
- Чем
returnотличается отprint - Что такое аргументы по умолчанию
- Почему опасен пустой список как аргумент по умолчанию
- Что такое
argsи*kwargs - Что такое область видимости
- Для чего нужны lambda-функции
Классический пример:
def add_item(item, items=[]):
items.append(item)
return items
Сильное объяснение:
Пустой список создается один раз при определении функции, а не при каждом вызове. Поэтому разные вызовы будут использовать один и тот же список. Безопаснее поставить None и создавать список внутри функции
Исправление:
def add_item(item, items=None):
if items is None:
items = []
items.append(item)
return items
Ошибки и файлы
Что могут спросить:
- Как работает
try/except - Когда использовать
finally - Зачем нужен
with open - Как обработать отсутствие файла
- Почему плохо писать пустой
except
Пример:
try:
with open("data.txt", "r", encoding="utf-8") as file:
lines = file.readlines()
except FileNotFoundError:
lines = []
Ответ вслух:
with автоматически закрывает файл, даже если внутри блока возникнет ошибка. А FileNotFoundError я обрабатываю отдельно, чтобы не скрыть другие проблемы
ООП в Python
Для junior часто достаточно базы
Вопросы:
- Что такое класс и объект
- Для чего нужен
__init__ - Что такое
self - Чем атрибут объекта отличается от атрибута класса
- Что такое метод
- Когда наследование может усложнить код
Пример:
class User:
def __init__(self, name):
self.name = name
def greet(self):
return f"Привет, {self.name}"
Объяснение:
Класс описывает, какие данные и поведение есть у пользователя. Конкретный объект хранит свое имя, а метод использует self, чтобы обратиться к данным этого объекта
Практические задачи
Подготовьте такие задачи руками:
- посчитать частоту слов
- убрать дубликаты из списка
- найти максимальное число без
max - развернуть строку
- сгруппировать список слов по первой букве
- прочитать файл и посчитать непустые строки
- проверить, является ли строка палиндромом
Пример частоты слов:
words = ["cat", "dog", "cat"]
counts = {}
for word in words:
counts[word] = counts.get(word, 0) + 1
print(counts)
На интервью объясните, что get возвращает текущее количество или ноль для нового слова
Как объяснять код на Python вслух
На интервью важно показать не только решение, но и стиль мышления
Пример задачи:
Есть список слов. Нужно посчитать, сколько раз встречается каждое слово
Хороший ход ответа:
Для подсчета подойдет словарь. Ключом будет слово, значением - количество. Я пройду по списку один раз и для каждого слова увеличу счетчик. Если слова еще нет в словаре, возьму ноль через get
Код:
counts = {}
for word in words:
counts[word] = counts.get(word, 0) + 1
Такой ответ показывает выбор структуры, алгоритм и понимание метода get
Типичные ошибки новичков
- путают
printиreturn - используют изменяемый список как аргумент по умолчанию
- не понимают разницу между
isи== - перебирают словарь только по ключам, когда нужны и ключи, и значения
- ловят все ошибки через пустой
except - забывают закрывать файл или не используют
with - не проверяют пустой список в задачах
Повторите эти темы с кодом. Большая часть junior-вопросов строится именно вокруг таких ловушек
Как отвечать, если опыта мало
Для Python junior нормально не знать продвинутые темы глубоко. Но нужно уверенно показать базу
Пример:
С декораторами я пока работал мало, но понимаю идею: это функция, которая оборачивает другую функцию и добавляет поведение. Например, можно добавить логирование вызова. В рабочих задачах я пока больше писал код со списками, словарями, файлами и простыми функциями
Такой ответ честный и при этом не обнуляет вашу подготовку
Что подготовить руками
Сделайте маленький файл и решите 10 задач без подсказок
- развернуть строку
- посчитать гласные
- удалить дубликаты
- найти частоту слов
- сгруппировать слова по длине
- прочитать файл
- обработать отсутствие файла
- отсортировать список словарей
- написать функцию с
*args - исправить функцию с изменяемым аргументом по умолчанию
Если можете объяснить каждую задачу вслух, собеседование пройдет спокойнее
Как подготовить ответы с примерами
Для Python важно иметь несколько маленьких объяснений, которые вы произносите уверенно
Про return и print:
print выводит значение на экран, а return возвращает результат из функции. Если функция должна использоваться дальше в программе, нужен return
Про словарь:
Словарь помогает быстро получать значение по ключу. Например, если у меня есть id пользователя, я могу не перебирать весь список, а обратиться к users[id]
Про ошибки:
Я стараюсь ловить конкретную ошибку, а не все подряд. Если файл не найден, обрабатываю FileNotFoundError. Если ловить все ошибки пустым except, можно скрыть настоящую проблему
Мини-план подготовки на вечер
Если интервью скоро, сделайте так:
- Напишите 5 задач на списки и строки
- Повторите словари и
get - Разберите пример с изменяемым аргументом по умолчанию
- Напишите чтение файла через
with open - Проговорите вслух, чем
isотличается от==
Этого достаточно, чтобы убрать большую часть неловких пауз на junior-вопросах
Часто задаваемые вопросы
Что повторить в первую очередь?
Типы, списки, словари, функции, ошибки, файлы, простые задачи на строки и коллекции
Нужно ли знать декораторы?
Для junior полезно понимать идею, но чаще важнее уверенная база и практика задач
Как отвечать, если не знаю точный метод?
Скажите, как бы решили задачу простыми средствами. Потом можно уточнить, что в реальном коде проверили бы название метода в документации