Coding interview на Python-разработчика в РФ: чек-лист подготовки
--
Предыстория
- Есть разраб. Он когда-то отсобеседовался и устроился в энтерпрайз.
- Мозг разраба переобучился на проблемах энтерпрайза.
- Разраб заскучал и хочет устроиться в другой энтерпрайз.
- На собеседованиях нужно писать вычислительные алгоритмы и считать их сложность.
- Решать задачки нужно быстро. Но прошлые несколько лет на работе разраб писал только бизнес-логику.
Что делать?
Предположим, что знания и экспертиза у разраба есть. Остается освежить некоторые нейронные связи в мозгу. Разраб не подается в FAANG и не стремится гарантированно пройти любое интервью. Цель разраба — успешно пройти большинство интервью и получить оффер от одной из нескольких интересных компаний. Тогда применяется правило Парето: вспоминаются основные алгоритмы и структуры данных и прорешивается несколько задачек, чтобы заранее войти в стиль мысли.
Чек-лист к coding interview
Язык программирования: Python.
Ожидаемая сложность интервью: средняя.
- Помни коробочные типы данных: deque (двусвязный список),
dict
,set
,counter
,priority queue
. - Задача не решается. А давайте притянем за уши
dict
,set
или явное вычислениеhash
. Куда их можно вставить? Бесплатный доступ, бесплатная гарантия уникальности значений или бесплатное сравнение могут изменить подход к решению задачи. - Применяй генераторы, чтобы не тратить память на хранение и отдавать элементы в порядке вычисления. Помни про
yield from
. - Создай вспомогательную структуру данных, наполни ее и работай с ней.
- Можно писать любые функции, любые классы и вызвать их из предложенной сигнатуры.
- Найти значение в списке можно быстрее, чем за линию. Если список отсортирован. Бинарный поиск ищет значение в отсортированном списке за
log(n)
. - Если собес в “обычную компанию”: вспомнить как писать декораторы, контекст-менеджеры, генераторы и итераторы; вспомнить внутреннее устройство
dict
.
Я следую этому принципу и устраивался так и на Junior, и на Middle, и на начального уровня Senior позиции в московские компании.
Сейчас я собеседуюсь на Middle/Senior позиции в Израиле и Европе, требования выше. Для подготовки к сложным интервью и интервью, сфокусированных на алгоритмах, рекомендую курс от educative.io. Он систематично разбивает алгоритмические задачи на классы и доносит идеи подходов к их решению.
За пределами этой заметки
- Знания по web
- Знания по особенностям языка программирования и фреймворкам
- Знания по базам данных и очередям
- Знания по проектированию архитектуры
- Знания по тестированию и прочие скилы процесса разработки
- Знания по деплою, масштабированию, SRE и прочие скилы по поддержанию жизнидеятельности продакшена
Материалы
https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt