Моковое собеседование на позицию Django Junior | Solvery + Django [ru]

YOUTUBE · 19.11.2025 04:30

Ключевые темы и таймкоды

Введение

0:19
  • Антон, сооснователь проекта Solver, приветствует зрителей.
  • Объявляется партнёрский стрим с сообществом Telegram-канала Django Gro.
  • Анонсируется моковое собеседование с Дмитрием Сергеевым, ментором Solver.

Формат стрима

1:16
  • Стрим продлится полтора часа.
  • Первый час — собеседование, второй — фидбек и ответы на вопросы зрителей.
  • Зрители могут задавать вопросы в YouTube, ответы будут даны в конце стрима.

Представление Льва

2:39
  • Лев рассказывает о своём опыте работы в нефтегазовой отрасли с 2007 года.
  • С 2012 года он руководит отделом разработки в компании.
  • Решил изучить Django после того, как заметил его популярность в вакансиях.

Опыт работы с Django

4:50
  • Лев создал проект для связывания данных из двух веб-сервисов.
  • Недавно попробовал связать стрипи и DRF, результат выложил на GitHub.
  • Упоминает о своём техническом образовании и опыте работы с C++.

Характеристики Python

6:07
  • Обсуждение характеристик Python: некомпилируемый язык высокого уровня с динамической типизацией.
  • Объяснение ссылочной модели и работы счётчика ссылок.

Типы данных в Python

9:42
  • Неизменяемые типы: int, float, str, frozenset.
  • Изменяемые типы: list, dict, set.
  • Пример с операцией сложения для демонстрации работы неизменяемых типов.

Магические методы

13:41
  • Объяснение магических методов, начинающихся с подчёркивания.
  • Различие между методами `__init__` и `__new__`.
  • Пример использования `__init__` для инициализации объекта.

Декораторы в Python

16:33
  • Объяснение декораторов `staticmethod`, `classmethod` и `method`.
  • Различие между статическими и нестатическими методами.
  • Переход к обсуждению Django.

Основные конструкции Django

18:41
  • Основные конструкции: модель, вьюшка и модель.
  • Связь «многие ко многим» реализуется через промежуточную таблицу.

Реализация связи «многие ко многим»

19:06
  • Промежуточная таблица создаётся автоматически при миграции.
  • Дополнительные данные можно добавить через атрибут `extra`.

Сигналы и контекстные процессоры

20:34
  • Сигналы напоминают веб-хуки и позволяют организовать событийную модель поведения.
  • Контекстные процессоры используются для обработки событий.

Расширение модели пользователя

21:24
  • Способы расширения модели пользователя не обсуждались.

Классы и функции в Django

21:50
  • В Django можно описать вью как функцию или класс.
  • Рекомендуется использовать классы для удобства повторного использования.

Базовые классы Django

22:41
  • Некоторые базовые классы уже сгенерированы.

Получение конкретного набора данных

23:43
  • Метод `select_related` позволяет получить конкретный набор полей.
  • Можно ограничить количество загружаемых данных через `query`.

Ленивые запросы

26:06
  • Ленивые запросы не выполняются сразу, а только при необходимости.
  • Примеры методов, которые не возвращают корсет сразу: `get_or_create`, `aggregate`.

Минимизация запросов к связанным таблицам

28:35
  • Использование `select_related` и `prefetch_related` минимизирует количество запросов.
  • Пример с пиццами и начинками иллюстрирует проблему «n+1» и её решение.

Проверка наличия данных в таблице

34:12
  • `count` не всегда подходит для быстрой проверки наличия данных.
  • Пример запроса с `limit_one` может быть быстрее.

Транзакции

35:40
  • Транзакции гарантируют либо успешное выполнение всех операций, либо отказ от всех.

Индексы в базе данных

36:15
  • Индексы ускоряют поиск данных в базе данных.

Категории статусов ответа

36:47
  • Статусы ответов: 200 — всё хорошо, 300 — редирект, 400 — ошибка на стороне клиента, 500 — ошибка на стороне сервера.

Отличие GET и POST запросов

37:29
  • GET используется для получения данных, POST — для записи.
  • В POST есть тело запроса, в GET его нет.

Методы запросов, передающие тело

38:15
  • POST, PUT, PATCH, DELETE могут передавать тело запроса.
  • DELETE может передавать данные, но это не обязательно.

Передача данных в GET

39:57
  • В GET данные можно передавать через заголовки, но это неудобно.
  • Теоретически можно передать файл в виде строки, но это редко используется на практике.

Реализация функционала избранного в Django

41:26
  • Создание модели избранного с полями ID, пользователь и товар.
  • Проверка товаров на добавление в избранное перед рендерингом списка.
  • Использование механизма prefetch для оптимизации запросов.

Использование ключей в словарях Python

47:36
  • Ключи в словарях должны быть неизменяемыми типами данных.
  • Таблицы могут содержать изменяемые типы данных, но не могут быть ключами.
  • Собственные объекты должны реализовывать метод hash для использования в качестве ключей.

Генераторы и итераторы в Python

48:49
  • Генераторы реализуются через функции, возвращающие генератор.
  • Итераторы должны иметь метод next для работы с генератором.
  • Конструкция with проще в использовании, чем создание собственного итератора.

Магические методы в Python

49:43
  • Магические методы реализуют системную логику, например, сложение объектов.
  • Примеры магических методов: next, iter, new, next.

Строгая типизация в Python

50:43
  • Строгая типизация предотвращает операции с несовместимыми типами данных, например, сложение строки и int.
  • В JavaScript такие операции возможны, в Python они приводят к ошибке.

Классные методы в Python

51:35
  • Классные методы взаимодействуют только с атрибутами класса, а не с атрибутами экземпляра.
  • Переопределение атрибутов класса не влияет на работу классных методов.

Контекстные процессоры в Django

52:24
  • Контекстные процессоры расширяют контекст, передаваемый в шаблоны.
  • Пример использования: рендеринг навигации на всех страницах.

Сигналы в Django

53:19
  • Сигналы представляют события, происходящие в системе, например, сохранение модели.
  • Примеры событий: до и после сохранения,

Переопределение модели User в Django

53:58
  • Модель User в Django содержит механизмы для авторизации, проверки логина и пароля, а также хранения данных.
  • Для переопределения модели можно расширить её классом AbstractBaseUser, что позволяет полностью контролировать процесс авторизации и хранения полей.
  • Можно переопределить поле для идентификации пользователя, например, использовать email вместо username.

Дополнительные механизмы работы с моделью User

54:54
  • Создание профиля как отдельной модели для хранения дополнительных полей.
  • Использование прокси-модели для реализации дополнительных методов внутри пользователя без расширения полей.

Методы load и defer в Django

55:44
  • Метод load позволяет указать, какие поля загружать, например, только ID и набор.
  • Метод defer исключает загрузку определённых полей, например, полей с большим набором данных.
  • Для реализации методов load и defer используются классы Query и символ pipe |.

Ленивые запросы и индексы

57:04
  • Ленивые запросы не выполняются сразу, что позволяет оптимизировать производительность.
  • Обсуждение индексов и их роли в работе с данными.

Советы по изучению Django и Python

59:07
  • Важно изучить Python, так как фреймворки приходят и уходят, а знание основ языка полезно для работы с разными фреймворками.
  • Django подходит для простых реализаций и прототипирования, но знание других фреймворков, таких как FastAPI и Flask, может расширить возможности трудоустройства.

REST API в Django

1:01:17
  • Необходимо изучить REST API, включая POST и GET запросы, работу с файлами и передачу данных.
  • Освоение REST-фреймворка Django может быть перспективным направлением для бэкенд-разработчиков.

Вопросы на собеседованиях по Django

1:03:50
  • Вопросы по Django на собеседованиях встречаются редко, чаще требуются знания Python.
  • Для понимания внутренней архитектуры Django рекомендуется изучать исходный код.

Источники информации по Django

1:06:45
  • Книги по Django быстро устаревают, поэтому основной источник информации — исходный код фреймворка.
  • Изучение исходного кода через GitHub или IDE помогает лучше понять, как работает Django.

Значение пэт-проектов

1:07:35
  • Достойный пэт-проект и понятное объяснение его работы могут компенсировать неумение отвечать на вопросы.
  • Многие начинающие программисты выбирают недостаточно сложные проекты.

Амбициозные задачи в пэт-проектах

1:08:11
  • Пэт-проекты должны быть сложными и включать изучение новых технологий и фреймворков.
  • Примеры амбициозных задач: использование S3, создание бэкенд- и фронтенд-приложений.

Подготовка к собеседованиям

1:09:26
  • Собеседования помогают накапливать знания и улучшать навыки ответа на вопросы.
  • Стрессовая ситуация может вызвать трудности, но практика помогает их преодолеть.

Завершение вопросов

1:10:06
  • Вопросы закончились, автор благодарит участников за полезные вопросы.

Обратная связь и планы

1:10:57
  • Автор интересуется мнением участников о формате собеседований.
  • Планируется вернуться к формату для мидлов позже.
  • Призыв к участникам оставлять обратную связь в комментариях.