Литкод на реальном собеседовании: почему 400 задач не спасают
Сюжет, который повторяется почти в каждой истории про отказ: человек уже решал эту задачу. Знал приём с двумя указателями. Потом интервьюер сказал «начинайте», и сорок минут исчезли в пустом редакторе. Не хватало не практики — не хватало практики под наблюдением.
Что на самом деле меняется в комнате
Дома вы решаете со всем снаряжением: перечитываете ограничения дважды, пролистываете к примерам, что-то пробуете, удаляете, и удаление никто не видит. Нет часов, которые вы чувствуете. Застряли на четыре минуты — эти четыре минуты ничего не стоили.
На собеседовании всё переворачивается. Ступор виден. Удалённую строку смотрели. И заметная часть внимания уходит на моделирование того, что о вас думает другой человек, — это внимание больше не работает над задачей.
Поэтому человек, решивший четыреста задач, всё равно застревает на сто седьмой. Задача не новая. Новые — условия.
В СНГ алгоритмическая секция — это в основном крупные продуктовые компании и собеседования на релокацию. Стоит выяснить заранее, какой формат у конкретной компании: от этого зависит, куда вкладывать подготовку.
Первые шестьдесят секунд решают остальное
Большинство начинает печатать сразу, потому что тишина ощущается как провал. Это худший возможный ход: вы привязываетесь к подходу раньше, чем поняли форму входных данных, и когда на двадцатой минуте окажется, что подход не тот, времени на возврат уже нет.
Сильные кандидаты тратят первую минуту вслух на три вещи: пересказывают задачу своими словами, называют ограничение, которое имеет значение, и говорят, что оптимизируют. «То есть нужны все пары с суммой target, массив отсортирован, n до ста тысяч — значит, O(n²) отпадает».
Эта фраза делает три работы сразу: подтверждает, что вы поняли вопрос; показывает, что рассуждение привязано к ограничениям; и покупает шестьдесят секунд на размышление, которые читаются как уверенность, а не как ступор.
Как сказать «пока не вижу» и не потерять комнату
Есть версия «застрял», которая стоит вам собеседования, и версия, которая не стоит. Разница в том, видит ли интервьюер, где именно вы находитесь.
Молчаливый ступор смертелен. Две минуты тишины — и человек напротив не может понять, думаете вы или тонете, поэтому предполагает худшее.
Проговорённый ступор переживается, а иногда даже идёт в плюс. «Перебор — очевидно O(n²). Я хочу разменять память на время и всё время тянусь к хеш-таблице, но пока не понял, что брать ключом». Вы сказали: направление есть, размен понимаю, не хватает одного конкретного шага. Именно в этот момент интервьюеры обычно дают подсказку — потому что вы задали реальный вопрос, а не сдались.
Часть, которая вообще не про алгоритмы
Спросите любого, кто провёл сотню собеседований, что отличает «берём» от «не берём» при одинаковом уровне — почти никто не назовёт оптимальное решение. Назовут что-то про то, можно ли с этим человеком работать сорок минут.
Спросил ли он про граничные случаи до того, как писать, или после того, как ему сказали? Когда первая идея сломалась — защищал её или отпустил? Получив подсказку — взял и пошёл дальше или начал спорить?
Ничего этого нет на литкоде. Всё это оценивается.
Как тренировать то, что действительно проверяют
Решать больше задач — значит тренировать ту половину, которая у вас уже есть. Чтобы тренировать вторую, меняйте условия, а не объём.
Решайте вслух, в одиночестве, с таймером. Первые десять минут это кажется абсурдом, потом перестаёт. Если вы не можете проговорить собственное рассуждение пустой комнате, с незнакомцем напротив не получится тем более.
Дальше возьмите задачи, которые уже решали, и решите заново с объяснением. Цель не ответ — ответ вы знаете. Цель — та фраза, которая выходит изо рта, пока вы думаете.
Три способа провалиться и как каждый выглядит
- Ступор. Вы прочитали задачу, ничего не пришло, и тишина накапливается: каждая секунда делает следующую тяжелее, потому что теперь вы ещё и думаете о том, сколько уже молчите. Выход механический, а не вдохновенный — начните описывать перебор, даже если он стыдный: «Самое очевидное — проверить все пары, это O(n²) и слишком медленно, но я начну отсюда и улучшу». Перебор вслух всегда лучше тишины, и часто именно он разблокирует настоящее решение, потому что вы сдвинулись.
- Неверная ставка. Вы фиксируете подход на второй минуте, на двадцать пятой обнаруживаете, что он не тянет дубликаты, и полосы для разгона уже нет. Это предотвращается раньше: до того как писать, скажите, что ваш подход предполагает. «Это работает, если значения уникальны — это гарантировано?» Интервьюер ответит, и вы обойдёте ловушку, которую он поставил.
- Молчаливая переписка. На десятой минуте вы понимаете, что структура не та, выделяете всё и удаляете. Снаружи это выглядит как паника. Проговорите — и это выглядит как решение: «Здесь всё запутывается, потому что я выбрал не тот контейнер. Переписываю на кучу, две минуты». То же действие, противоположное прочтение.
Когда вы действительно видите задачу впервые
Иногда задача по-настоящему незнакомая, и никакое проговаривание не рождает приём. Это случается с сильными инженерами и не означает автоматического отказа.
Работает — показать, как вы атакуете неизвестную задачу, потому что это и есть настоящая работа. Начните с наименьшего входа и решите руками. Выпишите n=1, n=2, n=3 и посмотрите, что между ними меняется. Говорите, что делаете, пока делаете. Закономерности всплывают из примеров гораздо чаще, чем из разглядывания условия, — а даже если не всплыли, интервьюер увидел, как вы дисциплинированно двигались под давлением. Это и есть большая часть того, зачем он пришёл.
Проигрывает уверенная выдумка: правдоподобно звучащий алгоритм, который не работает, поданный без оговорок. Интервьюер проверяет, конструкция рассыпается — и теперь он сомневается во всём остальном, что вы сказали.
Сложность: скажите до того, как спросят
Почти каждая секция кода заканчивается вариацией «какая сложность?» — и отвечать только по запросу это небольшая, но полностью избежная потеря. Это сигнал, что вы не думали о стоимости, пока писали.
Говорите по ходу. Когда тянетесь к хеш-таблице, скажите, что она покупает и что стоит: «Поиск становится константным ценой O(n) дополнительной памяти — здесь оправдано, потому что n большое, а память не ограничение». Теперь размен зафиксирован как ваше решение, а не как факт, который из вас вытянули.
И если интервьюер спрашивает, можно ли лучше, это обычно не подвох, а приглашение. Правильная первая реакция — уточнить, что оптимизировать: время, память или читаемость. Они тянут в разные стороны, и заметить это вслух — уже сигнал.
Как эта секция обычно устроена
Формат почти везде один: созвон, общий редактор — CoderPad, Codeshare, внутренний контест или просто демонстрация экрана с вашей IDE — и одна-две задачи на сорок пять минут. Автодополнение часто урезано, тесты запускаются не всегда, а иногда их нет вовсе.
Полезно знать, что интервьюер в этот момент не «слушает», а заполняет форму. Обычно в ней четыре строки: разобрался ли кандидат в задаче до того, как писать; насколько разумно рассуждал и объяснял ли выбор; написал ли работающий код без постоянных подсказок; и смог ли назвать размены, когда его о них спросили.
Из четырёх строк с кодом связана одна. Поэтому человек, молча написавший идеальное решение, регулярно получает меньше, чем тот, кто вслух проговорил решение похуже, сам нашёл в нём слабое место и улучшил его. Интервьюер может оценить только то, что до него дошло.
Отсюда же практический вывод про подсказку. Подсказка — не штраф и не признак провала: её дают, чтобы посмотреть, что вы с ней сделаете. Взять, сказать, как она меняет план, и пойти дальше — это плюс. Спорить с ней или проигнорировать и продолжить своё — минус, причём заметный, потому что ровно так же выглядит работа с ревью в команде.
Где здесь второй пилот
Interview Copilot слушает секцию и выкладывает структуру на экран, пока интервьюер ещё говорит: о чём на самом деле вопрос, какое ограничение вычёркивает подход, какой размен стоит назвать вслух. Это не решение, чтобы зачитать, — зачитанное решение очевидно любому, кто смотрит. Это опора, от которой вы говорите, когда пришёл пустой момент, а собственные слова ещё не вернулись.
FAQ
Почему люди, решившие сотни задач, всё равно проваливают собеседования?
Потому что в комнате проверяют то, чего практика не тренирует: говорить во время решения, принимать подсказку и восстанавливаться, когда первый подход рассыпался. Это отдельные навыки от «выдать правильное решение в одиночку и без таймера».
Что говорить, если задача незнакомая?
Сказать прямо и начать с перебора: «Эту не встречал — сделаю что-нибудь работающее, потом улучшу». Это нормально и ожидаемо; попытка сделать вид обычно заканчивается тишиной.
Нужно ли называть сложность, если не спросили?
Да. Фраза «здесь O(n log n) из-за сортировки, память O(n)» до вопроса закрывает строку в оценочной форме и показывает, что вы думаете о стоимости, а не только о результате.
Что делать, если от волнения наступил ступор?
Сделать выход механическим, а не ждать озарения: вслух описать самое очевидное решение, даже наивное. Речь запускает мышление обратно, а тишина только утяжеляет следующую секунду.
Снимают ли баллы за подсказку интервьюера?
Нет. Подсказку дают, чтобы посмотреть, что вы с ней сделаете. Взять её, сказать вслух, как она меняет план, и пойти дальше — это плюс. Спорить или проигнорировать и продолжить своё — минус, потому что так же выглядит работа с код-ревью в команде.