На что обращать внимание на алгоритмических секциях собеседований
За свою инженерную карьеру я провёл десятки собеседований. Чтобы успешно пройти алгоритмическую секцию, кандидату недостаточно просто написать код. Нужно ещё этот код объяснять и в целом поддерживать беседу — общение здесь неизбежно.
За время общения с кандидатами я заметил некоторые повторяющиеся ошибки, которых можно избежать, если держать в фокусе внимания сравнительно простые вещи. Возможно, мои наблюдения будут вам полезны при интервью на следующее место работы.
Следите за таймингом
И это не про O (N). На типичном собеседовании по алгоритмам от вас ожидают, что в течение часа-полутора вы напишете решение пары задач. Если ещё и объясните их, будет вообще супер.
Но частенько случается, что кандидат раньше с задачей не сталкивался и начинает придумывать решение на ходу. Как это происходит: человек посидит-подумает, набросает пару строк. Так, тут не то… Нужно с другого конца, итератор. В общем, сами понимаете.
К чему это приводит? Как правило, к тому, что через 30–40 минут от начала собеседования кандидат приходит в точку, когда нужно «буквально пару циклов дописать, и всё должно заработать». При таком сценарии на второй задаче можно поставить крест.
Совет: следите за временем. Если решаете одну задачу больше 30 минут и находитесь где-то посередине процесса, что-то здесь не так. Справиться с ситуацией можно, проговорив примерное решение словами хотя бы в общих чертах.
Рассказывайте о своём решении
Иногда случается так, что вроде хочется уже начать код писать, а там пристают с каким-то вопросами, вроде «рассказать решение». А иногда даже во время обсуждения решения начинают какие-то уточняющие вопросы задавать и уводить в сторону. Так же и забыть можно, что хотел закодить.
У интервьюера нет цели никого увести с истинного пути. Так делают в основном для того, чтобы убедиться, что кандидат мыслит в верном направлении. Это помогает сразу скорректировать решение, пока человек не влез в дебри реализации. Порой благодаря наводящим вопросам кандидат сам понимает, что его повело немного не туда, и быстро исправляется.
Совет: не ждите, пока вас попросят проговорить основной алгоритм решения. Рассказывайте его сами. Таким образом вы облегчите жизнь и сэкономите время и себе, и интервьюеру.
Решайте проблемы стратегически
Бывало у вас такое, что думаете-думаете над задачей, пробуете-пробуете — и всё никак? Вроде бы подсказок и так много было, и вроде обсудили возможные подходы, но тупик. Что тут можно сделать?
Как вариант, можно до такого не доводить, а попросить перейти к следующей задаче. Если чувствуете, что совсем не идёт, имеет смысл двигаться дальше, чтобы не завалить собеседование. Я не раз видел своими глазами, как кандидат после неудачной попытки на первом вопросе быстро и успешно разбирался со вторым, после чего возвращался к первому и без проблем решал его. Возможно, помогает переключение контекста.
Совет: можно подходить к проблеме с чисто организационной точки зрения, меняя порядок выполнения работ. Бывает, что это помогает.
Не зацикливайтесь на мелочах
Ситуация: вы на собеседовании, задача понятна, путь к решению примерно понятен, код уже выходит из-под клавиш. И тут кажется, что двумя строчками выше можно было сделать красивее и оптимальнее: «сейчас зарефакторим и дальше пойдём, а то потом ещё забудем про эту правку», «этот кусок можно вообще переместить…».
Знакомо? Скажу так: я видел, как при таком исправлении мелочей и рефакторинге кандидаты вообще забывали, что хотели написать в итоге.
Совет: сначала запрограммируйте сам алгоритм, а потом уже занимайтесь украшениями. Не обращайте внимания на мелочи раньше времени. Скорее всего, на интервью от вас будут ожидать понимания алгоритма и способности его воплотить. А оставшееся время можно и на более интересные вопросы оставить.
Заключение
Следуя этим небольшим и, казалось бы, простым принципам, вы можете существенно улучшить положение дел на собеседовании:
Следите за временем, не тратьте слишком много на одну задачу.
Рассказывайте про решение. Спросите явно, туда ли вы двигаетесь.
Если застряли, меняйте задачи местами, решайте их с конца. Иногда это правда помогает.
Не утопайте в мелочах раньше времени, первым делом — основной алгоритм.
Всем добра, проходите собеседования и получайте классные офферы!