LRU-кэш
Вытесняет то, к чему дольше всего не обращались.
1class LRUCache {2 private map = new Map<string, number>()3 4 constructor(private capacity: number) {}5 6 get(key: string): number | undefined {7 if (!this.map.has(key)) return undefined8 const value = this.map.get(key)!9 this.map.delete(key)10 this.map.set(key, value) // переустановка = «недавно использован»11 return value12 }13 14 put(key: string, value: number): void {15 this.map.delete(key)16 this.map.set(key, value)17 if (this.map.size > this.capacity) {18 const oldest = this.map.keys().next().value19 this.map.delete(oldest)20 }21 }22}Проблема
Вытесняет то, к чему дольше всего не обращались.
Что вы видите
Ряд ключей: get поднимает ключ в «свежие», переполнение выталкивает хвост.
Как это работает
Map с переустановкой: свежие в конце, старые в начале. O(1) на операцию. Кэши страниц, картинок, DNS.
Пошаговый разбор
- 01
get HIT
Ключ переустанавливается — свежий.
- 02
Переполнение
Выталкивается самый старый.
- 03
O(1)
Map + двусвязный список.
Complexity и ограничения
См. complexity в шапке страницы.
Edge cases
- Пустой вход
Корректно завершается без лишних шагов.
- Вырожденный случай
Минимум работы — сразу ответ.
Где встречается в реальности
Продукт
Классический приём в реальных системах.
Собеседования
Стандартный вопрос на понимание структуры.
Связанные алгоритмы
«Почему кэш помнит последнее, а не частое»
Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.
Shorts 9:16
Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.