← Назад к курсу

Подготовка к собеседованию на позицию 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.