Что говорить на лайв-кодинге на собеседовании
На лайв-кодинге интервьюер одновременно смотрит редактор и слушает вас. Двадцать минут тишины он не может оценить: непонятно, вы думаете над условием или забыли, как объявить список. Ниже одна сессия целиком, с его репликами. Задача бытовая: вернуть идентификаторы заказов, которые встречаются больше одного раза.
0:00, условие своими словами
«Повторяю, как понял. На входе список идентификаторов, на выходе те, что встретились хотя бы дважды, без дублей в ответе. Пример: a, b, a даёт a. Пустой список даёт пустой результат. Если порядок в ответе важен или пример другой — поправьте до кода.»
Интервьюер: «Порядок не важен. Пустой список правда пустой. Идентификатор — строка.»
Эти три уточнения дешевле любой структуры данных. Люди, которые сразу пишут HashMap, часто решают соседнюю задачу: считают частоты, сохраняют порядок, падают на пустом входе. Минута на пример окупается.
3:00, простой вариант вслух
«Сначала пройду список дважды: для каждого идентификатора посчитаю, сколько раз он встречается, и соберу те, у кого счетчик больше одного. На примере из трёх элементов это мгновенно. На миллионе будет квадрат, это плохо. Пишу двойной проход и сверяю a, b, a. Если такой объём реален, скажите сейчас — сразу положу уже виденные в множество и не буду тратить проход.»
Интервьюер: «Миллиона не будет. Квадрата на этой задаче достаточно. Пишите.»
Это удачный исход, не поражение. Вы не потратили следующие пятнадцать минут на структуру, которую не просили. Если бы он сказал «объём будет», у вас уже назван следующий шаг, и вы не делаете вид, что оптимальное решение родилось само.
7:00, код короче фразы
Пока руки пишут цикл, рот на полфразы впереди. «Внешний проход берёт кандидата. Внутренний считает совпадения. Если счетчик больше одного и кандидата ещё нет в ответе, кладу его.» Не комментируйте каждую скобку. Комментируйте решение, которое скобка обслуживает. Если замолчали на синтаксисе, скажите это прямо: «помню, что метод называется иначе, сейчас гляну подсказку редактора». Молчаливый поиск по памяти выглядит так же, как зависание на алгоритме.
11:00, красный тест
Падает случай из одного элемента, который встречается один раз. Вслух, до того как стереть строку: «я кладу в ответ всякого, кого внутренний цикл увидел хотя бы раз, включая его самого. Счетчик должен быть больше одного. Одиночный b я сейчас ошибочно возвращаю.»
Поправка — одно сравнение. Решение целиком не стирают. Интервьюер на этом месте смотрит, умеете ли вы локализовать ошибку. Героическое переписывание с нуля прячет эту проверку.
14:00, случай, который вы сами добавите
«Добавлю тест: a, a, a. Ожидаю один a, не три. И тест на два разных дубля: a, b, a, b. Ожидаю a и b в любом порядке.»
Свои примеры показывают, что вы думаете о крае, а не только гоняете тот, что дали в условии. Двух хватает. Пять тестов подряд без слов снова превращают сессию в тишину.
18:00, цена того, что написано
«Рабочий вариант есть, тесты зелёные. Цена — квадрат от длины списка, память на ответ. Если бы объём был большим, я бы за один проход складывал идентификаторы в множество уже виденных и во второе — тех, кого уже отдал в ответ. Память вырастет на размер уникальных строк, время станет линейным. Сейчас этого не пишу: вы сказали, что квадрата достаточно.»
Интервьюер часто кивает и на этом заканчивает. Иногда просит наговорить улучшение без кода. У вас оно уже сказано на третьей минуте, остаётся повторить короче.
Если на третьей минуте пусто
Не набирайте циклы наугад до одиннадцатой. Скажите, что именно не складывается: «не понимаю, считать частоту или просто факт повтора». Это разные задачи, и интервьюер обычно рад выбрать. Что говорить, когда не приходит даже тупой вариант, — в заметке что делать, если застрял на задаче.
Лайв-кодинг — кусок задачи внутри технического собеса, после знакомства и разбора опыта. Синтаксис языка на этом куске проверяют меньше, чем способность не исчезать из разговора, пока на экране ещё нет зелёных тестов.
Скачать Fair Assist — Windows и Mac, 15 минут после входа.
