👨💻 Как подготовиться к алгоритмическому собеседованию
Как проходит секция?
Цель секции с кодом -- оценить то, как мыслит кандидат во время написания кода и насколько хорошо пишет код.
Этап с алгоритмами — это обычно созвон длительностью около часа. За это время дается 2-3 задачи разной сложности на выбор интервьюера (задачи берутся из банка задач). По ходу интервьюер будет делать заметки.
Написание кода происходит в онлайн-редакторе — например, Avito Code, Яндекс Интервью и т. д.
Интервьюер скидывает условие задачи, вы обсуждаете возможные решеиния, оценивате сложность по времени и памяти, после чего приступаете к написанию кода.
Код запустить не получится, поэтому дебажить придется в голове — хороший фильтр от людей, программирующих методом тыка. Интервьюер обычно тоже не может запустить код (это создает определенное пространство для ошибки, если он не очень опытный), но где-то такая возможность есть.
Интервьюер может давать подсказки по вашей просьбе или если кандидат уже долго не может найти проблему. Интервьюер старается дать минимально возможную подсказку, начиная от наводящего вопроса до исправления/указания конкретного места с проблемой. В памятке для интервьюеров даже указывается последовательность:
- «Точно работает? На каких данных можно это проверить?»
- «В коде есть баг»
- «Вот в этом месте»
- «Вот на этой строчке»
- Указать что именно не так или поправить самому
Подсказки могут снизить оценку.
В конце можно задать вопросы о работе в компании.
В фидбеке указывается как кандидат шел к решению, какие ошибки допускал и какие ошибки были допущены. Обращают внимание и на знание языка.
Секция с кодом влияет на грейд. Если человек прошел ее хорошо, могут назначить секцию проектирования (System Design),
Критерии оценки
Прохождение
- Внимательно прочитайте условие задачи — дьявол кроется в деталях
- Составьте тестовые примеры данных и результат их обработки
- Спросите о данных примерах у интервьюера и убедитесь, что правильно вы поняли условие задачи и ничего не упустили
- Попытайтесь добавить к тестовым данным пограничные случаи, которые могут привести к ошибке. Примеры:
- пустой массив/строка
- 0 или отрицательные числа
- массив состоящий из одних и тех же элементов
- массив четной или нечетной длины
- Уточните дополнительные условия:
- Нужно ли учитывать возможность переполнения числа (превышения максимального значения)
- и т. д.
- Начните решение с алгоритма, который вам кажется максимально простым и понятным. Решив задачу простейшим способом, можно думать над более изощренными решениями
- Не забывайте прогововаривать вслух ваш ход мыслей, чтобы интервьюер понимал, что вы не просто тупите, а думаете и мог вас исправить, если вы пойдете совсем не туда, либо поняли что-то не так
- Зачастую написанный вами алгоритм не запускается для проверки на корректность, а прогоняется “в голове” и на словах
Также нужно уметь:
- разложить число
- развернуть массив
Еще одна штука, которая встречалась у меня, кажется, везде: метод двух указателей
Что нужно знать (устройство, сложность)
По структурам:
- массив
- хешмап
- дерево
- связанные списки
Реже (лучше перебдеть):
- очереди
- стек
По алгоритмам:
- сортировки: пузырьком, быстрая, слиянием
- бинарный поиск
Реже:
- поиск в глубину и ширину
Знай сложности алгоритмов Собеседование в Яндекс: театр абсурда