版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年软件工程师面试题库及参考解答一、编程语言基础(共5题,每题10分,总分50分)1.题目:请使用Python语言实现一个函数,输入一个正整数n,返回一个列表,其中包含从1到n的所有奇数,但不能包含任何能被7整除的奇数。参考解答:pythondeffilter_odds(n):return[iforiinrange(1,n+1,2)ifi%7!=0]解析:通过`range(1,n+1,2)`生成从1到n的所有奇数,然后使用`ifi%7!=0`过滤掉能被7整除的奇数。列表推导式简洁高效,适合此类筛选问题。2.题目:在Java中,编写一个方法,接收一个字符串参数,返回该字符串中所有单词的逆序排列(单词顺序不变,单词内部字符逆序)。例如,输入"HelloWorld",输出"olleHdlroW"。参考解答:javapublicstaticStringreverseWords(Strings){String[]words=s.split("");StringBuilderresult=newStringBuilder();for(Stringword:words){result.append(newStringBuilder(word).reverse().toString()).append("");}returnresult.toString().trim();}解析:首先使用`split("")`按空格分割字符串,然后遍历每个单词,用`StringBuilder`的`reverse()`方法逆序单词,最后拼接结果。注意去除末尾多余空格。3.题目:在C++中,实现一个函数,输入一个整数数组,返回数组中所有元素的平方和。例如,输入{1,2,3},返回14(1²+2²+3²)。参考解答:cppinclude<vector>usingnamespacestd;intsquareSum(constvector<int>&nums){intsum=0;for(intnum:nums){sum+=numnum;}returnsum;}解析:使用`for-each`循环遍历数组,计算每个元素的平方并累加到`sum`中。C++的`vector`提供灵活的数组操作。4.题目:在JavaScript中,编写一个函数,接收一个数组,返回一个新数组,其中包含原数组中所有非重复元素。例如,输入[1,2,2,3,4,4],输出[1,2,3,4]。参考解答:javascriptfunctionuniqueArray(arr){constseen=newSet();constresult=[];for(constitemofarr){if(!seen.has(item)){seen.add(item);result.push(item);}}returnresult;}解析:使用`Set`记录已出现元素,遍历数组时仅添加未出现过的元素到结果数组。时间复杂度为O(n),空间复杂度为O(n)。5.题目:在Go语言中,实现一个函数,输入一个字符串,返回该字符串的所有子串(不包含空子串)。例如,输入"abc",输出["a","b","c","ab","bc","abc"]。参考解答:gopackagemainimport"fmt"funcsubstrings(sstring)[]string{varresult[]stringfori:=0;i<len(s);i++{forj:=i+1;j<=len(s);j++{result=append(result,s[i:j])}}returnresult}解析:使用两层嵌套循环,外层固定起始位置,内层遍历结束位置,生成所有可能的子串。注意子串不包含空串,因此起始索引从0开始,结束索引从`i+1`开始。二、数据结构与算法(共5题,每题10分,总分50分)1.题目:请实现一个LRU(LeastRecentlyUsed)缓存,支持get和put操作。get(key)返回键对应的值,如果键不存在返回-1;put(key,value)插入或更新键值对,如果缓存容量已满,则删除最久未使用的键。参考解答:pythonclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.order=[]defget(self,key:int)->int:ifkeyinself.cache:self.order.remove(key)self.order.append(key)returnself.cache[key]return-1defput(self,key:int,value:int)->None:ifkeyinself.cache:self.order.remove(key)eliflen(self.cache)>=self.capacity:oldest=self.order.pop(0)delself.cache[oldest]self.cache[key]=valueself.order.append(key)解析:使用哈希表`cache`存储键值对,列表`order`记录使用顺序。get时移动键到末尾,put时先删除最久未使用的键(列表头部),然后插入新键到末尾。LRU的核心在于维护使用顺序。2.题目:给定一个无重复元素的整数数组,返回所有可能的子集(包括空集)。例如,输入[1,2,3],输出[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]。参考解答:pythondefsubsets(nums):result=[]subset=[]defbacktrack(start):result.append(subset.copy())foriinrange(start,len(nums)):subset.append(nums[i])backtrack(i+1)subset.pop()backtrack(0)returnresult解析:使用回溯法(递归+剪枝)。每次选择当前元素或跳过,通过`backtrack(i+1)`确保不重复选择同一元素。最终结果存储在`result`中。3.题目:请实现快速排序算法,并说明其时间复杂度和空间复杂度。参考解答:javapublicstaticvoidquickSort(int[]arr,intleft,intright){if(left>=right)return;intpivotIndex=partition(arr,left,right);quickSort(arr,left,pivotIndex-1);quickSort(arr,pivotIndex+1,right);}privatestaticintpartition(int[]arr,intleft,intright){intpivot=arr[right];inti=left-1;for(intj=left;j<right;j++){if(arr[j]<=pivot){i++;swap(arr,i,j);}}swap(arr,i+1,right);returni+1;}privatestaticvoidswap(int[]arr,inti,intj){inttemp=arr[i];arr[i]=arr[j];arr[j]=temp;}解析:快速排序时间复杂度平均为O(nlogn),最坏为O(n²)(当选择最左或最右为枢轴时)。空间复杂度为O(logn)(递归栈深度)。通过`partition`函数将数组分成两部分,枢轴左边的元素都小于枢轴,右边的都大于枢轴。4.题目:编写一个函数,判断一个二叉树是否是平衡二叉树(左右子树高度差不超过1)。参考解答:pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefisBalanced(root):defcheck(node):ifnodeisNone:return0,Trueleft_height,left_balanced=check(node.left)right_height,right_balanced=check(node.right)returnmax(left_height,right_height)+1,left_balancedandright_balancedandabs(left_height-right_height)<=1returncheck(root)[1]解析:使用后序遍历(左右中),同时计算高度和判断平衡性。如果任一子树不平衡或高度差超过1,则整棵树不平衡。时间复杂度为O(n),空间复杂度为O(h)(递归栈深度)。5.题目:给定一个字符串,判断它是否是有效的括号字符串(只包含()[]{},且括号匹配正确)。参考解答:javascriptfunctionisValid(s){conststack=[];constmapping={')':'(',']':'[','}':'{'};for(constcharofs){if(charinmapping){consttop=stack.pop();if(mapping[char]!==top)returnfalse;}else{stack.push(char);}}returnstack.length===0;}解析:使用栈匹配括号。遇到左括号入栈,遇到右括号时栈顶应为对应左括号,否则无效。遍历结束后栈必须为空。时间复杂度为O(n),空间复杂度为O(n)。三、系统设计(共3题,每题15分,总分45分)1.题目:设计一个简单的微博系统,需要支持用户发布微博、关注/取消关注用户、获取关注用户的最新微博。参考解答:pythonclassUser:def__init__(self,username):self.username=usernameself.followees=set()self.tweets=[]defpost_tweet(self,content):self.tweets.append(content)self.tweets.reverse()#新推文放最前面deffollow(self,user):self.followees.add(user)defunfollow(self,user):self.followees.discard(user)defget_feed(self):feed=[]foruserinself.followees:feed.extend(user.tweets)returnfeed解析:核心是`User`类,包含关注列表`followees`和微博列表`tweets`。发布微博时反转列表以保持最新推文在前。获取动态时按关注顺序合并关注者的最新推文。可进一步优化,如使用优先队列合并推文。2.题目:设计一个短链接生成系统,输入长链接,输出短链接,支持通过短链接跳转回长链接。参考解答:pythonimporthashlibimportbase64classShortLinkSystem:def__init__(self):self.url_map={}defgenerate_short_link(self,long_url):hash_obj=hashlib.md5(long_url.encode())encoded=base64.urlsafe_b64encode(hash_obj.digest()).decode().rstrip('=')short_link=f"http://short.ly/{encoded}"self.url_map[short_link]=long_urlreturnshort_linkdefget_long_link(self,short_link):returnself.url_map.get(short_link,"URLnotfound")解析:使用MD5哈希长链接,然后通过Base64编码生成短链接。使用字典`url_map`存储短链接与长链接的映射。可增加随机前缀或计数器避免冲突。3.题目:设计一个高并发秒杀系统,要求支持每秒大量用户请求,并保证公平性和准确性。参考解答:pythonfromthreadingimportLockimporttimeclassSeckillSystem:def__init__(self,total_items):self.total_items=total_itemsself.lock=Lock()self.remaining=total_itemsself.start_time=time.time()defattempt_seckill(self,user_id):withself.lock:ifself.remaining>0:self.remaining-=1cess_order(user_id)returnTruereturnFalsedefprocess_order(self,user_id):处理订单逻辑print(f"User{user_id}securedanitem.")解析:使用互斥锁`lock`保证高并发下的原子性。每秒只能秒杀`total_items`个商品,通过`remaining`计数。可结合Redis分布式锁或Lua脚本进一步提高性能。需注意请求去重和防止超卖。四、数据库与SQL(共3题,每题15分,总分45分)1.题目:给出以下SQL表结构,编写SQL查询:sqlCREATETABLEOrders(OrderIDINTPRIMARYKEY,CustomerIDINT,OrderDateDATE,TotalAmountDECIMAL(10,2));查询2023年每个客户的总订单金额,并按金额降序排列。参考解答:sqlSELECTCustomerID,SUM(TotalAmount)ASTotalSpentFROMOrdersWHEREYEAR(OrderDate)=2023GROUPBYCustomerIDORDERBYTotalSpentDESC;解析:使用`YEAR(OrderDate)`提取年份,`SUM(TotalAmount)`计算每个客户的总金额,`GROUPBY`按客户分组,`ORDERBY`降序排列。注意`DECIMAL`类型用于金额存储。2.题目:假设有`Products`表和`Sales`表,结构如下:sqlCREATETABLEProducts(ProductIDINTPRIMARYKEY,ProductNameVARCHAR(100));CREATETABLESales(SaleIDINTPRIMARYKEY,ProductIDINT,SaleDateDATE,QuantityINT);查询每个产品的总销量,只显示销量超过100的产品。参考解答:sqlSELECTp.ProductName,SUM(s.Quantity)ASTotalQuantityFROMProductspJOINSalessONp.ProductID=s.ProductIDGROUPBYp.ProductNameHAVINGSUM(s.Quantity)>100;解析:使用`JOIN`连接`Products`和`Sales`表,`GROUPBY`按产品分组,`SUM(s.Quantity)`计算总销量,`HAVING`过滤销量超过100的产品。注意`JOIN`类型选择(内连接)。3.题目:假设有`Employees`表,结构如下:sqlCREATETABLEEmployees(EmployeeIDINTPRIMARYKEY,NameVARCHAR(100),DepartmentVARCHAR(50),SalaryDECIMAL(10,2));查询每个部门平均工资最低的员工信息。参考解答:sqlSELECTe.FROMEmployeeseINNERJOIN(SELECTDepartment,MIN(AVG(Salary))ASMinAvgSalaryFROMEmployeesGROUPBYDepartment)ASdept_avgONe.Department=dept_avg.DepartmentANDe.Salary=(SELECTMIN(Salary)FROMEmployeesASsubWHEREsub.Department=e.Department)解析:先计算每个部门的平均工资最低值(子查询),然后通过`INNERJOIN`找到每个部门工资等于该最低平均工资的员工。嵌套子查询确保筛选条件正确。五、网络与系统(共2题,每题10分,总分20分)1.题目:简述TCP三次握手过程及其作用,并说明四次挥手过程。参考解答:三次握手:1.客户端发送SYN=1,seq=x给服务器,进入SYN_SENT状态。2.服务器回复SYN=1,ACK=1,seq=y,ack=x+1,进入SYN_RCVD状态。3.客户端发送ACK=1,ack=y+1,进入ESTABLISHED状态,连接建立。作用:-确认双方都有发送和接收能力。-同步初始序列号seq。四次挥手:1.客户端发送FIN=1,ack=y+1,进入FIN_WAIT_1状态。2.服务器回复ACK=1,ack=x+1,进入CLOSE_WAIT状态。3.服务器发送FIN=1,ack=y+1,进入LAST_ACK状态。4.客户端回复ACK=1,ack=x+2,进入TIME_WAIT状态,等待2MSL后关闭。解析:三次握手确保双方就初始序列号达成一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年铜陵普济圩现代农业集团有限公司公开招聘工作人员参考笔试题库附答案解析
- 中国金融出版社有限公司2026校园招聘4人参考考试题库及答案解析
- 2026年杭州市临安区卫健系统招聘高层次、紧缺专业技术人才7人参考考试试题及答案解析
- 2025年福建莆田市国睿产业园区运营管理有限公司企业员工招聘8人备考考试试题及答案解析
- 2025年嘉兴市经英人才发展服务有限公司城南分公司招录法律专业人才及法律辅助人员16人参考考试题库及答案解析
- 2026陕西渭南澄城县征集见习岗位和招募就业见习人员备考考试试题及答案解析
- 深度解析(2026)《GBT 25909.2-2010信息技术 维吾尔文、哈萨克文、柯尔克孜文编码字符集 24点阵字型 第2部分正文黑体》
- 2025年德州临邑县人民医院公开招聘备案制工作人员(15名)备考考试试题及答案解析
- 深度解析(2026)《GBT 25701-2010复摆颚式破碎机 金属单耗》(2026年)深度解析
- 深度解析(2026)《GBT 25616-2010土方机械 辅助起动装置的电连接件》(2026年)深度解析
- GB/T 45481-2025硅橡胶混炼胶医疗导管用
- GB/T 32468-2025铜铝复合板带箔
- 山西交控集团招聘笔试内容
- 大窑校本教材合唱的魅力
- 2025字节跳动智能广告发布服务合同(模板)
- 《建筑测绘》课件
- 《健康体检报告解读》课件
- 前台电话礼仪培训
- T-CET 402-2024 金属结构曲面屋顶晶硅组件建筑光伏一体化技术规范
- 智慧健康养老管理基础知识单选题100道及答案解析
- 车床设备大修计划方案
评论
0/150
提交评论