版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年腾讯技术面试题目库及参考答案一、编程基础(共5题,每题10分)1.题目:请编写一个函数,实现快速排序算法。输入一个无序数组,返回排序后的数组。要求说明时间复杂度和空间复杂度。参考答案:pythondefquick_sort(arr):iflen(arr)<=1:returnarrpivot=arr[len(arr)//2]left=[xforxinarrifx<pivot]middle=[xforxinarrifx==pivot]right=[xforxinarrifx>pivot]returnquick_sort(left)+middle+quick_sort(right)时间复杂度:O(nlogn),最坏情况O(n^2);空间复杂度:O(logn)解析:快速排序通过分治法实现排序,选择一个基准值(pivot),将数组分为小于、等于、大于三部分,递归排序左右子数组。平均时间复杂度为O(nlogn),但最坏情况下(如已排序数组)为O(n^2)。空间复杂度为O(logn)。2.题目:请实现一个LRU(最近最少使用)缓存,支持get和put操作。使用哈希表和双向链表实现,要求说明时间复杂度。参考答案:pythonclassListNode:def__init__(self,key=0,value=0):self.key=keyself.value=valueself.prev=Noneself.next=NoneclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.head=ListNode(0,0)self.tail=ListNode(0,0)self.head.next=self.tailself.tail.prev=self.headdefget(self,key:int)->int:ifkeynotinself.cache:return-1node=self.cache[key]self._remove(node)self._add(node)returnnode.valuedefput(self,key:int,value:int)->None:ifkeyinself.cache:self._remove(self.cache[key])node=ListNode(key,value)self.cache[key]=nodeself._add(node)iflen(self.cache)>self.capacity:lru=self.head.nextself._remove(lru)delself.cache[lru.key]def_remove(self,node:ListNode)->None:delself.cache[node.key]node.prev.next=node.nextnode.next.prev=node.prevdef_add(self,node:ListNode)->None:node.next=self.head.nextnode.next.prev=nodeself.head.next=nodenode.prev=self.head时间复杂度:get和put均为O(1)解析:LRU缓存使用双向链表和哈希表实现,链表头部为最近使用,尾部为最久未使用。get操作将节点移动到头部,put操作先删除旧节点再添加到头部,若超出容量则删除尾部节点。时间复杂度为O(1)。3.题目:请编写一个函数,检查一个字符串是否为回文串,忽略大小写和非字母字符。参考答案:pythondefis_palindrome(s:str)->bool:s=''.join(c.lower()forcinsifc.isalnum())left,right=0,len(s)-1whileleft<right:ifs[left]!=s[right]:returnFalseleft+=1right-=1returnTrue时间复杂度:O(n),空间复杂度:O(n)解析:先过滤非字母字符并转换为小写,然后使用双指针从两端向中间检查。若字符不匹配则不是回文串。时间复杂度为O(n),空间复杂度为O(n)。4.题目:请实现一个函数,找出数组中第三大的数。若数组不足三个数,返回最大数。参考答案:pythondefthird_max(nums:list)->int:first,second,third=float('-inf'),float('-inf'),float('-inf')fornuminnums:ifnum>first:first,second,third=num,first,secondeliffirst>num>second:second,third=num,secondelifsecond>num>third:third=numreturnthirdifthird!=float('-inf')elsefirst时间复杂度:O(n),空间复杂度:O(1)解析:维护三个变量记录第一大、第二大、第三大的数。遍历数组时更新这三个变量。时间复杂度为O(n),空间复杂度为O(1)。5.题目:请编写一个函数,合并两个有序链表,返回合并后的有序链表。参考答案:pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=nextdefmerge_two_lists(l1:ListNode,l2:ListNode)->ListNode:dummy=ListNode(0)current=dummywhilel1andl2:ifl1.val<l2.val:current.next=l1l1=l1.nextelse:current.next=l2l2=l2.nextcurrent=current.nextcurrent.next=l1orl2returndummy.next时间复杂度:O(n),空间复杂度:O(1)解析:使用虚拟头节点,逐个比较两个链表的节点,将较小的节点连接到结果链表。时间复杂度为O(n),空间复杂度为O(1)。二、系统设计(共3题,每题20分)1.题目:设计一个高并发的短链接系统,要求支持高并发访问、实时生成短链接、快速跳转原链接。参考答案:系统架构:1.请求分发层:使用Nginx或HAProxy分发请求,支持负载均衡和熔断。2.短链接服务:-使用Redis缓存热点短链接,减少数据库查询。-使用分布式ID生成器(如TwitterSnowflake)生成唯一短ID。-数据库存储短ID与原URL的映射关系,使用分片或读写分离优化性能。3.跳转服务:-用户访问短链接时,先查Redis缓存,未命中则查数据库。-跳转时记录UV和访问时间,用于统计。4.监控与告警:-使用Prometheus+Grafana监控系统负载、缓存命中率、数据库QPS。-使用ELK日志系统记录错误和慢查询。技术选型:-语言:Go(高并发性能)或Java+SpringBoot。-缓存:Redis集群。-数据库:MySQL读写分离+分库分表。-ID生成:Snowflake算法。解析:高并发短链接系统需关注性能、可用性和扩展性。通过缓存、分布式ID、数据库优化和负载均衡实现。Redis用于加速热点短链接查询,Snowflake保证ID唯一性,数据库分片提高写入能力。2.题目:设计一个微博系统,要求支持实时发布、关注/取关、动态展示(按时间倒序)、点赞、评论。参考答案:系统架构:1.用户模块:-用户信息存储在MySQL中,使用分库分表支持海量用户。-关注关系使用Redis存储,支持实时查询。2.动态模块:-发布动态时,先写入Redis缓存,异步批量写入数据库。-动态展示时,先查Redis缓存,未命中则查数据库,按时间倒序返回。3.互动模块:-点赞/评论使用Redis计数,异步更新数据库。-使用消息队列(如Kafka)处理点赞/评论事件,减少数据库压力。4.实时推送:-使用WebSocket或Server-SentEvents(SSE)实现动态实时更新。技术选型:-动态:MySQL(事务性)+Redis(缓存)。-互动:Redis(计数)+Kafka(异步)。-推送:WebSocket+Nginx反向代理。解析:微博系统需支持高并发读写和实时性。Redis缓存热点动态和互动数据,消息队列异步处理业务逻辑,MySQL保证数据一致性。WebSocket实现实时推送,提升用户体验。3.题目:设计一个分布式文件存储系统,要求支持高可用、分片存储、断点续传、防盗链。参考答案:系统架构:1.文件分片:-使用MD5算法计算文件哈希值,按1024MB分片存储。-每个分片存储在多个节点(如3副本,使用Quorum保证可用性)。2.存储节点:-使用Ceph或MinIO实现分布式存储,支持水平扩展。-使用etcd或ZooKeeper管理元数据(文件分片与节点的映射)。3.断点续传:-客户端记录已上传分片,服务端返回分片上传进度。-使用HTTPRange请求分片上传。4.防盗链:-使用签名验证请求合法性,防止盗链。-支持CORS策略限制跨域访问。技术选型:-存储:Ceph/MinIO。-元数据:etcd/ZooKeeper。-断点续传:HTTPRange+客户端记录。-防盗链:签名+CORS。解析:分布式文件系统需保证数据冗余和高可用。分片存储提高扩展性,多副本防止单点故障。断点续传提升上传体验,防盗链保护版权。etcd/ZooKeeper管理元数据,保证一致性。三、数据库(共3题,每题15分)1.题目:解释MySQL中的事务隔离级别,并说明脏读、不可重复读、幻读的区别。参考答案:事务隔离级别(从低到高):1.读未提交(ReadUncommitted):-允许脏读(读取未提交数据)。-解决方案:使用MVCC(多版本并发控制)。2.读已提交(ReadCommitted):-防止脏读,但允许不可重复读(事务内多次读取结果不一致)。-解决方案:记录MVCC快照。3.可重复读(RepeatableRead):-防止脏读和不可重复读,但允许幻读(事务内多次扫描结果不一致)。-解决方案:记录MVCC快照+间隙锁。4.串行化(Serializable):-完全隔离,但性能最低。区别:-脏读:读取未提交的数据。-不可重复读:同一事务内多次读取结果不一致(如B更新A)。-幻读:同一事务内多次扫描结果不一致(如B插入新行)。解析:隔离级别通过锁和MVCC实现。读未提交最不安全,串行化最安全。实际应用中常用ReadCommitted或RepeatableRead,具体选择需权衡性能和一致性。2.题目:解释MySQL索引的类型,并说明B+树索引和哈希索引的区别。参考答案:索引类型:1.B+树索引:-数据排序存储,支持范围查询。-适用于=、>、<、BETWEEN、LIKE前缀匹配。2.哈希索引:-基于哈希表,仅支持=查询。-适用于精准查询(如主键)。3.全文索引:-用于文本搜索(如MySQLFULLTEXT)。4.空间索引:-用于GIS数据(如R-Tree)。区别:-B+树索引:支持范围查询,但哈希索引不支持。-哈希索引:查询更快(平均O(1)),但无法排序。解析:B+树索引适用于通用场景,哈希索引适用于精准查询。全文索引和空间索引针对特定需求。选择索引类型需根据查询场景决定。3.题目:解释MySQL主从复制的原理,并说明同步延迟的原因及解决方案。参考答案:主从复制原理:1.Binlog:主库记录所有DDL和DML操作到Binlog。2.Binlog传输:从库I/O线程拉取Binlog。3.Binlog解析:从库SQL线程解析Binlog并重放。同步延迟原因:1.网络延迟:主从库网络波动。2.从库性能:从库处理能力不足。3.Binlog大小:Binlog传输不及时。解决方案:1.优化网络:使用低延迟网络。2.提升从库性能:增加从库资源或使用只读副本来分担负载。3.配置主从参数:-`binlog_row_image=MINIMAL`减少Binlog大小。-`replicate_delay`手动设置延迟容忍。解析:主从复制通过Binlog实现数据同步。同步延迟由网络、性能和Binlog大小导致。优化网络、提升从库性能、调整Binlog参数可减少延迟。四、网络编程(共2题,每题10分)1.题目:解释TCP的三次握手和四次挥手过程。参考答案:三次握手:1.SYN:客户端发送SYN=1,随机seq=12345,请求连接。2.SYN+ACK:服务器回复SYN=1,ACK=1,seq=67890,ack=12346。3.ACK:客户端回复ACK=1,seq=12346,ack=67891。四次挥手:1.FIN:客户端发送FIN=1,seq=x,表示无数据发送。2.ACK:服务器回复ACK=1,seq=y,ack=x+1。3.FIN:服务器发送FIN=1,seq=z,ack=x+1。4.ACK:客户端回复ACK=1,seq=x+1,ack=z+1。解析:三次握手建立连接,四次挥手关闭连接。SYN/FIN标志位用于控制连接状态,ack用于确认。TCP通过序列号和确认号保证可靠传输。2.题目:解释HTTP和HTTPS的区别,并说明HTTPS握手过程。参考答案:HTTPvsHTTPS:1.HTTP:明文传输,易被窃听。2.HTTPS:加密传输(SSL/TLS),安全性更高。HTTPS握手过程:1.ClientHello:客户端发送协议版本、支持的加密算法等。2.ServerHello:服务器选择加密算法,发送证书(公钥)。3.ServerKeyExchange:服务器发送随机数。4.ClientKeyExchange:客户端使用私钥计算会话密钥。5.CertificateVerify:服务器验证客户端证书。6.Session:开始加密传输。解析:HTTPS通过SSL/TLS协议加密传输,防止窃听。握手过程通过非对称加密交换密钥,确保通信安全。证书验证防止中间人攻击。五、算法与数据结构(共3题,每题15分)1.题目:请编写一个函数,实现快速幂算法,计算a^b(b为非负整数)。参考答案:pythondefpow(a:float,b:int)->float:result=1.0base=awhileb>0:ifb%2==1:result=basebase=baseb//=2returnresult时间复杂度:O(logb)解析:快速幂通过二分法减少乘法次数。每次将指数右移一位,基数平方,若指数为奇数则乘到结果中。时间复杂度为O(logb)。2.题目:请编写一个函数,实现二叉树的层序遍历(按从上到下、从左到右的顺序)。参考答案:pythonfromcollectionsimportdequeclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdeflevel_order(root:TreeNode)->list:ifnot
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水利安全生产新六项制度
- 校车例会制度
- 板式家具厂环境安全制度
- 机动车驾驶员培训机构的安全会议制度
- 旁听导学制度
- 2026年电竞赛事组织者推广协议
- 2025四川广安发展建设集团有限公司第三批招聘笔试笔试历年常考点试题专练附带答案详解2套试卷
- 水利行业工程管理与施工指南
- 2025四川宜宾市高县国盛劳务派遣有限责任公司招聘劳务派遣人员1人笔试参考题库附带答案详解
- 2025四川宜宾五粮液股份有限公司录用上半年社会招聘公司办公室工作员笔试历年常考点试题专练附带答案详解2套试卷
- 2025年大学学院教学岗教辅岗招聘考试笔试试题(含答案)
- 环卫垃圾清运车知识培训课件
- 餐饮店火灾事故
- 传染性疾病控制副高考试真题及答案
- 巡察流程工作培训
- 2025年福建高考数学试题及答案
- 湖南省多测合一收费指导标准(试行)2024年版
- 现场提升活动方案
- 混凝土环保管理制度
- 治疗性低温技术临床应用进展
- GB/T 16288-2024塑料制品的标志
评论
0/150
提交评论