版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年腾讯公司技术创新面试题及答案一、编程实现题(共3题,每题15分,总分45分)题目1(15分):请实现一个函数,输入一个非负整数数组,返回其中第三大的数。如果数组中没有第三大的数,则返回最大的数。示例:输入:[3,2,1,5,6,4]输出:4输入:[1,2]输出:2要求:1.时间复杂度不超过O(n)。2.不能使用排序。答案与解析:cppinclude<vector>include<climits>usingnamespacestd;intthirdMax(vector<int>&nums){longfirst=LONG_MIN,second=LONG_MIN,third=LONG_MIN;for(intnum:nums){if(num>first){third=second;second=first;first=num;}elseif(num>second&&num<first){third=second;second=num;}elseif(num>third&&num<second){third=num;}}return(third==LONG_MIN)?first:third;}解析:1.初始化三个变量`first`、`second`、`third`为LONG_MIN,用于存储第一大、第二大、第三大的数。2.遍历数组,对于每个数`num`:-如果`num`大于`first`,则更新`first`、`second`、`third`。-否则,如果`num`大于`second`且小于`first`,则更新`second`、`third`。-否则,如果`num`大于`third`且小于`second`,则更新`third`。3.如果`third`仍为LONG_MIN,说明没有第三大的数,返回`first`;否则返回`third`。题目2(15分):请设计一个LRU(LeastRecentlyUsed)缓存机制,支持以下操作:-`LRUCache(intcapacity)`:初始化缓存容量为`capacity`。-`get(intkey)`:如果缓存中存在键`key`,则返回其值,并将其移动到缓存的最前面;否则返回-1。-`put(intkey,intvalue)`:如果缓存中存在键`key`,则更新其值,并将其移动到缓存的最前面;如果不存在,则添加该键值对,如果缓存已满,则删除最久未使用的键值对。示例:cppLRUCachecache=LRUCache(2);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);//返回4要求:1.`get`和`put`操作的时间复杂度为O(1)。2.可以使用哈希表和双向链表结合实现。答案与解析:cppinclude<unordered_map>usingnamespacestd;classLRUCache{private:structNode{intkey;intvalue;Nodeprev;Nodenext;Node(int_key,int_value):key(_key),value(_value),prev(nullptr),next(nullptr){}};unordered_map<int,Node>cache;Nodehead,tail;intcapacity;voidaddNode(Nodenode){node->next=head->next;node->prev=head;head->next->prev=node;head->next=node;}voidremoveNode(Nodenode){NodeprevNode=node->prev;NodenextNode=node->next;prevNode->next=nextNode;nextNode->prev=prevNode;}voidmoveToHead(Nodenode){removeNode(node);addNode(node);}voidpopTail(){Nodenode=tail->prev;removeNode(node);cache.erase(node->key);deletenode;}public: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->value;}voidput(intkey,intvalue){if(cache.find(key)!=cache.end()){Nodenode=cache[key];node->value=value;moveToHead(node);}else{Nodenode=newNode(key,value);cache[key]=node;addNode(node);if(cache.size()>capacity){popTail();}}}};解析:1.使用`unordered_map`存储键到节点的映射,实现O(1)的查找。2.使用双向链表存储最近使用的节点,头节点`head`和尾节点`tail`为哨兵节点。3.`addNode`:将节点添加到链表头部(最前面)。4.`removeNode`:从链表中移除节点。5.`moveToHead`:将节点移动到链表头部。6.`popTail`:删除链表尾部的节点(最久未使用)。7.`get`:如果找到节点,将其移动到头部并返回值;否则返回-1。8.`put`:如果找到节点,更新值并移动到头部;否则添加新节点,如果超出容量则删除尾部节点。题目3(15分):请实现一个函数,将一个非递归的给定二叉树转换为递归的镜像二叉树。即,对于每个节点,交换其左右子树的位置。示例:输入:4/\27/\/\1369输出:4/\72/\/\9631要求:1.只能交换节点的左右子树,不能修改节点值。2.可以使用递归或迭代实现。答案与解析:cppinclude<queue>usingnamespacestd;structTreeNode{intval;TreeNodeleft;TreeNoderight;TreeNode(intx):val(x),left(nullptr),right(nullptr){}};voidinvertTree(TreeNoderoot){if(root==nullptr)return;swap(root->left,root->right);invertTree(root->left);invertTree(root->right);}解析:1.递归方法:-如果当前节点为空,返回。-交换当前节点的左右子树。-递归地对左右子树进行同样的操作。2.迭代方法(使用队列):-使用队列进行层序遍历,对于每个节点,交换其左右子树,并将子节点加入队列。二、系统设计题(共2题,每题25分,总分50分)题目4(25分):设计一个微信风格的聊天消息推送系统,要求:1.支持单聊和群聊。2.支持消息的实时推送和离线缓存。3.支持消息的优先级排序(如系统消息优先推送)。4.支持消息的签收和未读数统计。要求:1.说明系统架构设计。2.描述关键组件及其职责。3.说明数据存储方案。4.考虑高并发和可扩展性。答案与解析:系统架构设计:1.消息发送模块:负责接收用户发送的消息,对消息进行格式化,并添加优先级。2.消息存储模块:负责将消息存储到数据库中,支持快速查询和更新。3.消息推送模块:负责将消息实时推送到用户的设备上,支持离线缓存。4.消息签收模块:负责记录消息的签收状态,统计未读数。5.调度模块:负责消息的优先级排序和推送调度。关键组件及其职责:1.消息发送模块:-接收用户发送的消息。-对消息进行格式化,添加优先级(如系统消息优先级最高)。-将消息存储到消息存储模块。2.消息存储模块:-使用关系型数据库(如MySQL)存储消息,表结构包括`id`、`sender_id`、`receiver_id`、`group_id`、`message`、`priority`、`status`(发送状态)、`timestamp`等字段。-支持高并发写入和查询。3.消息推送模块:-使用WebSocket或长轮询技术实现实时推送。-支持离线缓存,将未推送的消息存储到Redis中,当用户上线时推送。4.消息签收模块:-记录消息的签收状态(已读/未读)。-统计未读数,并存储到数据库中。5.调度模块:-根据消息的优先级进行排序。-调度消息的推送顺序。数据存储方案:1.消息存储:-使用关系型数据库(如MySQL)存储消息,表结构包括`id`、`sender_id`、`receiver_id`、`group_id`、`message`、`priority`、`status`(发送状态)、`timestamp`等字段。-支持高并发写入和查询。2.离线缓存:-使用Redis存储未推送的消息,支持快速读写。3.未读数统计:-使用Redis或数据库存储未读数,支持快速更新和查询。高并发和可扩展性:1.消息发送模块:使用消息队列(如Kafka)解耦系统,支持高并发处理。2.消息存储模块:使用分库分表技术提高数据库的扩展性。3.消息推送模块:使用分布式推送服务(如MQTT)支持大规模用户推送。4.调度模块:使用分布式任务调度框架(如Celery)支持高并发调度。题目5(25分):设计一个高并发的短链接生成与跳转系统,要求:1.支持高并发生成短链接。2.支持短链接的快速跳转。3.支持短链接的统计(如访问次数)。4.支持自定义短链接前缀。要求:1.说明系统架构设计。2.描述关键组件及其职责。3.说明数据存储方案。4.考虑高可用性和性能优化。答案与解析:系统架构设计:1.短链接生成模块:负责接收长链接,生成短链接,并存储到数据库中。2.短链接存储模块:负责存储短链接和长链接的映射关系,支持快速查询。3.短链接跳转模块:负责接收短链接,查询对应的长链接,并返回跳转结果。4.短链接统计模块:负责统计短链接的访问次数。5.缓存模块:负责缓存热门短链接,提高查询性能。关键组件及其职责:1.短链接生成模块:-接收长链接,生成短链接(如使用Base62编码)。-将短链接和长链接的映射关系存储到数据库中。2.短链接存储模块:-使用关系型数据库(如MySQL)存储短链接和长链接的映射关系,表结构包括`id`、`short_code`、`long_url`、`count`(访问次数)、`created_at`等字段。-支持高并发写入和查询。3.短链接跳转模块:-接收短链接,查询对应的长链接。-返回跳转结果。4.短链接统计模块:-统计短链接的访问次数。5.缓存模块:-使用Redis缓存热门短链接,提高查询性能。数据存储方案:1.短链接存储:-使用关系型数据库(如MySQL)存储短链接和长链接的映射关系,表结构包括`id`、`short_code`、`long_url`、`count`(访问次数)、`created_at`等字段。-支持高并发写入和查询。2.缓存:-使用Redis缓存热门短链接,支持快速读写。3.统计:-使用Redis或数据库存储访问次数,支持快速更新和查询。高可用性和性能优化:1.短链接生成模块:使用消息队列(如Kafka)解耦系统,支持高并发生成短链接。2.短链接存储模块:使用分库分表技术提高数据库的扩展性。3.短链接跳转模块:使用分布式缓存(如Redis集群)支持高并发查询。4.短链接统计模块:使用分布式统计系统(如Hadoop)支持大规模数据处理。5.负载均衡:使用负载均衡器(如Nginx)分发请求,提高系统可用性。三、算法与数据结构题(共2题,每题15分,总分30分)题目6(15分):给定一个包含重复元素的数组,返回所有不重复的三元组,使得这三个数的和等于给定的数。示例:输入:[-1,0,1,2,-1,-4]输出:[[-1,0,1],[-1,-1,2]]要求:1.时间复杂度不超过O(n²)。2.不能使用额外的存储空间。答案与解析:cppinclude<vector>usingnamespacestd;vector<vector<int>>threeSum(vector<int>&nums){vector<vector<int>>res;if(nums.size()<3)returnres;sort(nums.begin(),nums.end());for(inti=0;i<nums.size()-2;++i){if(i>0&&nums[i]==nums[i-1])continue;intleft=i+1,right=nums.size()-1;while(left<right){intsum=nums[i]+nums[left]+nums[right];if(sum==0){res.push_back({nums[i],nums[left],nums[right]});while(left<right&&nums[left]==nums[left+1])left++;while(left<right&&nums[right]==nums[right-1])right--;left++;right--;}elseif(sum<0){left++;}else{right--;}}}returnres;}解析:1.先对数组进行排序,排序后可以使用双指针法。2.遍历数组,对于每个数`nums[i]`,使用双指针`left`和`right`分别指向`i+1`和数组末尾。3.如果`nums[i]+nums[left]+nums[right]==0`,则找到一个三元组,并将其加入结果中。4.移动双指针,跳过重复的数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 术后肺部并发症防治策略
- 《GB-T 22970-2010纺织面料编码 化纤部分》专题研究报告
- 《GBT 33387-2016 工业用反式 - 1,3,3,3 - 四氟丙烯 HFO-1234ze(E)》专题研究报告
- 2026年贵州盛华职业学院单招职业技能考试题库及答案详解一套
- 《正常人体功能》课件-心脏的泵血过程和机制
- 《药品生物检定技术》创新课件-利用现代智能数据分析做中药养生奶茶
- 流动资金循环贷款担保合同
- 2026医院护理部工作计划(5篇)
- 2026年消防施工公司年度工作计划(5篇)
- 2025年3月7日下午山东公务员省考面试题简析及参考答案
- 中国淋巴瘤治疗指南(2025年版)
- 2025年云南省人民检察院聘用制书记员招聘(22人)考试笔试模拟试题及答案解析
- 2026年空气污染监测方法培训课件
- 实习2025年实习实习期转正协议合同
- 2025年广西公需科目答案6卷
- 立体构成-块材课件
- 纯化水再验证方案
- 神泣命令代码
- 北京林业大学 研究生 学位考 科技论文写作 案例-2023修改整理
- 四年级《上下五千年》阅读测试题及答案
- 江苏省五高等职业教育计算机网络技术专业指导性人才培养方案
评论
0/150
提交评论