面试题答案
一键面试以Python为例:
- 数据结构:
- 使用
OrderedDict
来实现MRU缓存。OrderedDict
是Python标准库collections
模块中的一个字典子类,它记住元素插入的顺序,并且在对字典进行更新操作时,会将刚访问或插入的元素移动到字典的末尾,这一特性正好符合MRU缓存策略。
- 使用
- 主要操作逻辑:
- 获取数据(
get
操作):- 当请求缓存中的数据时,首先检查缓存中是否存在该数据。
- 如果存在,将该数据移动到
OrderedDict
的末尾(表示最近使用),然后返回该数据。 - 如果不存在,返回
None
(或者根据业务需求返回其他表示未命中的值)。
- 插入数据(
put
操作):- 当插入新数据时,首先检查缓存是否已满。
- 如果缓存已满,移除
OrderedDict
中最早插入的元素(也就是字典的第一个元素)。 - 然后将新数据插入到
OrderedDict
的末尾。
- 获取数据(
以下是Python代码示例:
from collections import OrderedDict
class MRUCache:
def __init__(self, capacity):
self.capacity = capacity
self.cache = OrderedDict()
def get(self, key):
if key not in self.cache:
return None
self.cache.move_to_end(key)
return self.cache[key]
def put(self, key, value):
if key in self.cache:
self.cache.move_to_end(key)
else:
if len(self.cache) >= self.capacity:
self.cache.popitem(last=False)
self.cache[key] = value
你可以这样使用这个缓存类:
cache = MRUCache(2)
cache.put(1, 1)
cache.put(2, 2)
print(cache.get(1))
cache.put(3, 3)
print(cache.get(2))
cache.put(4, 4)
print(cache.get(1))
print(cache.get(3))
print(cache.get(4))
上述代码实现了一个简单的MRU缓存,MRUCache
类在初始化时接受一个capacity
参数表示缓存的容量。get
方法用于获取缓存数据并将其标记为最近使用,put
方法用于插入或更新缓存数据,同时在缓存满时移除最早使用的数据。