2026年软件工程师招聘面试常见问题集_第1页
2026年软件工程师招聘面试常见问题集_第2页
2026年软件工程师招聘面试常见问题集_第3页
2026年软件工程师招聘面试常见问题集_第4页
2026年软件工程师招聘面试常见问题集_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

2026年软件工程师招聘面试常见问题集一、编程能力测试(共5题,每题10分,总分50分)1.题目:请用Python实现一个函数,输入一个整数列表,返回列表中所有奇数的平方和。要求不使用内置函数,时间复杂度尽可能低。pythondefsum_of_odd_squares(nums):pass2.题目:请用Java实现一个方法,输入一个字符串,返回该字符串中所有连续重复字符的最长长度。例如,输入"abccba",返回3。javapublicintlongestRepeatingChar(Strings){//你的代码}3.题目:请用C++实现一个函数,输入一个二维数组(矩阵),返回该矩阵的所有对角线(主对角线和副对角线)元素的和。假设矩阵为n×n。cppintdiagonalSum(int[][]matrix){//你的代码}4.题目:请用JavaScript实现一个函数,输入一个正整数,返回该整数的二进制表示中1的个数。例如,输入5(二进制101),返回2。javascriptfunctioncountOnes(n){//你的代码}5.题目:请用Go语言实现一个函数,输入一个字符串,返回该字符串中所有字母字符(不区分大小写)的频率统计。例如,输入"Hello,World!",返回{'H':1,'e':1,'l':3,'o':2,'W':1,'r':1,'d':1}。gofuncletterFrequency(sstring)map[rune]int{//你的代码}二、系统设计(共3题,每题15分,总分45分)1.题目:设计一个简单的微博系统,要求支持用户发布动态、关注/取消关注用户、获取关注用户的动态列表。请说明系统架构、主要模块、数据存储方案及关键接口设计。2.题目:设计一个高并发的短链接生成系统,要求支持高并发请求、链接唯一性、可快速访问原始链接。请说明系统架构、数据存储方案、分布式设计及关键算法。3.题目:设计一个实时消息推送系统(如微信通知),要求支持多端(iOS、Android、Web)实时通知、消息离线存储、消息优先级管理。请说明系统架构、技术选型、数据存储及关键算法。三、数据库与SQL(共4题,每题12分,总分48分)1.题目:请写SQL查询,找出过去一个月内活跃用户(至少登录过一次)中,最常访问的3个城市。假设表名为`users`,字段包括`user_id`、`login_time`、`city`。2.题目:请写SQL查询,找出所有订单金额大于平均订单金额的订单,并按金额降序排列。假设表名为`orders`,字段包括`order_id`、`user_id`、`amount`。3.题目:请写SQL查询,找出所有订单中,每个用户的订单总数及平均订单金额。假设表名为`orders`,字段包括`order_id`、`user_id`、`amount`。4.题目:请写SQL查询,将`orders`表中的`order_id`和`amount`字段拆分为两个新表`order_details`(`order_id`)和`amount_details`(`amount`)。假设使用PostgreSQL。四、算法与数据结构(共4题,每题15分,总分60分)1.题目:请实现快速排序算法,输入一个整数数组,返回排序后的数组。要求原地排序,不使用额外空间。2.题目:请实现二叉树的深度优先遍历(前序、中序、后序),输入树的根节点,返回遍历结果列表。假设使用递归方式实现。3.题目:请实现Dijkstra算法,输入一个图的邻接矩阵和起点,返回从起点到所有点的最短路径。假设图无向,边权为正。4.题目:请实现LRU缓存算法,输入一个容量为N的缓存,支持`get`和`put`操作,返回操作后的缓存状态。假设使用哈希表和双向链表实现。五、系统运维与监控(共3题,每题15分,总分45分)1.题目:请说明如何监控一个高可用微服务集群(如Kubernetes中的SpringBoot应用),包括关键指标、监控工具及告警策略。2.题目:请说明如何处理分布式系统中的分布式锁问题,列举至少两种分布式锁的实现方案及优缺点。3.题目:请说明如何优化一个高并发API的性能,列举至少三种优化方法及具体操作。六、行为面试(共3题,每题15分,总分45分)1.题目:请分享一次你解决过的最复杂的软件问题,包括问题背景、解决过程、遇到的困难及最终结果。2.题目:请分享一次你和团队成员在项目中的冲突,你是如何处理的?结果如何?3.题目:请分享一次你主动提出的技术改进建议,包括改进背景、具体方案及最终效果。答案与解析一、编程能力测试1.Python:pythondefsum_of_odd_squares(nums):total=0fornuminnums:ifnum%2!=0:total+=num2returntotal解析:遍历列表,判断每个数是否为奇数,如果是则平方后累加。时间复杂度为O(n),空间复杂度为O(1)。2.Java:javapublicintlongestRepeatingChar(Strings){intmax=0,count=1;for(inti=1;i<s.length();i++){if(s.charAt(i)==s.charAt(i-1)){count++;}else{max=Math.max(max,count);count=1;}}returnMath.max(max,count);}解析:双指针遍历字符串,统计连续重复字符的长度,更新最大值。时间复杂度为O(n),空间复杂度为O(1)。3.C++:cppintdiagonalSum(int[][]matrix){intn=matrix.size();intsum=0;for(inti=0;i<n;i++){sum+=matrix[i][i];//主对角线sum+=matrix[i][n-i-1];//副对角线}if(n%2==1){sum-=matrix[n/2][n/2];//中心点被重复计算}returnsum;}解析:遍历矩阵,累加主对角线和副对角线元素,注意中心点重复计算需要减去。4.JavaScript:javascriptfunctioncountOnes(n){letcount=0;while(n>0){count+=n&1;n=n>>1;}returncount;}解析:位运算统计1的个数,每次与1做与运算,右移一位,直到n为0。时间复杂度为O(logn)。5.Go:gofuncletterFrequency(sstring)map[rune]int{freq:=make(map[rune]int)for_,char:=ranges{ifunicode.IsLetter(char){char=unicode.ToLower(char)freq[char]++}}returnfreq}解析:遍历字符串,统计字母字符的频率,忽略大小写。使用`unicode`包处理字符。二、系统设计1.微博系统:-架构:采用微服务架构,包括用户服务、动态服务、关注服务、消息服务等。-模块:用户服务(注册登录)、动态服务(发布/获取动态)、关注服务(关注/取消关注)、消息服务(推送通知)。-数据存储:用户信息存储在MySQL,动态存储在MongoDB(支持文本索引),关注关系存储在Redis(高速查询)。-接口设计:-`POST/users/register`:注册用户。-`POST/users/login`:用户登录。-`POST/dynamics`:发布动态。-`GET/dynamics?user_id={id}`:获取用户动态。-`POST/follows`:关注用户。-`DELETE/follows`:取消关注。2.短链接系统:-架构:采用分布式架构,包括短链接生成服务、长链接解析服务、缓存服务(Redis)。-数据存储:短链接存储在Redis(高速查询),长链接与短链接的映射存储在MySQL(持久化)。-算法:使用Base62编码(a-z、A-Z、0-9)生成短链接,确保唯一性。-分布式设计:使用Snowflake算法生成唯一ID,分布式部署生成服务,负载均衡。3.实时消息推送系统:-架构:采用MQ(Kafka)+缓存(Redis)+消息服务(WebSocket/Server-SentEvents)架构。-技术选型:Kafka(高吞吐量)、Redis(缓存消息)、WebSocket(实时推送)。-数据存储:用户订阅关系存储在Redis,消息存储在Kafka,离线消息存储在MongoDB。-关键算法:使用优先级队列管理消息优先级,使用发布/订阅模式实现多端推送。三、数据库与SQL1.活跃用户城市:sqlSELECTcity,COUNT()ASactive_usersFROMusersWHERElogin_time>=NOW()-INTERVAL'1MONTH'GROUPBYcityORDERBYactive_usersDESCLIMIT3;2.订单金额大于平均:sqlSELECTFROMordersWHEREamount>(SELECTAVG(amount)FROMorders)ORDERBYamountDESC;3.用户订单统计:sqlSELECTuser_id,COUNT()ASorder_count,AVG(amount)ASavg_amountFROMordersGROUPBYuser_id;4.表拆分:sqlCREATETABLEorder_detailsASSELECTorder_idFROMorders;CREATETABLEamount_detailsASSELECTamountFROMorders;四、算法与数据结构1.快速排序:pythondefquick_sort(arr):iflen(arr)<=1:returnarrpivot=arr[len(arr)//2]left=[xforxinarrifx<pivot]middle=[xforxinarrifx==pivot]right=[xforxinarrifx>pivot]returnquick_sort(left)+middle+quick_sort(right)2.二叉树遍历:pythondefpreorder(root):return[root.val]+preorder(root.left)+preorder(root.right)ifrootelse[]definorder(root):returninorder(root.left)+[root.val]+inorder(root.right)ifrootelse[]defpostorder(root):returnpostorder(root.left)+postorder(root.right)+[root.val]ifrootelse[]3.Dijkstra算法:pythonimportheapqdefdijkstra(graph,start):distances={node:float('inf')fornodeingraph}distances[start]=0pq=[(0,start)]whilepq:dist,current=heapq.heappop(pq)forneighbor,weightingraph[current].items():ifdist+weight<distances[neighbor]:distances[neighbor]=dist+weightheapq.heappush(pq,(dist+weight,neighbor))returndistances4.LRU缓存:pythonclassListNode:def__init__(self,key=0,value=0):self.key=keyself.value=valueself.prev=Noneself.next=NoneclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.head,self.tail=ListNode(),ListNode()self.head.next=self.tailself.tail.prev=self.headdefget(self,key:int)->int:ifkeyinself.cache:node=self.cache[key]self._move_to_front(node)returnnode.valuereturn-1defput(self,key:int,value:int)->None:ifkeyinself.cache:node=self.cache[key]node.value=valueself._move_to_front(node)else:iflen(self.cache)==self.capacity:self._remove_least_recently_used()new_node=ListNode(key,value)self.cache[key]=new_nodeself._add_to_front(new_node)def_move_to_front(self,node):self._remove_node(node)self._add_to_front(node)def_remove_node(self,node):prev_node,next_node=node.prev,node.nextprev_node.next=next_nodenext_node.prev=prev_nodedef_add_to_front(self,node):node.prev=self.headnode.next=self.head.nextself.head.next.prev=nodeself.head.next=nodedef_remove_least_recently_used(self):tail_prev=self.tail.prevself._remove_node(tail_prev)de

温馨提示

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

评论

0/150

提交评论