TL;DR: Junior Python-разработчики на собеседовании чаще всего сталкиваются с вопросами о типах данных, функциях, списках, словарях, обработке исключений и базах данных. Мы разобрали 45+ реальных вопросов с готовыми ответами и примерами кода, которые помогут вам успешно пройти интервью в 2026 году.
Вопросы о базовых типах данных Python
Более 78% интервьюеров начинают собеседование с вопросов о фундаментальных типах данных (данные Stackoverflow Developer Survey 2025). Это проверяет, насколько хорошо вы понимаете основы языка, на которых строится вся остальная логика.
1. Чем отличаются список (list) и кортеж (tuple)?
Ответ: Главное отличие — списки изменяемы (mutable), а кортежи неизменяемы (immutable). Список можно изменять после создания, добавляя, удаляя или изменяя элементы. Кортеж создаётся один раз и больше не меняется.
Пример с кодом:
# Список — изменяемый
my_list = [1, 2, 3]
my_list[0] = 10 # ✓ работает
my_list.append(4) # ✓ работает
# Кортеж — неизменяемый
my_tuple = (1, 2, 3)
my_tuple[0] = 10 # ✗ TypeError: 'tuple' object does not support item assignment
my_tuple.append(4) # ✗ AttributeError: 'tuple' object has no attribute 'append'
Практический совет: Используйте списки, когда данные могут изменяться (массивы пользователей, товары в корзине). Используйте кортежи, когда данные должны остаться неизменными (координаты точки, ключи словаря).
2. Что такое словарь (dict) и когда его использовать?
Ответ: Словарь — это неупорядоченный набор пар ключ-значение (key-value). Словарь используется, когда вам нужна быстрая выборка данных по уникальному ключу, а не по индексу.
Пример:
user = {
'name': 'Иван',
'age': 28,
'city': 'Москва',
'skills': ['Python', 'SQL', 'JavaScript']
}
print(user['name']) # Иван
user['phone'] = '+79991234567' # добавить новый ключ
del user['age'] # удалить ключ
На интервью добавьте: В Python 3.7+ словари сохраняют порядок добавления элементов. Это важно для работы с API и конфигурациями.
3. Чем отличаются список, множество (set) и словарь?
Ответ в таблице:
| Структура | Синтаксис | Изменяемая | Уникальность | Порядок |
|---|---|---|---|---|
| Список (list) | [1, 2, 3] | Да | Нет (дубли) | Да (по индексу) |
| Кортеж (tuple) | (1, 2, 3) | Нет | Нет (дубли) | Да (по индексу) |
| Множество (set) | {1, 2, 3} | Да | Да (только уникальные) | Нет |
| Словарь (dict) | {'a': 1} | Да | Ключи уникальны | Да (с Python 3.7+) |
Вопросы о функциях и области видимости
64% интервьюеров тестируют понимание функций, параметров и области видимости переменных. Это критично для написания чистого, переиспользуемого кода.
4. В чём разница между параметром и аргументом?
Ответ: Параметр — это переменная в определении функции. Аргумент — это значение, которое вы передаёте в функцию при вызове.
def greet(name, age): # name, age — параметры
print(f'Привет, {name}! Тебе {age} лет.')
greet('Мария', 25) # 'Мария', 25 — аргументы
5. Что такое *args и **kwargs?
Ответ: *args позволяет передавать переменное количество позиционных аргументов (кортеж). **kwargs позволяет передавать именованные аргументы (словарь).
def print_info(*args, **kwargs):
print('Позиционные:', args) # кортеж
print('Именованные:', kwargs) # словарь
print_info(1, 2, 3, name='Иван', age=28)
# Позиционные: (1, 2, 3)
# Именованные: {'name': 'Иван', 'age': 28}
На интервью подчеркните: Звёздочки означают распаковку. Это очень полезно при работе с REST API и конфигурациями.
6. Что такое область видимости (scope) и какие уровни существуют?
Ответ: Область видимости определяет, где переменная доступна. В Python 4 уровня: LEGB (Local → Enclosing → Global → Built-in).
x = 'global' # Global scope
def outer():
x = 'enclosing' # Enclosing scope
def inner():
x = 'local' # Local scope
print(x) # local
inner()
print(x) # enclosing
outer()
print(x) # global
Вопросы о работе со строками и списками
72% junior-позиций требуют умения работать со строками и списками. Это база для обработки данных, парсинга и текстовых операций.
7. Как развернуть список или строку?
Ответ: Используйте срезы с шагом -1 или функцию reversed().
# Способ 1: срезы
my_list = [1, 2, 3, 4, 5]
print(my_list[::-1]) # [5, 4, 3, 2, 1]
my_string = 'Python'
print(my_string[::-1]) # nohtyP
# Способ 2: reversed()
print(list(reversed(my_list))) # [5, 4, 3, 2, 1]
8. Что такое list comprehension и когда его использовать?
Ответ: List comprehension (встроенный цикл в список) — это компактный способ создавать новые списки на основе существующих. Он быстрее обычного цикла и читаемость кода.
# Обычный цикл
squares = []
for x in range(5):
squares.append(x ** 2)
# List comprehension
squares = [x ** 2 for x in range(5)]
# Результат: [0, 1, 4, 9, 16]
# С условием
even_squares = [x ** 2 for x in range(5) if x % 2 == 0]
# Результат: [0, 4, 16]
На интервью упомяните: List comprehension работает быстрее на 10-20% и занимает меньше памяти.
9. Как работает функция map() и filter()?
Ответ: map() применяет функцию к каждому элементу, filter() отбирает элементы по условию. Обе возвращают итератор, а не список.
numbers = [1, 2, 3, 4, 5]
# map() — применить функцию
squared = list(map(lambda x: x ** 2, numbers))
# [1, 4, 9, 16, 25]
# filter() — отобрать по условию
evens = list(filter(lambda x: x % 2 == 0, numbers))
# [2, 4]
# Альтернатива с list comprehension (более читаемо)
squared = [x ** 2 for x in numbers]
evens = [x for x in numbers if x % 2 == 0]
Вопросы об обработке исключений и отладке
Умение обрабатывать ошибки — это 81% требования junior-позиций (данные Habr Career 2025). Это показывает, что вы пишете надёжный код.
10. Что такое исключение и как его обрабатывать?
Ответ: Исключение (exception) — это ошибка времени выполнения. Её нужно поймать блоком try-except, иначе программа упадёт.
try:
number = int('abc') # ValueError
except ValueError:
print('Это не число!')
except Exception as e:
print(f'Неожиданная ошибка: {e}')
finally:
print('Этот блок выполнится всегда')
11. Какие встроенные исключения вы знаете?
Ответ: Основные — ValueError, TypeError, KeyError, IndexError, AttributeError, FileNotFoundError, ZeroDivisionError.
| Исключение | Когда возникает | Пример |
|---|---|---|
| ValueError | Неправильное значение для типа | int('abc') |
| TypeError | Неправильный тип данных | 'строка' + 5 |
| KeyError | Ключа нет в словаре | dict['missing_key'] |
| IndexError | Индекса нет в списке | list[999] |
| AttributeError | Атрибута нет в объекте | obj.missing_attr |
| ZeroDivisionError | Деление на ноль | 10 / 0 |
12. Как создать собственное исключение?
Ответ: Наследуйте класс Exception и переопределите метод __init__.
class InvalidAgeError(Exception):
def __init__(self, age):
self.age = age
super().__init__(f'Возраст {age} не может быть отрицательным')
def validate_age(age):
if age < 0:
raise InvalidAgeError(age)
return age
try:
validate_age(-5)
except InvalidAgeError as e:
print(e) # Возраст -5 не может быть отрицательным
Вопросы об объектно-ориентированном программировании (ООП)
55% junior-вакансий требуют знание ООП (исследование Habr 2026). Это необходимо для работы с классами, наследованием и полиморфизмом.
13. Что такое класс и объект?
Ответ: Класс — это чертёж (шаблон) для создания объектов. Объект — это экземпляр класса с конкретными значениями.
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def bark(self):
return f'{self.name} лает: Гав!'
# Класс — это шаблон
# Объект (экземпляр) — конкретная собака
my_dog = Dog('Бобик', 3)
print(my_dog.bark()) # Бобик лает: Гав!
14. Что такое наследование?
Ответ: Наследование позволяет одному классу (потомку) получить свойства и методы другого класса (родителя), избегая дублирования кода.
class Animal:
def __init__(self, name):
self.name = name
def sound(self):
return 'Какой-то звук'
class Dog(Animal): # Dog наследует от Animal
def sound(self):
return f'{self.name} лает: Гав!'
class Cat(Animal):
def sound(self):
return f'{self.name} мяукает: Мяу!'
dog = Dog('Бобик')
cat = Cat('Муся')
print(dog.sound()) # Бобик лает: Гав!
print(cat.sound()) # Муся мяукает: Мяу!
15. Что такое полиморфизм?
Ответ: Полиморфизм — это способность объектов разных классов отвечать на один и тот же запрос, но по-разному (как в примере выше с Dog и Cat — оба наследуют sound(), но звучат по-разному).
16. Что такое инкапсуляция?
Ответ: Инкапсуляция — это скрытие внутренних деталей класса. В Python используются приватные методы (_name) и свойства (@property).
class BankAccount:
def __init__(self, balance):
self._balance = balance # приватное свойство
@property
def balance(self):
return self._balance
def withdraw(self, amount):
if amount > self._balance:
raise ValueError('Недостаточно средств')
self._balance -= amount
account = BankAccount(1000)
print(account.balance) # 1000
account.withdraw(200) # OK
print(account.balance) # 800
Вопросы о работе с файлами и данными
48% junior-позиций включают работу с файлами, CSV, JSON и логированием. Это база для реальных приложений.
17. Как работать с файлами в Python?
Ответ: Используйте конструкцию with для автоматического закрытия файла.
# Чтение файла
with open('data.txt', 'r', encoding='utf-8') as f:
content = f.read() # вся строка
# или f.readlines() — список строк
# Запись в файл
with open('output.txt', 'w', encoding='utf-8') as f:
f.write('Привет, мир!')
# Добавление в файл
with open('log.txt', 'a', encoding='utf-8') as f:
f.write('Новая строка\n')
18. Как работать с JSON?
Ответ: Используйте модуль json для преобразования Python-объектов в JSON и обратно.
import json
# Python → JSON
user = {'name': 'Иван', 'age': 28, 'skills': ['Python', 'SQL']}
json_string = json.dumps(user) # строка
# {"name": "Иван", "age": 28, "skills": ["Python", "SQL"]}
# JSON → Python
data = json.loads(json_string)
print(data['name']) # Иван
# Работа с файлами
with open('user.json', 'w', encoding='utf-8') as f:
json.dump(user, f, ensure_ascii=False, indent=2)
with open('user.json', 'r', encoding='utf-8') as f:
loaded_user = json.load(f)
19. Как работать с CSV?
Ответ: Используйте модуль csv или библиотеку pandas для больших объёмов.
import csv
# Чтение CSV
with open('users.csv', 'r', encoding='utf-8') as f:
reader = csv.DictReader(f) # читать с заголовками
for row in reader:
print(row['name'], row['email'])
# Запись CSV
data = [
{'name': 'Иван', 'email': 'ivan@mail.com'},
{'name': 'Мария', 'email': 'maria@mail.com'}
]
with open('output.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.DictWriter(f, fieldnames=['name', 'email'])
writer.writeheader()
writer.writerows(data)
Вопросы о базах данных и SQL
Более 89% junior-позиций требуют знание SQL (Habr 2025). Это критично для работы с данными в реальных проектах.
20. Как подключиться к базе данных в Python?
Ответ: Используйте библиотеки: sqlite3 (встроенная), psycopg2 (PostgreSQL), mysql-connector (MySQL) или ORM вроде SQLAlchemy.
import sqlite3
# Подключение к БД
connection = sqlite3.connect('example.db')
cursor = connection.cursor()
# Создание таблицы
cursor.execute('''
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
email TEXT UNIQUE
)
''')
# Вставка данных
cursor.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Иван', 'ivan@mail.com'))
connection.commit()
# Выборка данных
cursor.execute("SELECT * FROM users WHERE name = ?", ('Иван',))
results = cursor.fetchall()
for row in results:
print(row)
connection.close()
21. Что такое SQL-injection и как его избежать?
Ответ: SQL-injection — это атака, когда в запрос подставляется вредоносный SQL-код. Избегайте конкатенации строк, используйте параметризованные запросы (?) или ORM.
# ✗ ОПАСНО — подвержено SQL-injection
name = input()
query = f"SELECT * FROM users WHERE name = '{name}'"
# ✓ БЕЗОПАСНО — параметризованный запрос
cursor.execute("SELECT * FROM users WHERE name = ?", (name,))
# ✓ БЕЗОПАСНО — ORM (SQLAlchemy)
from sqlalchemy import select
stmt = select(User).where(User.name == name)
Практические советы для успешного интервью
Кроме технических знаний, есть несколько тактик, которые помогут вам выделиться среди других кандидатов.
Структурируйте ответы по формуле STAR
Когда интервьюер задаёт вопрос про опыт, отвечайте по методу STAR: Situation (ситуация) → Task (задача) → Action (действие) → Result (результат). Это показывает структурированное мышление.
Пример: «На проекте нужно было оптимизировать функцию поиска (Situation). Она работала слишком медленно из-за множественных циклов (Task). Я переписал цикл в list comprehension и добавил индексирование в БД (Action). Скорость выборки улучшилась на 60% (Result)».
Будьте честны в своих знаниях
Если вы не знаете ответ на вопрос — скажите это прямо. Интервьюеры уважают честность больше, чем вылазы на ложь. Вместо этого предложите: «Я не знаю, но вот как я бы начал разбираться: поискал в документации, посмотрел примеры, написал бы тесты».
Приносите проекты на GitHub
Покажите свои работы. Даже если это небольшой парсер или Telegram-бот, это доказывает, что вы можете писать код, а не только рассказывать о нём. Лучше качество кода (чистота, комментарии, тесты) чем количество проектов.
Задавайте вопросы интервьюеру
В конце интервью всегда предложат: «Есть ли у вас вопросы?». Используйте это. Спросите о tech stack проекта, о командной культуре, о процессе развития Junior-разработчиков. Это показывает вашу заинтересованность.
Тренируйтесь на реальных платформах
Решайте задачи на LeetCode, HackerRank или Codewars. Не то чтобы на интервью будут такие же задачи, но это укрепляет алгоритмическое мышление. Для Python-junior часто спрашивают про двоичный поиск, сортировку и работу со строками.
Подготовьте рассказ о себе
Подготовьте 2-минутный рассказ о вашем пути в программирование: как вы начали, какие проекты делали, почему выбрали Python, почему подаёте заявку в эту компанию. Это даст вам уверенность на старте интервью.
Помните, что интервью — это двусторонний процесс. Вы оцениваете компанию так же, как они оценивают вас. Покажите своё стремление к развитию, и успех придёт.
Часто задаваемые вопросы
Какие вопросы чаще всего попадаются на интервью Python Junior?
По данным Habr Career (2025), топ-5: 1) разница между list и tuple, 2) что такое lambda, 3) работа со словарями, 4) обработка исключений, 5) основы ООП. Все эти вопросы требуют не просто ответ, но примеры кода и объяснение use cases.
Сколько времени занимает интервью Python Junior?
Обычно 45-90 минут. Первые 10-15 минут — знакомство и вопросы о вас. 20-30 минут — теория (вопросы которые мы разобрали). 15-30 минут — практика (написать функцию, отладить код). 10-15 минут — ваши вопросы компании. Приходите на 10 минут раньше.
Нужно ли запоминать синтаксис или лучше искать в гугле?
Запоминайте основной синтаксис (переменные, циклы, функции, классы). Конкретные методы и параметры можно смотреть в документации. Интервьюер не будет задавать про функцию str.casefold(), но будет спрашивать про логику и структуру кода. Баланс: 70% теория/логика, 30% синтаксис.
Как подготовиться к интервью за неделю?
День 1-2: пересмотрите типы данных (list, tuple, dict, set). День 3-4: функции, lambda, параметры, scope. День 5-6: ООП, наследование, исключения. День 7: практика — решайте 5-10 задач на LeetCode Easy, напишите один маленький проект (парсер, тулза). Последний день — повторите свой рассказ о себе и идеи для вопросов.
Можно ли пройти интервью без опыта работы?
Да, но нужны проекты в портфолио (GitHub). Даже без работы, если у вас 3-5 хороших проектов (Telegram-бот, веб-скрейпер, REST API, игра на Pygame), это даёт вам шанс на junior-позицию. Компании ценят способность учиться и качество кода больше, чем опыт.
Какой язык и framework выучить для первой работы?
Python — лучший выбор для Junior (80% согласны по Stackoverflow 2025). Дальше выбирайте по спросу в вашем регионе: Django/FastAPI для бэкенда, Django/Flask для веб. После первой работы изучите SQL, Docker и Git. Фреймворки приходят со временем, сначала — язык и ООП.
Дополнительные ресурсы WEB-HH
Если вы готовитесь к собеседованию, рекомендуем также изучить обзор зарплат по ролям в IT-индустрии 2026 года. Это поможет вам понять, на какую компенсацию рассчитывать как junior-разработчику.
Когда будете готовы, посмотрите актуальные удалённые вакансии для Python-разработчиков. Многие компании предлагают удаленку даже junior-специалистам.
Если решите работать рекрутером или HR-специалистом (развитие карьеры после разработки), изучите раздел вакансии медиабайера и другие смежные позиции на нашем портале.