2026年腾讯面试题集及答案解析_第1页
2026年腾讯面试题集及答案解析_第2页
2026年腾讯面试题集及答案解析_第3页
2026年腾讯面试题集及答案解析_第4页
2026年腾讯面试题集及答案解析_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2026年腾讯面试题集及答案解析一、编程题(3题,每题15分,共45分)1.题目:编写一个函数,输入一个正整数n,返回其对应的二进制表示中1的个数。例如,输入5(二进制为101),返回2。要求:-不能使用内置函数(如Python中的bin()),需手动实现。-时间复杂度要求O(logn)。答案:pythondefcount_bits(n):count=0whilen:count+=n&1n>>=1returncount解析:通过位运算实现。每次将n与1进行按位与操作,若结果为1,则计数器加1;然后右移一位,直到n为0。该方法时间复杂度为O(logn),因为每次操作相当于处理二进制位的一位。2.题目:给定一个字符串s和一个整数k,返回s中长度为k的最长子串,其中子串中所有字符的唯一字符数不超过k。例如,输入s="aabbcc",k=2,返回"bba"。要求:-若存在多个满足条件的子串,返回第一个出现的。-字符串长度不超过10^4,k不超过10。答案:pythondeflongest_unique_substring(s,k):left=0max_len=0max_substr=""char_count={}forrightinrange(len(s)):char=s[right]ifcharinchar_count:char_count[char]+=1else:char_count[char]=1whilelen(char_count)>k:left_char=s[left]char_count[left_char]-=1ifchar_count[left_char]==0:delchar_count[left_char]left+=1ifright-left+1>max_len:max_len=right-left+1max_substr=s[left:right+1]returnmax_substr解析:使用滑动窗口技术。左指针`left`和右指针`right`分别表示子串的起始和结束位置。通过哈希表`char_count`记录当前窗口中字符的频次。若窗口中唯一字符数超过k,则移动左指针并更新哈希表。每次窗口满足条件时,记录最长子串。时间复杂度为O(n)。3.题目:实现一个LRU(LeastRecentlyUsed)缓存,支持get和put操作。缓存容量为capacity,get(key)返回key对应的值,若不存在返回-1;put(key,value)插入或更新键值对,若超出容量则删除最久未使用的项。要求:-使用双向链表和哈希表实现,确保get和put操作的时间复杂度为O(1)。答案:pythonclassDLinkedNode: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=DLinkedNode()self.tail=DLinkedNode()self.head.next=self.tailself.tail.prev=self.headdef_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_move_to_head(self,node):self._remove_node(node)self._add_node(node)def_pop_tail(self):res=self.tail.prevself._remove_node(res)returnresdefget(self,key:int)->int:node=self.cache.get(key,None)ifnotnode:return-1self._move_to_head(node)returnnode.valuedefput(self,key:int,value:int)->None:node=self.cache.get(key)ifnotnode:newNode=DLinkedNode(key,value)self.cache[key]=newNodeself._add_node(newNode)iflen(self.cache)>self.capacity:tail=self._pop_tail()delself.cache[tail.key]else:node.value=valueself._move_to_head(node)解析:LRU缓存的核心是记录最近最少使用的项。使用双向链表维护访问顺序,哈希表记录键到节点的映射,确保O(1)访问。当容量超出时,删除链表尾部节点(最久未使用)。二、系统设计题(2题,每题20分,共40分)1.题目:设计一个高并发的短链接生成服务。要求:-输入任意长URL,返回固定长度的短链接(如6位字母数字组合)。-支持高并发访问(每秒百万级请求)。-需考虑分布式部署和可扩展性。要求:-描述核心组件和数据结构。-解释如何实现高并发和高可用。答案:核心组件:1.URL映射表(Redis/Memcached):存储长URL到短链接的映射,使用Hash结构(key=长URL,value=短链接)。2.短链接生成模块:使用哈希算法(如CRC32或MD5)或自增ID+编码(如Base62)生成短链接。3.反向解析模块:通过短链接查询Redis获取原始URL。4.负载均衡器(Nginx/LVS):分散请求到多个后端服务实例。数据结构:-短链接采用Base62编码(a-z,A-Z,0-9),6位即可表示10^36种组合。-Redis使用setnx命令确保幂等性。高并发与高可用:-分布式缓存:Redis集群或Memcached集群,分片存储映射表。-限流:使用令牌桶算法或Nginx限流模块。-异步处理:通过消息队列(Kafka/RabbitMQ)解耦请求和存储。-服务化部署:多实例部署,Nginx反向代理。解析:短链接的核心在于高效映射和分布式存储。Base62编码压缩长度,Redis保证高并发读写。分布式部署和异步处理提升吞吐量。2.题目:设计一个实时消息推送系统(如微信消息通知),要求:-支持单聊和群聊。-延迟低(毫秒级)。-可扩展,支持千万级用户。要求:-描述技术架构和关键组件。-解释如何保证低延迟和高可用。答案:技术架构:1.接入层(Nginx):负载均衡和反向代理。2.消息队列(Kafka/RabbitMQ):解耦消息生产和消费。3.消息存储(Redis/MongoDB):缓存用户关系和离线消息。4.推送服务(自研/CMQ):负责将消息推送到客户端。5.客户端SDK:实现消息接收和透传。关键组件:-WebSocket/长连接:维持客户端实时连接。-推送协议(APNS/FCM):针对不同平台的消息推送。-离线消息重试:若客户端未在线,缓存消息后重推。低延迟和高可用:-本地推送:对附近用户使用WebSocket直推,减少网络跳数。-缓存穿透:Redis缓存用户关系,避免数据库压力。-故障隔离:服务化部署,熔断限流。-消息分片:群聊消息通过Kafka分发给子服务。解析:实时消息系统的核心在于低延迟和可扩展性。WebSocket保证实时性,消息队列解耦高并发,缓存和重试机制提升可靠性。三、行为面试题(2题,每题10分,共20分)1.题目:你在项目中遇到过最大的技术挑战是什么?如何解决的?要求:-结合具体案例,描述问题、解决方案和反思。答案:案例:在某个高并发支付项目中,系统在促销活动时出现响应超时。通过监控发现是数据库慢查询导致。解决方案:1.定位问题:使用Prometheus+Grafana监控,定位到特定SQL语句。2.优化方案:-添加数据库索引(针对查询频率高的字段)。-将热点数据缓存到Redis(如商品价格)。-分库分表(水平扩展)。3.验证效果:压力测试显示QPS提升300%,延迟降低50%。反思:-需提前设计好数据库压力测试方案。-监控告警应更精细化。解析:技术挑战题考察问题解决能力。需体现分析、执行和总结能力,避免泛泛而谈。2.题目:如何平衡团队内的技术方案分歧?要求:-结合实际场景,描述沟通方式和决策过程。答案:场景:团队讨论是否引入某新技术(如

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论