2026年IT大厂面试秘籍软件工程师面试题集_第1页
2026年IT大厂面试秘籍软件工程师面试题集_第2页
2026年IT大厂面试秘籍软件工程师面试题集_第3页
2026年IT大厂面试秘籍软件工程师面试题集_第4页
2026年IT大厂面试秘籍软件工程师面试题集_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

2026年IT大厂面试秘籍:软件工程师面试题集一、编程基础与数据结构(5题,每题10分)1.题目:请实现一个函数,输入一个正整数`n`,返回`n`的阶乘。要求:-不能使用递归。-时间复杂度尽可能低。-处理大数时考虑内存优化。2.题目:给定一个无重复元素的数组`nums`和一个目标值`target`,请找出所有相加等于`target`的不重复三元组。要求:-不能使用重复的元素。-返回所有三元组的列表。-示例:`nums=[-1,0,1,2],target=0`→`[-1,0,1]`3.题目:请实现一个LRU(LeastRecentlyUsed)缓存机制,支持`get`和`put`操作。要求:-使用哈希表和双向链表实现。-`get(key)`返回键对应的值,若不存在返回-1。-`put(key,value)`将键值对插入缓存,如果键已存在则更新值,如果缓存已满则删除最久未使用的元素。4.题目:请判断一个二叉树是否是平衡二叉树(即任意节点的左右子树高度差不超过1)。要求:-返回布尔值,并尽可能减少递归次数。-示例:`[3,9,20,null,null,15,7]`→`true`5.题目:请实现一个字符串的压缩算法,将连续的相同字符合并并计数。要求:-压缩后的字符串长度小于原字符串时返回原字符串。-示例:`"aabcccccaaa"`→`"a2b1c5a3"`二、算法与动态规划(4题,每题12分)1.题目:给定一个字符串`s`,请判断它是否可以由所有可能的子串重复多次连接而成。要求:-示例:`"abab"`→`true`,`"abcabcabc"`→`true`,`"abcabcab"`→`false`2.题目:给定一个非负整数数组`nums`,请将数组中的元素向右旋转`k`次。要求:-不能使用额外空间,原地旋转。-示例:`nums=[1,2,3,4,5],k=2`→`[4,5,1,2,3]`3.题目:给定一个正整数`n`,请计算1到`n`的所有整数中数字`2`出现的次数。要求:-示例:`n=23`→`12`(即`2`出现在`2,12,20-29`)4.题目:给定一个二维网格`grid`,其中`1`表示陆地,`0`表示水域,请计算岛屿的数量。要求:-岛屿上下左右相连。-示例:`grid=[[1,1,0,0,0],[1,1,0,0,0],[0,0,1,0,0],[0,0,0,1,1]]`→`3`三、系统设计(2题,每题20分)1.题目:设计一个微博系统,要求:-用户可以发布、转发、点赞微博。-微博按时间倒序显示,最新发布在前。-支持关注/取消关注功能。-写出核心数据结构和主要接口设计。2.题目:设计一个短链接生成系统,要求:-输入长链接,返回固定长度的短链接。-支持短链接跳转回长链接。-高并发场景下保证唯一性和快速响应。-写出主要实现思路和数据库设计。四、数据库与分布式(3题,每题15分)1.题目:解释数据库事务的ACID特性,并举例说明为什么需要隔离性。-示例:银行转账场景。2.题目:如何解决分布式数据库中的数据一致性问题?请比较强一致性和最终一致性。-示例:CAP理论的应用场景。3.题目:设计一个分布式缓存系统,要求:-支持高可用和水平扩展。-处理缓存失效和热点数据问题。-写出主要架构和优化策略。五、网络与系统编程(3题,每题15分)1.题目:解释TCP三次握手和四次挥手的过程,并说明为什么需要TIME_WAIT状态。2.题目:比较HTTP/1.1和HTTP/2的主要区别,并说明HTTP/3的改进。3.题目:设计一个秒杀系统,要求:-防止超卖和并发问题。-写出主要技术选型和实现思路。答案与解析一、编程基础与数据结构1.答案:pythondeffactorial(n):result=1foriinrange(1,n+1):result=i处理大数内存优化:可以使用列表存储每一位returnresult解析:-非递归实现阶乘可以通过循环完成。-大数优化:Python原生支持大整数,但若内存受限,可使用列表存储每一位(如模拟大数乘法)。2.答案:pythondefthree_sum(nums,target):nums.sort()res=[]foriinrange(len(nums)-2):ifi>0andnums[i]==nums[i-1]:continueleft,right=i+1,len(nums)-1whileleft<right:total=nums[i]+nums[left]+nums[right]iftotal==target:res.append([nums[i],nums[left],nums[right]])whileleft<rightandnums[left]==nums[left+1]:left+=1whileleft<rightandnums[right]==nums[right-1]:right-=1left+=1right-=1eliftotal<target:left+=1else:right-=1returnres解析:-排序后双指针遍历,避免重复三元组。-跳过重复元素,提高效率。3.答案:pythonclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.head,self.tail=Node(0,0),Node(0,0)self.head.next=self.tailself.tail.prev=self.headclassNode:def__init__(self,key,value):self.key=keyself.value=valueself.prev=Noneself.next=Nonedefget(self,key:int)->int:ifkeyinself.cache:node=self.cache[key]self._move_to_head(node)returnnode.valuereturn-1defput(self,key:int,value:int)->None:ifkeyinself.cache:node=self.cache[key]node.value=valueself._move_to_head(node)else:iflen(self.cache)==self.capacity:self._remove_tail()new_node=self.Node(key,value)self.cache[key]=new_nodeself._add_to_head(new_node)def_move_to_head(self,node):self._remove_node(node)self._add_to_head(node)def_remove_node(self,node):node.prev.next=node.nextnode.next.prev=node.prevdef_add_to_head(self,node):node.prev=self.headnode.next=self.head.nextself.head.next.prev=nodeself.head.next=nodedef_remove_tail(self):tail=self.tail.prevself._remove_node(tail)delself.cache[tail.key]解析:-双向链表维护LRU顺序,哈希表快速查找。-头部为最近使用,尾部为最久未使用。4.答案:pythondefis_balanced(root):defcheck(node):ifnotnode: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]解析:-后序遍历计算高度,同时判断平衡性。-递归时合并高度和平衡性判断,减少重复计算。5.答案:pythondefcompress(s:str)->str:ifnots:return""count=1result=[]foriinrange(1,len(s)):ifs[i]==s[i-1]:count+=1else:result.append(s[i-1]+str(count))count=1result.append(s[-1]+str(count))return''.join(result)iflen(''.join(result))<len(s)elses解析:-遍历字符串,统计连续字符数量。-压缩后长度小于原字符串则返回压缩结果。二、算法与动态规划1.答案:pythondefrepeated_substring_pattern(s:str)->bool:n=len(s)foriinrange(1,n//2+1):ifn%i==0:ifs[:i](n//i)==s:returnTruereturnFalse解析:-检查所有可能的子串长度,判断能否重复拼接成原字符串。2.答案:pythondefrotate(nums,k):n=len(nums)k%=nnums[:]=nums[-k:]+nums[:-k]解析:-原地旋转:先反转后反转。-优化:直接拼接切片。3.答案:pythondefcount_digit_two(n):count=0foriinrange(1,n+1):count+=str(i).count('2')returncount解析:-遍历所有数字,统计'2'的出现次数。-优化:按位统计(如`n=23`,分别统计10-19和20-29的'2')。4.答案:pythondefnum_islands(grid):ifnotgrid:return0rows,cols=len(grid),len(grid[0])count=0defdfs(r,c):ifr<0orc<0orr>=rowsorc>=colsorgrid[r][c]=='0':returngrid[r][c]='0'dfs(r+1,c)dfs(r-1,c)dfs(r,c+1)dfs(r,c-1)forrinrange(rows):forcinrange(cols):ifgrid[r][c]=='1':count+=1dfs(r,c)returncount解析:-深度优先遍历标记已访问陆地。-每次遇到陆地则岛屿数量加1。三、系统设计1.答案:-数据结构:-用户表(`users`):`id`,`name`,`follows`(关注列表)。-微博表(`tweets`):`id`,`user_id`,`content`,`timestamp`,`likes`。-点赞表(`likes`):`user_id`,`tweet_id`。-主要接口:-`POST/tweets`(发布微博)。-`GET/users/{user_id}/timeline`(获取用户时间线)。-`POST/users/{user_id}/follow`(关注用户)。解析:-微博按时间倒序显示,可通过`timestamp`排序。-关注列表存储关注用户的`id`,时间线通过SQLJOIN查询。2.答案:-实现思路:-使用哈希函数将长链接映射为短链接(如`hash(long_url)`)。-存储映射关系(数据库或Redis)。-短链接访问时反向解析回长链接。-数据库设计:-`short_links`:`id`(自增),`short_code`(短码),`long_url`。解析:-高并发下使用Redis缓存热点短链接。-短码可使用62进制编码(如`a-zA-Z0-9`)减少长度。四、数据库与分布式1.答案:-ACID特性:-原子性(Atomicity):事务要么全部成功,要么全部失败。-一致性(Consistency):事务执行后数据库状态一致。-隔离性(Isolation):并发事务互不干扰。-持久性(Durability):事务提交后永久保存。-隔离性举例:-脏读:事务A读取事务B未提交的数据,B回滚后A读取到无效数据。-不可重复读:事务A两次读取同一数据,B在两次读取间修改数据。-幻读:事务A两次扫描查询范围,B插入新数据使查询结果不同。2.答案:-强一致性:-任何读操作都能获取到最新写入的数据(如分布式锁)。-适用于金融交易等场景。-最终一致性:-允许短暂的不一致,但最终会收敛(如Redis缓存)。-适用于社交、新闻等场景。-CAP理论:-分布式系统无法同时满足C(一致性)、A(可用性)、P(分区容错性)。3

温馨提示

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

评论

0/150

提交评论