Подготовка к собеседованию на позицию Junior Python Developer (вар. 2)
Подготовка к собеседованию на позицию Junior Python Developer
Ниже приведены важные темы и вопросы, необходимые для уверенного прохождения собеседования на роль Junior Python Developer. Материал представлен с детальным разбором каждого вопроса и примеров кода на Python.
1. Основы Python
1.1. Переменные и типы данных
Вопрос: Чем отличаются строки и байтовики (bytes) в Python?
Ответ: В Python строки являются последовательностью символов Unicode, тогда как байтовики представляют последовательность байтов, представляющих закодированные символы.
Пример:
string_value = "Привет мир!" byte_value = b"Hello world!" print(type(string_value)) # <class 'str'> print(type(byte_value)) # <class 'bytes'>
1.2. Списки и срезы
Вопрос: Как извлечь элементы из середины списка с помощью среза?
Ответ: Срез в Python задаётся выражением [start:end:step], где start — индекс начала, end — индекс конца (не включительно), а step — шаг.
Пример:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9] middle_elements = numbers[3:6] # извлекаем элементы с индексов 3 до 6 (исключительно) print(middle_elements) # [4, 5, 6]
1.3. Функции высшего порядка
Вопрос: Что такое функции высшего порядка и приведите пример использования функций map() и filter()?
Ответ: Функция высшего порядка — это функция, которая принимает одну или несколько функций в качестве аргументов либо возвращает функцию в результате своей работы.
Пример:
# map(): применяет функцию ко каждому элементу коллекции squares = list(map(lambda x: x * x, range(1, 6))) print(squares) # [1, 4, 9, 16, 25] # filter(): фильтрует коллекцию согласно условию even_numbers = list(filter(lambda x: x % 2 == 0, squares)) print(even_numbers) # [4, 16]
2. Контроль потоков и обработка ошибок
2.1. Исключение ZeroDivisionError
Вопрос: Как обработать ошибку деления на ноль?
Ответ: Ошибку можно перехватить с помощью конструкции try-except.
Пример:
try:
result = 10 / 0
except ZeroDivisionError:
print("Невозможно разделить число на ноль.")
2.2. Декораторы
Вопрос: Что такое декораторы и для чего они используются?
Ответ: Декора́тор — это особый вид функции, которая обертывает другую функцию, дополняя её функциональность без изменения самого тела функции.
Пример декоратора для измерения времени выполнения функции:
import time
def timer_decorator(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
execution_time = end_time - start_time
print(f"Время выполнения: {execution_time:.4f} секунд")
return result
return wrapper
@timer_decorator
def slow_function():
time.sleep(2)
slow_function()
Результат:
Время выполнения: 2.0000 секунд
3. Структуры данных и работа с ними
3.1. Словари и множественные значения
Вопрос: Можно ли хранить разные типы данных в одном словаре?
Ответ: Да, в Python словарь может содержать ключи и значения любого типа данных.
Пример:
mixed_dict = {
"name": "John",
"age": 30,
"is_active": True,
"scores": [85, 90, 78],
"address": {"city": "Москва"}
}
print(mixed_dict["name"]) # John
print(mixed_dict["scores"][1]) # 90
3.2. Генераторы
Вопрос: Что такое генератор и как его создать?
Ответ: Генератор — это особая конструкция, позволяющая получать значение "по запросу" (ленивая загрузка), сохраняя память.
Пример генератора чисел Фибоначчи:
def fibonacci_generator(limit):
a, b = 0, 1
while a < limit:
yield a
a, b = b, a + b
fib_gen = fibonacci_generator(100)
for num in fib_gen:
print(num)
Результат:
0 1 1 2 3 5 ...
4. Работа с файлами и сетевыми запросами
4.1. Запись в файл
Вопрос: Как записать строку в файл в Python?
Ответ: Используется оператор записи open(file, mode='w'), где режим 'w' означает запись (перезапишет существующий файл).
Пример:
with open('output.txt', 'w') as file:
file.write("Привет, мир!\n")
4.2. Использование библиотеки requests
Вопрос: Как отправить POST-запрос с телом в формате JSON?
Ответ: Используя библиотеку requests, отправьте POST-запрос с заголовком Content-Type и тело запроса в формате JSON.
Пример:
import requests
url = "http://example.com/api/data"
payload = {"username": "john_doe", "password": "secret"}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
5. Базовые понятия ООП
5.1. Конструктор и деструктор
Вопрос: Что такое конструктор и деструктор в классе Python?
Ответ: Конструктор (__init__) инициализирует объект, а деструктор (__del__) освобождает ресурсы перед удалением объекта.
Пример:
class MyClass:
def __init__(self, value):
self.value = value
print("Объект создан.")
def __del__(self):
print("Объект уничтожается.")
obj = MyClass(10)
del obj
Результат:
Объект создан. Объект уничтожается.
5.2. Наследование и переопределение методов
Вопрос: Приведите пример наследования и переопределения метода родительского класса.
Ответ: Класс-наследник может расширить или изменить функциональность базового класса путём переопределения его методов.
Пример:
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "Гав!"
animal = Dog()
print(animal.speak()) # Гав!
6. Пространства имен и модули
6.1. Импорт модулей
Вопрос: Как импортировать отдельные функции из модуля?
Ответ: Используйте инструкцию from module_name import function_name.
Пример:
from math import sqrt result = sqrt(16) print(result) # 4.0
6.2. Локальные и глобальные пространства имен
Вопрос: Где хранятся локальные и глобальные переменные?
Ответ: Локальные переменные находятся внутри функции, глобальные — вне всех функций.
Пример:
global_var = 10
def my_function():
local_var = 20
print(local_var) # 20
my_function()
print(global_var) # 10
7. Веб-разработка
7.1. Маршрутизация в Flask
Вопрос: Как настроить маршрутизацию в Flask?
Ответ: Используются аннотации (@app.route) для привязывания маршрутов к обработчикам.
Пример:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return "<h1>Добро пожаловать!</h1>"
if __name__ == "__main__":
app.run(debug=True)
7.2. Шаблонизация Jinja2
Вопрос: Как вывести динамические данные в шаблоне Jinja2?
Ответ: Шаблоны позволяют выводить данные, используя выражения в фигурных скобках.
Пример HTML-шаблона:
<!DOCTYPE html>
<html lang="en">
<head><title>Jinja Example</title></head>
<body>
<h1>{{ title }}</h1>
<p>Сегодня {{ current_date }}.</p>
</body>
</html>
Python-контекст:
from datetime import date
from flask import render_template
@app.route("/jinja_example")
def jinja_example():
context = {
"title": "Главная страница",
"current_date": date.today().strftime("%Y-%m-%d"),
}
return render_template("index.html", **context)
Итоговая рекомендация
При подготовке уделяйте внимание практике решения реальных задач, пониманию принципов работы Python и стандартов оформления кода. Регулярная практика и чтение документации позволят уверенно проходить собеседования на позицию Junior Python Developer.