2026年腾讯研发工程师面试题集_第1页
2026年腾讯研发工程师面试题集_第2页
2026年腾讯研发工程师面试题集_第3页
2026年腾讯研发工程师面试题集_第4页
2026年腾讯研发工程师面试题集_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

2026年腾讯研发工程师面试题集一、编程基础(3题,每题15分,共45分)1.编程题:字符串反转-题目:给定一个字符串`s`,不使用内置的反转函数,编写一个函数`reverseString`,将字符串中的字符顺序反转。例如,输入`"hello"`,输出`"olleh"`。-要求:时间复杂度O(n),空间复杂度O(1)。-答案:cppvoidreverseString(chars){if(s==nullptr)return;intleft=0,right=strlen(s)-1;while(left<right){swap(s[left],s[right]);left++;right--;}}2.编程题:合并两个有序数组-题目:给定两个有序数组`nums1`和`nums2`,合并它们为一个有序数组。假设`nums1`的长度为`m`,`nums2`的长度为`n`,且`nums1`的末尾有足够的空间容纳`nums2`的元素。-要求:不使用额外的数组空间,时间复杂度O(m+n)。-答案:cppvoidmerge(intnums1,intm,intnums2,intn){inti=m-1,j=n-1,k=m+n-1;while(i>=0&&j>=0){if(nums1[i]>nums2[j]){nums1[k]=nums1[i];i--;}else{nums1[k]=nums2[j];j--;}k--;}while(j>=0){nums1[k]=nums2[j];j--;k--;}}3.编程题:二叉树的最大深度-题目:给定一个二叉树,编写一个函数`maxDepth`,返回其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。-要求:使用递归方法。-答案:cppstructTreeNode{intval;TreeNodeleft;TreeNoderight;TreeNode(intx):val(x),left(nullptr),right(nullptr){}};intmaxDepth(TreeNoderoot){if(root==nullptr)return0;returnmax(maxDepth(root->left),maxDepth(root->right))+1;}二、算法设计(3题,每题20分,共60分)1.算法设计题:LRU缓存机制-题目:设计一个LRU(LeastRecentlyUsed)缓存机制,支持容量为`capacity`的缓存。实现`get`和`put`操作:`get(key)`返回键`key`对应的值,如果不存在返回-1;`put(key,value)`将键`key`和值`value`插入缓存中,如果键已存在,则更新其值。当缓存容量已满时,删除最久未使用的键。-要求:使用哈希表和双向链表实现,时间复杂度O(1)。-答案:cppclassLRUCache{public:structNode{intkey,val;Nodeprev;Nodenext;Node(intk,intv):key(k),val(v),prev(nullptr),next(nullptr){}};LRUCache(intcapacity):capacity_(capacity),head_(newNode(0,0)),tail_(newNode(0,0)){head_->next=tail_;tail_->prev=head_;}intget(intkey){if(cache.find(key)==cache.end())return-1;Nodenode=cache[key];moveToHead(node);returnnode->val;}voidput(intkey,intvalue){if(cache.find(key)!=cache.end()){Nodenode=cache[key];node->val=value;moveToHead(node);}else{Nodenode=newNode(key,value);cache[key]=node;addToHead(node);if(cache.size()>capacity_){NodenodeToRemove=tail_->prev;removeNode(nodeToRemove);cache.erase(nodeToRemove->key);deletenodeToRemove;}}}private:intcapacity_;unordered_map<int,Node>cache;Nodehead_,tail_;voidaddToHead(Nodenode){node->prev=head_;node->next=head_->next;head_->next->prev=node;head_->next=node;}voidremoveNode(Nodenode){node->prev->next=node->next;node->next->prev=node->prev;}voidmoveToHead(Nodenode){removeNode(node);addToHead(node);}};2.算法设计题:N皇后问题-题目:编写一个函数`solveNQueens`,解决N皇后问题。该问题要求放置N个皇后在N×N的棋盘上,使得任何两个皇后都不在同一条行、列或对角线上。-要求:返回所有可能的解决方案。-答案:cppclassSolution{public:vector<vector<string>>solveNQueens(intn){vector<vector<string>>results;vector<int>queenPos(n,0);solveNQueensHelper(n,0,queenPos,results);returnresults;}private:voidsolveNQueensHelper(intn,introw,vector<int>&queenPos,vector<vector<string>>&results){if(row==n){vector<string>solution(n,string(n,'.'));for(inti=0;i<n;++i){solution[i][queenPos[i]]='Q';}results.push_back(solution);return;}for(intcol=0;col<n;++col){if(isValid(queenPos,row,col)){queenPos[row]=col;solveNQueensHelper(n,row+1,queenPos,results);}}}boolisValid(constvector<int>&queenPos,introw,intcol){for(inti=0;i<row;++i){if(queenPos[i]==col||abs(queenPos[i]-col)==abs(i-row)){returnfalse;}}returntrue;}};3.算法设计题:滑动窗口最大值-题目:给定一个数组`nums`和一个整数`k`,设计一个函数`maxSlidingWindow`,返回一个数组,其中每个元素是`nums`中长度为`k`的滑动窗口内的最大值。-要求:时间复杂度O(n)。-答案:cppclassSolution{public:vector<int>maxSlidingWindow(intnums,intnumsSize,intk){vector<int>result;if(numsSize==0||k==0)returnresult;deque<int>dq;for(inti=0;i<numsSize;++i){while(!dq.empty()&&nums[dq.back()]<=nums[i]){dq.pop_back();}dq.push_back(i);if(dq.front()<=i-k){dq.pop_front();}if(i>=k-1){result.push_back(nums[dq.front()]);}}returnresult;}};三、系统设计(2题,每题25分,共50分)1.系统设计题:设计一个微博系统-题目:设计一个微博系统,支持用户发布微博、关注/取消关注用户、获取关注者的微博时间线等功能。-要求:说明系统架构、数据存储设计、主要接口设计。-答案:-系统架构:-前端:Web端(React/Vue)、移动端(iOS/Android)-后端:API服务器(Node.js/Go/JavaSpringBoot)、消息队列(Kafka/RabbitMQ)-数据库:关系型数据库(MySQL/PostgreSQL)存储用户信息、微博数据;NoSQL数据库(Redis/Memcached)缓存热点数据;图数据库(Neo4j)存储用户关系。-其他:CDN加速静态资源;日志系统(ELKStack)记录系统日志。-数据存储设计:-用户表:存储用户基本信息(用户ID、用户名、密码、注册时间等)-微博表:存储微博内容(微博ID、用户ID、内容、发布时间等)-关系表:存储关注关系(用户ID、关注者ID)-点赞表:存储点赞关系(微博ID、用户ID)-主要接口设计:-`POST/api/tweets`:发布微博-`GET/api/tweets`:获取用户微博时间线-`POST/api/follow`:关注用户-`POST/api/unfollow`:取消关注用户-`GET/api/tweets/:tweetId/like`:点赞微博2.系统设计题:设计一个短链接系统-题目:设计一个短链接系统,支持将长链接转换为短链接,并能够通过短链接访问原始长链接。-要求:说明系统架构、数据存储设计、主要接口设计。-答案:-系统架构:-前端:Web端、移动端-后端:API服务器(Node.js/Go/JavaSpringBoot)、缓存系统(Redis)-数据库:关系型数据库(MySQ

温馨提示

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

评论

0/150

提交评论