2026年软件工程师面试笔试题库及答案_第1页
2026年软件工程师面试笔试题库及答案_第2页
2026年软件工程师面试笔试题库及答案_第3页
2026年软件工程师面试笔试题库及答案_第4页
2026年软件工程师面试笔试题库及答案_第5页
已阅读5页,还剩21页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

2026年软件工程师面试笔试题库及答案一、编程语言基础(5题,每题10分)1.题目(C++):编写一个C++函数,实现将字符串中的所有空格替换为"%20"。要求原地修改字符串,不使用额外空间(除少量辅助变量外)。cppvoidreplaceSpaces(charstr,intlength){//你的代码}答案与解析:cppvoidreplaceSpaces(charstr,intlength){if(str==nullptr||length==0)return;intspaceCount=0;//先统计空格数量for(inti=0;i<length;++i){if(str[i]=='')++spaceCount;}intnewLength=length+spaceCount2;if(newLength>length){str[newLength-1]='\0';//设置字符串结尾inti=length-1;intj=newLength-2;while(i>=0){if(str[i]==''){str[j--]='0';str[j--]='2';str[j--]='%';}else{str[j--]=str[i];}--i;}}}解析:-首先统计字符串中空格的数量,因为每个空格需要替换为"%20",长度增加2倍。-从后向前遍历字符串,避免覆盖未处理的字符。空格时依次填充"0"、"2"和"%",其他字符直接复制。2.题目(Java):实现一个Java方法,判断一个字符串是否为回文串(忽略大小写和空格)。javapublicbooleanisPalindrome(Strings){//你的代码}答案与解析:javapublicbooleanisPalindrome(Strings){if(s==null)returnfalse;Stringfiltered=s.replaceAll("[^a-zA-Z0-9]","").toLowerCase();intleft=0,right=filtered.length()-1;while(left<right){if(filtered.charAt(left)!=filtered.charAt(right)){returnfalse;}left++;right--;}returntrue;}解析:-使用正则表达式`[^a-zA-Z0-9]`过滤非字母数字字符,并转换为小写统一比较。-双指针法从两端向中间遍历,若字符不匹配则不是回文。3.题目(Python):编写Python代码,实现一个函数`topKFrequent(nums,k)`,返回数组中出现频率最高的`k`个元素。pythonfromcollectionsimportCounterdeftopKFrequent(nums,k):你的代码答案与解析:pythonfromcollectionsimportCounterdeftopKFrequent(nums,k):count=Counter(nums)return[itemforitem,_incount.most_common(k)]解析:-使用`Counter`统计元素频率,`most_common(k)`返回频率最高的`k`个元素。-时间复杂度O(nlogk),适合大数据场景。4.题目(JavaScript):实现一个JavaScript函数,将一个字符串转换为大写,但仅保留首字母大写,其余小写。javascriptfunctioncapitalize(str){//你的代码}答案与解析:javascriptfunctioncapitalize(str){if(!str)return'';returnstr.charAt(0).toUpperCase()+str.slice(1).toLowerCase();}解析:-首字母大写(`toUpperCase()`),其余转为小写(`toLowerCase()`)。-处理空字符串或非字符串输入。5.题目(Go):编写Go函数,实现快速排序算法。gofuncquickSort(arr[]int)[]int{//你的代码}答案与解析:gofuncquickSort(arr[]int)[]int{iflen(arr)<=1{returnarr}pivot:=arr[len(arr)/2]left,right:=0,len(arr)-1fori:=rangearr{ifarr[i]<pivot{arr[i],arr[left]=arr[left],arr[i]left++}elseifarr[i]>pivot{arr[i],arr[right]=arr[right],arr[i]right--}}quickSort(arr[:left])quickSort(arr[right+1:])returnarr}解析:-选择中间值`pivot`分区,小于放左边,大于放右边。-递归排序左右子数组。时间复杂度O(nlogn)。二、数据结构与算法(5题,每题10分)6.题目(链表):实现一个函数,删除链表的倒数第`n`个节点。pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=nextdefremoveNthFromEnd(head,n):你的代码答案与解析:pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=nextdefremoveNthFromEnd(head,n):dummy=ListNode(0,head)left=dummyright=dummyfor_inrange(n+1):right=right.nextwhileright:left=left.nextright=right.nextleft.next=left.next.nextreturndummy.next解析:-使用双指针,`right`先走`n+1`步,保证删除时`left`在目标节点前。-时间复杂度O(n),空间复杂度O(1)。7.题目(树):给定二叉搜索树,实现中序遍历的迭代版本。pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefinorderTraversal(root):你的代码答案与解析:pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefinorderTraversal(root):stack,result=[],[]current=rootwhilestackorcurrent:whilecurrent:stack.append(current)current=current.leftcurrent=stack.pop()result.append(current.val)current=current.rightreturnresult解析:-栈模拟递归,先左后右压栈,右子树时弹出并记录。8.题目(动态规划):实现斐波那契数列的第`n`项(动态规划优化)。pythondeffib(n):你的代码答案与解析:pythondeffib(n):ifn<=1:returnndp=[0,1]+[0](n-1)foriinrange(2,n+1):dp[i]=dp[i-1]+dp[i-2]returndp[n]解析:-使用数组存储子问题结果,避免重复计算。时间复杂度O(n),空间复杂度O(n)。-可优化至O(1)空间:仅用两个变量交替更新。9.题目(哈希表):实现一个函数,找出数组中所有和为`target`的`nums[i]+nums[j]`对。pythondeftwoSum(nums,target):你的代码答案与解析:pythondeftwoSum(nums,target):num_dict={}result=[]fori,numinenumerate(nums):complement=target-numifcomplementinnum_dict:result.append([complement,num])num_dict[num]=ireturnresult解析:-哈希表记录数字及其索引,遍历时检查`target-num`是否已存在。-时间复杂度O(n),空间复杂度O(n)。10.题目(贪心算法):给定整数数组,返回可以通过相邻交换最多交换几次使数组升序的最小交换次数。pythondefminSwaps(nums):你的代码答案与解析:pythondefminSwaps(nums):n=len(nums)sorted_nums=sorted([(num,i)fori,numinenumerate(nums)])visited=[False]nswaps=0foriinrange(n):ifvisited[i]orsorted_nums[i][1]==i:continuecycle_size=0x=iwhilenotvisited[x]:visited[x]=Truex=sorted_nums[x][1]cycle_size+=1ifcycle_size>0:swaps+=(cycle_size-1)returnswaps解析:-将数组排序并记录原始索引,通过检测循环链表计算交换次数。三、系统设计(3题,每题20分)11.题目(短链接系统):设计一个短链接系统,要求:1.输入长链接,返回6位短链接(如`/a1b2c3`)。2.支持高并发访问。3.解析短链接时能快速定位原始长链接。答案与解析:-核心思路:使用哈希函数(如Base62编码)将长链接映射为短ID,存储映射关系,解析时反向查询。-技术选型:-哈希算法:Base62(a-z,A-Z,0-9),6位长度约支持`62^6`个短链接。-数据存储:Redis(hash结构)存储短ID与长链接的映射,高并发读写。-分布式部署:负载均衡器分发请求,水平扩展。-防冲突策略:-哈希前缀随机生成避免碰撞。-定期重哈希旧数据。-解析流程:1.从短链接提取ID部分。2.Redis查询单条记录,返回长链接。12.题目(秒杀系统):设计一个秒杀系统,要求:1.每秒处理数千请求。2.防止超卖和秒杀作弊。3.订单生成后需秒级通知用户。答案与解析:-核心思路:-使用Redis分布式锁控制并发。-使用ZSET(有序集合)记录库存扣减顺序。-消息队列(RabbitMQ/Kafka)异步通知用户。-技术选型:-锁机制:RedisSETNX+EXPIRE实现分布式锁。-库存控制:ZSET按请求时间排序扣减,确保顺序性。-异步通知:消息队列减少主线程压力。-防作弊策略:-请求去重(如Redis中保存临时标记)。-限制IP/用户秒杀频率。13.题目(分布式计数器):设计一个分布式计数器,要求:1.支持高并发自增。2.数据持久化。3.可分布式部署。答案与解析:-核心思路:-使用Redis原子操作`INCR`实现自增。-持久化可通过RedisRDB/AOF或应用层定期保存。-技术选型:-原子操作:Redis`INCR`保证线程安全。-分布式部署:多个节点共享Redis实例。-优化方案:-分片计数(如按模分片)。-本地缓存+异步同步。四、数据库(2题,每题15分)14.题目(SQL):给定表`Orders`(`order_id,customer_id,order_date,total_amount`),查询每个客户的最近5笔订单。sqlSELECTFROMOrdersWHERE(customer_id,order_date)IN(SELECTcustomer_id,MAX(order_date)FROMOrdersGROUPBYcustomer_id);答案与解析:sqlWITHRankedOrdersAS(SELECT,ROW_NUMBER()OVER(PARTITIONBYcustomer_idORDERBYorder_dateDESC)ASrnFROMOrders)SELECTFROMRankedOrdersWHERErn<=5;解析:-使用窗口函数`ROW_NUMBER()`分区排序,按`order_date`降序。-外层查询筛选排名前5的记录。15.题目(SQL):设计表结构,存储文章和其评论,要求:1.文章支持追加评论。2.支持按文章ID分页获取评论。答案与解析:sqlCREATETABLEArticles(article_idINTPRIMARYKEY,titleVARCHAR(255),contentTEXT);CREATETABLEComments(comment_idINTPRIMARYKEY,article_idINT,user_nameVARCHAR(50),contentTEXT,created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP,FOREIGNKEY(article_id)REFERENCESArticles(article_id));解析:-`Articles`表存储文章基本信息。-`Comments`表通过`article_id`关联文章,按`created_at`排序支持分页。五、网络与系统(2题,每题15分)16.题目(HTTP):设计一个HTTP缓存策略,要求:1.缓存静态资源(图片、CSS)。2.动态内容不缓存。3.支持缓存失效。答案与解析:-核心策略:-静态资源设置`Cache-Control:public,max-age=31536000`。-动态内容`Cache-Control:no-cache,must-revalidate`。-使用ETag和If-None-Match头进行验证。-技术选型:-CDN(如Cloudflare)缓存静态资源。-服务器设置HTTP头控制缓存。17.题目(负载均衡):比较轮询(RoundRobin)和最少连接(LeastConnections)两种负载均衡算法的优缺点。答案与解析:-轮询:-优点:实现简单。-缺点:未考虑服务器负载差异。-最少连接:-优点:均衡服务器压力。-缺点:需要实时统计连接数(性能开销)。六、综合编程(3题,每题15分)18.题目(Python):实现一个函数,检测字符串是否包含重复的连续字符。pythondefhas_repeated_char(s):你的代码答案与解析:pythondefhas

温馨提示

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

评论

0/150

提交评论