版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年腾讯公司软件开发工程师的招聘考试题目及答案参考一、编程基础(共5题,每题6分,总计30分)1.(6分)编写一段Python代码,实现一个函数`find_second_largest(numbers)`,输入一个非空整数列表`numbers`,返回该列表中第二大的数。如果列表中所有数都相同,则返回`None`。答案:pythondeffind_second_largest(numbers):iflen(numbers)<2:returnNoneunique_numbers=list(set(numbers))iflen(unique_numbers)<2:returnNoneunique_numbers.sort(reverse=True)returnunique_numbers[1]解析:-首先判断列表长度是否小于2,如果是则返回`None`。-使用`set`去重,避免重复数字影响结果。-如果去重后列表长度仍小于2,说明所有数都相同,返回`None`。-对去重后的列表降序排序,返回第二个元素即为第二大数。2.(6分)用C++实现一个链表节点结构体`ListNode`,包含整型值`val`和指向下一个节点的指针`next`。然后编写一个函数`reverse_list(head)`,反转链表并返回反转后的头节点。答案:cppstructListNode{intval;ListNodenext;ListNode(intx):val(x),next(nullptr){}};ListNodereverse_list(ListNodehead){ListNodeprev=nullptr;ListNodecurrent=head;while(current!=nullptr){ListNodenext_node=current->next;current->next=prev;prev=current;current=next_node;}returnprev;}解析:-定义链表节点结构体`ListNode`,包含值和指针。-反转链表使用三指针法:`prev`、`current`、`next_node`。-逐个节点反转指针方向,最后返回新的头节点`prev`。3.(6分)编写Java代码,实现一个方法`count_even_pairs(arr)`,输入一个整数数组`arr`,返回数组中相邻偶数对的个数。例如,`[1,2,4,6,3]`返回`2`(`(2,4)`和`(4,6)`)。答案:javapublicclassMain{publicstaticintcount_even_pairs(int[]arr){intcount=0;for(inti=0;i<arr.length-1;i++){if(arr[i]%2==0&&arr[i+1]%2==0){count++;}}returncount;}}解析:-遍历数组,检查相邻两个数是否都是偶数。-如果是,则计数器加1。-最终返回计数结果。4.(6分)用Go语言实现一个函数`merge_two_lists(l1,l2ListNode)ListNode`,合并两个有序链表`l1`和`l2`,返回合并后的有序链表头节点。答案:gotypeListNodestruct{ValintNextListNode}funcmerge_two_lists(l1,l2ListNode)ListNode{dummy:=&ListNode{}current:=dummyforl1!=nil&&l2!=nil{ifl1.Val<l2.Val{current.Next=l1l1=l1.Next}else{current.Next=l2l2=l2.Next}current=current.Next}ifl1!=nil{current.Next=l1}ifl2!=nil{current.Next=l2}returndummy.Next}解析:-使用虚拟头节点`dummy`简化操作。-逐个比较两个链表节点,将较小的节点接入合并链表。-处理剩余节点,最后返回`dummy.Next`。5.(6分)编写JavaScript代码,实现一个函数`remove_duplicates(arr)`,输入一个数组`arr`,返回一个新数组,其中重复元素只保留第一次出现的顺序。例如,`[1,2,2,3,4,4,5]`返回`[1,2,3,4,5]`。答案:javascriptfunctionremove_duplicates(arr){constseen=newSet();constresult=[];for(constnumofarr){if(!seen.has(num)){seen.add(num);result.push(num);}}returnresult;}解析:-使用`Set`记录已出现元素,避免重复。-遍历数组,若元素未出现过则加入结果数组。-最终返回去重后的新数组。二、数据结构与算法(共6题,每题7分,总计42分)1.(7分)解释快速排序(QuickSort)的基本思想,并说明其时间复杂度在不同输入情况下的表现。答案:-基本思想:选择一个基准值(pivot),将数组分为两部分,左边的数都小于基准值,右边的数都大于基准值,然后递归对左右两部分进行排序。-时间复杂度:-最好/平均情况:O(nlogn),每次划分均匀。-最坏情况:O(n²),每次划分极不均匀(如已排序数组)。解析:-快速排序是非递归的,依赖于分治思想。-基准值的选择会影响性能,实际应用中常采用随机化或三数取中法。2.(7分)什么是二叉搜索树(BST)?给出一个示例,并说明查找一个元素的操作步骤。答案:-定义:左子树所有节点值小于根节点,右子树所有节点值大于根节点,且左右子树均为BST。-示例:5/\37/\\248-查找步骤(查找6):1.比较6与5,6>5,向右子树查找。2.比较6与7,6<7,向左子树查找。3.比较6与7,6==7,查找成功。解析:-BST支持高效查找、插入、删除(均O(logn)平均)。-查找过程是递归的,沿树向下比较,直到找到或为空。3.(7分)编写Python代码,实现一个函数`top_k_frequent(nums,k)`,输入一个整数列表`nums`和整数`k`,返回出现频率最高的`k`个元素。答案:pythonfromcollectionsimportCounterdeftop_k_frequent(nums,k):freq=Counter(nums)return[numfornum,_infreq.most_common(k)]解析:-使用`Counter`统计频率,`most_common(k)`返回频率最高的`k`个元素。-列表推导式提取元素。4.(7分)解释动态规划(DynamicProgramming,DP)与贪心算法(GreedyAlgorithm)的区别,并举例说明适用场景。答案:-区别:-DP:解决子问题重叠问题,存储子结果避免重复计算。-贪心:每步选择当前最优解,不保证全局最优。-适用场景:-DP:如斐波那契数列、背包问题。-贪心:如最小生成树(Prim/Kruskal)、货币找零。解析:-DP适用于有最优子结构的问题,如背包问题。-贪心适用于局部最优能推导全局最优的问题,如天平称重。5.(7分)编写C++代码,实现一个函数`merge_intervals(intervals)`,输入一个区间列表`intervals`(每个区间为`[start,end]`),合并所有重叠或相邻的区间,并返回合并后的列表。答案:cppinclude<vector>include<algorithm>usingnamespacestd;vector<vector<int>>merge_intervals(vector<vector<int>>&intervals){if(intervals.empty())return{};sort(intervals.begin(),intervals.end(),[&](constvector<int>&a,constvector<int>&b){returna[0]<b[0];});vector<vector<int>>merged;for(constauto&interval:intervals){if(merged.empty()||merged.back()[1]<interval[0]){merged.push_back(interval);}else{merged.back()[1]=max(merged.back()[1],interval[1]);}}returnmerged;}解析:-先按左端点排序。-遍历区间,若当前区间与合并列表最后一个区间不重叠,则直接加入;否则合并。6.(7分)解释图的BFS(广度优先搜索)和DFS(深度优先搜索)的基本过程,并说明适用场景。答案:-BFS:从起点出发,逐层扩展,使用队列实现。适用于最短路径(无权图)。-DFS:深入探索一条路径,使用栈实现(递归或显式栈)。适用于拓扑排序、连通分量。解析:-BFS优先扩展较近节点,适合无权图最短路径。-DFS优先深入,适合求解路径或结构问题。三、系统设计(共3题,每题10分,总计30分)1.(10分)设计一个简单的短链接系统(如tinyURL),要求支持以下功能:-输入任意URL,生成短链接;-输入短链接,解析回原始URL。答案:-核心组件:1.短链接生成:-使用哈希函数(如MD5)+随机前缀,避免冲突。-压缩为固定长度(如62进制字符)。2.解析:-存储映射关系(数据库或缓存)。-根据短链接查表,返回原始URL。-示例:-输入`/long/path`,生成`/abc123`。-输入`abc123`,解析回原始URL。解析:-需要高可用存储(如Redis+数据库)。-哈希冲突处理:随机前缀+自增ID。2.(10分)设计一个高并发的计数器服务,要求:-支持高并发访问;-精确计数(无丢失)。答案:-核心组件:1.数据存储:-Redis(单键计数,单线程保证原子性)。-分布式锁(如ZooKeeper)+数据库。2.接口:-提供`GET/count`接口,返回当前计数。-提供`POST/increment`接口,原子加1。-示例:-用户A请求`/increment`,计数器+1。-用户B请求`/count`,返回最新计数。解析:-Redis是最佳选择,单命令原子操作。-数据库事务开销大,不适合高并发。3.(10分)设计一个简单的消息推送服务(如微信通知),要求:-支持高并发推送;-保证消息不丢失(至少一次交付)。答案:-核心组件:1.消息队列:-Kafka/RabbitMQ(解耦、高吞吐)。-消息包含用户ID、内容、时间戳。2.推送服务:-消费队列消息,调用第三方推送API(如腾讯云推送)。-异步记录推送状态(数据库/Redis)。-不丢失保证:-消息持久化+延迟重试+幂等处理。解析:-队列解耦系统,避免推送服务直接依赖用户服务。-幂等处理防止重复推送(如用用户ID+消息ID做唯一标记)。四、编程实现(共2题,每题9分,总计18分)1.(9分)用Java实现一个LRU(LeastRecentlyUsed)缓存,支持`get(key)`和`put(key,value)`操作,容量为`capacity`。答案:javaimportjava.util.HashMap;importjava.util.Map;classLRUCache{privateMap<Integer,Node>cache=newHashMap<>();privateNodehead,tail;privateintcapacity;classNode{intkey,value;Nodeprev,next;Node(intkey,intvalue){this.key=key;this.value=value;}}publicLRUCache(intcapacity){this.capacity=capacity;head=newNode(0,0);tail=newNode(0,0);head.next=tail;tail.prev=head;}publicintget(intkey){Nodenode=cache.get(key);if(node==null)return-1;moveToHead(node);returnnode.value;}publicvoidput(intkey,intvalue){Nodenode=cache.get(key);if(node!=null){node.value=value;moveToHead(node);}else{NodenewNode=newNode(key,value);cache.put(key,newNode);addToHead(newNode);if(cache.size()>capacity){NodetoRemove=tail.prev;removeNode(toRemove);cache.remove(toRemove.key);}}}privatevoidmoveToHead(Nodenode){removeNode(node);addToHead(node);}privatevoidaddToHead(Nodenode){node.prev=head;node.next=head.next;head.next.prev=node;head.next=node;}privatevoidremoveNode(Nodenode){node.prev.next=node.next;node.next.prev=node.prev;}}解析:-使用双向链表+哈希表实现。-`get`操作将节点移到头部。-`put`操作先检查是否存在,若存在则更新并移动到头部;若不存在则添加到头部,并移除最久未使用节点。2.(9分)用Python实现一个简单的分布式锁,要求支持多进程/线程场景。答案:pythonimportthreadingimportosimporttimeimporterrnoclassDistributedLock:def__init__(self,lock_file):self.lock_file=lock_fileself.lock=threading.Lock()defacquire(self,timeout=10):start_time=time.time()whileTrue:try:withopen(self.lock_file,'x')asf:self.lock.acquire()returnTrueexceptFileExistsError:iftime.time()-start_time>timeout:returnFalsetime.sleep(0.1)exceptExceptionase:ife.errno!=errno.EACCES:raisetime.sleep(0.1)defrelease
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生物标志物在药物临床试验中的转化医学应用
- 生物标志物在结果公开中的应用
- 生物制品稳定性试验电荷变异检测
- 房地产企业生产运营管理面试题及答案
- 航空航天行业工程师面试题及答案
- 深度解析(2026)《GBT 19495.6-2004转基因产品检测 基因芯片检测方法》
- 深度解析(2026)《GBT 19448.2-2004圆柱柄刀夹 第2部分制造专用刀夹的A型半成品》
- 初级工程师面试题含答案
- 仓库管理岗位面试题及答案
- 互联网公司HRBP面试问题及答案参考
- 外卖平台2025年商家协议
- 2025年高职(铁道车辆技术)铁道车辆制动试题及答案
- 2025陕西榆林市榆阳区部分区属国有企业招聘20人考试笔试模拟试题及答案解析
- 老年慢性病管理及康复护理
- 2026年海南经贸职业技术学院单招(计算机)考试参考题库及答案1套
- 代办执照合同范本
- 2025年国家公务员录用考试《行测+申论》真题卷(地市级)及答案解析
- (2025年)教育博士(EdD)教育领导与管理方向考试真题附答案
- 2025年起重机司机(限门式起重机)理论考试考题(有答案)
- 奇安信Linux系统安全课件
- 《JB 5317.3-1991 环链电动葫芦用锥形转子电动机》(2026年)实施指南
评论
0/150
提交评论