2026年软件工程师面试笔试经典题目解析_第1页
2026年软件工程师面试笔试经典题目解析_第2页
2026年软件工程师面试笔试经典题目解析_第3页
2026年软件工程师面试笔试经典题目解析_第4页
2026年软件工程师面试笔试经典题目解析_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

2026年软件工程师面试笔试经典题目解析一、编程语言基础(共3题,每题10分,总分30分)题目1:请用Java实现一个方法,输入一个字符串,返回该字符串中所有唯一字符的集合。例如,输入"abaccde",返回"a,c,d,e"。题目2:用Python编写一个函数,接受一个整数列表,返回列表中所有偶数的平方和。例如,输入[1,2,3,4],返回20(2²+4²)。题目3:用C++实现一个简单的LRU(最近最少使用)缓存类,支持get和put操作。要求:-get(key):返回键对应的值,如果不存在返回-1。-put(key,value):插入或更新键值对,如果缓存已满,则删除最久未使用的元素。(假设缓存容量为3)二、算法与数据结构(共5题,每题15分,总分75分)题目4:给定一个链表,判断是否存在环。如果存在,返回入口节点;否则返回null。(例如,链表1→2→3→4→2,存在环,入口为2)题目5:用二分查找法实现一个函数,在有序数组中查找目标值target,如果找到返回索引,否则返回-1。要求时间复杂度为O(logn)。题目6:编写一个函数,将字符串转换成整数(atoi)。假设输入字符串可能包含前导空格、正负号,忽略非数字字符。(例如,输入"-42a123",返回-42)题目7:用栈实现一个队列。要求:-enqueue方法在队尾添加元素。-dequeue方法返回队头元素。(例如,执行enq(1),enq(2),然后deq(),返回1)题目8:给定一个无重复元素的整数数组,返回所有可能的子集。(例如,输入[1,2,3],返回[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3])。三、系统设计(共2题,每题25分,总分50分)题目9:设计一个短链接生成服务,要求:-输入URL,返回固定长度的短链接(如6位字母数字组合)。-支持反向解析,通过短链接查询原始URL。-考虑高并发场景下的性能和分布式部署方案。题目10:设计一个简单的消息队列系统,要求:-支持发布/订阅模式,可自定义主题。-保证消息至少传递一次。-考虑消息持久化、消费者挂断重连等场景。四、数据库与SQL(共2题,每题20分,总分40分)题目11:假设有一个电商订单表`orders`(id,user_id,product_id,amount,order_time),编写SQL查询:-查询每个用户的总消费金额,按消费金额降序排列。-查询最近30天内消费金额最高的用户。题目12:用SQL实现一个事务,更新订单状态:1.将订单状态从"pending"更新为"paid"。2.如果更新成功,插入一条订单日志记录;如果失败,回滚状态变更。(假设存在`order_logs`表)五、分布式与中间件(共2题,每题15分,总分30分)题目13:解释CAP理论,并说明在分布式数据库中如何权衡一致性(Consistency)、可用性(Availability)和分区容错性(PartitionTolerance)。举例说明。题目14:如何实现分布式事务?对比2PC和TCC两种方案的优缺点,并说明适用场景。答案与解析一、编程语言基础题目1(Java):javaimportjava.util.HashSet;importjava.util.Set;publicclassUniqueChars{publicstaticSet<Character>getUniqueChars(Strings){Set<Character>set=newHashSet<>();for(charc:s.toCharArray()){if(!set.contains(c)){set.add(c);}}returnset;}publicstaticvoidmain(String[]args){Stringinput="abaccde";System.out.println(getUniqueChars(input));//输出[a,c,d,e]}}解析:-使用`HashSet`存储唯一字符,时间复杂度O(n),空间复杂度O(n)。-遍历字符串,若字符不在集合中则添加。题目2(Python):pythondefsum_of_even_squares(nums):returnsum(x2forxinnumsifx%2==0)解析:-列表推导式过滤偶数并计算平方,最后求和。-适用于Pythonic的简洁实现。题目3(C++):cppinclude<unordered_map>include<list>classLRUCache{public:LRUCache(intcapacity):capacity_(capacity){}intget(intkey){autoit=cache_map.find(key);if(it==cache_map.end())return-1;touch(it->second);returnit->second->second;}voidput(intkey,intvalue){autoit=cache_map.find(key);if(it!=cache_map.end()){it->second->second=value;touch(it->second);return;}if(cache_map.size()==capacity_){cache_map.erase(lru_list.back().first);lru_list.pop_back();}lru_list.emplace_front(key,value);cache_map[key]=lru_list.begin();}private:voidtouch(list<pair<int,int>>&node){lru_list.erase(node);lru_list.emplace_front(node->first,node->second);cache_map[node->first]=lru_list.begin();}intcapacity_;unordered_map<int,list<pair<int,int>>::iterator>cache_map;list<pair<int,int>>lru_list;};解析:-使用`unordered_map`记录键到链表节点的映射,链表维护LRU顺序。-`get`操作将节点移到头部,`put`时若满则删除尾部节点。二、算法与数据结构题目4(链表环检测):pythonclassListNode:def__init__(self,x):self.val=x;self.next=NonedefdetectCycle(head):ifnothead:returnNoneslow,fast=head,headwhilefastandfast.next:slow=slow.nextfast=fast.next.nextifslow==fast:slow=headwhileslow!=fast:slow=slow.nextfast=fast.nextreturnslowreturnNone解析:-快慢指针判断环,相遇后从头部重新遍历找入口。-时间O(n),空间O(1)。题目5(二分查找):javapublicintbinarySearch(int[]arr,inttarget){intleft=0,right=arr.length-1;while(left<=right){intmid=left+(right-left)/2;if(arr[mid]==target)returnmid;elseif(arr[mid]<target)left=mid+1;elseright=mid-1;}return-1;}解析:-每次取中点比较,缩小搜索范围。-需要数组有序,对重复元素返回任意一个索引。题目6(atoi):pythondefmyAtoi(s):s=s.strip()ifnots:return0sign=1i=0ifs[0]=='-':sign=-1i+=1elifs[0]=='+':i+=1result=0whilei<len(s)ands[i].isdigit():result=result10+int(s[i])ifsign==1andresult>231-1:return231-1elifsign==-1and-result<-231:return-231i+=1returnsignresult解析:-处理前导空格、符号,逐位累加。-防止溢出需提前判断。题目7(栈实现队列):pythonclassMyQueue:def__init__(self):self.in_stack=[]self.out_stack=[]defenq(self,x):self.in_stack.append(x)defdeq(self):ifnotself.out_stack:whileself.in_stack:self.out_stack.append(self.in_stack.pop())ifnotself.out_stack:returnNonereturnself.out_stack.pop()解析:-入队压栈,出队时若出栈为空则转移所有元素。-时间最坏O(n),但均摊为O(1)。题目8(子集生成):pythondefsubsets(nums):res=[]subset=[]defdfs(i):ifi==len(nums):res.append(subset.copy())returnsubset.append(nums[i])dfs(i+1)subset.pop()dfs(i+1)dfs(0)returnres解析:-回溯法递归选择或不选择当前元素。-时间O(2^n),空间O(n)。三、系统设计题目9(短链接生成):方案:1.使用`hash`函数(如MD5)将URL映射到固定长度字符串。2.压缩(如k-trie)减少存储空间。3.分布式部署时,用Redis缓存热点链接,数据库存储全部记录。解析:-需考虑碰撞概率和可读性,可加盐或随机前缀。题目10(消息队列):方案:-使用`RabbitMQ`或`Kafka`。-消息持久化到磁盘,消费者确认机制保证至少传递。-挂断重连通过心跳检测自动恢复。解析:-关键在于解耦和可靠性,需支持异步拉取或推送。四、数据库与SQL题目11(SQL查询):sql--总消费金额SELECTuser_id,SUM(amount)AStotalFROMordersGROUPBYuser_idORDERBYtotalDESC;--最高消费用户SELECTuser_idFROMordersGROUPBYuser_idORDERBYSUM(amount)DESCLIMIT1;解析:-使用`GROUPBY`聚合,`SUM`计算总金额。题目12(事务更新):sqlBEGINTRANSACTION;UPDATEordersSETstatus='paid'WHEREid=?;IF@@ROWCOUNT>0INSERTINTOorder_logs(order_id,status)VALUES(?,?);ELSEROLLBACK;COMMIT;解析:-使用`IF`判断更新是否成功,`ROLLBACK`回滚。五、分布式与中间件题目13(CAP理论):解释:-一致

温馨提示

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

评论

0/150

提交评论