版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年软件开发工程师面试题目与解析一、编程语言与基础算法(共5题,每题10分,总分50分)1.题目:给定一个非空字符串`s`,最多删除`1`个字符后,判断能否使字符串成为回文字符串。例如,`"aba"`和`"abca"`都是回文,但`"abca"`删除`'b'`后可成为回文。请实现该功能。2.题目:设计一个函数,将一个非负整数`n`转换为罗马数字。罗马数字由`'I'`,`'V'`,`'X'`,`'L'`,`'C'`,`'D'`,`'M'`组成,其中`'I'`=1,`'V'`=5,`'X'`=10,`'L'`=50,`'C'`=100,`'D'`=500,`'M'`=1000。例如,`3`转换为`'III'`,`4`转换为`'IV'`,`9`转换为`'IX'`。3.题目:给定一个整数数组`nums`和一个目标值`target`,返回数组中和为目标值的三元组数量。例如,`nums=[-1,0,1,2]`,`target=0`,则解为`[(-1,0,1),(-1,2,1)]`。4.题目:实现一个LRU(最近最少使用)缓存,使用哈希表和双向链表结合。提供`get`和`put`方法,`get(key)`返回`key`对应的值,如果不存在返回`-1`;`put(key,value)`插入或更新键值对,如果容量已满,则删除最久未使用的元素。5.题目:给定一个链表,判断链表是否存在环。如果存在,返回入环的起始节点;否则返回`null`。例如,`1->2->3->4->2`(`2`重复,存在环)。二、系统设计(共3题,每题15分,总分45分)1.题目:设计一个高并发的短链接系统。要求:-输入任意长度的URL,返回固定长度的短链接(如`/abcde`)。-支持高并发访问,秒级响应。-支持自定义短链接前缀和有效期。-要求说明数据结构、算法、分布式部署方案及负载均衡策略。2.题目:设计一个消息队列系统(如Kafka的简化版),要求:-支持至少`1000`TPS的消息吞吐量。-保证消息的至少一次传递。-提供消息重试机制和死信队列。-说明核心组件(生产者、消费者、Broker、Topic)、数据一致性协议(如ISR)及故障恢复方案。3.题目:设计一个实时推荐系统,输入用户行为日志(如点击、购买),输出个性化推荐结果。要求:-支持`10万`并发用户请求。-推荐算法需兼顾实时性和准确性(如协同过滤+深度学习)。-说明数据存储方案(如Redis+HBase)、计算框架(如Spark/Flink)及离线与在线结合的架构。三、数据库与分布式(共4题,每题15分,总分60分)1.题目:解释MySQL中的`事务`、`隔离级别`(读未提交、读已提交、可重复读、串行化)及`MVCC`(多版本并发控制)的实现原理。举例说明`脏读`、`不可重复读`、`幻读`的场景。2.题目:设计一个分布式数据库分片方案,要求:-支持`1000`万用户数据,分片键为`user_id`。-考虑分片键的哈希取模、范围分片等方案,说明优缺点。-描述跨分片查询的解决方案及数据一致性问题。3.题目:如何优化SQL查询性能?给出至少`3`个具体方案,如:-索引设计(主键、外键、组合索引)。-查询优化(`EXPLAIN`分析、`JOIN`类型选择)。-缓存策略(Redis+MySQL)。4.题目:解释`分布式锁`的几种实现方式(基于Redis、Zookeeper、数据库)及`Redis`分布式锁的`Lua`脚本防死锁方案。四、网络与安全(共3题,每题15分,总分45分)1.题目:解释TCP的三次握手和四次挥手过程,说明每个阶段的作用及可能出现的异常场景(如`TIME_WAIT`状态)。2.题目:如何实现一个简单的HTTPS加密通信?说明`非对称加密`、`对称加密`、`证书`(`CA`签发)及`TLS`握手过程。3.题目:列举常见的Web安全漏洞(如`XSS`、`CSRF`、`SQL注入`),并给出防护措施。例如,`XSS`可通过`HTML实体编码`、`CSP`(内容安全策略)防御。五、编程题(共3题,每题20分,总分60分)1.题目:用Python或Java实现快速排序算法,要求:-手写代码,不得使用库函数。-说明递归与迭代两种实现方式,并分析时间复杂度。2.题目:实现一个简单的LRU缓存类,支持`get`和`put`方法。要求:-使用`HashMap`和`LinkedList`实现。-提供`put`时删除最久未使用节点的逻辑。3.题目:设计一个算法,输入一个`n`层二叉树,输出所有从根到叶子的路径。例如,`n=3`的二叉树,输出`["1->2->4","1->3"]`。答案与解析一、编程语言与基础算法1.回文删除题代码示例(Python):pythondefvalid_palindrome(s:str)->bool:defis_palindrome(i,j):whilei<j:ifs[i]!=s[j]:returnFalsei+=1j-=1returnTruei,j=0,len(s)-1whilei<j:ifs[i]!=s[j]:returnis_palindrome(i+1,j)oris_palindrome(i,j-1)i+=1j-=1returnTrue解析:-双指针从两端向中间遍历,遇到不匹配时尝试删除左或右字符,任一子串为回文即返回`True`。-时间复杂度:`O(n)`,`is_palindrome`函数最多调用`O(n)`次。2.整数转罗马数字代码示例(Python):pythondefint_to_roman(num:int)->str:val=[1000,900,500,400,100,90,50,40,10,9,5,4,1]syms=["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"]roman=''foriinrange(len(val)):whilenum>=val[i]:roman+=syms[i]num-=val[i]returnroman解析:-列表`val`和`syms`按从大到小排列,贪心算法从高位到低位匹配罗马数字符号。-时间复杂度:`O(1)`,最多循环12次。3.三数之和代码示例(Python):pythondefthree_sum(nums,target):nums.sort()n=len(nums)res=[]foriinrange(n):ifi>0andnums[i]==nums[i-1]:continueleft,right=i+1,n-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解析:-先排序,双指针`left`和`right`从两端向中间移动,避免重复解。-时间复杂度:`O(n^2)`。4.LRU缓存代码示例(Python):pythonclassLRUCache:def__init__(self,capacity:int):self.cache={}self.capacity=capacityself.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,self.next=None,Nonedefget(self,key:int)->int:ifkeyinself.cache:node=self.cache[key]self._remove(node)self._add(node)returnnode.valuereturn-1defput(self,key:int,value:int)->None:ifkeyinself.cache:self._remove(self.cache[key])node=self.Node(key,value)self.cache[key]=nodeself._add(node)iflen(self.cache)>self.capacity:lru=self.tail.prevself._remove(lru)delself.cache[lru.key]def_remove(self,node):delself.cache[node.key]node.prev.next=node.nextnode.next.prev=node.prevdef_add(self,node):node.next=self.head.nextnode.next.prev=nodeself.head.next=nodenode.prev=self.head解析:-双向链表+哈希表实现,`get`时移动节点到头部,`put`时删除最久未使用节点。-时间复杂度:`O(1)`。5.判断链表环代码示例(Python):pythonclassListNode:def__init__(self,x):self.val=xself.next=Nonedefdetect_cycle(head:ListNode)->ListNode:slow,fast=head,headwhilefastandfast.next:slow=slow.nextfast=fast.next.nextifslow==fast:slow=headwhileslow!=fast:slow=slow.nextfast=fast.nextreturnslowreturnNone解析:-快慢指针法,`slow`每次走1步,`fast`每次走2步,相遇时从头部重新遍历找入环点。-时间复杂度:`O(n)`,空间复杂度:`O(1)`。二、系统设计1.短链接系统设计核心思路:-使用`hash`算法(如`MD5`+`Base62`)将长URL映射为短码,如`/a1b2c3`。-数据结构:Redis存储短码与长URL的映射,分布式缓存热点数据。-分布式部署:使用`Nginx`负载均衡,分片存储到不同Broker(如Kafka),避免单点故障。-安全性:HTTPS加密传输,短链接有效期控制。2.消息队列设计核心组件:-生产者:向Broker发送消息,支持异步发送、重试机制。-Broker:存储消息(如Topic分片),使用ISR(In-SyncReplicas)保证高可用。-消费者:拉取或推送消息,支持手动/自动确认。-数据一致性:通过`幂等性`(如消息签名)、`事务消息`(如RocketMQ)保证至少一次传递。3.实时推荐系统设计架构:-离线:使用`Spark`计算用户画像、协同过滤模型。-在线:`Redis`存储实时推荐结果,`Flink`处理实时流数据。-数据流:用户行为日志→`Kafka`→`Flink`→`Redis`(推荐结果)→前端。三、数据库与分布式1.事务与MVCC隔离级别:-读未提交:可能出现脏读(未提交数据被读取)。-读已提交:避免脏读,但不可重复读(同一事务内多次读取结果不同)。-可重复读:使用MVCC,保证同一事务内读取一致。-串行化:完全隔离,但性能最低。解析:-MySQL默认`InnoDB`使用`可重复读`,通过`ReadView`实现MVCC,记录`updatetime`和`trx_id`判断数据版本。2.分布式分片方案方案:-哈希分片:`user_id%N`,均分数据,但跨分片查询效率低。-范围分片:按`user_id`范围分片(如`1-10000`、`10001-20000`),适合有序查询。解析:-跨分片查询需使用`ShardingKey`关联所有分片,如`user_id`关联订单表需传递`user_id`。3.SQL优化方案-索引优化:如`user_id`作为主键,`order_id`作为外键。-查询优化:避免`SELECT`,使用`EXPLAIN`分析执行计划,优先`JOIN`类型为`indexscan`。-缓存策略:热点数据如`用户信息`存入`Redis`,减少DB查询。4.分布式锁实现Redis方案:luaifredis.call("get",KEYS[1])==ARGV[1]thenredis.call("set",KEYS[1],ARGV[1],"NX","EX",10)return1elsereturn0end解析:-使用`Lua`脚本保证原子性,`NX`表示不存在时才设置,`EX`设置过期时间防止死锁。四、网络与安全1.TCP三次握手-第一次:客户端发送`SYN=1,seq=x`。-第二次:服务器回复`SYN=1,ACK=1,seq=y,ack=x+1`。-第三次:客户端回复`ACK=1,ack=y+1`。解析:-建立`连接确认`,防止历史连接请求重发。2.HTTPS实现-非对称加密:客户端用`公钥`加密数据,服务器用`私钥`解密。-对称加密:会话密钥用非对称加密传输,后续数据用`AES`传输。-证书:`CA`签发证书,验证服务器身份。3.Web安全防护-`XSS`:输入过滤(如`HTML实体编码`)、`CSP`(限制脚本来源)。-`CSRF`:`Token`验证、`SameSite`
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 烧腊师面试题及答案
- 零碳园区循环利用系统
- 航空业机务维修主管面试题及答案
- 2026绥阳农信联社实习生招募43人参考考试试题及答案解析
- 2025西双版纳勐海县融媒体中心招聘编外人员(1人)参考考试试题及答案解析
- 再生水利用资源调配策略
- 材料性能评估与面试题解析
- 碧桂园财务主管面试题库含答案
- 2026河南省气象部门招聘应届高校毕业生14人(第2号)备考考试题库及答案解析
- 仲裁事务岗笔试题及解析
- 2025年湖南省长沙市政府采购评审专家考试真题(附含答案)
- 2025年嘉鱼县辅警招聘考试真题及答案1套
- 《阿拉善右旗阿拉腾敖包铁矿、萤石矿开采方案》评审意见书
- 国际胰腺病学会急性胰腺炎修订指南(2025年)解读课件
- 2025年《税收征收管理法》新修订版知识考试题库及答案解析
- 带隙基准电路的设计
- 2025年《广告策划与创意》知识考试题库及答案解析
- 压力管道安装交叉作业方案
- 2025年副高消化内科试题及答案
- 九年级上册《道德与法治》期中必背大题
- 协助老年人洗浴
评论
0/150
提交评论