Алгоритмическое интервью
EugeneНесколько подписчиков канала попросили меня рассказать об этом виде интервью + я заметил что очень часто обсуждаю этот вопрос на сессиях менторинга со своими подопечными. Ну что-же, поехали.
Дисклеймер: в этой заметке я НЕ БУДУ рассуждать о том:
- о том нужны ли алгоритмы разработчику (коротко: зависит от того чем именно вы занимаетесь).
- о правильности такого подхода к оценке кандидатов (коротко: каждая компания вольна строить найм как хочется, рынок всё решит)
Что такое алгоритмческая секция?
Интервьюер даёт задачу (одну или несколько) в формате: есть входные данные(А), необходимо написать функцию которая принимает А, внутри себя делает какую то магию и возвращает результат(B). Цель кандидата: успеть решить задачу/задачи за отведенное время.
Что оценивается на алгоритмической секции?
При правильном проведении из нее можно извлечь ценные артефакты о том:
- Как кандидат мыслит, как рассуждает о проблеме (особенно когда проблема незнакомая + время ограничено)
- Как задает вопросы и какие это вопросы
- Как воспринимает обратную связь
- Насколько глубоки и широки знания кандидата в Computer Science
- Как кандидат пишет код (пишет ли тесты, как оформляет код и т.п.)
Какие факторы влияют на успех при прохождении интервью:
- Количество решенных задач (Практика)
- Широта и глубина знаний по алгоритмам и структурам данных (Теория)
- Аналитические способности / интуиция (вытекают из предыдущих 2х пунктов)
- Везение (попадется ли вам задача которую вы уже видели)
Задача кандидата: максимизировать свои шансы по каждому из пунктов.
Рассмотрим подробнее как это можно сделать:
Количество решенных задач (Практика)
Тут никакого откровения не будет. Берем любой сайт с задачками и решаем. Для LeetCode я советую использовать таблицу по ссылке чтобы плавно идти от простого к сложному без резких перепадов.
С ростом опыта полезно ставить себе таймер, чтобы искусственно воспроизводить атмосферу настоящего интервью.
Полезные ссылки (для уверенных в себе, начинающих скорее отпугнут):
- A pattern-based approach for learning technical interview questions
- Curated List of Top 75 LeetCode Questions to Save Your Time
- Crack LeetCode, not only how, but also why.
- 14 шаблонов, которые помогут ответить на любой вопрос по коду на собеседовании
Широта и глубина знаний по алгоритмам и структурам данных (Теория)
Однажды наступит такой момент когда задачи на LeetCode перестанут решаться, потому что не получается придумать ничего кроме наивного/брутфорс решения. И это нормально, это означает что нужно идти искать идеи где-то еще кроме своей головы. Например в разделе Discuss на LeetCode :)
Но понять их будет проблематично без предварительного изучения того как работает используемый алгоритм или структура данных. Тут то нам и придут на помощь книги/курсы/справочники по алгоритмам.
Полезные ресурсы которые помогут стартовать в этой непростой теме:
- Грокаем алгоритмы - на мой вкус отличная книга для новичка
- Big O cheatsheet - должно отлетать от зубов
- The Definitive Guide to Data Structures for Coding Interviews
- A complete computer science study plan to become a software engineer.
Аналитические способности / интуиция
Это вещь которую нельзя описать. С течением времени и практики мозг и смекалка начинают работать лучше и лучше. Чем больше вкладывается времени и сил тем больше отдача. Приходит понимание как подходить к решению большинства незнакомых задач, по факту вырабатывается собственный фреймворк по их решению.
Везение
Как долго бы кандидат не готовился и сколько курсов не прошел, всё равно вероятность не решить задачу присутствует. И это тоже нормально, предела совершенству не существует. Прорабатавая предыдущие пункты кандидат по факту повышает вероятность наступления "везения".
Bonus: Mock interview.
По своему опыту могу сказать что собеседование это огромный стресс для организма. И часто этот стресс мешает показать свои настоящие знания. Поэтому для достижения успеха нужно научиться работать со стрессом и держать его под контролем. В этом отлично помогают mock interview - пробные собеседования ничем не отличающиеся от настоящих с той лишь разницей что ошибка ничего не стоит для кандидата :) После нескольких попыток организм привыкает и на реальном собеседовании справляться с эмоциями становится в разы легче.
Итог
В данной заметке был рассмотрен процесс интервью, что ожидается от кандидата и на что обращают внимание, а также как сделать первый шаг и начать решать задачи с целью повысить свои шансы пройти интервью в компанию мечты.
Ссылки для дополнительного изучения (если хочется погрузиться в тему глубже):
- Бесплатный курс «Подготовка к алгоритмическому собеседованию» от Яндекс.Практикум - курс который отлично дополняет то что я написал в заметке :)
- Карьера программиста (Cracking the Coding Interview) - библия по прохождению собеседований в Big Tech
- Хочу работать в Google: Read Me First! - Методичка по подготовке к интервью в Google от сотрудника Google :)
- Data Fest² Minsk 2018: Владимир Игловиков, Как быстро надо бежать, чтобы не отстать: ML edition - Физик перекатившийся в машинное обучение рассказывает о том как покорять Big Tech
P.S. Я создал анонимную форму обратной связи для подписчиков канала. Если у вас есть вопрос/отзыв/пожелание то я с радостью прочитаю, пишите :)