Подготовка к собеседованию и решение задач на доске
Whiteboarding
Что это такое
Подготовка к собеседованию — это отработка двух вещей, которые собеседование и проверяет: умения ясно рассказать о своей работе и умения решать задачу, когда за вами наблюдают. Решение на доске — второе: общее видимое пространство, где интервьюер следит за вашими рассуждениями и где молчание в течение десяти минут и есть провал.
Почему это важно
Уметь работать и уметь работать на виду — разные навыки, и собеседование проверяет второй. Молчание в раздумьях читается как ступор; верный ответ без рассуждений оценить нельзя; неверный ответ с ясным методом часто получает больше баллов, чем удачная догадка. Разделяет их практика, потому что под давлением поведение меняется: когда за вами наблюдают, люди пропускают пересказ задачи, забывают крайние случаи и перестают задавать вопросы.
Ключевые идеи
Перескажите задачу до того, как решать
Повторите её своими словами, назовите вход и выход и задайте один уточняющий вопрос. Это выигрывает время, показывает, что вы слушали, и ловит случай, когда задачу поняли неправильно.
«Вы хотите, чтобы функция вернула k самых частых значений.
Уточняю: k может быть больше числа различных значений,
и при равенстве частот порядок — по значению или по появлению?»
Рассуждайте вслух и по названной структуре
Скажите, что собираетесь делать, прежде чем делать, и держитесь видимой структуры: примеры, подход, затем код. Интервьюер оценивает рассуждения, а рассуждения видно, только если вы их проговариваете.
Начните с простого перебора, потом улучшайте
Сначала назовите очевидное решение и его сложность: это верный ответ и точка отсчёта. Затем назовите узкое место и улучшите его, сказав, что изменилось.
Перебор для каждого значения считаем все вхождения O(n^2)
Узкое место повторный подсчёт
Улучшение один проход в словарь, затем сортировка по частоте O(n log n)
Компромисс словарь занимает O(n) памяти
Прогоните код на маленьком примере вслух
Пройдите свой код на конкретном входе, включая пустой. Это ловит ошибку на единицу, которую иначе нашёл бы читатель, и показывает, что вы проверяете свою работу.
Спросите про ограничения, о которых спросили бы на работе
Размер входа, помещается ли он в память, вызывается функция один раз или многократно. Эти вопросы — признак силы, а не слабости, и ответы часто заметно упрощают задачу.
Практика
Проговорите одну задачу вслух на общей поверхности
Возьмите задачу, которую вы уже умеете решать, и пройдите её вслух — пересказ, примеры, перебор, улучшение, прогон, — уложившись в двадцать пять минут.
Готово, когда: вы уложились во время и можете показать момент, где улучшили бы подход.
Потренируйтесь под наблюдением
Решите новую задачу, пока кто-то смотрит и записывает, без подсказок.
Готово, когда: вы ни разу не молчали больше минуты, не сказав, о чём думаете, и прогон кода поймал хотя бы одну ошибку в вашем коде.
Частые ошибки
- Молчаливые раздумья — интервьюер не может оценить рассуждения и решает, что вы застряли; исправить: проговаривайте, что собираетесь попробовать и почему.
- Пропущен пересказ задачи — вы решаете не ту задачу, о которой спросили; исправить: повторите её своими словами и задайте один уточняющий вопрос.
- Прыжок к оптимальному решению — нет точки отсчёта, не видно рассуждений и часто ступор; исправить: сначала назовите простое решение.
- Код не проверен — первую ошибку находит интервьюер, и это выглядит плохо; исправить: прогоните вслух маленький и пустой вход.
- Вопросы как слабость — ограничения, о которых спросили бы на работе, так и остаются незаданными; исправить: спрашивайте про размер, частоту вызовов и память.
Что читать дальше
- Структуры данных (01-cs-fundamentals/02-data-structures) — техническая половина: какая структура делает какую операцию дешёвой.
- Алгоритмы и Big-O (01-cs-fundamentals/14-algorithms-big-o) — словарь сложности, которым записывается разбор.
- Коммуникация (08-soft-skills/01-communication) — навык объяснения, у которого это его версия под наблюдением и на время.
- Формирование портфолио (08-soft-skills/06-portfolio-building) — другая половина собеседования: разговор о своей работе.