版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年腾讯技术岗位面试全解析及答案一、编程基础与算法(共5题,每题10分)1.题目:给定一个无重复元素的整数数组,返回所有可能的子集。示例输入:`[1,2,3]`示例输出:`[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]`答案:cppinclude<vector>usingnamespacestd;classSolution{public:vector<vector<int>>subsets(vector<int>&nums){vector<vector<int>>res;vector<int>path;backtrack(nums,0,path,res);returnres;}voidbacktrack(vector<int>&nums,intstart,vector<int>&path,vector<vector<int>>&res){res.push_back(path);for(inti=start;i<nums.size();++i){path.push_back(nums[i]);backtrack(nums,i+1,path,res);path.pop_back();}}};解析:采用回溯算法,通过递归遍历所有可能的子集。每次选择当前元素加入路径,并继续递归;不选择时直接进入下一层递归。时间复杂度为O(2^n),空间复杂度为O(n)。2.题目:实现一个LRU(最近最少使用)缓存,支持get和put操作。示例输入:cppLRUCachecache=newLRUCache(2);cache.put(1,1);cache.put(2,2);//缓存是{1=1,2=2}cache.get(1);//返回1cache.put(3,3);//去除键2//缓存是{1=1,3=3}cache.get(2);//返回-1(未找到)cache.put(4,4);//去除键1//缓存是{4=4,3=3}cache.get(3);//返回3cache.get(4);//返回4答案:cppinclude<unordered_map>include<list>classLRUCache{private:intcapacity;std::list<int>keys;std::unordered_map<int,int>cache;public:LRUCache(intcapacity_):capacity(capacity_){}intget(intkey){autoit=cache.find(key);if(it==cache.end())return-1;keys.remove(key);keys.push_front(key);returnit->second;}voidput(intkey,intvalue){autoit=cache.find(key);if(it!=cache.end()){keys.remove(key);keys.push_front(key);cache[key]=value;}else{if(cache.size()==capacity){intoldest=keys.back();keys.pop_back();cache.erase(oldest);}keys.push_front(key);cache[key]=value;}}};解析:使用双向链表和哈希表实现。双向链表存储键的顺序,哈希表实现O(1)时间复杂度的查找。get操作将键移动到链表头部;put操作在链表头部插入新键,若超出容量则删除链表尾部元素。3.题目:给定一个二叉树,判断其是否是完全二叉树。示例输入:1/\23/\\456示例输出:`true`答案:cppinclude<queue>usingnamespacestd;structTreeNode{intval;TreeNodeleft;TreeNoderight;TreeNode(intx):val(x),left(nullptr),right(nullptr){}};classSolution{public:boolisCompleteTree(TreeNoderoot){if(!root)returntrue;queue<TreeNode>q;q.push(root);boolend=false;while(!q.empty()){TreeNodenode=q.front();q.pop();if(!node){end=true;}else{if(end)returnfalse;q.push(node->left);q.push(node->right);}}returntrue;}};解析:层次遍历二叉树。若在遇到空节点之前存在空节点,则不是完全二叉树。遍历过程中,一旦遇到空节点,后续所有节点必须为空。4.题目:实现快速排序算法。示例输入:`[4,1,3,9,7]`示例输出:`[1,3,4,7,9]`答案:cppinclude<vector>usingnamespacestd;classSolution{public:voidquickSort(vector<int>&arr,intleft,intright){if(left>=right)return;intpivot=partition(arr,left,right);quickSort(arr,left,pivot-1);quickSort(arr,pivot+1,right);}intpartition(vector<int>&arr,intleft,intright){intpivot=arr[right];inti=left-1;for(intj=left;j<right;++j){if(arr[j]<=pivot){i++;swap(arr[i],arr[j]);}}swap(arr[i+1],arr[right]);returni+1;}};解析:选择最后一个元素作为基准,将小于基准的元素放到基准左边,大于基准的元素放到右边。递归对左右子数组进行排序。平均时间复杂度为O(nlogn)。5.题目:给定一个字符串,找到最长回文子串的长度。示例输入:`"babad"`示例输出:`3`("bab"或"aba")答案:cppinclude<string>usingnamespacestd;classSolution{public:intlongestPalindrome(strings){if(s.empty())return0;intn=s.size();vector<vector<bool>>dp(n,vector<bool>(n,false));intmaxLen=1;for(inti=0;i<n;++i){dp[i][i]=true;}for(inti=n-2;i>=0;--i){for(intj=i+1;j<n;++j){if(s[i]==s[j]){if(j-i==1||dp[i+1][j-1]){dp[i][j]=true;maxLen=max(maxLen,j-i+1);}}}}returnmaxLen;}};解析:动态规划解法。dp[i][j]表示s[i..j]是否为回文。初始化对角线为true,然后遍历所有子串,若s[i]==s[j]且子串s[i+1..j-1]为回文,则s[i..j]为回文。二、系统设计(共3题,每题15分)1.题目:设计一个短URL生成系统(如tinyURL)。要求:-支持将任意长度的URL映射为固定长度的短URL。-支持通过短URL反查原始URL。-高并发场景下保证性能。答案:方案:1.URL编码:将原始URL通过哈希算法(如SHA-256)生成固定长度的哈希值,再通过Base62(a-z,A-Z,0-9)进行编码,缩短长度。2.分布式存储:使用Redis或Memcached存储短URL与原始URL的映射关系,支持高并发读写。3.数据库备份:若Redis/Memcached失效,可通过数据库(如MySQL)恢复映射关系。伪代码:cpp//生成短URLstringshortenURL(stringlongURL){stringhash=SHA256(longURL);stringshortCode=encodeBase62(hash);stringshortURL="/"+shortCode;cache.set(shortCode,longURL);returnshortURL;}//反查原始URLstringgetOriginalURL(stringshortCode){returncache.get(shortCode)?:db.get(shortCode);}解析:-哈希编码保证唯一性,Base62缩短长度。-分布式缓存提升性能,数据库备份保证可用性。-可扩展性:通过分布式部署Redis集群,支持海量请求。2.题目:设计一个高并发的微博Feed流系统。要求:-用户可获取包含关注用户、热门推荐、最新动态的Feed。-支持实时更新(如发布新动态时快速推送给用户)。答案:架构:1.数据存储:-用户关注关系:Redis哈希表(user_id->followers)。-动态:MySQL(id,user_id,content,created_at,likes等)。-实时更新:Kafka消息队列(动态发布时推送)。2.Feed生成:-用户请求时,按权重计算Feed顺序(如:关注用户50%、热门推荐30%、最新动态20%)。-缓存用户Feed(Redis,过期时间5分钟)。3.实时推送:-用户订阅WebSocket,动态发布时通过Kafka推送至客户端。伪代码:cpp//用户请求Feedvector<Tweet>getFeed(intuserId){stringkey="feed:"+to_string(userId);if(cache.exists(key)){returncache.get(key);}vector<Tweet>feed=calculateFeed(userId);cache.set(key,feed,300);//5分钟过期returnfeed;}//动态发布voidpublishTweet(intuserId,stringcontent){//保存动态到MySQL//推送到Kafkakafka.publish("tweets",{userId,content});}解析:-权重算法平衡个性化与热门推荐。-缓存减少数据库压力,WebSocket保证实时性。-Kafka解耦发布与消费,支持弹性扩展。3.题目:设计一个分布式限流系统(如微博登录接口)。要求:-单机QPS限制(如每个IP每秒不超过10次请求)。-支持动态调整限流阈值。答案:方案:1.Redis滑动窗口:-使用Redis的有序集合(ZSET)记录每个IP的请求时间戳。-每次请求时,移除过期时间戳,添加当前时间戳。-判断窗口内元素数量是否超过阈值。2.动态限流:-通过配置中心(如Apollo)动态更新限流阈值。-监控系统负载时自动降级。伪代码:cppboolisLimited(stringip){stringkey="rate_limit:"+ip;intlimit=config.get("limit");//动态获取阈值intnow=timestamp();redis.zremrangebyscore(key,0,now-1000);redis.zadd(key,now,"1");longcount=redis.zcard(key);returncount>limit;}解析:-滑动窗口避免固定窗口的冷启动问题。-Redis保证高并发性能,配置中心支持动态调整。-可扩展性:通过Redis集群支持海量IP限流。三、数据库与存储(共3题,每题15分)1.题目:解释MySQL事务的ACID特性,并说明如何实现。答案:ACID特性:-原子性(Atomicity):使用事务日志(RedoLog)保证事务要么完全执行,要么完全回滚。-一致性(Consistency):通过锁机制(行锁/表锁)和MVCC(多版本并发控制)保证数据一致性。-隔离性(Isolation):可通过事务隔离级别(READCOMMITTED,REPEATABLEREAD等)控制。-持久性(Durability):通过RedoLog和Checkpoint机制保证数据不丢失。实现方式:sqlSTARTTRANSACTION;UPDATEaccountsSETbalance=balance-100WHEREid=1;UPDATEaccountsSETbalance=balance+100WHEREid=2;COMMIT;解析:-事务日志保证原子性,锁机制保证一致性。-隔离级别通过MVCC实现,RedoLog保证持久性。-腾讯业务中常用REPEATABLEREAD(如订单系统)。2.题目:设计一个高并发的订单表,支持高并发写操作。要求:-订单ID全局唯一。-支持事务性插入。-优化查询性能。答案:方案:1.订单ID生成:-使用Redis实现分布式ID生成器(如Snowflake算法)。2.表结构:sqlCREATETABLEorders(idBIGINTAUTO_INCREMENT,user_idBIGINT,product_idBIGINT,amountDECIMAL(10,2),statusVARCHAR(10),created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP,INDEX(user_id),INDEX(product_id));3.事务优化:-使用InnoDB引擎(行锁+MVCC)。-批量插入时开启事务。伪代码:cpp//生成订单IDlonggenerateOrderId(){returnredis.incr("order_id");}//插入订单voidinsertOrder(intuserId,intproductId,doubleamount){longorderId=generateOrderId();STARTTRANSACTION;INSERTINTOorders(id,user_id,product_id,amount)VALUES(orderId,userId,productId,amount);COMMIT;}解析:-Redis保证ID全局唯一,InnoDB支持高并发写。-索引优化查询性能,批量事务减少锁竞争。-可扩展性:通过分库分表(如ShardingSphere)支持海量订单。3.题目:解释MySQL索引的类型及适用场景。答案:索引类型:1.B-Tree索引:-适用于范围查询(如`priceBETWEEN10AND20`)。-常用于主键、普通索引。2.哈希索引:-适用于精确查询(如`WHEREid=100`)。-不支持范围查询。3.全文索引:-适用于文本搜索(如`WHEREcontentLIKE'%苹果%'`)。-使用InnoDB引擎支持。4.空间索引:-适用于GIS数据。适用场景:-主键:使用自增B-Tree索引。-频繁查询:建立B-Tree索引(如`user_id`)。-全文搜索:使用Ngram分词。解析:-B-Tree通用性高,哈希查询快但范围查询受限。-全文索引适用于搜索引擎场景。-注意:冗余索引(如`a,b`联合索引包含`a`单索引)会降低写入性能。四、网络与分布式(共3题,每题15分)1.题目:解释TCP的三次握手过程,并说明为何不能重放。答案:三次握手:1.SYN:客户端发送SYN=1,随机初始化seq=x。2.SYN+ACK:服务器回复SYN=1,ACK=1,seq=y,ack=x+1。3.ACK:客户端回复ACK=1,ack=y+1。不能重放的原因:-序列号单调递增:TCP保证seq唯一,重放时seq已失效。-ACK确认:每次ACK都会更新ack值,重放会因ack不匹配被丢弃。解析:-seq/ack防止重放,时间戳防止超时重传。-腾讯业务中常用TCPKeepalive检测连接活性。2.题目:设计一个高并发的分布式计数器。要求:-支持全局原子递增。-节点重启后能恢复数据。答案:方案:1.Redis原子操作:redisINCRcounter2.数据库方案:sqlUPDATEcountersSETvalue=value+1WHEREname='counter';3.分布式锁方案(备选):cpplock->lock();value++;lock->unlock();解析:-Redis保证原子性,RDB/AOF持久化数据。-数据库支持事务,但写入性能较低。-可扩展性:通过Redis集群支持海量计数器。3.题目:解释CAP理论,并说明如何在高可用系统中取舍。答案:CAP理论:-一致性(Consistency):所有节点访问数据一致。-可用性(Availability):节点总响应请求。-分区容错性(PartitionTolerance):网络分区时仍能运行。取舍策略:-读多写少场景(如微博缓存):-使用最终一致性(如Redis+TSO)。-写多场景(如订单系统):-优先一致性(如Raft协议)。解析:-分布式系统必牺牲至少一项CAP。-腾讯业务中常用Paxos/Raft保证一致性,Redis实现高可用。-FIFO队列解决最终一致性场景。五、项目与系统(共2题,每题20分)1.题目:描述你参与过的一个高并发项目,并说明如何解决性能瓶颈。示例:微博动态发布系统答案:项目:微博动态发布系统性能瓶颈:-数据库瓶颈:动态发布时主表写入压力大。-缓存失效:用户Feed查询频繁,缓存命中率低。解决方案:1.数据库优化:-使用Redis异步写入(发布时先入队列,后台批量写入MySQL)。-动态表分区(按时间切分订单表)。2.缓存优化:-Feed预加载(用户登录时提前加载Feed)。-使用本地缓存(CPU缓存)加速热点数据。解析:-异步写入分散压力,分表提升写入性能。-预加载+本地缓存减少远程请求。-可扩展性:通过消息队列(Kafka)解耦业务。2.题目:设计一个分布式文件存储系统(如腾讯云COS)。要求:-支持海量文件存储。-支持高并发读写。-支持文件分片。答案:架构:1.分片存储:-文件切分为固定大小分片(如4MB)。-每个分片存储到不同节点(如H
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年体育教育(运动训练学)考题及答案
- 2026年大连普高生单招职业适应性测试零基础通关题库含答案
- 2025年高职地图数据投影转换技术(投影转换实操)试题及答案
- 七年级地理(世界地理基础)2025-2026年上学期期末试题及答案
- 2025年高职(水土保持技术)水土保持监测技术阶段测试试题及答案
- 2025年中职生物教育(生物教学基础)试题及答案
- 2026年配送管理(配送成本控制)考题及答案
- 2025年大学二年级(地质工程)矿山地质基础试题及答案
- 2025年大学土木工程(房地产开发企业技术管理)试题及答案
- 2025年大学(预防医学)预防医学心理学试题及答案
- 化肥卖合同范本
- 2025年大学本科三年级(建筑环境与能源应用工程)暖通空调设计测试题及答案
- 6第六章 项目管理架构
- 2025年全新中医药学概论试题与答案
- 2026云上(贵州)数据开发有限公司第一次社会招聘18人考试笔试备考题库及答案解析
- 2025秋小学湘科版(新教材)科学三年级上册知识点及期末测试卷及答案
- 装修工赔偿协议书
- 2025重庆两江新区公安机关辅警招聘56人备考题库含答案详解(完整版)
- 国开电大可编程控制器应用课程实验参考答案
- 化工有限公司年产4000吨-N-N-二甲基苯胺项目安全预评价报告
- 法制进校园安全伴我行主题班会ppt
评论
0/150
提交评论