版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年互联网企业面试模拟题及答案详解一、编程题(共3题,每题20分,总分60分)1.题1(20分):实现一个LRU缓存机制题目描述:设计一个LRU(LeastRecentlyUsed)缓存机制,支持以下操作:-`get(key)`:获取键`key`对应的值,如果键不存在返回-1。-`put(key,value)`:插入或更新键值对。如果缓存已满,则删除最久未使用的键值对,再插入新的键值对。要求:-使用链表和哈希表实现,时间复杂度为O(1)。-请描述你的数据结构和实现思路,并给出关键代码片段。参考答案与解析:答案:pythonclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}#key:(value,node)self.head=Node(0,0)#dummyheadself.tail=Node(0,0)#dummytailself.head.next=self.tailself.tail.prev=self.headclassNode:def__init__(self,key,value):self.key=keyself.value=valueself.prev=Noneself.next=Nonedefget(self,key:int)->int:ifkeynotinself.cache:return-1node=self.cache[key][1]self._move_to_head(node)returnnode.valuedefput(self,key:int,value:int)->None:ifkeyinself.cache:node=self.cache[key][1]node.value=valueself._move_to_head(node)else:iflen(self.cache)==self.capacity:tail=self.tail.prevdelself.cache[tail.key]self._remove_node(tail)new_node=self.Node(key,value)self.cache[key]=(value,new_node)self._add_node(new_node)def_move_to_head(self,node:'Node'):self._remove_node(node)self._add_node(node)def_remove_node(self,node:'Node'):node.prev.next=node.nextnode.next.prev=node.prevdef_add_node(self,node:'Node'):node.next=self.head.nextnode.prev=self.headself.head.next.prev=nodeself.head.next=node解析:-数据结构:使用双向链表+哈希表实现。双向链表维护最近使用的顺序,哈希表实现O(1)的get操作。-关键步骤:1.`get`时,若存在键则移动到链表头部,返回值;否则返回-1。2.`put`时,若已存在键则更新值并移动到头部;若不存在且缓存已满,则删除链表尾部节点(最久未使用),再插入新节点到头部。3.辅助函数`_move_to_head`和`_remove_node`用于调整链表顺序。2.题2(20分):实现一个有效的括号匹配器题目描述:给定一个字符串`s`,其中只包含`'('`,`')'`,`{'}`,`'}'`,`'['`,`']'`,判断字符串是否有效。有效字符串需满足:-左括号必须与相同类型的右括号匹配。-左括号必须按正确的顺序闭合。要求:-使用栈实现,时间复杂度为O(n)。-请描述你的思路并给出代码。参考答案与解析:答案:pythondefisValid(s:str)->bool:stack=[]mapping={')':'(','}':'{',']':'['}forcharins:ifcharinmapping.values():stack.append(char)elifcharinmapping:ifnotstackorstack[-1]!=mapping[char]:returnFalsestack.pop()else:returnFalse#非法字符直接返回Falsereturnnotstack解析:-思路:使用栈存储左括号,遇到右括号时与栈顶左括号匹配,若不匹配或栈为空则无效。-关键步骤:1.遍历字符串,左括号入栈,右括号时与栈顶匹配。2.若栈为空或栈顶不匹配则返回False。3.最后栈为空则有效,否则无效。3.题3(20分):实现快速排序的非递归版本题目描述:给定一个数组`nums`,使用非递归方式实现快速排序,要求:-不能使用递归调用,需使用栈模拟递归过程。-请描述你的思路并给出代码。参考答案与解析:答案:pythondefquick_sort_iterative(nums:list)->list:ifnotnums:returnnumsstack=[(0,len(nums)-1)]whilestack:start,end=stack.pop()ifstart>=end:continuepivot=nums[end]left=startforiinrange(start,end):ifnums[i]<=pivot:nums[i],nums[left]=nums[left],nums[i]left+=1nums[left],nums[end]=nums[end],nums[left]stack.append((start,left-1))stack.append((left+1,end))returnnums解析:-思路:使用栈记录当前需要排序的子数组边界,模拟递归过程。-关键步骤:1.初始栈中压入整个数组边界(0,len(nums)-1)。2.弹出栈顶区间,选择最后一个元素为pivot,分区后压入左右子区间的边界。3.重复直到栈为空。二、系统设计题(共2题,每题30分,总分60分)1.题4(30分):设计一个短链接系统题目描述:设计一个短链接系统,如`tinyurl`。用户输入长链接,系统返回短链接,点击短链接可跳转回原长链接。要求:-短链接需具有唯一性且长度尽可能短(如6位随机字母数字组合)。-支持高并发访问,需考虑缓存和负载均衡。-描述系统架构、核心模块及数据存储方案。参考答案与解析:答案:系统架构:1.API接口层:提供短链接生成(`/shorten`)和跳转(`/redirection`)接口。2.缓存层:使用Redis缓存热点短链接,降低数据库压力。3.数据库层:使用MySQL存储短链接与长链接的映射关系。4.负载均衡:通过Nginx分发请求。核心模块:-短链接生成:-使用62进制编码(a-z,A-Z,0-9)将ID映射为6位短码。-ID可通过自增主键或哈希函数生成。-跳转逻辑:-接收短链接,解析出ID,查询数据库或缓存获取长链接,返回301重定向。数据存储方案:sqlCREATETABLEshort_links(idINTAUTO_INCREMENTPRIMARYKEY,long_urlVARCHAR(2048)NOTNULL,short_codeCHAR(6)NOTNULLUNIQUE,created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP);解析:-短链接生成:-62进制编码(如`iVBORw0KGgo`→`123456`)可缩短长度。-可使用自增ID+hash函数或直接使用自增ID。-高并发处理:-Redis缓存热点短链接,热点数据命中率高。-Nginx负载均衡分发请求。2.题5(30分):设计一个实时消息推送系统题目描述:设计一个实时消息推送系统,如微信或Telegram。用户可订阅主题(如#科技),系统将相关消息推送给订阅者。要求:-支持用户订阅/退订主题。-消息可被多用户订阅,需保证实时性。-描述系统架构、消息队列及同步方案。参考答案与解析:答案:系统架构:1.用户服务:管理用户信息、订阅关系。2.消息队列:Kafka/RabbitMQ处理高并发消息。3.消息处理服务:推送消息给订阅者。4.WebSocket/Server-SentEvents:实时推送。核心模块:-订阅管理:sqlCREATETABLEsubscriptions(user_idINT,topicVARCHAR(50),PRIMARYKEY(user_id,topic));-消息推送:-用户发布消息时,广播至相关主题。-消息处理服务订阅Kafka,实时推送至客户端。同步方案:-使用Redis发布订阅模式,用户订阅后加入订阅列表。-消息发布时,通过Redis发布至主题,订阅者实时接收。解析:-实时性保证:-Kafka/RabbitMQ处理高并发消息,Redis保证快速同步。-WebSocket提供双向通信,确保消息即时到达。-可扩展性:-消息队列解耦用户服务与消息处理,方便水平扩展。三、行为面试题(共3题,每题10分,总分30分)1.题6(10分):描述一次你解决复杂技术问题的经历题目描述:请分享一次你遇到的技术难题,你的解决思路和最终结果。参考答案与解析:答案:“在一次项目中,系统在高并发下出现性能瓶颈。通过压测发现数据库慢查询占比过高。我首先定位到慢SQL,通过索引优化和分表分库解决。具体步骤:1.使用`EXPLAIN`分析SQL执行计划,发现未命中索引。2.添加覆盖索引后,查询耗时下降90%。3.进一步分表,将热点数据分散到不同分片,最终QPS提升300%。解析:-重点体现:问题定位能力、技术方案、结果量化。2.题7(10分):如何平衡工作与生活?题目描述:互联网行业工作强度大,你如何平衡工作与生活?参考答案与解析:答案:“我通过以下方式平衡:1.优先级管理:区分紧急重要任务,优先完成核心需求。2.高效工作:利用番茄工作法,集中精力减少干扰。3.定期复盘:每日/周总结,避免
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 心脏支架术后同伴支持小组
- 2026宁夏医科大学总医院自主招聘备案人员128人笔试备考题库及答案解析
- 2026北京怀柔区政务服务和数据管理局招聘行政辅助人员13名笔试模拟试题及答案解析
- 2026广东中山东区街道青少年活动中心招聘多名外聘教师考试参考题库及答案解析
- 2026四川乐山五通桥区乐丰商贸有限公司面向社会招聘财务人员1人考试模拟试题及答案解析
- 2026四川攀枝花市西区水利局招聘临聘人员1人笔试参考题库及答案解析
- 2026年河南省三门峡市渑池县事业单位联考招聘考试模拟试题及答案解析
- 2026安徽合肥市骨科医院招聘工作人员46人笔试参考题库及答案解析
- 2026江苏盐城市建湖县人民医院、县中西医结合医院、县第三人民医院和县妇幼保健院招聘备案制人员15人考试模拟试题及答案解析
- 2026年绍兴市越城区教育体育局新教师招聘20人(二)笔试备考试题及答案解析
- 2025年国防军事行业国防军事科技创新与军事战略研究报告及未来发展趋势预测
- 电炉制磷工艺与设备简介
- S市生活污水处理厂AAO工艺设计
- 【低空经济】低空飞行服务平台建设方案
- 黄赌案件办案要点课件
- 2025版中国胃癌诊疗指南解读(全文)
- 2025年保险业新能源车险查勘定损技能测试题及答案
- 2025年贵州高考化学真题及答案
- 餐饮行业食品安全监管现状分析及2025年食品安全风险管理报告
- 海洋专业毕业论文
- 竞聘护士长面试题与答案
评论
0/150
提交评论