-
-
Notifications
You must be signed in to change notification settings - Fork 260
Open
Description
假设你有一个缓存类 TipCache,用于在内存中存储键值对。以下是该类的初始实现:
class TipCache {
constructor() {
this._cachePool = {};
}
set(key, value) {
this._cachePool[key] = value;
}
get(key) {
return this._cachePool[key];
}
}
export default new TipCache();
任务1:基于上述 TipCache 类,请你完成以下功能:
- 实现一个 delete 方法,能够根据键删除缓存中的数据。
- 实现一个 has 方法,检查缓存中是否存在某个键。
任务2:为该缓存类增加以下高级功能:
- 自动过期机制:增加缓存项的过期时间参数,支持在设置缓存项时传入一个过期时间(以毫秒为单位)。如果缓存项过期,get 方法应该返回 null 或 undefined。
- LRU (Least Recently Used) 淘汰策略:为 TipCache 类添加 LRU 淘汰策略。在缓存空间满时,删除最久未使用的缓存项。你需要增加一个容量限制参数 maxSize,当缓存数量超过 maxSize 时,自动淘汰最近最少使用的缓存项。
任务3:编写单元测试,确保你的实现能够正确处理以下情况:
- 正常的 set 和 get 操作。
- 删除缓存项。
- 检查缓存项是否存在。
- 自动过期的缓存项。
- 当缓存满时,LRU 策略正确执行。
要求:
- 请使用原生 JavaScript 实现,不依赖第三方库。
- 代码需具备良好的可读性,并提供必要的注释说明。
- 所有代码需经过充分的单元测试,并保证通过。
提示
- 考虑使用 Map 来实现 LRU 淘汰策略。
- 过期机制可以通过 setTimeout 或存储时间戳来实现。
Metadata
Metadata
Assignees
Labels
No labels