版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年面试题及答案:软件工程师一、编程题(共3题,每题15分,总分45分)1.题目(15分):请实现一个函数,输入一个正整数`n`,返回`n`的所有真因子的和(不包括`n`本身)。例如:-输入`12`,输出`1+2+3+4+6=16`。-输入`7`,输出`1`。要求:-时间复杂度不超过O(√n)。-不能使用任何外部库。答案:pythondefsum_of_divisors(n):ifn<=1:return0total=0foriinrange(1,int(n0.5)+1):ifn%i==0:total+=iifi!=n//iandi!=1:total+=n//ireturntotal解析:-真因子是能整除`n`的数,不包括`n`本身。-对于每个小于等于√n的数`i`,如果`i`能整除`n`,则`i`和`n//i`都是因子。-注意排除`n`本身,且当`i`和`n//i`相等时(如`n`是平方数)只加一次。2.题目(15分):给定一个字符串`s`,找到其中不重复的最长子串的长度。例如:-输入`"abcabcbb"`,输出`3`(最长子串为`"abc"`)。-输入`"bbbbb"`,输出`1`。要求:-时间复杂度O(n),空间复杂度O(min(n,m)),其中`m`是字符集大小。答案:pythondeflength_of_longest_substring(s):char_set=set()left=0max_len=0forrightinrange(len(s)):whiles[right]inchar_set:char_set.remove(s[left])left+=1char_set.add(s[right])max_len=max(max_len,right-left+1)returnmax_len解析:-使用滑动窗口技术,`left`和`right`分别表示子串的左右边界。-用`char_set`记录当前窗口内的字符,若遇到重复字符,则移动`left`直到无重复。-每次更新`max_len`为最长子串长度。3.题目(15分):实现一个简单的LRU(LeastRecentlyUsed)缓存,支持`get`和`put`操作。缓存容量为`capacity`。-`get(key)`:如果键存在,返回值;否则返回`-1`。-`put(key,value)`:如果键存在,更新值;否则插入键值对。如果超出容量,删除最久未使用的键。要求:-`get`和`put`操作的时间复杂度为O(1)。答案: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=ListNode()self.tail=ListNode()self.head.next=self.tailself.tail.prev=self.headdef_add_node(self,node):node.prev=self.headnode.next=self.head.nextself.head.next.prev=nodeself.head.next=nodedef_remove_node(self,node):prev_node=node.prevnext_node=node.nextprev_node.next=next_nodenext_node.prev=prev_nodedef_move_to_head(self,node):self._remove_node(node)self._add_node(node)def_pop_tail(self):res=self.tail.prevself._remove_node(res)returnresdefget(self,key:int)->int:node=self.cache.get(key,None)ifnotnode:return-1self._move_to_head(node)returnnode.valuedefput(self,key:int,value:int)->None:node=self.cache.get(key)ifnode:node.value=valueself._move_to_head(node)else:newNode=ListNode(key,value)self.cache[key]=newNodeself._add_node(newNode)iflen(self.cache)>self.capacity:tail=self._pop_tail()delself.cache[tail.key]解析:-使用双向链表+哈希表实现。-哈希表记录键到节点的映射,链表维护最近使用顺序。-`get`操作将节点移动到头部,`put`操作插入新节点并删除最久未使用的节点。二、系统设计题(共2题,每题20分,总分40分)1.题目(20分):设计一个微博系统,支持以下功能:-用户发布微博(最多140字)。-用户关注/取消关注其他用户。-用户获取关注者的最新微博(按时间倒序)。要求:-说明主要数据结构设计。-描述核心接口和算法。-考虑高并发场景下的优化方案(如缓存、异步处理)。答案:主要数据结构:-`User`:存储用户信息(`id`,`name`,`followers`,`followees`,`tweets`)。-`followers`:关注该用户的用户列表。-`followees`:该用户关注的用户列表。-`tweets`:该用户的微博列表(最新在前)。-`Tweet`:存储微博信息(`id`,`user_id`,`content`,`timestamp`)。核心接口:-`publish_tweet(user_id,content)`:发布微博。-`follow(user_id,target_id)`:关注用户。-`unfollow(user_id,target_id)`:取消关注。-`get_timeline(user_id)`:获取关注者的最新微博。算法:-发布微博:将新`Tweet`添加到`User.tweets`的头部,并更新数据库。-关注/取消关注:更新`User.followees`和`User.followers`。-获取时间线:合并所有`followees`的`tweets`,按时间倒序排序。高并发优化:-缓存:使用Redis缓存用户的时间线,减少数据库查询。-异步处理:发布微博时使用消息队列(如Kafka)异步更新关注者的时间线。-分页:`get_timeline`支持分页加载,避免一次性加载过多数据。2.题目(20分):设计一个短链接生成系统(如`/abc123`),支持以下功能:-输入长链接,生成短链接。-输入短链接,解析为长链接。要求:-说明短链接的生成算法。-描述数据存储方案。-考虑高并发和分布式场景下的解决方案。答案:短链接生成算法:-使用Base62编码(`a-z`,`A-Z`,`0-9`),将长链接的ID转换为短字符串。-例如:`123456`→`1Kd`。-算法:1.将长链接ID计算哈希值(如SHA256)。2.取哈希值的前若干位(如6位),映射为Base62字符串。3.生成短链接(如`/abc123`)。数据存储方案:-使用哈希表(如Redis)存储短链接到长链接的映射。-键:短链接(如`abc123`)。-值:长链接(如`/long-url`)。-使用数据库(如PostgreSQL)存储历史数据,支持事务和备份。高并发和分布式方案:-分布式缓存:使用RedisCluster分片存储短链接映射。-负载均衡:多个短链接服务节点通过负载均衡(如Nginx)分发请求。-幂等性:生成短链接时检查ID是否已存在,避免重复。-限流:对生成和解析请求进行限流,防止过载。三、数据库题(共1题,20分)1.题目(20分):设计一个电商订单表`orders`,包含以下字段:-`order_id`(主键,自增)-`user_id`(用户ID)-`product_id`(商品ID)-`quantity`(购买数量)-`price`(单价)-`order_time`(下单时间)-`status`(订单状态,如'pending','shipped','completed')要求:-写出SQL语句创建该表,并设置合适的索引。-编写SQL查询:1.查询每个用户的总消费金额。2.查询已发货的订单中,每天的最晚下单订单。答案:表创建及索引:sqlCREATETABLEorders(order_idINTAUTO_INCREMENTPRIMARYKEY,user_idINTNOTNULL,product_idINTNOTNULL,quantityINTNOTNULLCHECK(quantity>0),priceDECIMAL(10,2)NOTNULLCHECK(price>0),order_timeDATETIMENOTNULL,statusENUM('pending','shipped','completed')NOTNULL);--索引优化CREATEINDEXidx_user_idONorders(user_id);CREATEINDEXidx_status_order_timeONorders(status,order_time);SQL查询:1.每个用户的总消费金额:sqlSELECTuser_id,SUM(quantityprice)AStotal_spentFROMordersGROUPBYuser_id;2.已发货订单中,每天的最晚下单订单:sqlSELECTorder_timeFROMordersWHEREstatus='shipped'GROUPBYDATE(order_time)ORDERBYorder_timeDESC;解析:-第一个查询通过`SUM(quantityprice)`计算每个用户的总消费。-第二个查询先筛选`status='shipped'`,然后按日期分组并按`order_time`降序排列,获取每天最晚的订单。四、行为面试题(共2题,每题10分,总分20分)1.题目(10分):请分享一次你解决技术难题的经历,说明背景、挑战、解决方案和结果。参考回答:-背景:在一个高并发系统中,用户反馈某接口响应时间过长。-挑战:线上环境复杂,涉及多个服务调用,难以定位瓶颈。-解决方案:1.使用`perf`工具分析CPU
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025上海华东师范大学后勤保障部仓库管理员招聘1人模拟笔试试题及答案解析
- 2025年下半年四川乐山职业技术学院考核招聘1人参考考试题库及答案解析
- 2025年培训面试题目答案及答案
- 2026届北京市北方交大附中数学高一上期末学业质量监测试题含解析
- 喀什高考数学试卷及答案
- 儿童保健大赛试题及答案
- T-CI 862-2024 高盐有机废水治理用微生物菌剂
- 数字展厅建设流程优化
- 洪水保险机制与风险分担方案
- 考试题集青岛啤酒数据分析师专业能力测试
- 2025年沈阳华晨专用车有限公司公开招聘参考笔试题库及答案解析
- 2025年河北石家庄市招聘工会社会工作人员25名笔试历年题库带答案解析
- 亚洲投资银行课件
- 2025年投融资岗位笔试试题及答案
- 烤房转让合同范本
- (一诊)达州市2026届高三第一次诊断性测试历史试题(含答案)
- 《汽车网络与新媒体营销》期末考试复习题库(附答案)
- 外一骨科年终总结
- 生产厂长年度工作总结
- 走遍天下书为伴侣课件
- 2025四川成都东部新区招聘编外工作人员29人笔试考试参考题库及答案解析
评论
0/150
提交评论