版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年腾讯技术部面试官经验与答案解析一、编程能力(5题,共20分)1.(4分)编写一个函数,输入一个正整数n,返回一个列表,其中包含从1到n(包含n)的所有奇数。答案:pythondefodd_numbers(n):return[iforiinrange(1,n+1)ifi%2!=0]解析:-使用列表推导式生成奇数列表,`range(1,n+1)`生成1到n的整数,`ifi%2!=0`筛选奇数。-时间复杂度O(n),空间复杂度O(n)。2.(4分)实现一个简单的LRU(LeastRecentlyUsed)缓存,支持`get(key)`和`put(key,value)`操作。答案:pythonclassLRUCache:def__init__(self,capacity):self.cache={}self.capacity=capacityself.order=[]defget(self,key):ifkeyinself.cache:self.order.remove(key)self.order.append(key)returnself.cache[key]return-1defput(self,key,value):ifkeyinself.cache:self.order.remove(key)eliflen(self.cache)>=self.capacity:oldest_key=self.order.pop(0)delself.cache[oldest_key]self.cache[key]=valueself.order.append(key)解析:-使用字典`cache`存储键值对,列表`order`记录访问顺序。-`get`操作将键移到列表末尾表示最近使用,`put`操作先删除最久未使用的键(如果超出容量)。3.(5分)编写一个函数,输入一个字符串,返回该字符串的所有子串,并去除重复的子串。答案:pythondefunique_substrings(s):substrings=set()foriinrange(len(s)):forjinrange(i+1,len(s)+1):substrings.add(s[i:j])returnlist(substrings)解析:-使用两层循环枚举所有子串,`set`自动去重。-时间复杂度O(n²),空间复杂度O(n²)。4.(7分)实现快速排序算法,要求不使用递归。答案:pythondefquick_sort(arr):stack=[(0,len(arr)-1)]whilestack:start,end=stack.pop()ifstart>=end:continuepivot=arr[end]i=start-1forjinrange(start,end):ifarr[j]<=pivot:i+=1arr[i],arr[j]=arr[j],arr[i]arr[i+1],arr[end]=arr[end],arr[i+1]stack.append((start,i))stack.append((i+2,end))解析:-使用栈模拟递归,避免系统栈溢出。-非递归实现的核心是维护分区的索引范围。5.(5分)编写一个函数,输入一个字符串,判断是否为有效的括号组合(如"()"、"()[]{}")。答案:pythondefisValid(s):stack=[]mapping={')':'(',']':'[','}':'{'}forcharins:ifcharinmapping:top=stack.pop()ifstackelse'#'ifmapping[char]!=top:returnFalseelse:stack.append(char)returnnotstack解析:-使用栈匹配括号,`mapping`记录对应关系。-遇到右括号时检查栈顶是否匹配,否则无效。二、系统设计(3题,共30分)1.(10分)设计一个高并发的短链接服务(如tinyURL),要求支持分布式部署。答案:-核心组件:1.URL缩短服务:将长链接转换为短ID(如hash或自增ID)。2.分布式存储:使用Redis或Memcached缓存短ID与长链接的映射。3.负载均衡:Nginx或HAProxy分发请求到不同节点。4.数据库:若缓存失效,查询数据库(如MySQL分表存储)。-分布式方案:-使用Twitter的Snowflake算法生成全局唯一ID。-跨节点同步短ID与长链接的缓存。解析:-高并发场景下需避免单点故障,Redis支持集群模式。-负载均衡可减少节点压力,分表分库提升数据库性能。2.(10分)设计一个实时消息推送系统(如微信消息),要求支持离线消息存储。答案:-架构:1.消息队列:Kafka或RabbitMQ存储待推送消息。2.推送服务:定时或按需从队列拉取消息。3.客户端长连接:WebSocket或MQTT保持实时连接。4.离线存储:若客户端未在线,消息存入数据库或Redis。-优化:-标识消息状态(待发送、已发送、失败)。-重试机制处理推送失败。解析:-离线消息需持久化存储,避免数据丢失。-WebSocket适合低延迟场景,MQTT适合移动端。3.(10分)设计一个支持高并发的秒杀系统。答案:-核心策略:1.分布式锁:RedisLua脚本原子扣减库存。2.请求去重:用Redis或布隆过滤器过滤重复请求。3.秒杀队列:按时间排序处理请求,避免超卖。4.限流:Guava或Nginx限流防止系统过载。-数据库优化:-使用乐观锁(version字段)或悲观锁(SELECT...FORUPDATE)。解析:-原子扣减库存是关键,Lua脚本确保Redis操作的原子性。-限流防止因并发过高导致雪崩。三、数据结构与算法(5题,共30分)1.(6分)给定一个无重复元素的数组,返回所有可能的子集(幂集)。答案:pythondefsubsets(nums):res=[]subset=[]defbacktrack(index):res.append(subset.copy())foriinrange(index,len(nums)):subset.append(nums[i])backtrack(i+1)subset.pop()backtrack(0)returnres解析:-回溯法枚举所有组合,`subset`记录当前组合。-时间复杂度O(2^n),空间复杂度O(n)。2.(6分)判断一个二叉树是否为平衡二叉树(左右子树高度差不超过1)。答案:pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefisBalanced(root):defcheck(node):ifnotnode:return0,Trueleft,balanced_left=check(node.left)right,balanced_right=check(node.right)returnmax(left,right)+1,balanced_leftandbalanced_rightandabs(left-right)<=1returncheck(root)[1]解析:-后序遍历计算高度,同时判断平衡性。-返回高度和是否平衡的元组。3.(7分)给定一个字符串,找到不重复的最长子串的长度。答案:pythondeflengthOfLongestSubstring(s):char_map={}left=0max_len=0forrightinrange(len(s)):ifs[right]inchar_map:left=max(left,char_map[s[right]]+1)char_map[s[right]]=rightmax_len=max(max_len,right-left+1)returnmax_len解析:-滑动窗口法,`char_map`记录字符上一次出现的位置。-时间复杂度O(n),空间复杂度O(1)。4.(8分)实现一个LRU缓存,使用双向链表和哈希表。答案:pythonclassListNode:def__init__(self,key=0,value=0):self.key=keyself.value=valueself.prev=Noneself.next=NoneclassLRUCache:def__init__(self,capacity):self.capacity=capacityself.cache={}self.head,self.tail=ListNode(),ListNode()self.head.next=self.tailself.tail.prev=self.headdefget(self,key):ifkeynotinself.cache:return-1node=self.cache[key]self._move_to_front(node)returnnode.valuedefput(self,key,value):ifkeyinself.cache:node=self.cache[key]node.value=valueself._move_to_front(node)else:node=ListNode(key,value)self.cache[key]=nodeself._add_node(node)iflen(self.cache)>self.capacity:node=self._pop_tail()delself.cache[node.key]def_move_to_front(self,node):self._remove_node(node)self._add_node(node)def_add_node(self,node):node.prev=self.headnode.next=self.head.nextself.head.next.prev=nodeself.head.next=nodedef_remove_node(self,node):prev_node=node.prevnext_node=node.nextprev_node.next=next_nodenext_node.prev=prev_nodedef_pop_tail(self):tail_prev=self.tail.prevself._remove_node(tail_prev)returntail_prev解析:-双向链表维护访问顺序,哈希表快速查找。-O(1)时间复杂度通过删除尾节点和添加头节点实现。5.(5分)给定一个数组,返回所有和为target的三个数的组合。答案:pythondefthreeSum(nums,target):nums.sort()res=[]foriinrange(len(nums)-2):ifi>0andnums[i]==nums[i-1]:continueleft,right=i+1,len(nums)-1whileleft<right:total=nums[i]+nums[left]+nums[right]iftotal==target:res.append([nums[i],nums[left],nums[right]])whileleft<rightandnums[left]==nums[left+1]:left+=1whileleft<rightandnums[right]==nums[right-1]:right-=1left+=1right-=1eliftotal<target:left+=1else:right-=1returnres解析:-排序后双指针法,固定一个数,用左右指针找另外两个数。-跳过重复元素避免重复组合。四、数据库与存储(3题,共25分)1.(8分)设计一个用户表,支持高并发写入和查询,字段包括:id(自增)、username(唯一)、email(唯一)、创建时间。答案:-表结构:sqlCREATETABLEusers(idBIGINTAUTO_INCREMENTPRIMARYKEY,usernameVARCHAR(50)UNIQUENOTNULL,emailVARCHAR(100)UNIQUENOTNULL,created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP);-优化:-id使用自增主键,避免热点行。-username和email加唯一索引加速查询。-使用InnoDB引擎支持事务和行锁。解析:-高并发写入时自增ID可减少锁竞争。-唯一索引保证数据一致性。2.(8分)解释MySQL中的MVCC(多版本并发控制)原理及其优缺点。答案:-原理:-使用`REPEATABLEREAD`隔离级别时,InnoDB通过记录行的`before_image`和`after_image`实现MVCC。-ReadView比较事务ID与行版本时间,决定读取快照版本还是最新版本。-优点:-允许脏读、不可重复读、幻读,但用户感知一致。-适用于高并发场景,减少锁开销。-缺点:-需要额外存储空间(版本数据)。-读多写少场景下性能不如悲观锁。解析:-MVCC通过版本控制避免锁等待,但会增加存储开销。3.(9分)设计一个高并发的计数器,要求支持分布式部署。答案:-方案:1.Red
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 常州市溧阳中学高三地理一轮复习第二章城市化作业
- 2025年高职模具设计与制造(复杂模具设计)试题及答案
- 大学(临床医学)儿科学基础2026年试题及答案
- 2025年中职(烹饪工艺)宴席菜品设计阶段测试题及答案
- 2025年大学大一(轮机工程)轮机自动化试题及答案
- 2025年高职(船舶电子电气技术)船舶电气设备试题及答案
- 2025年大学测绘工程(地图注记设计)试题及答案
- 2025年大学大二(种子科学与工程)种子生产学基础试题及答案
- 2025年中职(健康服务与管理)健康档案管理试题及答案
- 2025年高职汽车电子技术(汽车诊断技术)试题及答案
- 公司网络营销问题的探讨
- 同型半胱氨酸的检测及临床应用
- 【MOOC答案】《电子线路设计、测试与实验(二)》(华中科技大学)章节作业慕课答案
- 2025广西公需科目试题及答案
- 中国核能行业协会:中国核能科技创新发展报告(2025年)
- 2025年高考数学立体几何检测卷(立体几何中的三角函数应用)
- 2025年综合类-卫生系统招聘考试-护士招聘考试历年真题摘选带答案(5卷100题)
- 驻外销售人员管理办法
- 医疗反歧视培训
- 水体溶解氧智能精准调控-洞察阐释
- DB64∕680-2025 建筑工程安全管理规程
评论
0/150
提交评论