2026年美团技术部面试题库及答案详解_第1页
2026年美团技术部面试题库及答案详解_第2页
2026年美团技术部面试题库及答案详解_第3页
2026年美团技术部面试题库及答案详解_第4页
2026年美团技术部面试题库及答案详解_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

2026年美团技术部面试题库及答案详解一、编程题(共5题,每题15分,总分75分)1.题目:请实现一个函数,输入一个链表,反转链表后返回反转后的链表。链表节点定义如下:pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=next示例输入:`[1,2,3,4,5]`示例输出:`[5,4,3,2,1]`答案:pythondefreverseList(head:ListNode)->ListNode:prev=Nonecurrent=headwhilecurrent:next_node=current.next#保存下一个节点current.next=prev#反转当前节点的指针prev=current#移动prev到当前节点current=next_node#移动current到下一个节点returnprev解析:反转链表采用迭代法,通过三个指针`prev`、`current`和`next_node`实现。初始时`prev`为`None`,`current`为头节点。每次循环中,先保存`current.next`(即`next_node`),然后反转`current.next`指向`prev`,最后移动`prev`和`current`到下一个节点。循环结束后,`prev`即为反转后的头节点。2.题目:给定一个包含非负整数的数组,你的任务是统计其中所有奇数数字的平均值。如果数组中奇数的数量为0,则返回0。示例输入:`[1,2,3,4,5]`示例输出:`3.0`答案:pythondefaverageOfOdds(nums):total=0count=0fornuminnums:ifnum%2!=0:total+=numcount+=1returntotal/countifcount!=0else0解析:遍历数组,统计奇数的总和和数量。如果奇数数量为0,直接返回0;否则返回总和除以数量。时间复杂度O(n),空间复杂度O(1)。3.题目:实现一个函数,输入一个字符串,返回该字符串的最长回文子串的长度。示例输入:`"babad"`示例输出:`3`("bab"或"aba")答案:pythondeflongestPalindrome(s:str)->int:n=len(s)ifn==0:return0dp=[[False]nfor_inrange(n)]max_len=1foriinrange(n):dp[i][i]=Trueforiinrange(n-1):ifs[i]==s[i+1]:dp[i][i+1]=Truemax_len=2forlengthinrange(3,n+1):foriinrange(n-length+1):j=i+length-1ifs[i]==s[j]anddp[i+1][j-1]:dp[i][j]=Truemax_len=lengthreturnmax_len解析:使用动态规划法。`dp[i][j]`表示子串`s[i:j+1]`是否为回文。初始时单个字符都是回文,两字符相同也为回文。对于长度大于2的子串,如果`s[i]==s[j]`且`s[i+1:j]`为回文,则`s[i:j]`为回文。遍历所有可能的子串长度,记录最长回文子串的长度。4.题目:实现一个函数,输入一个整数数组,返回该数组的中位数。示例输入:`[3,1,2,4,5]`示例输出:`3.0`答案:pythondeffindMedianSortedArrays(nums1,nums2):merged=sorted(nums1+nums2)n=len(merged)ifn%2==0:return(merged[n//2-1]+merged[n//2])/2else:returnmerged[n//2]解析:合并两个已排序数组,然后根据合并后数组的长度计算中位数。如果长度为偶数,取中间两个数的平均值;否则取中间数。时间复杂度O(nlogn),空间复杂度O(n)。5.题目:实现一个函数,输入一个字符串,判断该字符串是否为有效的括号组合(只考虑`()`、`[]`、`{}`)。示例输入:`"()[]{}"`示例输出:`True`答案:pythondefisValid(s:str)->bool:stack=[]mapping={')':'(',']':'[','}':'{'}forcharins:ifcharinmapping:top_element=stack.pop()ifstackelse'#'ifmapping[char]!=top_element:returnFalseelse:stack.append(char)returnnotstack解析:使用栈结构,遍历字符串。对于每个字符,如果是右括号,检查栈顶是否为对应的左括号;否则将字符入栈。最后如果栈为空,则有效。时间复杂度O(n),空间复杂度O(n)。二、系统设计题(共3题,每题25分,总分75分)1.题目:设计一个高并发的短链接系统。要求:1.输入任意长度的URL,输出固定长度的短链接。2.支持高并发访问和快速跳转。3.支持链路追踪(如点击统计)。答案:系统架构:1.短链接生成:-使用自增ID或随机算法生成唯一标识(如62进制编码,如`aV3f7`)。-缓存常用操作,避免频繁数据库写入。2.高并发支持:-前端使用分布式缓存(如RedisCluster)存储短链接与长链接的映射,分片存储。-后端使用负载均衡(如Nginx+LVS)分发请求。3.链路追踪:-使用Redis或MySQL记录点击日志,包含时间戳、IP、User-Agent等。-实时统计接口,返回统计结果。伪代码:python生成短链接defgenerate_short_url(long_url):id=generate_unique_id()#62进制编码short_url=f"/{id}"cache.set(id,long_url)#缓存映射returnshort_url跳转长链接defredirect_to_long_url(short_url):id=short_url.split('/')[-1]long_url=cache.get(id)ifnotlong_url:long_url=db.get(id)#查数据库iflong_url:log_click(id)#记录点击returnlong_urlreturn"URLnotfound"解析:短链接系统核心在于高效生成和解析,同时保证高并发和可追踪性。采用缓存+数据库两级存储,前端负载均衡,后端链路追踪日志,确保系统可用性和扩展性。2.题目:设计一个实时新闻推荐系统,要求:1.用户阅读新闻后可反馈(喜欢/不喜欢)。2.根据用户行为动态调整推荐顺序。3.支持实时更新和低延迟推荐。答案:系统架构:1.数据采集:-用户行为(阅读、点赞、分享)实时写入Kafka,接入Flink或SparkStreaming处理。2.推荐逻辑:-协同过滤(基于用户/新闻相似度)。-内容推荐(根据新闻特征向量)。-实时因子(用户近期行为权重更高)。3.存储与分发:-用户画像存入Redis,推荐结果存入Memcached。-推送服务(如MQTT)实时下发推荐。伪代码:python用户行为处理defprocess_user_behavior(user_id,news_id,action):log_action(user_id,news_id,action)#写入Kafkaupdate_user_profile(user_id)#更新用户画像实时推荐defget_realtime_recommendations(user_id):profile=redis.get(user_id)recommendations=recommend_system(profile)#调用推荐引擎returnrecommendations解析:实时推荐系统需要结合用户行为和新闻特征,采用流式计算实时更新用户画像,结合多种推荐算法(协同过滤+内容推荐)实现精准推荐。通过缓存和消息队列保证低延迟和高可用性。3.题目:设计一个高并发的秒杀系统。要求:1.支持秒杀商品数量限制。2.防止超卖和重复购买。3.用户体验流畅(避免秒杀失败)。答案:系统架构:1.库存控制:-使用Redis分布式锁或Lua脚本原子扣减库存。-库存超限时直接返回失败。2.订单生成:-使用消息队列(如RabbitMQ)异步处理订单,避免超卖。-订单状态(待支付/已支付)用Redis或数据库记录。3.防作弊:-限制用户频率(如1分钟内限购1次)。-验证码+验证手机号减少恶意购买。伪代码:python秒杀逻辑def秒杀(user_id,goods_id):lock=redis.setnx(f"lock:{goods_id}",1,nx=True,ex=10)ifnotlock:return"系统繁忙"stock=redis.decr(f"stock:{goods_id}")ifstock<0:redis.incr(f"stock:{goods_id}")return"库存不足"create_order(user_id,goods_id)#异步生成订单return"秒杀成功"解析:秒杀系统核心在于库存原子扣减和订单异步处理。使用分布式锁+Redis原子操作保证库存准确性,消息队列解耦订单生成,验证码+频率限制防止作弊,确保系统稳定性和用户体验。三、数据库题(共2题,每题20分,总分40分)1.题目:设计一个电商订单表,包含以下字段:-`order_id`(订单ID)、`user_id`(用户ID)、`goods_id`(商品ID)、`quantity`(数量)、`price`(单价)、`total_price`(总价)、`status`(订单状态)、`create_time`(创建时间)。要求:1.如何保证订单ID的唯一性?2.如何优化查询订单列表(按用户ID分页)?答案:表设计:sqlCREATETABLEorders(order_idBIGINTAUTO_INCREMENTPRIMARYKEY,user_idBIGINTNOTNULL,goods_idBIGINTNOTNULL,quantityINTNOTNULL,priceDECIMAL(10,2)NOTNULL,total_priceDECIMAL(10,2)NOTNULL,statusTINYINTNOTNULLDEFAULT0,--0待支付,1已支付等create_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMP,INDEXidx_user_id(user_id),FOREIGNKEY(user_id)REFERENCESusers(user_id),FOREIGNKEY(goods_id)REFERENCESgoods(goods_id));解答:1.订单ID唯一性:使用`AUTO_INCREMENT`或`SERIAL`生成自增ID,保证唯一性。2.优化查询:-为`user_id`创建索引`idx_user_id`。-使用`LIMIToffset,count`分页。-考虑缓存热门用户订单(如Redis)。解析:订单表设计需保证唯一性、高查询效率和事务一致性。自增ID确保ID唯一,索引优化分页查询,外键约束保证数据完整性。缓存可提升热用户查询性能。2.题目:假设订单表数据量巨大,如何优化以下查询:sqlSELECTuser_id,SUM(total_price)AStotal_spentFROMordersWHEREstatus=1GROUPBYuser_idORDERBYtotal_spentDESCLIMIT10;答案:优化方案:1.物化视图:-定期计算并存储每个用户的总消费(如每天凌晨跑批)。sqlCREATETABLEuser_spent(user_idBIGINTPRIMARYKEY,total_spentDECIMAL(10,2)NOTNULL);2.实时更新:-订单支付后实时更新`user_spent`表(如使用触发器或消息队列)。3.查询优化:-直接查询`user_spent`表,避免全表计算。sqlSELECTuser_id,total_spentFROMuser_spentORDERBYtotal_spentDESCLIMIT10;解析:大数据量查询优化核心是避免全表扫描。物化视图存储计算结果,实时更新保证数据新鲜度,直接

温馨提示

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

评论

0/150

提交评论