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

下载本文档

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

文档简介

2026年腾讯面试题及答案解析一、编程题(共3题,每题15分,总分45分)题目1:请实现一个函数,输入一个正整数n,返回n的阶乘。要求不使用递归,且考虑大数问题。cpp//示例输入:5//示例输出:120答案解析:cppinclude<iostream>include<vector>usingnamespacestd;longlongfactorial(intn){if(n==0)return1;vector<longlong>result(10000,0);//存储每一位数字result[0]=1;for(inti=1;i<=n;++i){intcarry=0;for(intj=0;j<result.size();++j){longlongtemp=result[j]i+carry;result[j]=temp%10;carry=temp/10;}}//从高位到低位输出stringres="";for(inti=result.size()-1;i>=0;--i){if(res.empty()&&result[i]==0)continue;res+=to_string(result[i]);}returnres.empty()?0:stoll(res);}intmain(){intn;cin>>n;cout<<factorial(n)<<endl;return0;}解析:1.大数处理:阶乘结果可能非常大,无法用普通整数类型存储,因此使用`vector`存储每一位数字。2.模拟乘法:从低位到高位逐位相乘,并处理进位。3.结果输出:从高位到低位拼接字符串,忽略前导零。题目2:给定一个字符串,统计其中所有子字符串中只包含一个字母的子串的数量。例如,输入"aaabbbb",输出应包含"a","a","a","b","b","b","b","c"等,共12个。cpp//示例输入:"aaabbbb"//示例输出:12答案解析:cppinclude<iostream>include<string>usingnamespacestd;intcountSingleCharSubstrings(conststring&s){intcount=0;intn=s.length();for(inti=0;i<n;++i){intj=i;while(j<n&&s[j]==s[i]){count+=(j-i+1);j++;}}returncount;}intmain(){strings;cin>>s;cout<<countSingleCharSubstrings(s)<<endl;return0;}解析:1.滑动窗口:遍历字符串,对于每个字符,统计连续相同字符的长度,每个连续段贡献的子串数量为`length(length+1)/2`。2.优化:实际实现中直接累加连续相同字符的长度即可,无需复杂计算。题目3:实现一个LRU(最近最少使用)缓存,支持get和put操作。要求空间复杂度为O(n),时间复杂度为O(1)。cpp//示例输入://put(1,1)//put(2,2)//get(1)//返回1//put(3,3)//去除键2//get(2)//返回-1(未找到)//put(4,4)//去除键1//get(1)//返回-1(未找到)//get(3)//返回3//get(4)//返回4答案解析:cppinclude<iostream>include<unordered_map>include<list>classLRUCache{public:LRUCache(intcapacity):capacity_(capacity){}intget(intkey){autoit=cacheMap.find(key);if(it==cacheMap.end())return-1;//将访问的元素移动到链表头部cacheList.splice(cacheList.begin(),cacheList,it->second);returnit->second->second;}voidput(intkey,intvalue){autoit=cacheMap.find(key);if(it!=cacheMap.end()){//更新值并移动到链表头部it->second->second=value;cacheList.splice(cacheList.begin(),cacheList,it->second);}else{//如果超出容量,删除链表尾部元素if(cacheMap.size()==capacity_){cacheMap.erase(cacheList.back().first);cacheList.pop_back();}//添加新元素到链表头部cacheList.emplace_front(key,value);cacheMap[key]=cacheList.begin();}}private:intcapacity_;std::list<std::pair<int,int>>cacheList;//双向链表存储键值对std::unordered_map<int,std::list<std::pair<int,int>>::iterator>cacheMap;//键到链表节点的映射};intmain(){LRUCachecache(2);cache.put(1,1);cache.put(2,2);std::cout<<cache.get(1)<<std::endl;//返回1cache.put(3,3);//去除键2std::cout<<cache.get(2)<<std::endl;//返回-1cache.put(4,4);//去除键1std::cout<<cache.get(1)<<std::endl;//返回-1std::cout<<cache.get(3)<<std::endl;//返回3std::cout<<cache.get(4)<<std::endl;//返回4return0;}解析:1.LRU核心:使用双向链表和哈希表实现。链表维护访问顺序,哈希表实现O(1)的get和put。2.get操作:查找键,若存在则将其移动到链表头部。3.put操作:若键存在则更新值并移动到头部;若不存在则添加新节点到头部,若超出容量则删除链表尾部节点。二、系统设计题(共2题,每题20分,总分40分)题目4:设计一个高并发的短链接系统。要求:1.输入长链接,输出短链接(如tinyurl格式)。2.支持分布式部署,可水平扩展。3.支持高并发访问,QPS可达10万+。4.短链接应易于记忆和传播。答案解析:1.短链接生成:-使用自增ID或随机码生成短链接,如62进制编码(a-z,A-Z,0-9)。-前缀固定,如`/`。-示例:长链接`/long/path`→短链接`/abc123`。2.分布式部署:-使用Redis或Memcached存储短链接到长链接的映射,支持集群模式。-数据分片,每个节点存储一部分短链接。3.高并发支持:-使用Nginx或HAProxy进行负载均衡。-短链接请求先查询缓存,未命中则查询数据库。-数据库使用读写分离和分库分表。4.架构示例:用户请求→负载均衡器→缓存集群(Redis/Memcached)↓(未命中)→数据库集群(分片)5.优化点:-短链接生成使用哈希函数(如SHA1+取前6位)或自增ID映射。-使用CDN加速短链接解析。题目5:设计一个实时聊天系统,支持多用户组聊和私聊,要求:1.支持至少1000人同时在线。2.消息延迟控制在100ms以内。3.支持离线消息推送。答案解析:1.架构核心:-使用WebSocket实现实时双向通信。-服务器端使用Node.js或Go框架处理高并发。2.消息存储:-使用Redis存储临时消息,支持发布/订阅模式。-关系型数据库(如PostgreSQL)存储历史消息。3.离线消息:-用户离线时,消息先存入Redis,用户上线后通过WebSocket推送。-使用消息队列(如Kafka)异步处理离线消息。4.高并发优化:-使用WebSocket集群(如Nginx+UpstashWebSockets)。-消息分片,每个用户或用户组由不同节点处理。5.架构示例:用户→WebSocket连接→负载均衡器→WebSocket集群↓(离线)→Redis(临时消息)→消息队列(Kafka)6.关键点:-使用心跳机制检测用户在线状态。-消息批处理和异步处理减少服务器压力。三、行为面试题(共2题,每题15分,总分30分)题目6:请分享一次你解决复杂技术问题的经历,说明你在其中扮演的角色、遇到的挑战以及最终如何解决的。答案解析:1.角色与背景:-描述你在项目中负责的部分(如后端开发、系统优化等)。-举例具体问题(如高并发下的数据库瓶颈、分布式事务等)。2.挑战与应对:-分析问题原因(如锁竞争、缓存失效、网络延迟等)。-说明你采取的解决方案(如加锁优化、Redis缓存、异步处理等)。3.结果与反思:-问题解决后的效果(如性能提升50%、故障率降低等)。-从中学习到的经验(如分布式系统设计原则、调试技巧等)。题目7:如果你

温馨提示

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

评论

0/150

提交评论