SprintCode.pro

Подготовка к алгоритмическим задачам

Super

Код без IDE: как готовиться к whiteboard-интервью

10 мин чтения
собеседование
подготовка
коммуникация

Коротко

Что пропадаетЧем компенсировать
Автодополнениезаучить синтаксис базовых операций
Подсветка ошибокпроверять код глазами построчно
Запуск и отладкатрассировка на бумаге
Быстрое переписываниепродумывать структуру до кода

Почему это сложнее, чем кажется

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

Вы не помните, как пишется сортировка с ключом — вы набираете три буквы и жмёте Tab. Вы не проверяете границы цикла — их проверяет линтер. Вы не держите в голове структуру — её показывает навигация по файлу.

Убрать инструменты — значит обнаружить, на что вы на самом деле опирались. Обычно обнаружение неприятное.

Где это встречается

Whiteboard в буквальном смысле — маркерная доска в офисе. Сейчас редкость, но в некоторых компаниях осталось.

Общий текстовый документ — самый частый вариант в удалённых интервью. Google Docs или простой редактор без подсветки и запуска.

Онлайн-редакторы с отключённым запуском — код виден интервьюеру, но выполнить нельзя.

Скрининг по телефону с кодом в чате.

Общее у всех: обратной связи от машины нет. Единственный компилятор — ваша голова и глаза интервьюера.

Что тренировать

1. Синтаксис базовых операций

Составьте список того, что используете постоянно, и убедитесь, что помните наизусть.

Для Python:

sorted(items, key=lambda x: x[1], reverse=True) d = defaultdict(list) counter = Counter(nums) heapq.heappush(heap, (priority, item)) "".join(chars) enumerate(items, start=1) zip(a, b)

Для JavaScript:

arr.sort((a, b) => a - b) new Map(); map.get(k); map.set(k, v) new Set([...]) arr.reduce((acc, x) => acc + x, 0) Object.entries(obj)

Звучит примитивно, но именно на этом спотыкаются: человек знает алгоритм и десять секунд вспоминает, как пишется компаратор.

2. Писать без подсветки

Практический приём: решайте задачи в обычном блокноте. Не в VS Code с отключёнными плагинами, а именно в текстовом редакторе без ничего.

Через десять задач вы начнёте замечать, что стали внимательнее к скобкам и точкам с запятой — просто потому, что за вас их больше никто не считает.

3. Трассировка на бумаге

Ключевой навык. Запустить код нельзя, значит проверять придётся мысленно, а мысленно человек проверяет плохо — он видит то, что хотел написать.

Метод: возьмите маленький вход и выпишите значения переменных на каждой итерации.

nums = [3, 1, 2], target = 4

i=0: x=3, need=1, seen={} → нет, seen={3:0}
i=1: x=1, need=3, seen={3:0} → есть! return [0, 1]

Три строки, зато ошибка на границе видна сразу. Делайте это вслух — интервьюеру это тоже нравится.

Пройди собеседование в топ-компанию
Платформа для подготовки

Решай алгоритмические задачи как профи

✓ Популярные алгоритмы✓ Разбор решений✓ AI помощь
Начать сейчас
Программист за работой

4. Структура до кода

Когда переписывать дорого, планировать выгодно. Перед тем как писать, проговорите:

  • какие переменные понадобятся;
  • какой основной цикл;
  • что возвращаем.

Тридцать секунд планирования экономят пять минут переписывания.

Приёмы во время интервью

Оставляйте место. На доске пишите с большими отступами между строками — почти наверняка придётся что-то вставить. В документе — пустые строки между блоками.

Пишите сверху вниз, а не набело. Сначала скелет: сигнатура, основной цикл, return. Потом наполнение. Так вы не потеряете структуру, застряв в деталях.

def twoSum(nums, target): # TODO: словарь виденных for i, x in enumerate(nums): # TODO: проверить дополнение pass return []

Заглушки — нормальный приём. Интервьюер видит, что структура у вас в голове есть.

Не стесняйтесь псевдокода. «Здесь я бы отсортировал по второму элементу, синтаксис не помню точно» — абсолютно приемлемо. Никто не проверяет память на API.

Проговаривайте, что пишете. Без подсветки интервьюеру сложнее следить за вашим кодом, и комментарий вслух помогает обоим.

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

Частые ошибки

Мелкий почерк на доске. Через десять строк вы упрётесь в край и начнёте писать поверх. Пишите крупно и в верхней трети — низ доски плохо виден.

Молчаливое написание. Без запуска кода единственный канал связи — ваша речь. Молчащий кандидат оставляет интервьюера в темноте.

Стирание и переписывание с нуля. Признак того, что структуру не продумали. Лучше поправить существующее, комментируя, что и почему меняете.

Паника из-за синтаксиса. Забыли, как пишется что-то — скажите вслух и продолжайте. Остановка на этом месте выглядит хуже, чем пробел в памяти.

Игнорирование крайних случаев. Без тестов их некому проверить, кроме вас. Проговорите вслух: пустой ввод, один элемент, дубликаты.

Как это тренировать за неделю

День 1–2. Выпишите список базовых конструкций своего языка и убедитесь, что помните наизусть. Проверьте себя без подсказок.

День 3–5. Решайте по две задачи в день в чистом блокноте. Обязательно с трассировкой на бумаге в конце.

День 6–7. То же самое, но вслух и с таймером на 40 минут. Если есть партнёр — с ним.

Неделя такой практики закрывает большую часть проблемы. Дальше поддерживайте по одной задаче в блокноте раз в несколько дней.

Что запомнить

  • Без IDE обнаруживается, на сколько подсказок вы полагались, — обычно на больше, чем думали.
  • Выучите наизусть синтаксис базовых операций своего языка.
  • Трассировка на бумаге заменяет отладчик: выписывайте переменные по итерациям.
  • Пишите скелет с заглушками, потом наполняйте — так не теряется структура.
  • Псевдокод и «синтаксис не помню точно» — нормально, память на API не проверяют.
  • Тренируйтесь в обычном блокноте, а не в IDE с отключёнными плагинами.

Задачи по теме