- 1
- 0
- 约6.05千字
- 约 17页
- 2026-02-01 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年工作信息后端开发工程师面试题及答案
一、编程题(共3题,每题20分,总分60分)
题目1(20分):实现一个简单的LRU缓存机制
题目描述:
设计一个LRU(LeastRecentlyUsed)缓存机制,支持以下操作:
1.`get(key)`:获取键`key`对应的值,如果键不存在返回-1。
2.`put(key,value)`:插入或更新键值对,如果缓存容量已满,则删除最久未使用的项。
要求:
-使用Python实现,时间复杂度为O(1)。
-请描述你的数据结构设计,并给出核心代码实现。
参考答案:
python
classLRUCache:
def__init__(self,capacity:int):
self.capacity=capacity
self.cache={}
self.order=[]
defget(self,key:int)-int:
ifkeyinself.cache:
更新访问顺序
self.order.remove(key)
self.order.append(key)
returnself.cache[key]
return-1
defput(self,key:int,value:int)-None:
ifkeyinself.cache:
更新值和顺序
self.order.remove(key)
eliflen(self.cache)=self.capacity:
删除最久未使用的项
oldest_key=self.order.pop(0)
delself.cache[oldest_key]
self.cache[key]=value
self.order.append(key)
示例用法
lru=LRUCache(2)
lru.put(1,1)
lru.put(2,2)
print(lru.get(1))#返回1
lru.put(3,3)#去除键2
print(lru.get(2))#返回-1
解析:
1.数据结构选择:使用哈希表`cache`存储键值对,保证O(1)的查找效率;使用列表`order`记录访问顺序,头部是最久未使用的元素。
2.get操作:通过哈希表快速定位元素,然后将其移动到列表末尾表示最近访问。
3.put操作:如果键已存在,更新值并调整顺序;如果不存在且缓存已满,删除列表头部的元素(最久未使用)并插入新元素。
题目2(20分):设计一个简单的分布式锁
题目描述:
假设你正在设计一个分布式系统,需要实现一个分布式锁,支持以下功能:
1.`lock()`:获取锁,如果锁已被占用,阻塞等待直到获取成功。
2.`unlock()`:释放锁。
要求:
-使用Redis实现,考虑高可用性和分布式环境下的安全性。
-请描述你的实现思路,并给出关键代码片段。
参考答案:
python
importredis
importuuid
importtime
classDistributedLock:
def__init__(self,redis_host=localhost,redis_port=6379,lock_timeout=10):
self.redis=redis.Redis(host=redis_host,port=redis_port)
self.lock_timeout=lock_timeout
self.locked=False
self.token=None
deflock(self):
self.token=str(uuid.uuid4())
end_time=time.time()+self.lock_timeout
whileTrue:
尝试设置锁
ifself.redis.set(lock,self.token,ex=self.lock_timeout,nx=True):
self.locked=True
returnTrue
锁已存在,检查是否过期
iftime.time()self.redis.ttl(lock):
锁已过期,重新尝试
continue
等待一段时间再重试
time.sleep(0.1)
returnFalse
defunlock(self):
ifnotself.locked:
returnFalse
ifself.redis.get(lock)==self.token:
self.redis.delete(lock)
self.locked=F
原创力文档

文档评论(0)