На что обращать внимание на алгоритмических секциях собеседований

За свою инженерную карьеру я провёл десятки собеседований. Чтобы успешно пройти алгоритмическую секцию, кандидату недостаточно просто написать код. Нужно ещё этот код объяснять и в целом поддерживать беседу — общение здесь неизбежно. 

За время общения с кандидатами я заметил некоторые повторяющиеся ошибки, которых можно избежать, если держать в фокусе внимания сравнительно простые вещи. Возможно, мои наблюдения будут вам полезны при интервью на следующее место работы.

edb9f72011d214f16cb336f015c32a70.png

Следите за таймингом

И это не про O (N). На типичном собеседовании по алгоритмам от вас ожидают, что в течение часа-полутора вы напишете решение пары задач. Если ещё и объясните их, будет вообще супер. 

Но частенько случается, что кандидат раньше с задачей не сталкивался и начинает придумывать решение на ходу. Как это происходит: человек посидит-подумает, набросает пару строк. Так, тут не то… Нужно с другого конца, итератор. В общем, сами понимаете.

К чему это приводит? Как правило, к тому, что через 30–40 минут от начала собеседования кандидат приходит в точку, когда нужно «буквально пару циклов дописать, и всё должно заработать». При таком сценарии на второй задаче можно поставить крест.

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

Рассказывайте о своём решении

Иногда случается так, что вроде хочется уже начать код писать, а там пристают с каким-то вопросами, вроде «рассказать решение». А иногда даже во время обсуждения решения начинают какие-то уточняющие вопросы задавать и уводить в сторону. Так же и забыть можно, что хотел закодить.

У интервьюера нет цели никого увести с истинного пути. Так делают в основном для того, чтобы убедиться, что кандидат мыслит в верном направлении. Это помогает сразу скорректировать решение, пока человек не влез в дебри реализации. Порой благодаря наводящим вопросам кандидат сам понимает, что его повело немного не туда, и быстро исправляется.

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

Решайте проблемы стратегически

Бывало у вас такое, что думаете-думаете над задачей, пробуете-пробуете — и всё никак? Вроде бы подсказок и так много было, и вроде обсудили возможные подходы, но тупик. Что тут можно сделать?

Как вариант, можно до такого не доводить, а попросить перейти к следующей задаче. Если чувствуете, что совсем не идёт, имеет смысл двигаться дальше, чтобы не завалить собеседование. Я не раз видел своими глазами, как кандидат после неудачной попытки на первом вопросе быстро и успешно разбирался со вторым, после чего возвращался к первому и без проблем решал его. Возможно,  помогает переключение контекста.

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

Не зацикливайтесь на мелочах

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

Знакомо? Скажу так: я видел, как при таком исправлении мелочей и рефакторинге кандидаты вообще забывали, что хотели написать в итоге.

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

Заключение

Следуя этим небольшим и, казалось бы, простым принципам, вы можете существенно улучшить положение дел на собеседовании:  

  1. Следите за временем, не тратьте слишком много на одну задачу.

  2. Рассказывайте про решение. Спросите явно, туда ли вы двигаетесь.

  3. Если застряли, меняйте задачи местами, решайте их с конца. Иногда это правда помогает.

  4. Не утопайте в мелочах раньше времени, первым делом — основной алгоритм.

Всем добра, проходите собеседования и получайте классные офферы!

© Habrahabr.ru