Этапы собеседования
Алгоритмы на собеседовании: какие темы спрашивают и как готовиться
Содержание
Алгоритмическая секция это одна-две задачи на 40-60 минут, где нужно найти эффективное решение, написать код и оценить сложность. Большинство задач сводится к десятку паттернов: хеш-таблица, два указателя, скользящее окно, стек, бинарный поиск, обход дерева и графа, куча, динамическое программирование. Готовиться выгоднее по паттернам, а не по случайным задачам. Учитесь узнавать паттерн по признакам в условии.
Что проверяют
- Узнаёте ли вы паттерн задачи по условию
- Можете ли перейти от наивного решения к эффективному
- Правильно ли оцениваете сложность по времени и памяти
- Пишете ли код без ошибок на границах: пустой вход, один элемент, переполнение
- Проговариваете ли ход мысли и проверяете ли решение сами
Как проходит
- 1
Условие и уточнения
Размеры входа, диапазон значений, отсортирован ли массив, есть ли повторы. Размер входа подсказывает нужную сложность.
- 2
Примеры руками
Разберите обычный и краевой пример. Часто идея решения видна уже на этом шаге.
- 3
Наивное решение
Назовите его и его сложность. Это страховка и точка отсчёта.
- 4
Оптимизация
Подумайте, что лишнее считается повторно и какая структура данных это уберёт. Озвучьте итоговую сложность.
- 5
Код и проверка
Пишите, прогоните пример по коду, проверьте краевые случаи. Подробнее про процесс в разделе о лайвкодинге.
Паттерны: как узнать по условию
Ниже основные паттерны в порядке, в котором их удобно учить. Признак в условии помогает выбрать подход за первые минуты, а не перебирать всё подряд.
| Паттерн | Признак в условии | Пример задачи |
|---|---|---|
| Хеш-таблица | Найти пару, дубль, частоту, сгруппировать | Two Sum |
| Два указателя | Отсортированный массив, пара с суммой, палиндром, работа на месте | Палиндром двумя указателями |
| Скользящее окно | Непрерывный подмассив или подстрока с условием | Подстрока без повторов |
| Префиксные суммы | Суммы на отрезках, число подмассивов с суммой k | Подотрезки с суммой K |
| Стек | Скобки, ближайший больший элемент, вложенность | Скобочная последовательность |
| Бинарный поиск | Отсортированные данные или поиск минимального подходящего ответа | Бинарный поиск |
| Связные списки | Разворот, цикл, середина, слияние списков | Разворот списка |
| Деревья | Иерархия, глубина, обход, BST | Глубина оргструктуры |
| Графы: BFS и DFS | Связи, кратчайший путь без весов, острова на карте | Острова на карте |
| Куча | Top-K, медиана потока, слияние k списков | k самых крупных платежей |
| Интервалы | Отрезки времени, пересечения, переговорки | Объединить отрезки |
| Динамическое программирование | Число способов, минимум или максимум, перекрывающиеся подзадачи | Подъём по лестнице |
| Перебор с возвратом | Все варианты: перестановки, подмножества, расстановки | Все скобочные последовательности |
Реже встречаются жадные алгоритмы, биты и матрицы. Их стоит знать на базовом уровне после основных паттернов.
Сложность: O-нотация без страха
O-нотация описывает, как растёт время или память с ростом входа. На собеседовании спрашивают почти всегда, поэтому сложность нужно уметь оценить за минуту.
| Сложность | Где встречается | Подходит для n до |
|---|---|---|
| O(1) | Доступ по индексу, операции с хеш-таблицей в среднем | Любого |
| O(log n) | Бинарный поиск, операции с кучей и сбалансированным деревом | Любого |
| O(n) | Один проход, хеш-таблица, два указателя, окно | Порядка 10⁷-10⁸ |
| O(n log n) | Сортировка, n операций с кучей | Порядка 10⁶ |
| O(n²) | Два вложенных цикла | Порядка 10³-10⁴ |
| O(2ⁿ), O(n!) | Перебор подмножеств и перестановок | Порядка 20 и 10 |
Не забывайте про память: рекурсия занимает стек глубиной до n, хеш-таблица хранит до n элементов. Скажите и это, когда называете итоговую сложность.
Частые вопросы с разбором
Как оценить сложность решения?
Объясните метод двух указателей
Объясните скользящее окно
Объясните BFS и его сложность
Как найти top-K элементов?
Объясните задачу о размене монет
План подготовки по паттернам
Учите паттерны по одному: короткая теория, 3-5 задач на паттерн, затем смешанные задачи, где паттерн нужно угадать самому. Порядок ниже идёт от простого к сложному и опирается на предыдущие темы.
- Сложность и базовые структуры: массив, строка, хеш-таблица.
- Два указателя, скользящее окно, префиксные суммы.
- Стек и бинарный поиск, включая поиск по ответу.
- Связные списки и деревья: рекурсия и обходы.
- Графы: BFS, DFS, компоненты связности, топологическая сортировка.
- Куча и интервалы.
- Динамическое программирование и перебор с возвратом.
- Смешанные задачи на время, без подсказки о паттерне.
Если до собеседования мало времени, сосредоточьтесь на первых трёх пунктах и деревьях: эти темы встречаются чаще всего. Динамика и сложные графы чаще нужны там, где алгоритмическая секция строгая.
Сколько задач решать
Единой нормы нет, и любая цифра будет условной. Честный ориентир такой: важнее, чтобы вы уверенно решали новые задачи по каждому паттерну, чем общее число решённых.
| Цель | Ориентир |
|---|---|
| Освоить паттерн | 3-5 задач разной сложности, решённых без подсказки |
| Закрепить | Через несколько дней решить одну задачу паттерна заново, с нуля |
| Проверить готовность | Серия незнакомых задач на время, где паттерн нужно узнать самому |
Если вы стабильно решаете незнакомую задачу средней сложности за 30-40 минут с объяснением вслух, вы готовы к большинству алгоритмических секций. Перед этапом посмотрите, как секция устроена в конкретной компании, в разделе компаний.
Вопросы из базы Техпрогона
Частые вопросы этого этапа с ответом и разбором. Откройте любой и попробуйте ответить сами.
- Как оценить сложность решенияАлгоритмы
- Объясни Two Sum через хешАлгоритмы
- Объясни метод двух указателейАлгоритмы
- Объясни разворот спискаАлгоритмы
- Объясни слияние интерваловАлгоритмы
- Объясни скользящее окноАлгоритмы
- Объясни рекурсию на деревьяхАлгоритмы
- Объясни BFS и его сложностьАлгоритмы
- Объясни задачу о размене монетАлгоритмы
- Первый повторный заказАлгоритмы
- Общие элементы двух отсортированных списковАлгоритмы
- Лучшие k дней подряд по выручкеАлгоритмы
Частые ошибки
- Решать сотни случайных задач без разбора, какой в них паттерн
- Сразу писать код, не разобрав пример руками
- Не назвать наивное решение и уйти в тишину в поисках идеального
- Ошибаться в сложности: забыть про сортировку или поиск внутри цикла
- Не проверить пустой массив, один элемент и повторы
- Учить решения наизусть: на смене условия такой подход ломается
Чек-лист подготовки
- Могу оценить сложность любого своего решения за минуту
- По каждому основному паттерну решил 3-5 задач без подсказки
- Умею узнавать паттерн по признакам в условии
- Решил несколько смешанных задач на время без подсказки о теме
- Проговариваю вслух шаги: уточнения, примеры, подход, код, проверка
- Знаю стандартные структуры своего языка: словарь, множество, очередь, куча
- Прошёл хотя бы один мок с живым интервьюером
Как тренировать этот этап в Техпрогоне
- Уроки трека Алгоритмы по каждому паттерну: короткая теория и разбор задач
- Задачи с автопроверкой на открытых и скрытых тестах: JS, TS и Python в браузере, другие языки через раннер на сервере
- Устные вопросы «объясни паттерн» с чек-листом тезисов: тренирует объяснение сложности вслух
- Лестница стресса: «Наедине» с подсказками, «Вслух» с обязательными уточнениями и подходом до кода, «Под давлением» с таймером
- Живой мок по ссылке: друг видит условие, эталон и рубрику процесса и ставит оценки
- Контест в Рывке: 4 задачи трека Алгоритмы на 2 часа общего таймера, итог по решённым задачам и штрафному времени
- Билеты по алгоритмам: вопросы на сложность и выбор подхода, сдан при двух ошибках и меньше
Частые вопросы
Нужны ли алгоритмы фронтенду и мобильным разработчикам?
На каком языке лучше решать алгоритмические задачи?
Что делать, если не узнал паттерн?
Нужно ли знать сортировки наизусть?
Сколько времени нужно на подготовку к алгоритмам с нуля?
Динамическое программирование спрашивают у junior?
Отрепетируйте алгоритмы до собеса
Уроки, билеты, устные вопросы с тезисами и мок вслух с таймером. Бесплатный тариф без ограничения по времени.
Другие этапы и разделы
Лайвкодинг
Понимаете ли вы задачу до того, как начали писать код
Техскрининг
Знаете ли вы базу своего стека без подсказок
System design
Умеете ли вы превратить расплывчатую задачу в список требований
Тестовое задание
Понимаете ли вы задачу и задаёте ли уточняющие вопросы
Все этапы собеседования
Схема найма от отклика до оффера и сроки
Что должен знать junior, middle, senior
Темы и частые вопросы по 30 профессиям
Как войти в IT с нуля
Выбор профессии и план обучения по шагам