Загрузка…
Загрузка…
backend / junior / tech_deep
Формат
online
Стадия
tech_deep
Когда
within_quarter
Длительность
84 мин
01
Поведенческий
Расскажите о себе: какой опыт программирования, какие самые сложные проекты были?
Кандидат рассказал про GS, переход на Python, проекты на Django и Flask, сервис парсинга вакансий, Telegram-боты.
02
Поведенческий
Был ли у вас коммерческий, около-коммерческий опыт или фриланс-заказы?
03
Поведенческий
Расскажите ситуацию с прошлой работы или учёбы, когда была конфликтная ситуация с начальством, и как вы её разрешили.
Кандидат не смог вспомнить пример.
04
Кейс
Представьте, что дедлайн завтра, половину вьюшек нужно переделать к утру, а рабочий день закончился. Как поступите?
Заметки
Собеседование на позицию Python/Django backend-разработчика (джун) в компанию Котек (медицинские информационные системы; стек Python, PostgreSQL, Django, DRF). Удалёнка или офисы в Нижневартовске, Уфе, Барнауле, Севастополе; белая зарплата, ДМС, обучение за счёт компании. Собеседование включало блок софт-скиллов, обширный технический блок (Python, ООП, SQL, HTTP, Git, асинхронность, Django) с лайвкодингом в IDE, и завершилось устным ревью. Итог положительный — кандидата готовы взять на джуна.
Подготовка
Рекомендации интервьюера: больше практиковаться руками (писать код), потренироваться с абстрактными классами и наследованием (в т.ч. множественным от двух классов); подучить базы данных (SQL, MySQL, PostgreSQL) и почитать про ClickHouse, MongoDB, Redis (NoSQL); научиться работать через SQLAlchemy; подучить Gitflow (прочитать 2-4 страницы); прочитать документацию Django от корки до корки (особенно middleware и обработку исключений); запомнить названия СУБД, dunder-методы (не только __init__), транзитивные зависимости, термин shallow copy.
Стиль интервьюера
Доброжелательный, наводящий стиль: при ошибках мягко поправляет, даёт подсказки и наводящие вопросы, просит при необходимости найти ответ в браузере. Активно использует лайвкодинг и прикладные бизнес-примеры (интернет-магазин, auto.ru, разнопрофильный магазин). По ходу даёт рекомендации, что почитать. В конце дал развёрнутое устное промежуточное ревью с сильными сторонами (структуры данных, алгоритмы, ООП-понимание) и зонами роста (мало практики).
05
Кейс
На таску было 2 недели, но через день вы понимаете, что точно не успеете её выполнить в срок. Ваши действия?
06
Поведенческий
Приведите пример из жизни, когда вы совершили ошибку на работе, как вы её решили и чему это вас научило.
Кандидат привёл пример из не-IT работы (сгоревшая микросхема).
07
Теория
Какие типы данных вы знаете в Python?
08
Теория
На какие две категории можно разделить типы данных в Python?
Ответ: изменяемые и неизменяемые.
09
Теория
Какие из типов данных изменяемые, а какие неизменяемые?
10
Теория
Что такое список и что такое кортеж?
11
Теория
Какая алгоритмическая сложность поиска элемента в списке, словаре и множестве (по 5 элементов в каждом)?
Список O(n), словарь O(1), множество O(1) — кандидат сначала ошибся по множеству.
12
Теория
В чём отличие оператора is от оператора ==?
13
Код
Приведите пример с двумя списками A и B, когда is сначала показывает True, а потом False; и как добиться True через is.
Лайвкодинг в IDE.
14
Теория
Что может быть ключом, а что значением в словаре?
15
Теория
Может ли кортеж быть ключом словаря и в каких случаях кортеж/список хэшируется, а в каких нет?
Интервьюер поправил: NaN можно сделать ключом, т.к. он хэшируется.
16
Код
Что делает контекстный менеджер? Напишите конструкцию с контекстным менеджером: подключиться к файлу и записать туда Hello World.
Лайвкодинг; кандидат искал нужный метод в браузере.
17
Код
Перепишите эту же конструкцию записи в файл полностью без контекстного менеджера.
Лайвкодинг.
18
Теория
Что такое виртуальное окружение и зачем оно нужно?
19
Теория
Приведите пример, когда отсутствие виртуального окружения может стать критичным.
20
Теория
Какая проблема может возникнуть, если работать над двумя проектами (например, оба на Flask) одновременно без виртуального окружения?
Пример с разными версиями aiogram (2 vs 3) и сменой названий методов.
21
Теория
Зачем нужны менеджеры по контролю зависимостей, какие вы знаете и каким способом можно обойтись без них?
22
Теория
Что такое lock-файл и зачем он нужен, если версии уже перечислены в pyproject.toml?
23
Теория
Как называются зависимости, которые подтягиваются автоматически как зависимости устанавливаемой библиотеки (например, faker для mixer)?
Ответ: транзитивные зависимости.
24
Теория
Что такое инкапсуляция, полиморфизм и наследование? Как вы это понимаете?
Разбиралось далее по частям на практике.
25
Код
Создайте класс Car и спроектируйте иерархию классов для автомобилей (как для сайта auto.ru). Хочу посмотреть на архитектурные решения.
Лайвкодинг; атрибуты name, color, fuel.
26
Теория
Какие есть два способа защиты атрибутов в Python?
Приватный и защищённый.
27
Кейс
Какой атрибут товара в интернет-магазине должен быть защищённым (изменение которого критично для бизнеса)?
Подвели к цене/балансу.
28
Код
Создайте приватный/защищённый атрибут для денег (цены) и реализуйте инкапсуляцию в полном виде.
Лайвкодинг; атрибут _price.
29
Теория
Расскажите своими словами, что такое инкапсуляция и в чём разница между приватными и защищёнными атрибутами в Python.
30
Код
Реализуйте getter и setter для цены через декоратор property.
Лайвкодинг; кандидат путался в синтаксисе @property/@price.setter.
31
Теория
Зачем нужны геттеры и сеттеры? Приведите пример из коммерческой практики (например, при покупке товара).
Обсуждались побочные действия: обновление кэша, отправка письма в бухгалтерию.
32
Теория
Какой не может быть цена, и какую проверку/валидацию стоит прописать в сеттере?
Цена не может быть отрицательной/нулевой.
33
Теория
Что такое полиморфизм?
34
Код
Реализуйте метод в классе Car и сделайте у класса Drill (дрель) такой же полиморфный метод, чтобы он был немного разный.
Лайвкодинг.
35
Теория
Зачем нужен полиморфизм? Приведите пример (например, для разнопрофильного магазина с разными товарами).
Подвели к тому, что объекты можно сложить в один список.
36
Код
Что такое наследование и зачем оно нужно? Создайте класс Truck (грузовик), наследующийся от Car.
Лайвкодинг.
37
Код
Как добавить новое свойство в дочерний класс, сохранив старые (вызов super().__init__ в конструкторе)?
Кандидат путался с вызовом super() и __init__.
38
Теория
Какие dunder-методы вы знаете? Назовите штук 4-5.
Интервьюер отметил, что лучше вспоминать __dict__, __repr__ и т.п., а не только __init__.
39
Теория
Что такое абстрактный класс?
Интервьюер дополнил про модуль ABC и невозможность создать экземпляр.
40
Теория
В чём разница между static method и class method?
41
Теория
Какой параметр принимает classmethod (cls) и для чего он нужен?
42
Теория
Что такое SQL и зачем он нужен?
43
Теория
Как по-русски называется СУБД и как расшифровывается?
Система управления базами данных.
44
Теория
Какие SQL базы данных вы знаете?
Кандидат ошибочно назвал SQLAlchemy базой данных.
45
Теория
Что такое SQLAlchemy?
Кандидат не знал; интервьюер объяснил, что это ORM.
46
Теория
Что такое ORM и с помощью чего происходит взаимодействие с базой данных через него?
Сравнение с сырыми запросами (psycopg2) против моделей/объектов.
47
Теория
Какие знаете способы взаимодействия с базами данных (CRUD)?
Create, read, update, delete.
48
Теория
Какие HTTP методы вы знаете?
GET, POST, DELETE, PATCH, PUT, HEAD.
49
Теория
Из чего состоит HTTP запрос?
Заголовки, тело, метаданные.
50
Теория
Какие HTTP-заголовки можете вспомнить?
Content-Length, Content-Type, Authorization, CORS.