Вопрос проверяет общий алгоритмический кругозор и способность выбирать подходящий метод под задачу, а не просто “знать названия”.
Обычно в backend чаще встречаются не “олимпиадные” алгоритмы, а прикладные: хеш-таблицы, сортировки, поиск, очереди, кучи, скользящее окно и простые графовые обходы. Важно уметь объяснить, зачем выбран алгоритм и какова его сложность по времени и памяти. Также ценится понимание компромиссов: предрасчёт vs вычисление на лету, точность vs скорость, память vs latency. Если вы что-то применяли в проде, лучше привести короткий пример задачи и почему алгоритм подошёл.
Обычно ожидают не список из 50 пунктов, а 5-10 типовых вещей плюс 1-2 истории применения. Важно показать, что вы понимаете “класс алгоритма” и его пользу.
Поиск и работа с коллекциями
бинарный поиск
сортировка (и критерии выбора)
дедупликация по ключу
Структуры данных
map как хеш-таблица (поиск за O(1) в среднем)
heap/priority queue (очередь с приоритетом)
deque/queue для потоковой обработки
Потоковые приёмы
“скользящее окно” для метрик по интервалам
rate limiting (token bucket / leaky bucket)
подсчёты частот (frequency map)
Простые графовые вещи
BFS/DFS для зависимостей или связей
топологическая сортировка (если есть DAG: зависимости задач)
консистентное хеширование (распределение по шардам)
bloom filter (быстрая проверка “точно нет”)
выборка top-K (heap вместо полной сортировки)
Определение: Top-K — выбрать K лучших элементов без полной сортировки всего массива.
Сценарий:
“Нужно быстро показывать top-100 самых популярных объектов за час”
Подход:
агрегируем счётчики по ключу
храним top-K через heap или ZSET в Redis (если инфраструктура есть)
Плюс:
быстро, предсказуемо, можно обновлять инкрементально
Ожидаются прикладные алгоритмы и понимание компромиссов: что ускоряет чтение, что уменьшает память, что стабилизирует latency. Лучший ответ — 5-10 типовых классов + 1-2 реальных применения.