版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年互联网科技公司面试题及答案一、编程题(共5题,每题10分,总分50分)1.题1(10分):编写一个函数,实现将任意长度的链表反转。链表节点定义如下:pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=next要求:-时间复杂度O(n),空间复杂度O(1)。-输入示例:`1->2->3->4->5`,输出:`5->4->3->2->1`。答案与解析:pythondefreverse_list(head):prev=Nonecurrent=headwhilecurrent:next_node=current.next#临时存储下一个节点current.next=prev#反转指针prev=current#移动prev到当前节点current=next_node#移动current到下一个节点returnprev解析:-时间复杂度:遍历链表一次,O(n)。-空间复杂度:只用三个指针变量,O(1)。-核心逻辑:通过迭代方式逐个反转节点指针,直到当前节点为空。2.题2(10分):实现一个无重复字符的最长子串查找功能。输入一个字符串,返回最长子串的长度。要求:-输入示例:`"abcabcbb"`,输出:`3`(最长子串为"abc")。-输入示例:`"pwwkew"`,输出:`3`(最长子串为"wke")。答案与解析: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解析:-时间复杂度:O(n),每个字符最多访问两次(left和right)。-空间复杂度:O(min(m,n)),m为字符集大小,n为字符串长度。-核心逻辑:使用滑动窗口(双指针)和哈希集合记录字符出现位置,动态调整窗口范围。3.题3(10分):给定一个整数数组,找出其中和为特定值的最长子数组长度。要求:-输入示例:`nums=[1,-2,3,5,-1,2]`,目标和`target=3`,输出:`4`(子数组[1,-2,3,5]的和为3)。答案与解析:pythondefmax_subarray_len(nums,target):sum_map={0:-1}#初始化前缀和为0时索引为-1current_sum=0max_len=0fori,numinenumerate(nums):current_sum+=numifcurrent_sum-targetinsum_map:max_len=max(max_len,i-sum_map[current_sum-target])ifcurrent_sumnotinsum_map:sum_map[current_sum]=ireturnmax_len解析:-时间复杂度:O(n),遍历数组一次。-空间复杂度:O(n),存储前缀和的哈希表。-核心逻辑:通过前缀和+哈希表记录第一个出现的前缀和位置,快速查找满足条件的子数组。4.题4(10分):实现一个LRU(最近最少使用)缓存,支持get和put操作。缓存容量为固定值。要求:-输入示例:`capacity=2`,操作序列`["LRU","put",1,1,"get",1,"put",2,3,"get",2,"put",4,"get",1,"get",3]`,输出:`[1,-1,-1,3,4]`。答案与解析:pythonclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.order=[]defget(self,key:int)->int:ifkeyinself.cache:self.order.remove(key)self.order.append(key)returnself.cache[key]return-1defput(self,key:int,value:int)->None:ifkeyinself.cache:self.order.remove(key)eliflen(self.cache)>=self.capacity:oldest_key=self.order.pop(0)delself.cache[oldest_key]self.cache[key]=valueself.order.append(key)解析:-时间复杂度:get和put均为O(1),通过双向链表和哈希表实现。-核心逻辑:哈希表存储键值对,双向链表维护使用顺序,最近使用的节点移动到尾部。5.题5(10分):给定一个二叉树,判断其是否为完全二叉树。要求:-输入示例:1/\23/\45输出:`True`。1/\23\4输出:`False`。答案与解析:pythonfromcollectionsimportdequeclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefis_complete_binary_tree(root:TreeNode)->bool:ifnotroot:returnTruequeue=deque([root])flag=False#标记是否遇到过不完整的节点whilequeue:node=queue.popleft()ifnode:ifflag:returnFalse#后面出现满节点,前面有缺失节点flag=Truequeue.append(node.left)queue.append(node.right)else:flag=True#遇到空节点后,后续节点必须全部为空returnTrue解析:-时间复杂度:O(n),遍历所有节点。-空间复杂度:O(n),使用队列存储节点。-核心逻辑:层序遍历,遇到第一个空节点后,后续节点必须全部为空。二、系统设计题(共3题,每题20分,总分60分)1.题1(20分):设计一个高并发的短链接系统。要求:-输入长链接,输出短链接(如6位随机字母),点击短链接可自动跳转至长链接。-支持高并发访问(QPS>1万),分布式部署,具备可扩展性。答案与解析:系统架构:1.URL缩短服务:-使用分布式ID生成器(如TwitterSnowflake算法)生成唯一ID。-将ID转换为短链接(如62进制编码,`a-zA-Z0-9`共62个字符,6位长度约等于`1.15e9`个短链接)。-缓存ID与长链接的映射关系(Redis/Hazelcast)。2.路由服务:-使用Nginx/LVS进行负载均衡,分发请求到后端服务。-后端服务采用无状态架构(如SpringCloud/FaaS),支持弹性伸缩。3.缓存层:-高频访问的短链接缓存到Redis,TTL设为24小时。-热点短链接可使用本地缓存(内存)。4.数据库:-使用分片数据库(如ShardingSphere),按ID范围分片。高并发优化:-异步处理:使用消息队列(Kafka/RabbitMQ)削峰填谷。-CDN加速:静态资源(如favicon)部署到CDN。-限流降级:熔断器(Hystrix)防止雪崩。2.题2(20分):设计一个实时消息推送系统,支持单聊和群聊。要求:-支持WebSocket长连接,低延迟推送。-用户离线时,消息可存储到数据库,待上线后重发。-支持消息加签、防重放。答案与解析:系统架构:1.接入层:-WebSocket协议接入,使用Nginx反向代理。-Token认证,防止未授权访问。2.消息队列:-使用RabbitMQ/Kafka传递消息,确保高吞吐。-单聊消息直连,群聊消息广播到所有成员。3.存储层:-离线消息存储到Redis(内存)或Tair(持久化)。-消息加签(如HMAC-SHA256),防篡改。4.推送服务:-根据用户设备类型(iOS/Android/Web)推送至客户端。-客户端接收后更新本地数据库。技术选型:-WebSocket:Socket.IO/FastAPI。-消息存储:Redis+RocksDB(持久化)。-防重放:使用UUID+Redis过期时间。3.题3(20分):设计一个高并发的实时推荐系统,支持个性化推荐。要求:-输入用户行为数据(点击、收藏、购买),输出Top10推荐商品。-支持增量更新,低延迟查询。答案与解析:系统架构:1.数据采集层:-用户行为日志接入Kafka,使用Flume/Flink实时处理。2.特征工程:-用户画像(年龄、性别、购买偏好)存储到Redis。-商品标签(类别、热度)存储到Elasticsearch。3.推荐引擎:-协同过滤(ALS/SVD),基于用户/商品相似度。-热门推荐(如商品点击量Top10)。-实时更新(用户行为触发重计算)。4.查询服务:-使用Redis缓存用户实时推荐结果。-查询时先命中缓存,否则计算后缓存。性能优化:-冷启动:新用户推荐基于热门商品。-离线+在线结合:模型离线训练(Spark),在线实时调优(TensorFlowServing)。-降级策略:推荐失败时回退到随机推荐。三、算法题(共3题,每题10分,总分30分)1.题1(10分):给定一个数组,返回所有可能的子集。要求:-输入:`[1,2,3]`,输出:`[[],[1],[1,2],[1,2,3],[1,3],[2],[2,3],[3]]`。答案与解析:pythondefsubsets(nums):res=[]subset=[]defbacktrack(start):res.append(subset.copy())foriinrange(start,len(nums)):subset.append(nums[i])backtrack(i+1)subset.pop()backtrack(0)returnres解析:-回溯算法:类似全排列,但每次选择后不删除原元素。-时间复杂度:O(2^n),n为数组长度。2.题2(10分):给定一个字符串,判断其是否为有效的括号组合。要求:-输入:`"()[]{}"`,输出:`True`。-输入:`"([)]"`,输出:`False`。答案与解析:pythondefisValid(s):stack=[]mapping={')':'(','}':'{',']':'['}forcharins:ifcharinmapping:top_element=stack.pop()ifstackelse'#'ifmapping[char]!=top_element:returnFalseelse:stack.append(char)returnnotstack解析:-栈结构:左括号入栈,右括号弹出并比对。-时间复杂度:O(n)。3.题3(10分):给定一个无序数组,找出不重复的三元组,使得a+b+c=0。要求:-输入:`[-1,0,1,2,-1,-4]`,输出:`[[-1,-1,2],[-1,0,1]]`。答案与解析:pythondefthreeSum(nums):nums.sort()res=[]n=len(nums)foriinrange(n):ifi>0andnums[i]==nums[i-1]:continueleft,right=i+1,n-1whileleft<right:total=nums[i]+nums[left]+nums[right]iftotal<0:left+=1eliftotal>0:right-=1else:res.append([nums[i],nums[left],nums[right]])whileleft<rightandnums[left]==nums[left+1]:left+=1whileleft<rightandnums[right]==nums[right-1]:right-=1left+=1right-=1returnres解析:-排序+双指针:排序后固定一个数,其余用双指针找和为0的组合。-时间复杂度:O(n^2)。四、数据库题(共2题,每题10分,总分20分)1.题1(10分):设计一个电商订单表(SQL),支持高并发写入。要求:-字段:`order_id`(主键)、`user_id`、`product_id`、`quantity`、`total_price`、`status`(待支付/已支付/已取消)、`create_time`。-优化写入性能。答案与解析:sqlCREATETABLEorders(order_idBIGINTAUTO_INCREMENTPRIMARYKEY,user_idBIGINTNOTNULL,product_idBIGINTNOTNULL,quantityINTNOTNULLCHECK(quantity>0),total_priceDECIMAL(10,2)NOTNULL,statusENUM('pending','paid','cancelled')DEFAULT'pending',create_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMP,INDEXidx_user_id(user_id),INDEXidx_product_id(product_id),INDEXidx_status(status))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;优化策略:-InnoDB引擎:支持行级锁和事务。-分库分表:按order_id或user_id分片。-写入缓存:Redis预存热点数据,批量写入数据库。2.题2(10分):查询过去7天内,每个用户的订单数量和总金额。要求:-输入:`{"time_range":"last_7_days"}`,输出:json[{"user_id":1,"order_count":5,"total_amount":1200.50},{"user_id":2,"order_count":3,"total_amount":850.00}]答案与解析:sqlSELECTuser_id,COUNT(order_id)ASorder_count,SUM(total_price)AStotal_amountFROMordersWHEREcreate_time>=NOW()-INTERVAL7DAYGROUPBYuser_idORDERBYuser_id;优化建议:-物化视图:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 截洪沟施工方案
- 2025年口腔诊疗器械消毒技术操作规范试题与答案
- 医务科工作总结及工作计划
- 慢性病防治试题及答案
- 四川硬笔法四级考试试题及答案
- 2025建筑工程技术考试试题(含答案)
- 物流师三级考试试题含答案
- 2025年海选诗词大赛题库及答案
- 震动打桩机安全操作规程
- 建设工程施工合同纠纷要素式起诉状模板专业权威靠谱
- 意识障碍的判断及护理
- 储能电站安全管理与操作规程
- 2025年宿迁市泗阳县保安员招聘考试题库附答案解析
- 交通安全企业培训课件
- 2025年广东省中考物理试卷及答案
- 皮革项目商业计划书
- 主管护师护理学考试历年真题试卷及答案
- 华文慕课《刑法学》总论课后作业答案
- 公路护栏波型梁施工方案
- 2025版煤矿安全规程新增变化条款考试题库
- 基于SOLO分类理论剖析初中生数学开放题解决水平:现状差异与提升策略
评论
0/150
提交评论