版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年网络公司研发岗必刷题库:菜鸟网络研发经理经典面试题一、编程语言与数据结构(共5题,每题10分)1.题目:请实现一个函数,输入一个链表,反转链表后返回反转后的链表。链表节点定义如下:pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=next要求:时间复杂度O(n),空间复杂度O(1)。2.题目:给定一个包含n个整数的数组,请你找出其中和最接近0的三个数的组合。假设数组中的整数范围在-10^4到10^4之间,且数组长度至少为3。例如:输入数组[1,60,-10,70,-80,55],输出[-10,1,55](因为-10+1+55=46,是距离0最近的和)。3.题目:请实现一个LRU(LeastRecentlyUsed)缓存机制,使用哈希表和双向链表实现,支持get和put操作。要求:-get(key)——返回key对应的值,如果不存在返回-1。-put(key,value)——插入或更新key对应的值,如果缓存容量已满,则删除最久未使用的项。缓存容量为固定值。4.题目:给定一个字符串,请你找出其中不含有重复字母的子串的最长长度。例如:输入"abcabcbb",输出"abc"的长度3。5.题目:请实现一个二叉树的深度优先遍历(前序、中序、后序),并分别用递归和迭代方式实现。二叉树节点定义如下:pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=right二、系统设计(共3题,每题20分)1.题目:设计一个高并发的短链接系统,要求:-支持将任意长度的URL转换为固定长度的短链接。-支持通过短链接快速反查原始URL。-系统需要具备高可用性和高扩展性,支持分布式部署。2.题目:设计一个微博系统的用户关注功能,要求:-支持用户A关注用户B,用户B关注用户C。-支持查看用户A的粉丝列表和关注列表。-支持实时推送关注者的动态。-数据量可能达到千万级别,需要考虑性能优化。3.题目:设计一个消息推送系统,要求:-支持多种推送渠道(如短信、App推送、微信推送)。-支持定时推送和实时推送。-推送失败时需要重试机制,并记录推送日志。-系统需要具备高可靠性和低延迟。三、数据库与缓存(共4题,每题15分)1.题目:假设你正在设计一个电商平台的订单表,表结构如下:sqlCREATETABLEorders(idINTPRIMARYKEYAUTO_INCREMENT,user_idINT,product_idINT,order_timeTIMESTAMP,total_amountDECIMAL(10,2),statusENUM('pending','paid','shipped','completed','cancelled'));请写出以下SQL查询:-查询最近30天内状态为"paid"的订单数量。-查询每个用户的订单总金额,并按金额降序排列。2.题目:请解释MySQL中的索引类型(如B-Tree索引、哈希索引、全文索引),并说明在什么场景下使用哪种索引。3.题目:假设你正在使用Redis作为缓存,请写出以下场景的Redis缓存设计:-缓存用户个人信息,如昵称、头像等。-缓存热点商品数据,如商品详情、价格等。-缓存查询结果,如SQL查询结果、第三方API调用结果。4.题目:请解释数据库事务的ACID特性,并说明在什么场景下会出现事务问题(如脏读、不可重复读、幻读)。四、分布式与微服务(共4题,每题15分)1.题目:假设你正在设计一个分布式事务系统,请解释以下概念:-CAP理论-2PC(两阶段提交)协议-TCC(Try-Confirm-Cancel)协议-Saga模式2.题目:请解释分布式系统中的常见问题,如:-超时问题-锁竞争问题-数据一致性问题3.题目:假设你正在使用Kafka作为消息队列,请写出以下场景的Kafka使用场景:-用户行为日志采集-微服务解耦-分布式事务补偿4.题目:请解释微服务架构中的服务发现机制,并说明常用的服务发现工具(如Consul、Eureka、Nacos)。五、网络与系统(共3题,每题20分)1.题目:请解释TCP的三次握手和四次挥手过程,并说明在什么场景下会出现TCP连接问题(如死锁、超时)。2.题目:请解释HTTP/1.1和HTTP/2的区别,并说明HTTP/2的优势。3.题题:假设你正在设计一个高可用的Web服务,请写出以下方案:-使用Nginx作为反向代理-使用Keepalived实现服务高可用-使用负载均衡(如LVS、HAProxy)答案与解析一、编程语言与数据结构1.反转链表pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=nextdefreverseList(head:ListNode)->ListNode:prev=Nonecurrent=headwhilecurrent:next_node=current.nextcurrent.next=prevprev=currentcurrent=next_nodereturnprev解析:-使用三个指针prev、current、next_node实现链表反转。-每次将current的next指向prev,然后移动指针。-时间复杂度O(n),空间复杂度O(1)。2.三数和最接近0pythondefthreeSumClosest(nums):nums.sort()n=len(nums)closest_sum=sum(nums[:3])foriinrange(n-2):left,right=i+1,n-1whileleft<right:current_sum=nums[i]+nums[left]+nums[right]ifabs(current_sum)<abs(closest_sum):closest_sum=current_sumifcurrent_sum<0:left+=1else:right-=1returnclosest_sum解析:-先排序数组,然后固定一个数,使用双指针法查找另外两个数。-每次计算三数之和,并与当前最接近0的值比较。-时间复杂度O(n^2),空间复杂度O(1)。3.LRU缓存pythonclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.head=ListNode(0)self.tail=ListNode(0)self.head.next=self.tailself.tail.prev=self.headdefget(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=ListNode(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解析:-使用双向链表和哈希表实现LRU缓存。-get操作将节点移动到链表头部,put操作将新节点插入头部,并删除最久未使用的节点。-时间复杂度O(1),空间复杂度O(capacity)。4.最长无重复子串pythondeflengthOfLongestSubstring(s:str)->int: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解析:-使用滑动窗口法,左指针和右指针分别表示子串的左右边界。-每次移动右指针,如果字符已存在,则移动左指针。-时间复杂度O(n),空间复杂度O(min(m,n)),m为字符集大小。5.二叉树遍历前序遍历(递归)pythondefpreorderTraversal(root:TreeNode)->List[int]:result=[]defdfs(node):ifnotnode:returnresult.append(node.val)dfs(node.left)dfs(node.right)dfs(root)returnresult前序遍历(迭代)pythondefpreorderTraversal(root:TreeNode)->List[int]:ifnotroot:return[]stack,result=[root],[]whilestack:node=stack.pop()result.append(node.val)ifnode.right:stack.append(node.right)ifnode.left:stack.append(node.left)returnresult中序遍历(递归)pythondefinorderTraversal(root:TreeNode)->List[int]:result=[]defdfs(node):ifnotnode:returndfs(node.left)result.append(node.val)dfs(node.right)dfs(root)returnresult中序遍历(迭代)pythondefinorderTraversal(root:TreeNode)->List[int]:stack,result,node=[],[],rootwhilestackornode:whilenode:stack.append(node)node=node.leftnode=stack.pop()result.append(node.val)node=node.rightreturnresult后序遍历(递归)pythondefpostorderTraversal(root:TreeNode)->List[int]:result=[]defdfs(node):ifnotnode:returndfs(node.left)dfs(node.right)result.append(node.val)dfs(root)returnresult后序遍历(迭代)pythondefpostorderTraversal(root:TreeNode)->List[int]:stack1,stack2,result=[root],[],[]whilestack1:node=stack1.pop()ifnode:stack2.append(node)stack1.append(node.left)stack1.append(node.right)whilestack2:node=stack2.pop()result.append(node.val)returnresult解析:-前序遍历先访问根节点,中序遍历左-根-右,后序遍历左-右-根。-递归方式简单直观,迭代方式需要借助栈实现。二、系统设计1.短链接系统设计思路:-使用哈希算法(如MD5、SHA1)将长URL转换为固定长度的短链接。-使用分布式缓存(如Redis)存储短链接与长URL的映射关系。-使用分布式ID生成器(如Snowflake)生成唯一短链接。-使用负载均衡(如Nginx)分发请求。伪代码:pythondefgenerate_short_url(long_url):hash_value=md5(long_url).hexdigest()short_url=base58.encode(int(hash_value,16))redis.set(short_url,long_url)returnshort_url2.微博关注功能设计思路:-使用关系型数据库(如MySQL)存储用户关系表,表结构如下:sqlCREATETABLEfollow关系(follower_idINT,followee_idINT,PRIMARYKEY(follower_id,followee_id));-使用Redis缓存用户关注列表和粉丝列表。-使用消息队列(如Kafka)实时推送关注者动态。伪代码:pythondeffollow(userA,userB):db.insert("follow关系",follower_id=userA,followee_id=userB)redis.sadd(f"{userA}_fans",userB)redis.sadd(f"{userB}_followers",userA)kafka.send("follow_topic",userA,userB)3.消息推送系统设计思路:-使用消息队列(如RabbitMQ、Kafka)接收推送请求。-使用定时任务(如Celery)处理定时推送。-使用Redis存储推送状态和重试次数。-使用分布式服务(如PushService)负责具体推送逻辑。伪代码:pythondefpush_message(user_id,channel,message,delay=0):ifdelay>0:celery.schedule(delay,push_service.push,args=(user_id,channel,message))else:push_service.push(user_id,channel,message)三、数据库与缓存1.订单表SQL查询sql--查询最近30天内状态为"paid"的订单数量SELECTCOUNT()ASpaid_order_countFROMordersWHEREstatus='paid'ANDorder_time>NOW()-INTERVAL30DAY;--查询每个用户的订单总金额,并按金额降序排列SELECTuser_id,SUM(total_amount)AStotal_amountFROMordersGROUPBYuser_idORDERBYtotal_amountDESC;2.索引类型-B-Tree索引:适用于范围查询和排序,如`order_time>'2023-01-01'`。-哈希索引:适用于精确查询,如`user_id=100`。-全文索引:适用于文本搜索,如`nameLIKE'%张%'`。3.Redis缓存设计-用户信息缓存:使用`SETuser:100:nickname"Alice"`存储用户昵称,过期时间1小时。-热点商品缓存:使用`SETproduct:1000:details'{"name":"iPhone15",...}'`存储商品详情,过期时间10分钟。-查询结果缓存:使用`SETquery:orders'{"time":"2023-01-01","count":100}'`缓存SQL查询结果,过期时间5分钟。4.事务问题-脏读:一个事务读取了另一个未提交事务的数据。-不可重复读:一个事务多次读取同一数据,但数据被其他事务修改。-幻读:一个事务多次读取同一范围的数据,但其他事务插入了新的数据。四、分布式与微服务1.分布式事务-CAP理论:一致性(Consisten
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年教师职称考试(特殊教育)历年参考题库含答案详解
- 2025康复医学科三基考试题库及答案
- 2025年安全生产事故案例分析及事故处理流程培训试卷及答案
- 消防安全工作自查报告
- 2025年安全生产月电气测试试题及答案
- 工业机器人系统操作员(三级)职业鉴定理论考试题及答案(新版)
- 2025年人工智能应用技术考试试卷及答案
- 建设工程施工合同纠纷要素式起诉状模板要素清晰无混淆
- 2026年动物园管理提升
- 2026 年无子女离婚协议书正规模板
- 上海建桥学院简介招生宣传
- 《智慧教育黑板技术规范》
- 《电力建设安全工作规程》-第1部分火力发电厂
- 歌曲《我会等》歌词
- 八年级物理上册期末测试试卷-附带答案
- 小学英语五年级上册Unit 5 Part B Let's talk 教学设计
- 老年痴呆科普课件整理
- 学生校服供应服务实施方案
- GB/T 22900-2022科学技术研究项目评价通则
- 自动控制系统的类型和组成
- GB/T 15171-1994软包装件密封性能试验方法
评论
0/150
提交评论