Вопрос проверяет понимание стратегий управления памятью в кэше, что необходимо для предотвращения утечек памяти и оптимизации производительности приложений.
Кэширование — это техника хранения временных данных для ускорения доступа, но неограниченный рост кэша может привести к исчерпанию памяти. Поэтому необходимо управлять его размером, применяя политики вытеснения (eviction policies).
class LRUCache {
constructor(capacity) {
this.capacity = capacity;
this.cache = new Map(); // Хранит ключ-значение
}
get(key) {
if (!this.cache.has(key)) return -1;
const value = this.cache.get(key);
// Обновляем порядок: удаляем и вставляем заново
this.cache.delete(key);
this.cache.set(key, value);
return value;
}
put(key, value) {
if (this.cache.has(key)) {
this.cache.delete(key);
} else if (this.cache.size >= this.capacity) {
// Удаляем самый старый элемент (первый в Map)
const oldestKey = this.cache.keys().next().value;
this.cache.delete(oldestKey);
}
this.cache.set(key, value);
}
}
// Использование
const cache = new LRUCache(2);
cache.put('a', 1);
cache.put('b', 2);
console.log(cache.get('a')); // 1 (обновляет порядок)
cache.put('c', 3); // Вытесняет 'b', так как он стал самым старым
console.log(cache.get('b')); // -1 (не найден)В реальных приложениях часто используют готовые библиотеки, например, lru-cache для Node.js или встроенные механизмы в фреймворках (Redis с политиками вытеснения).
Вывод: Ограничение размера кэша с политикой вытеснения (особенно LRU) критически важно для долгосрочной стабильности приложений, работающих с большими объёмами временных данных, так как предотвращает утечки памяти и обеспечивает эффективное использование ресурсов.
Уровень
Рейтинг:
4
Сложность:
5
Навыки
JavaScript
Node.js
Ключевые слова
Подпишись на iOS Developer в телеграм