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-фахівцем (розвиток кар'єри після розробки), вивчайте розділ вакансії медіабайера і інші суміжні позиції на нашому порталі.