版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年腾讯公司技术部面试指南及答案解析一、编程能力测试(共5题,每题10分,总分50分)1.题目:请实现一个函数,输入一个非负整数n,返回其二进制表示中1的个数。例如,输入3(二进制为11),返回2。答案:cppintcountBits(intn){intcount=0;while(n){count+=n&1;n>>=1;}returncount;}解析:-使用位运算`n&1`判断最低位是否为1,每次右移一位,直到n为0。-时间复杂度O(logn),空间复杂度O(1)。-也可使用内置函数(如C++的`__builtin_popcount`)实现。2.题目:给定一个字符串s,请找到其中不重复的最长子串的长度。例如,输入"abcabcbb",返回3("abc")。答案:cppintlengthOfLongestSubstring(strings){unordered_set<char>set;intleft=0,maxLen=0;for(intright=0;right<s.size();++right){while(set.find(s[right])!=set.end()){set.erase(s[left++]);}set.insert(s[right]);maxLen=max(maxLen,right-left+1);}returnmaxLen;}解析:-使用滑动窗口思想,`left`和`right`分别表示窗口的左右边界。-哈希集合记录窗口内的字符,若发现重复,则移动`left`直到无重复。-时间复杂度O(n),空间复杂度O(min(m,n)),m为字符集大小。3.题目:实现一个LRU(LeastRecentlyUsed)缓存,支持get和put操作。例如:cppLRUCachecache=newLRUCache(2);cache.put(1,1);//缓存是{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(未找到)答案:cppclassLRUCache{public:structNode{intkey,val;Nodeleft,right;Node(intk,intv):key(k),val(v),left(nullptr),right(nullptr){}};intcapacity;unordered_map<int,Node>cache;Nodehead=newNode(0,0),tail=newNode(0,0);LRUCache(intc):capacity(c){head->right=tail;tail->left=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){NodetoDel=tail->left;cache.erase(toDel->key);removeNode(toDel);deletetoDel;}}}voidmoveToHead(Nodenode){removeNode(node);addToHead(node);}voidaddToHead(Nodenode){node->left=head;node->right=head->right;head->right->left=node;head->right=node;}voidremoveNode(Nodenode){node->left->right=node->right;node->right->left=node->left;}};解析:-使用双向链表和哈希集合实现。链表头部为最近使用,尾部为最久未使用。-get操作将节点移至头部,put操作若已存在则更新并移动至头部,若超出容量则删除尾部节点。-时间复杂度O(1),空间复杂度O(capacity)。4.题目:给定一个无重复元素的数组nums,返回所有可能的子集。例如,输入[1,2,3],返回[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]。答案:cppvector<vector<int>>subsets(vector<int>&nums){vector<vector<int>>res;vector<int>path;sort(nums.begin(),nums.end());dfs(nums,0,path,res);returnres;}voiddfs(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]);dfs(nums,i+1,path,res);path.pop_back();}}解析:-回溯算法思想,从start位置开始遍历,每次选择当前元素并递归,最后撤销选择。-时间复杂度O(2^n),空间复杂度O(n)。5.题目:实现一个二叉树的中序遍历,返回节点值的列表。例如:输入:[1,null,2,3]1\2/3输出:[1,3,2]答案:cppvector<int>inorderTraversal(TreeNoderoot){vector<int>res;stack<TreeNode>st;TreeNodenode=root;while(node!=nullptr||!st.empty()){while(node!=nullptr){st.push(node);node=node->left;}node=st.top();st.pop();res.push_back(node->val);node=node->right;}returnres;}解析:-迭代法中序遍历,使用栈记录节点。先遍历左子树,再访问节点,最后遍历右子树。-时间复杂度O(n),空间复杂度O(h),h为树的高度。二、系统设计能力测试(共4题,每题12分,总分48分)1.题目:设计一个高并发的短链接系统,要求支持高并发访问,并能在数小时内生成唯一的短链接。答案:-核心思路:1.短链接生成:使用哈希函数(如MD5或自定义算法)将长链接映射为固定长度的短链接(如6位字母数字组合)。2.分布式存储:使用Redis或Memcached存储长链接与短链接的映射,利用其高并发特性。3.幂等性保证:若短链接已存在,则重新生成;若已映射长链接,则直接返回。4.分布式ID生成器:使用TwitterSnowflake算法生成唯一ID,避免重复。5.缓存穿透:对热点短链接设置TTL,防止频繁查询后端存储。解析:-高并发处理:Redis/Memcached支持百万级QPS,配合分布式ID生成器确保唯一性。-性能优化:哈希函数应尽量减少冲突,短链接长度不宜过长(如6位可支持62^6种组合)。2.题目:设计一个微博系统,要求支持用户发布、关注、点赞等功能,并保证数据一致性。答案:-核心思路:1.数据存储:-用户表:MySQL分表存储(按用户ID哈希)。-微博表:InnoDB引擎支持事务,按时间倒序存储。-关注关系:Redis存储临时关注列表,MySQL持久化。2.发布流程:-用户提交微博后,先写入Redis缓存,异步写入MySQL。若失败则重试。3.关注关系:-关注/取关操作先更新Redis,最终同步到MySQL。4.点赞功能:-使用Redis计数器(ZSet或Hash)存储点赞数,最终同步到微博表。解析:-数据一致性:通过Redis异步写入MySQL实现最终一致性,避免热点数据锁表。-高可用:可用读写分离+分库分表解决高并发瓶颈。3.题目:设计一个实时推荐系统,输入用户行为日志,输出推荐商品。答案:-核心思路:1.数据采集:Kafka收集用户行为日志(点击、购买等)。2.实时处理:Flink或SparkStreaming实时计算用户画像(如协同过滤)。3.推荐算法:-短时推荐:基于用户最近行为(如LRU缓存)。-长时推荐:基于用户画像(如ItemCF、深度学习模型)。4.缓存层:Redis存储热门推荐结果,降低后端计算压力。解析:-实时性:Kafka+流处理框架保证毫秒级推荐。-冷启动:新用户可推荐热门商品,逐步积累行为数据。4.题目:设计一个高并发的秒杀系统,要求支持每秒百万级请求。答案:-核心思路:1.流量控制:Nginx限流,熔断器(如Hystrix)防雪崩。2.库存扣减:Redis原子操作扣减库存(Lua脚本保证原子性)。3.分布式锁:若使用MySQL,需悲观锁或Redis分布式锁防止超卖。4.结果通知:扣减成功后,异步写入订单(消息队列)。解析:-性能优化:Redis原子操作避免锁竞争,消息队列异步处理订单。-容错性:订单与库存解耦,先扣库存后创建订单,失败则回滚。三、数据库与中间件(共4题,每题10分,总分40分)1.题目:解释MySQL中的事务隔离级别,并说明脏读、不可重复读、幻读的区别。答案:-隔离级别:-READUNCOMMITTED:允许脏读(未提交数据可见)。-READCOMMITTED:允许不可重复读(提交后新插入行可见)。-REPEATABLEREAD:允许幻读(跨事务插入新行)。-SERIALIZABLE:完全隔离(锁表)。解析:-脏读:A未提交,B读取到A的未提交数据。-不可重复读:A读取数据后,B提交新行,A再次读取数据不一致。-幻读:A读取数据后,B提交新行,A再次读取数据行数变化。2.题目:如何优化MySQL查询性能?答案:-索引优化:-覆盖索引(索引包含所有查询字段)。-聚合索引(主键+其他字段)。-索引下推(联合索引先过滤)。-SQL优化:-避免`SELECT`,使用具体字段。-`JOIN`优化(`INNERJOIN`优先)。-避免全表扫描(`WHERE`条件覆盖索引)。解析:-执行计划:使用`EXPLAIN`分析`key`、`rows`等指标。-慢查询日志:定期分析并优化。3.题目:Redis的淘汰策略有哪些?如何选择?答案:-淘汰策略:-`noeviction`:不淘汰(默认,内存满报错)。-`allkeys-lru`:淘汰最少使用键。-`allkeys-random`:随机淘汰键。-`volatile-lru`:淘汰过期键中最少使用的。-`volatile-ttl`:淘汰过期时间最短的键。解析:-选择策略:-热点数据用`allkeys-lru`。-冷数据用`volatile-ttl`。-内存充足用`noeviction`。4.题目:如何保证消息队列的可靠性?答案:-核心机制:1.重试机制:消息消费失败后,延迟重试。2.幂等性设计:消息处理前检查是否已处理(如数据库标记)。3.事务消息:RocketMQ/Redis支持事务消息,确保发送与消费一致。4.消息确认:消费者ack确认,未确认则重新发送。解析:-Broker端:保证消息不丢失(持久化+发送方确认)。-Consumer端:避免重复消费(幂等性)。四、算法与数据结构(共5题,每题8分,总分40分)1.题目:给定一个字符串,判断是否是有效的括号组合(如"()[]{}")。答案:cppboolisValid(strings){stack<char>st;unordered_map<char,char>pairs={{'}','{'},{']','['},{')','('}};for(charc:s){if(pairs.count(c)){if(st.empty()||st.top()!=pairs[c])returnfalse;st.pop();}else{st.push(c);}}returnst.empty();}解析:-使用栈匹配括号,时间复杂度O(n),空间复杂度O(n)。2.题目:合并两个有序链表,返回合并后的头节点。答案:cppListNodemergeTwoLists(ListNodel1,ListNodel2){ListNodedummy(0);ListNodetail=&dummy;while(l1&&l2){if(l1->val<l2->val){tail->next=l1;l1=l1->next;}else{tail->next=l2;l2=l2->next;}tail=tail->next;}tail->next=l1?l1:l2;returndummy.next;}解析:-使用虚拟头节点简化边界处理。3.题目:给定一个数组,找到其中和为target的三个数的组合。答案:cppvector<vector<int>>threeSum(vector<int>&nums){sort(nums.begin(),nums.end());vector<vector<int>>res;for(inti=0;i<nums.size();++i){if(i>0&&nums
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年粤规资环碳能科技信息(广东)有限公司招5人备考题库带答案详解
- 理解句意的课件
- 职场面试高级技巧指南
- 市场调研就业前景分析
- 新手模特面试技巧指南
- 镇街消防安全约谈制度
- 砭灸养生沟通话术
- 英文视角的医患关系
- 银行客服面试应答技巧
- 暑假实习线上面试技巧
- TCAMET02002-2019城市轨道交通预埋槽道及套筒技术规范
- 24- 解析:吉林省长春市2024届高三一模历史试题(解析版)
- 临床护士工作现状分析
- 电力线路架设安全操作方案
- 桥台钢筋专项施工方案
- (正式版)DB65∕T 4229-2019 《肉牛、肉羊全混合日粮(∕TMR)搅拌机》
- 诚信教育主题班会诚就未来信立人生课件
- 2025年高压电工考试题库:安全事故应急响应与救援措施试题卷
- 《数控机床编程与仿真加工》课件-项目9斯沃数控铣仿真软件的操作
- 2025年税务考试题库大题及答案
- 江西省赣州市2024-2025学年高一上学期1月期末考试生物试题(含答案)
评论
0/150
提交评论