# Как готовиться к FAANG без выгорания от LeetCode

> Практичная система подготовки к FAANG: интервальное решение задач, короткий список паттернов и пробные интервью вместе с полной занятостью.

Подготовка к собеседованию в FAANG проваливается, когда превращается во вторую работу на полную ставку. Решая сотни задач на LeetCode подряд, вы ощущаете прогресс, но часто тренируете лишь узнавание знакомых условий, усталость и вредную привычку искать заученный трюк до того, как разобрались в задаче. Работающему инженеру нужна более компактная система: освоить ограниченный набор паттернов, вспоминать их через растущие интервалы и проверять все навыки собеседования в условиях реалистичного дефицита времени.

Цель не в количестве решенных задач. Вам нужно стабильно справляться с незнакомым условием, пока другой человек наблюдает, задает вопросы и меняет одно из ограничений. Для этого надо уточнить задачу, выбрать структуру данных, написать правильный код, проверить его, объяснить компромиссы и восстановиться после неудачной первой идеи. На такую подготовку хватит шести сосредоточенных часов в неделю. Ради нее не придется жертвовать каждым вечером на протяжении трех месяцев.

## Сначала определите формат собеседования

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

На официальной странице Amazon с темами собеседований для разработчиков есть полезное различие, которое кандидаты часто упускают. Там сказано, что интервьюеры оценивают умение применять знания для эффективного решения задач, а не способность запомнить все детали. В руководстве для SDE II также требуют синтаксически правильный код, внимание к граничным случаям и проверку недопустимых входных данных. Я согласен с этим акцентом, но сформулировал бы жестче: если вы можете воспроизвести решение только после названия паттерна, вы пока не умеете применять это знание.

Составьте карту цикла на одной странице. Для каждого этапа запишите формат, ожидаемую длительность, вероятные области оценки и свою уверенность по шкале от одного до пяти. Затем распределите недельное время по рискам, а не по тревоге. Если на работе вы постоянно проектируете распределенные системы, но застываете перед общим редактором кода, еще одно видео о проектировании станет комфортной имитацией учебы. Отдайте это время тренировке программирования. Если вы идете на старшую позицию и ни разу не репетировали обсуждение архитектуры, каждый час на массивах столь же неуместен.

Назначайте дату только после исходной проверки. Проведите одно пробное интервью по программированию, набросайте один проект системы и запишите две поведенческие истории, прежде чем выбирать неделю собеседования. Для многих работающих кандидатов разумно закладывать от восьми до двенадцати недель, но это не закон. Кандидату, который уверенно решает задачи средней сложности, может хватить четырех недель тренировки формата. Тому, кто возвращается к структурам данных после нескольких лет в управлении, могут понадобиться шестнадцать. Решает исходный уровень.

## Короткий список паттернов лучше огромной очереди задач

Хороший список паттернов содержит правила выбора, а не одни названия тем. Слово «графы» слишком широкое. Фраза «используйте поиск в ширину для кратчайшего пути в невзвешенном графе» подсказывает, какие признаки должны привести вас к методу. Список должен быть достаточно коротким для регулярного повторения и достаточно широким для основных структур, которые встречаются на обычных собеседованиях разработчиков.

Большинству кандидатов я предлагаю начать с таких групп:

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

Этот перечень не обещает, что все компании берут вопросы из одного каталога. Он помогает упорядочить практику. Добавляйте материал по специальности только после разговора с рекрутером. Кандидату во фронтенд могут понадобиться поведение браузера и реализация интерфейса. Специалисту по машинному обучению могут задать вопросы о вероятностях, выборе моделей и данных. Мобильный разработчик может столкнуться с параллельностью или API платформы.

Для каждого паттерна запишите сигнал к применению, стандартный подход, частую ловушку и две показательные задачи. Для скользящего окна сигналом будет непрерывный диапазон с условием, которое можно поддерживать при движении границ. Ловушка возникает, когда метод натягивают на условие, которое не меняется монотонно вместе с окном. Для топологической сортировки сигналом служит порядок зависимостей в ориентированном графе. Ловушка состоит в том, что кандидат возвращает частичный порядок, не проверив цикл.

Ограничьте первый список примерно тридцатью показательными задачами. Это ограничение, а не волшебное число. Каждая задача должна учить отдельному решению или отдельному виду ошибки. Заменяйте повторы вместо того, чтобы раздувать очередь. Когда научитесь вспоминать и реализовывать показательные решения, добавьте варианты, которые ломают ваши предположения. Вторая почти одинаковая задача дает мало пользы. Вариант, где невзвешенный граф становится взвешенным, покажет, поняли ли вы причину выбора алгоритма.

## Интервальное воспроизведение превращает решения в рабочую память

Повторное решение после паузы полезнее, чем три прочтения разбора за один вечер. Исследования Генри Рёдигера и Джеффри Карпике о практике воспроизведения показали, что проверка памяти улучшает последующее запоминание по сравнению с дополнительным чтением. Николас Сепеда и его коллеги изучили распределенную практику в разных учебных условиях и обнаружили устойчивую пользу интервалов. Собеседование по программированию не похоже на тест словарного запаса, поэтому исследования не дают идеальный календарь. Они подтверждают сам механизм: вспомните подход без подсказок, получите обратную связь и вернитесь к задаче после того, как часть материала начала забываться.

Пройдите каждую показательную задачу четыре раза. В нулевой день решите или изучите ее так, чтобы суметь объяснить инвариант и написать правильный код. На второй день откройте пустой редактор и запишите подход до программирования. Примерно на седьмой день решите задачу с умеренным ограничением времени. Примерно на двадцать первый день вспомните ее среди смешанного набора, не видя названия паттерна. Меняйте интервал по результату, не подчиняйтесь календарю вслепую.

Записывайте попытку в компактном виде, по которому легко искать. Этого фрагмента YAML достаточно:

```yaml
problem: longest-substring-without-repeats
pattern: sliding-window
last_attempt: 2026-08-09
result: shaky
failure: moved-left-pointer-backward
next_review: 2026-08-11
proof: each-character-index-keeps-left-bound-monotonic
```

Поля `failure` и `proof` важнее уровня сложности. Результат «неуверенно» означает, что вы получили правильный ответ, но воспользовались подсказкой, вышли за время, не смогли обосновать сложность или пропустили тест, который выявил бы ошибку. Доказательство одной фразой объясняет, почему подход работает. Если не можете написать его простыми словами, скорее всего, вы скопировали последовательность действий, но не поняли инвариант.

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

## Шесть осмысленных часов помещаются рядом с полной занятостью

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

Реалистичное шестичасовое расписание выглядит так:

1. Понедельник, 45 минут: вспомнить и решить две подошедшие к сроку задачи в пустом редакторе.
2. Вторник, 60 минут: изучить один новый паттерн или исправить одну слабую группу.
3. Четверг, 45 минут: решить одну незнакомую задачу и разобрать принятое решение, а не только код.
4. Суббота, 120 минут: провести пробное интервью по программированию и сразу разобрать его.
5. Воскресенье, 90 минут: потренировать проектирование систем или поведенческую часть, затем запланировать повторения.

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

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

Учитывайте запас энергии. Ставьте незнакомые задачи на то время суток, когда еще можете рассуждать. Периоды с низкой энергией подходят для разбора записи пробного интервью, правки поведенческой истории или чтения официального руководства по формату. Кандидатам с детьми, дежурствами или долгой дорогой могут лучше подойти четыре блока по 35 минут вместо двух длинных занятий в будни. Сохраните функции занятий, даже если меняете календарь.

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

## Сначала объяснение, потом скорость

Лучшее правило практики ограничивает время борьбы с задачей, но не превращает каждую попытку в гонку. Получив незнакомую задачу средней сложности, потратьте первые минуты на уточнение входных данных, ограничений и примеров. Затем озвучьте простой правильный подход, даже если он медленный. Найдите узкое место и улучшите решение. Интервьюер может проследить такую последовательность, но не может оценить мысли, которые вы не произнесли.

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

Всегда применяйте один критерий завершения:

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

Разберем частую ошибку со скользящим окном. Кандидат хранит последний индекс каждого символа и переносит левую границу в `last_seen[c] + 1`. Когда повторившийся символ находится до текущего окна, такое присваивание двигает границу назад и впускает недопустимые символы. Исправление выглядит как `left = max(left, last_seen[c] + 1)`. Однако учить надо не эту строку. Инвариант говорит, что `left` никогда не уменьшается, а в текущем окне нет повторов. Запишите инвариант и назначьте вариант задачи.

Чтение редакционного решения сразу после затруднения популярно, потому что снимает дискомфорт и оставляет аккуратный конспект. При постоянном повторении это слабая практика. Попробуйте сами, возьмите ограниченную подсказку, закончите, закройте источник и восстановите решение. Восстановление показывает, осталось ли объяснение в памяти или только показалось знакомым.

Классифицируйте промахи по причинам, потому что неправильный ответ не всегда требует нового урока по алгоритмам. Если подход был верным, но вы ошиблись на единицу, назначьте короткую тренировку реализации с граничными случаями. Если не смогли выбрать подход, вернитесь к сигналу паттерна и сравните его с соседним паттерном. Если решили правильно, но молчали пятнадцать минут, повторите ту же задачу с озвучиванием решений. Если проигнорировали уточненное ограничение, тренируйтесь повторять ограничения до предложения кода. Одна оценка не может назначить все четыре вида исправлений.

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

После успешного решения задайте один дополнительный вопрос, меняющий ограничение. Что изменится, если данные поступают потоком? Что делать, если память не может расти вместе с объемом входа? Что произойдет, если ребра имеют вес? А если повторяющиеся значения разрешены? Реализовывать каждое расширение не нужно. За пять минут объясните, какое предположение перестало работать и что придется изменить. Это полезнее спешного перехода к еще одной несвязанной простой задаче и готовит к моменту, когда интервьюер изменит условие после первого решения.

## Частота пробных интервью должна расти

Пробные интервью стоит начинать достаточно рано, чтобы они успели изменить ваши привычки, а ближе к настоящему циклу проводить чаще. Если ждать, пока вы «закончите LeetCode», то часть с коммуникацией останется непроверенной. Закончить ее все равно невозможно. Проведите первую диагностическую репетицию на первой неделе, когда результат еще может изменить план.

В середине подготовки назначайте одно пробное интервью каждые семь-десять дней. В последние две-три недели проводите два в неделю, если работа и восстановление позволяют. Как минимум половину делайте вживую с другим человеком. Самостоятельные записи помогают дисциплинировать речь, но не воспроизводят перебивания, неоднозначные ответы и давление от присутствия наблюдателя во время отладки.

Пробное интервью по программированию должно повторять целевые условия: общий редактор, отсутствие автодополнения, если его не будет на интервью, видимый таймер и выбранный вами язык. Разрешите интервьюеру молчать. Друзья часто слишком рано спасают кандидата, потому что им неловко от паузы. После занятия оцените свидетельства в четырех категориях: постановка задачи, выбор алгоритма, реализация и проверка. Одна общая оценка скрывает следующий объект тренировки.

Разберите запись или заметки в течение суток. Выберите не более двух исправлений для следующего интервью. Если попытаться изменить семь привычек одновременно, под давлением вы не вспомните ни одну. Полезная поправка конкретна: «назвать инвариант цикла до написания цикла» или «проследить один неудачный пример до изменения кода». Фраза «лучше общаться» не может направить занятие.

Не используйте пробные интервью ради прогнозов о прохождении. Разные интервьюеры и наборы вопросов создают слишком много шума. Ищите повторяющиеся ошибки. Три репетиции с поспешным тестированием расскажут больше, чем чужая оценка шансов в процентах. Когда два последовательных пробных интервью проходят чисто в целевом формате, появляется основание назначать дату. Одного удачного раза мало.

## Программирование не должно забирать всю подготовку

Опытные кандидаты часто уделяют алгоритмам слишком много времени из-за немедленной обратной связи и пренебрегают проектированием систем и поведенческими этапами, на которых определяют уровень. Делите время по карте цикла. Для опытного инженера широкого профиля с интервью по программированию, архитектуре и поведению можно сначала отдать половину времени коду, четверть архитектуре и четверть историям. Меняйте доли, когда пробные интервью дают другие данные.

Практика проектирования должна порождать решения, а не схемы архитектуры, скопированные из видео. Возьмите одно условие, уточните масштаб и требования к надежности, определите основную модель данных и интерфейсы, набросайте критический путь, найдите узкое место и обсудите поведение при отказе. Тренируйтесь обосновывать, зачем здесь очередь, кеш, база данных или разделение данных. Если каждый проект содержит модные компоненты без требующей их нагрузки, интервьюер это заметит.

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

Глубину резюме тоже стоит отрепетировать. Любая технология, метрика или фраза о лидерстве на странице может стать темой вопроса. Попросите коллегу выбрать пункт и продолжать спрашивать «почему». Если после второго вопроса ответ становится расплывчатым, исправьте формулировку или освежите детали. Преувеличенный масштаб вредит намного сильнее, чем честное признание того, что частью системы владел другой инженер.

Подготовку под конкретную компанию оставьте ближе к концу, когда основные навыки уже работают. Прочитайте актуальные официальные материалы для кандидатов, подтвердите цикл у рекрутера и сопоставьте свои истории с заявленными областями оценки компании, не пытаясь вместить все в один рассказ. Официальные рекомендации меняются, поэтому опирайтесь на материалы для вашего процесса, а не на старый пост на форуме.

## Выгорание сообщает об ошибке в нагрузке

Выгорание от LeetCode обычно проявляется снижением внимания, раздражением перед занятиями, навязчивым подсчетом задач, плохим сном и повторением ошибок в ранее знакомом материале. Считайте эти признаки данными о том, что учебная нагрузка превышает восстановление. Дополнительный объем в таком состоянии закрепляет небрежную работу.

Примените простую меру. На два полных дня откажитесь от любых материалов для интервью. На неделю вернитесь с половинным объемом, оставьте только подошедшие повторения и одно пробное интервью, уберите новые задачи. Если качество вернулось, повышайте нагрузку медленно. Если усталость продолжает влиять на работу, сон или обычную жизнь после снижения нагрузки, обратитесь к квалифицированному специалисту, а не объясняйте ее слабой дисциплиной.

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

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

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

## Готовность подтверждают результаты, а не серия задач

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

Поставьте четыре условия готовности. Во-первых, два недавних пробных интервью по программированию проходят в целевом формате без серьезной помощи. Во-вторых, среди основных групп паттернов не осталось полностью незнакомых. В-третьих, вы можете рассказать основные поведенческие истории и углубиться в них без заученного текста. В-четвертых, вы способны взять полный выходной без паники о том, что знания исчезнут. Последнее условие проверяет, создала ли система устойчивую память или зависимость от ежедневного марафона.

Если дата закреплена, а условия не выполнены, разумно сузьте охват. Отдайте приоритет распространенным группам паттернов, чистой реализации и коммуникации. Не пытайтесь лихорадочно обойти редкие сложные задачи. При слабом проектировании проведите два полных обсуждения и сравните их с критериями оценки. При пробелах в поведенческих ответах исправьте истории с самыми слабыми доказательствами. Точный выбор может улучшить результат, а попытка срочно выучить все не поможет.

Основатели иногда копируют интервью FAANG при найме небольшой продуктовой команды, а потом неделями проверяют умение решать головоломки, которое им не требуется. Во время Team & AI Audit на oleg.is я разбираю это несоответствие, изучая команду, работу и влияние ИИ на кадровый план. Кандидат не управляет циклом компании, зато руководитель найма может перестать копировать процесс, который не предсказывает успех в реальной работе.

Не добавляйте материал в последние сорок восемь часов. Проведите легкое повторение, проверьте организационные детали, подготовьте вопросы интервьюеру и выспитесь. В собеседовании все равно останется неопределенность. Подготовка сработала, если на неопределенность вы отвечаете методом: уточнить, смоделировать, выбрать, реализовать, проверить и исправить. Этот навык намного долговечнее воспоминания о том, какая задача под каким номером была похожа на условие прошлого вторника.
