Как пройти алгоритмическое собеседование в Яндексе: советы интервьюера

от автора

Перед офером разработчиков в Яндексе ждут несколько этапов отбора, и один из них — причём вокруг которого ходит больше всего мифов — это собеседование с алгоритмическими задачами. В Яндекс Практикуме прошёл вебинар, где двое выпускников прошли тренировочное интервью, а эксперт-интервьюер дал фидбек, подсветил ошибки и дал рекомендации. Самое интересное — в этой статье.

Что это за вебинар

9 июня в Практикуме прошла встреча с участием Руслана Валиулина — тимлида команды RMS в Яндекс Финтехе и нанимающего эксперта с богатым опытом проведения алгоритмических собеседований. Большую часть встречи занял разбор задач в онлайн-редакторе.

Мы сохранили запись вебинара. Посмотрите её полностью, если хотите проверить себя или посмотреть, как проходят собеседования в Яндексе, а в этом материале мы сосредоточимся на ключевых рекомендациях — разберём, из каких этапов состоит решение задачи, на что обратить внимание при подготовке и как избежать ошибок, которые не любят интервьюеры.

Из каких этапов состоит процесс найма

Алгоритмическое собеседование — это лишь один из стандартизированных этапов найма в Яндексе. Разберём процесс на примере трудоустройства джуниора-разработчика.

Сначала кандидат проходит скрининг у рекрутера. Это краткая беседа-знакомство без сложных вопросов. На этом этапе проблем обычно не возникает.

Далее идёт код-специфичная секция — техническое интервью с практикой, где эксперты с нашей стороны проверяют, как кандидат ориентируется в коде и насколько хорошо знает свой язык программирования.

Затем кандидата приглашают на алгоритмическое собеседование. Оно может быть сложным, но и к нему можно подготовиться, если знать, чего ожидать.

«На алгоритмической секции или, если корректнее, АА-секции (as appropriate) кандидат решает задачи, чтобы показать общую подготовку. 

Представьте, что вы устраиваетесь на работу спасателем, и вам дают задание пробежать 10 километров за 40 минут. Придётся ли вам столько бегать на работе? Вряд ли. Но так вы покажете, что у вас есть общая подготовка. Так и на АА-секции»

Следом могут идти дополнительные этапы, количество и содержание которых зависит от роли. Но обычно это актуально для более высоких позиций и кандидатов с большим опытом.

А заключительная стадия — это «финалы». На этом этапе кандидат знакомится с будущей командой или командами. Стороны проверяют, есть ли у них «мэтч», обсуждают софтскилы и опыт. Если в команде есть своя специфика, могут быть дополнительные технические вопросы.

Получается, что решение алгоритмических задач — это далеко не всё, что придётся пройти на старте. Но именно этот этап часто не даётся без подготовки даже опытному разработчику.

Как устроено алгоритмическое собеседование

Цель на этом этапе — решить две задачи. Каждая разбирается по плану, где кандидат:

  • получает задачу в онлайн-редакторе. В ней есть базовые вводные и примеры, как код должен сработать при тех или иных параметрах;

  • обсуждает условия, задаёт дополнительные вопросы и уточняет краевые значения;

  • придумывает решение и обсуждает его с интервьюером. Первый подход не всегда бывает оптимальным. Этот этап помогает обсудить целевое решение заранее, чтобы не писать код, который всё равно не примет интервьюер;

  • оценивает сложность алгоритма, рассчитывая её по Big O Notation;

  • пишет код, проверяет его — и сдаёт интервьюеру. Если интервьюер находит ошибку, кандидат должен её исправить.

Чтобы пройти дальше, нужно решить оба задания и достичь обозначенного порога, который зависит от роли.

«На вебинаре мы решаем относительно лёгкие задачи, на настоящем интервью сложнее. Например, я пользуюсь LeetCode, и уровень задач на собеседовании — примерно Middle»

Некоторые задачи кажутся легче, чем они есть на самом деле, и у кандидата может возникнуть соблазн пропустить одну из стадий. Например, сразу перейти к коду. Или сдать его без проверки, когда ответ кажется очевидным. Это почти всегда приведёт к ошибке и потере баллов у интервьюера.

Как решать задачи, чтобы пройти собеседование

Кроме хорошей подготовки, полезно знать правила — понимать, что действительно важно, чему можно не уделять внимания и на что рассчитывает интервьюер, принимая задачу.

Задавать дополнительные вопросы

Условия задачи не всегда включают все необходимые данные. Правильный вопрос поможет избежать ошибки и сэкономить время — самый ценный ресурс кандидата на собеседовании.

Вот первая задача вебинара, которую решала выпускница курса «Python-разработчик» Наталья:

И пример грамотного подхода — уточняющие вопросы, которые Наталья задала интервьюеру Руслану:

«Правильно ли я понимаю, что ничего сортировать не нужно? А может ли быть пустая строка на входе? Как мне нужно будет организовать решение — мне нужно будет input считать? А если оба массива пустой длины?»

Получив ответы, Наталья решила задачу:

А вот вторая задача, которая досталась выпускнику курса «Go-разработчик» Сергею:

Сергей уверенно реализовал и сдал решение, но на новом примере код сломался:

Всплыла ошибка: Сергей не уточнил, что будет, если передать некорректные параметры. Решение пришлось адаптировать. По словам Руслана, это ещё не худший расклад:

«Я довольно быстро показал пример, чтобы поправить Сергея, но на реальном интервью такого может не случиться. Например, я бы мог попросить поискать ошибку самостоятельно. Поэтому важно в самом начале убедиться, что вы точно учли все краевые значения и параметры, которые можно передать на ввод»

То, что Сергей допустил ошибку, не означает, что он не прошёл бы дальше. Но чем больше недочётов, тем больше времени уходит на проверку и исправления.

Размышлять вслух

Даже когда решение утверждено с интервьюером, важно объяснять ход мыслей и комментировать свои действия в онлайн-редакторе. Руслан объясняет это так:

«Признаюсь, мне часто хочется помочь кандидату. Но если он молчит, то сделать это невозможно. Поэтому, когда вы рассуждаете вслух, вы подталкиваете интервьюера вам помочь, поправить, если что-то не так»

Интервьюер не всегда принимает первое решение. Это нормально — значит, есть вариант лучше, и его не так сложно найти.

Проверять решение до сдачи

Если сдать задачу с ошибками, интервьюер вернёт вас на следующий этап, пока код не сработает так, как описано в задаче. 

Каждая проверка занимает время, и если кандидат сдаёт несколько решений подряд без проверки, то часто исправляет одни ошибки — и допускает при этом другие, и это может продолжаться очень долго.

Не искать единственное верное решение

Задачи на интервью часто можно решить несколькими способами, и если асимптотика у них совпадает, то подходы будут считаться эквивалентными. А ещё на алгоритмических собеседованиях допустимы опечатки в синтаксисе:

«Самое главное — в принципе решить обе задачи. Забытая точка с запятой или return в конце функции — мелочи, которые легко поправит компилятор. Правда, код должен всё-таки быть аккуратным: если синтаксических ошибок слишком много, интервьюер будет дольше валидировать результат»

А вот что действительно важно, так это умение работать со стандартными конструкциями языка, которые используются практически в каждой задаче, и верно оценивать асимптотику — непопадание в оценку будет равноценно ошибке.


Алгоритмическое собеседование — сложный, но стандартизированный этап найма. К нему можно подготовиться: с помощью задач в открытом доступе или, например, бесплатного курса «Подготовка к алгоритмическому собеседованию», где вы разберёте алгоритмы, которые нужно знать для прохождения интервью в Яндексе. Курс подойдёт опытным разработчикам, которые ещё не изучали алгоритмы или хотят подтянуть навык.

ссылка на оригинал статьи https://habr.com/ru/articles/1064626/