2026年互联网行业技术面试题及答案详解_第1页
2026年互联网行业技术面试题及答案详解_第2页
2026年互联网行业技术面试题及答案详解_第3页
2026年互联网行业技术面试题及答案详解_第4页
2026年互联网行业技术面试题及答案详解_第5页
已阅读5页,还剩10页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

2026年互联网行业技术面试题及答案详解一、编程题(共3题,每题20分,总分60分)要求:以下编程题需在Python或Java中实现,并说明时间复杂度和空间复杂度。1.(20分)实现一个无重复字符的最长子串查找功能。给定一个字符串`s`,返回其最长无重复字符的子串长度。例如:-输入:`s="abcabcbb"`-输出:`3`(最长无重复子串为"abc")答案:pythondeflength_of_longest_substring(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解析:-使用滑动窗口技术,`left`和`right`分别表示窗口的左右边界。-遍历字符串时,若`char_set`中已存在`s[right]`,则移动`left`并移除`s[left]`,直到窗口无重复字符。-时间复杂度:O(n),每个字符最多被访问两次(左右各一次)。-空间复杂度:O(min(m,n)),`char_set`存储的字符数不超过字符串长度和字符集大小。2.(20分)实现一个二叉树的最大深度(深度优先搜索DFS)计算功能。给定一个二叉树的根节点`root`,返回其最大深度。例如:-输入:`[3,9,20,null,null,15,7]`(BST结构)-输出:`3`答案:pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefmax_depth(root:TreeNode)->int:ifnotroot:return0return1+max(max_depth(root.left),max_depth(root.right))解析:-递归计算左子树和右子树的最大深度,取较大值加1(当前节点)。-时间复杂度:O(n),遍历所有节点。-空间复杂度:O(h),递归栈的深度等于二叉树高度。3.(20分)实现一个LRU(最近最少使用)缓存。给定容量`capacity`,设计LRU缓存,支持`get`和`put`操作。例如:-输入:`capacity=2,["put",1,1],["put",2,2],["get",1],["put",3,3],["get",2]`-输出:`1,-1`(缓存中`2`被`3`覆盖,`get`返回`-1`)答案:pythonclassListNode:def__init__(self,key=0,value=0,prev=None,next=None):self.key=keyself.value=valueself.prev=prevself.next=nextclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.head=ListNode(0,0)self.tail=ListNode(0,0)self.head.next=self.tailself.tail.prev=self.headdefget(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:newNode=ListNode(key,value)self.cache[key]=newNodeself._add_node(newNode)iflen(self.cache)>self.capacity:lru=self.tail.prevself._remove_node(lru)delself.cache[lru.key]def_move_to_head(self,node:ListNode)->None:self._remove_node(node)self._add_node(node)def_add_node(self,node:ListNode)->None:node.prev=self.headnode.next=self.head.nextself.head.next.prev=nodeself.head.next=nodedef_remove_node(self,node:ListNode)->None:prev_node=node.prevnext_node=node.nextprev_node.next=next_nodenext_node.prev=prev_node解析:-使用双向链表和哈希表实现,链表头为最近使用,尾为最久未使用。-`get`操作将节点移至头部,`put`操作插入头部并删除最久未使用节点(若超出容量)。-时间复杂度:O(1)。-空间复杂度:O(capacity)。二、系统设计题(共2题,每题20分,总分40分)要求:设计系统需考虑高可用、可扩展性、数据一致性等因素。1.(20分)设计一个高并发的短链接系统。要求:-支持高并发访问(百万级请求/秒)。-链接生成快速且唯一。-支持分布式部署。答案:系统架构:1.分布式短链接服务:采用无状态设计,可水平扩展。2.短链接生成:使用哈希算法(如Base62编码)将长URL映射为短URL。3.分布式缓存:使用Redis集群缓存短链接映射关系,提高访问速度。4.数据库:使用分片数据库(如TiDB)存储长链接和短链接映射,支持高并发写入。技术实现:-短链接生成:pythonimporthashlibimportbase64defencode_url(long_url:str)->str:hash_obj=hashlib.md5(long_url.encode())short_code=base64.urlsafe_b64encode(hash_obj.digest()).decode().rstrip('=')returnf"/{short_code}"-分布式缓存:redisRedis集群缓存短链接映射SETshort_url:<short_code><long_url>-分布式部署:-使用Kubernetes集群部署服务,负载均衡分配请求。-数据库分片,每个分片存储部分短链接映射。解析:-高并发处理:通过Redis集群和数据库分片实现读写分离和水平扩展。-短链接生成:MD5+Base62编码保证唯一性,避免冲突。-分布式优势:无状态设计便于水平扩展,Redis集群支持高并发缓存。2.(20分)设计一个实时消息推送系统(如微信、钉钉)。要求:-支持百万级用户实时消息推送。-保证消息不丢失。-支持离线消息存储。答案:系统架构:1.消息生产者:用户操作触发消息生成,接入消息队列(如Kafka)。2.消息调度器:根据用户在线状态推送实时消息,离线消息存储Redis。3.消息消费者:客户端APP拉取消息或WebSocket实时推送。技术实现:-消息队列:kafkaKafka生产者发送消息PRODUCEtopic="user_messages"key=user_idvalue=message-消息推送策略:-在线用户:WebSocket实时推送。-离线用户:Redis存储消息,APP启动时拉取。-消息可靠性:-消息队列持久化,确保不丢失。-APP端离线消息存储,重连后同步。解析:-高并发支持:Kafka支持百万级消息吞吐,Redis保证离线消息存储。-消息可靠性:消息队列持久化,APP端离线重试。-实时性:WebSocket实现实时推送,避免延迟。三、数据库题(共1题,20分)要求:结合SQL或数据库设计回答问题。1.(20分)设计一个电商订单数据库表结构,要求:-支持高并发写入。-支持订单分页查询(按时间、金额排序)。-支持订单状态实时统计(如未支付、已发货等)。答案:表结构设计:sqlCREATETABLEorders(order_idBIGINTAUTO_INCREMENTPRIMARYKEY,user_idBIGINTNOTNULL,total_amountDECIMAL(10,2)NOTNULL,statusENUM('pending','paid','shipped','completed','cancelled')NOTNULL,created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP,updated_atTIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,INDEXidx_status(status),INDEXidx_user_id(user_id),INDEXidx_created_at(created_at));技术实现:-高并发写入:-使用InnoDB引擎,支持事务和行锁。-数据库分片,每个分片存储部分订单。-分页查询:sqlSELECTFROMordersWHEREuser_id=?ORDERBYcreated_atDESCLIMIT?,?;-实时统计:sqlSELECTstatus,COUNT()FROMordersWHEREcreated_at>?GROUPBYstatus;解析:-高并发写入:InnoDB支持事务和行锁,分片提高写入能力。-分页查询:索引`created_at`和`user_id`加速排序和查询。-实时统计:聚合查询+索引优化,支持按状态统计。四、综合题(共1题,20分)要求:结合互联网行业场景回答问题。1.(20分)微信朋友圈“查看最近访客”功能如何设计?要求:-支持用户快速查看最近访问过哪些好友。-保证数据隐私(仅显示对方允许访问的动态)。答案:系统设计:1.用户访问记录:使用Redis存储用户动态访问记录(`user_id`→`visited动态ID`列表)。2.隐私控制:动态发布时,用户可设置是否允许被访客列表记录。3.最近访客展示:用户请求时,返回最近访问且允许的动态。技术实现:-访问记录:redis用户A访问动态BLPUSHuser_a:visitsdynamic_b_id-隐私控制:sql动态表增加隐私字段CREATETABLEposts(post_idBIGINTPRIMARYKEY,user_idBIGINT,privacyTINYINTDEFAULT1#1:公开,2:仅好友);-访客展示:pythondefget_recent_visitors(user_id:int)->List[int]:visited_posts=redis.lrange(f"user_{user_id}:v

温馨提示

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

评论

0/150

提交评论