Загрузка…
Загрузка…
backend / intern / tech_deep
Формат
online
Стадия
tech_deep
Когда
within_quarter
Длительность
—
01
Поведенческий
Расскажите про себя: как вы начали заниматься Python, где живёте, как пришли в программирование.
Кандидат рассказал про автоматизацию отчётов в Excel, tkinter, selenium, интернет-магазины.
02
Поведенческий
Зачем вам неоплачиваемая стажировка, если у вас уже есть работа (не связанная с программированием)?
03
Код
Создайте по-быстрому Django-проект (Django 4.1, Python 3.10) — приложение для подготовки к собесам: сущность 'вопрос' принадлежит категории, у вопроса есть ответ.
Лайвкодинг: django-admin startproject, создание приложения quiz.
04
Теория
Расскажите кратко, зачем в каждом проекте нужно виртуальное окружение.
Заметки
Собеседование на бесплатную стажировку в pet-проект 'найми' (подготовка к собесам). Кандидат — Фёдор из Великого Новгорода, без коммерческого опыта в разработке, основная работа — управление людьми. Формат — живой лайвкодинг с построением Django + DRF приложения (quiz/подготовка к собесам) с нуля: проект, приложение, модели Category и Quiz, миграции, сериализаторы, GenericViewSet, роутер, регистрация в админке. По ходу — теоретические врезки (venv, ORM, lazy queryset, dunder-методы, типы данных, оптимизация запросов). По итогу интервьюер сделал оффер на стажировку (2-3 часа в день, по понедельникам разбор задач, в пятницу — обсуждение архитектуры с внешними консультантами: Олег Еремин, Данил, Олег Кожанов). Кандидат взял время на раздумье до среды.
Подготовка
Для джуна/стажёра нужен обширный запас знаний и реализованные проекты, желательно в открытом доступе. Полезно уметь читать исходный код Django (views, viewsets, миксины). Стоит хорошо знать ORM (ленивые запросы, select_related/prefetch_related), типы данных Python (mutable/immutable), магические методы и ООП. По книгам — Лутц 'Изучаем Python'. Код-стайл проекта проверяется flake8, pre-commit; покрытие тестами обязательно для прохождения PR.
Стиль интервьюера
Доброжелательный, неформальный стиль. Интервьюер много задаёт уточняющих 'почему' по ходу кодинга, провоцирует проверять гипотезы экспериментально (например, работает ли view без регистрации приложения). Не давит, поощряет рассуждения вслух. Дал развёрнутый позитивный фидбек, отметил аккуратное форматирование кода. Предложил кандидату задать 'каверзные' вопросы про линтеры/тесты/стайл-гайд.
Follow-up: как активировать/деактивировать (source venv/bin/activate, deactivate).
05
Теория
Что это за зависимости (например sqlparse), которые подтянулись вместе с Django, и зачем они нужны?
06
Теория
Зачем вообще создавать отдельное приложение (app) в Django?
07
Теория
Почему класс конфигурации приложения называется QuizConfig (через AppConfig), а не просто 'quiz apps'?
Кандидат не задумывался об этом ранее.
08
Теория
Зачем регистрировать приложение в INSTALLED_APPS? Что значит, что Django 'не знает' о приложении без регистрации?
Follow-up: можно ли работать с url-адресами приложения без его регистрации? Проверяли гипотезу на практике.
09
Код
Пропишите эндпоинт в приложении quiz и верните через DRF какой-нибудь текст/словарь.
Использовали APIView, проверяли работу без миграций.
10
Теория
Расскажите про объект request: что вы передаёте внутри метода get, что в нём содержится?
Упомянуты query-параметры, post-данные, файлы, пользователь, middleware.
11
Теория
Что делает команда migrate?
12
Теория
Создавали ли вы свою кастомную миграцию? Для чего?
Кандидат рассказал про наполнение нового поля данными и про django-parler (перенос полей в таблицу с переводами).
13
Код
Будет ли view работать без регистрации приложения, если оно обращается к базе данных? Проверьте гипотезу, выведя всех пользователей.
Ситуационная проверка: обращение к User.objects.
14
Теория
Что такое objects.all()? Это эквивалент SELECT * FROM users?
15
Теория
В Django ленивые (lazy) запросы — в какой момент реально выполняется запрос к базе данных?
Обсудили навешивание фильтров, итерацию, print как момент выполнения запроса.
16
Код
Создайте модели Category (название, slug) и Quiz (текст вопроса, ответ, FK на категорию).
17
Теория
Зачем нужен класс Meta в модели и что в него можно поместить?
verbose_name, verbose_name_plural, constraints (уникальность по двум полям), ordering.
18
Теория
Что такое slug?
19
Теория
Почему для slug нужно ставить unique=True? Что будет, если этого не прописать?
Обсудили SlugField и почему кандидат им не пользовался.
20
Теория
Зачем нужен метод __str__? Почему именно __str__, а не __repr__?
21
Теория
Какая парадигма ООП реализуется магическими (dunder) методами? Приведите пример.
Кандидат привёл переопределение __add__ как пример полиморфизма.
22
Теория
Что делает параметр on_delete (CASCADE) у ForeignKey? Что произойдёт с квизами при удалении категории?
23
Теория
Что такое related_name у ForeignKey и зачем он нужен?
24
Код
Зарегистрируйте модели в админке Django.
25
Код
Напишите сериализаторы и viewset (list/retrieve по slug), зарегистрируйте роутер и выведите категории с вложенными вопросами.
Использовали ModelSerializer, GenericViewSet, lookup_field=slug, get_serializer_class, get_queryset.
26
Поведенческий
Какой ваш любимый вопрос на собесах, который вы сами задаёте?
27
Теория
Какие встроенные типы данных есть в Python? Какие из них изменяемые, а какие неизменяемые?
Кандидат перечислил list, set, dict (изменяемые), tuple, frozenset, str, int, float, bool, NoneType (неизменяемые).
28
Теория
Что такое GenericViewSet и зачем он нужен?
Обсудили миксины list/retrieve и роутинг.
29
Теория
Зачем вы используете prefetch_related/select_related? Чем они отличаются и как экономят запросы к базе данных?
select_related делает JOIN, prefetch_related — отдельный запрос; обсудили проблему N+1.