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

下载本文档

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

文档简介

2026年腾讯面试题及基础答案一、编程题(共3题,每题20分)1.(20分)字符串反转题目:编写一个函数,将输入的字符串反转,且不使用额外的字符串变量。例如,输入`"hello"`,输出`"olleh"`。答案:cppinclude<iostream>include<string>usingnamespacestd;stringreverseString(strings){intleft=0,right=s.size()-1;while(left<right){swap(s[left],s[right]);left++;right--;}returns;}intmain(){stringinput="hello";cout<<reverseString(input)<<endl;return0;}解析:通过双指针法,从字符串两端开始交换字符,直到中间相遇。时间复杂度为O(n),空间复杂度为O(1)。2.(20分)二叉树遍历题目:给定一个二叉树,编写代码实现前序遍历(根节点→左子树→右子树)。假设二叉树节点定义如下:cppstructTreeNode{intval;TreeNodeleft;TreeNoderight;TreeNode(intx):val(x),left(NULL),right(NULL){}};答案:cppinclude<iostream>include<vector>usingnamespacestd;voidpreorderTraversal(TreeNoderoot,vector<int>&result){if(root==NULL)return;result.push_back(root->val);preorderTraversal(root->left,result);preorderTraversal(root->right,result);}intmain(){//构建二叉树示例TreeNoderoot=newTreeNode(1);root->left=newTreeNode(2);root->right=newTreeNode(3);root->left->left=newTreeNode(4);root->left->right=newTreeNode(5);vector<int>result;preorderTraversal(root,result);for(intval:result)cout<<val<<"";return0;}解析:前序遍历采用递归或迭代方式,核心逻辑是先访问根节点,再递归左子树,最后递归右子树。递归实现简洁,但需注意栈溢出问题。3.(20分)动态规划——爬楼梯题目:假设你正在爬楼梯,每次可以爬1或2级。给定一个整数n,返回到达顶楼的方法总数。例如,n=2,返回2(1+1或2)。答案:cppinclude<iostream>usingnamespacestd;intclimbStairs(intn){if(n==1)return1;inta=1,b=1,c=0;for(inti=2;i<=n;i++){c=a+b;a=b;b=c;}returnc;}intmain(){cout<<climbStairs(2)<<endl;//输出2return0;}解析:动态规划解法,dp[i]=dp[i-1]+dp[i-2]。使用空间压缩优化为O(1)时间复杂度。二、算法题(共3题,每题20分)1.(20分)排序与查找题目:给定一个无序数组,找出其中第k个最大的元素。例如,数组`[3,2,1,5,6,4]`,k=2,输出5。答案:cppinclude<vector>include<algorithm>usingnamespacestd;intfindKthLargest(vector<int>&nums,intk){sort(nums.begin(),nums.end(),greater<int>());returnnums[k-1];}intmain(){vector<int>nums={3,2,1,5,6,4};cout<<findKthLargest(nums,2)<<endl;//输出5return0;}解析:排序后直接返回第k个元素。时间复杂度为O(nlogn),可优化为O(n)的快速选择算法。2.(20分)链表操作题目:删除链表的倒数第n个节点,并返回链表头。例如,链表`1->2->3->4->5`,n=2,删除后为`1->2->3->5`。答案:cppinclude<iostream>usingnamespacestd;structListNode{intval;ListNodenext;ListNode(intx):val(x),next(NULL){}};ListNoderemoveNthFromEnd(ListNodehead,intn){ListNodedummy=newListNode(0);dummy->next=head;ListNodefast=dummy;ListNodeslow=dummy;for(inti=0;i<n;i++)fast=fast->next;while(fast->next!=NULL){fast=fast->next;slow=slow->next;}slow->next=slow->next->next;deletedummy;returnhead;}intmain(){//构建链表ListNodehead=newListNode(1);head->next=newListNode(2);head->next->next=newListNode(3);head->next->next->next=newListNode(4);head->next->next->next->next=newListNode(5);ListNodenewHead=removeNthFromEnd(head,2);//打印链表return0;}解析:双指针法,快指针先走n步,慢指针再开始移动,当快指针到达末尾时,慢指针的下一个节点即为待删除节点。3.(20分)堆与优先队列题目:用最小堆实现一个LRU(最近最少使用)缓存,支持get和put操作。假设缓存容量为3。答案:cppinclude<unordered_map>include<list>include<functional>usingnamespacestd;classLRUCache{public:LRUCache(intcapacity):capacity(capacity){}intget(intkey){if(cache.find(key)==cache.end())return-1;autoit=cache[key];//将访问的元素移动到头部cache[key]->second->splice(cache[key]->second,cache[key]->first,cache[key]);returnit->second;}voidput(intkey,intvalue){if(cache.find(key)!=cache.end()){//更新值并移动到头部cache[key]->second=value;cache[key]->first->splice(cache[key]->first,cache[key]->first,cache[key]);}else{//新增元素if(cache.size()==capacity){//删除最久未使用的元素cache.erase(lru.back().first);lru.pop_back();}lru.emplace_front(key,value);cache[key]=lru.begin();}}private:intcapacity;list<pair<int,int>>lru;//双向链表存储键值对unordered_map<int,list<pair<int,int>>::iterator>cache;//哈希表映射键到链表节点};intmain(){LRUCachecache(3);cache.put(1,1);cache.put(2,2);cache.get(1);//返回1cache.put(3,3);//去除键2cache.get(2);//返回-1(未找到)cache.put(4,4);//去除键1cache.get(1);//返回-1(未找到)cache.get(3);//返回3cache.get(4);//返回4return0;}解析:LRU缓存使用双向链表和哈希表实现。链表维护访问顺序,哈希表实现O(1)的get和put操作。三、系统设计题(共2题,每题30分)1.(30分)分布式短链系统设计题目:设计一个分布式短链系统,要求:-输入长链接,输出短链接(如`/abc`)。-支持全局唯一ID生成。-高可用、高并发。答案:系统架构:1.前端服务(Nginx+APIGateway):负载均衡,路由请求到后端集群。2.后端服务(微服务集群):负责ID生成、短链映射存储(Redis+MySQL)。3.ID生成器(RedisCluster):分布式原子自增ID。4.CDN缓存:加速短链解析。核心逻辑:-用户输入长链接,后端生成唯一ID(如UUID或Redis自增)。-将`ID<->长链接`映射存入Redis(热key),MySQL(持久化)。-返回短链`/{ID}`,并设置TTL(如24小时)。-访问短链时,后端查Redis,若未命中则查MySQL,返回长链接。高可用方案:-Redis集群分片,MySQL读写分离。-服务降级熔断,限流防洪。解析:关键点在于ID生成和映射存储,Redis保证高并发读写,MySQL持久化数据。2.(30分)实时消息推送系统题目:设计一个实时消息推送系统(如微信消息),要求:-支持离线推送、在线推送。-支持按用户标签、群组推送。-高并发、低延迟。答案:系统架构:1.消息队列(Kafka/RabbitMQ):异步解耦,削峰填谷。2.用户服务(Redis+MySQL):存储用户在线状态、标签。3.推送服务(MQTT/WebSocket):实时推送。4.离线存储(Redis):缓存未送达消息。核心逻辑

温馨提示

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

评论

0/150

提交评论