美团技术专家面试问题及答案_第1页
美团技术专家面试问题及答案_第2页
美团技术专家面试问题及答案_第3页
美团技术专家面试问题及答案_第4页
美团技术专家面试问题及答案_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

2026年美团技术专家面试问题及答案一、编程基础与算法(共5题,每题10分,总分50分)1.题目:给定一个未排序的整数数组,返回其中缺失的最小正整数。要求:-时间复杂度O(n),空间复杂度O(1)。-示例输入:`[3,4,-1,1]`,输出:`2`。答案:cppintfirstMissingPositive(int[]nums){intn=nums.length;for(inti=0;i<n;i++){while(nums[i]>0&&nums[i]<=n&&nums[nums[i]-1]!=nums[i]){swap(nums[i],nums[nums[i]-1]);}}for(inti=0;i<n;i++){if(nums[i]!=i+1)returni+1;}returnn+1;}解析:-首先遍历数组,将每个正整数`x`放到其应位置`x-1`(如`1`在索引`0`)。-交换时跳过非正数、超出范围的数以及已正确放置的数。-最后遍历检查首个不匹配的位置即为缺失最小正整数。2.题目:实现LRU(LeastRecentlyUsed)缓存,支持`get`和`put`操作。要求:-`get(key)`:返回键的值,若不存在返回-1。-`put(key,value)`:插入或更新键值对,容量超出时删除最久未使用项。-示例:`LRU{capacity=2}`,`put(1,1)`,`put(2,2)`,`get(1)`返回`1`,`put(3,3)`(删除`2`),`get(2)`返回`-1`。答案:cppclassLRUCache{unordered_map<int,list<pair<int,int>>::iterator>cache;list<pair<int,int>>list;intcapacity;public:LRUCache(intcap):capacity(cap){}intget(intkey){autoit=cache.find(key);if(it==cache.end())return-1;list.splice(list.begin(),list,it->second);returnit->second->second;}voidput(intkey,intvalue){autoit=cache.find(key);if(it!=cache.end()){list.splice(list.begin(),list,it->second);it->second->second=value;}else{if(cache.size()==capacity){cache.erase(list.back().first);list.pop_back();}list.push_front({key,value});cache[key]=list.begin();}}};解析:-使用`list`维护访问顺序(头为最近使用),`unordered_map`记录键到节点的映射。-`get`时移动节点到头部并返回值;`put`时若存在则更新,否则删除尾节点插入新节点。3.题目:设计一个算法,找出数组中重复次数超过一半的元素。要求:-时间复杂度O(n),空间复杂度O(1)。-示例输入:`[2,2,1,1,1,2,2]`,输出:`2`。答案:cppintmajorityElement(int[]nums){intcandidate=0,count=0;for(intnum:nums){if(count==0)candidate=num;count+=(num==candidate)?1:-1;}returncandidate;}解析:-Boyer-Moore投票法:遍历时维护候选者和计数器。-多数元素出现次数超过一半,最终候选者即为答案。4.题目:给定一个二叉树,判断其是否为对称二叉树(镜像对称)。要求:-示例输入:`[1,2,2,3,4,4,3]`,输出:`true`。答案:cppboolisSymmetric(TreeNoderoot){returnisMirror(root,root);}boolisMirror(TreeNodet1,TreeNodet2){if(!t1&&!t2)returntrue;if(!t1||!t2)returnfalse;returnt1->val==t2->val&&isMirror(t1->left,t2->right)&&isMirror(t1->right,t2->left);}解析:-递归比较对称位置节点:左子树的左与右子树的右,左与右相反。-若所有对称节点值相等且结构相同则返回`true`。5.题目:实现一个函数,检查字符串是否为有效括号组合(`'(',')','{','}','[',']'`)。要求:-示例输入:`"(){}[]"`,输出:`true`。答案:cppboolisValid(strings){stack<char>st;unordered_map<char,char>pairs={{')','('},{'}','{'},{'}','['}};for(charc:s){if(pairs.count(c)){if(st.empty()||st.top()!=pairs[c])returnfalse;st.pop();}else{st.push(c);}}returnst.empty();}解析:-使用栈匹配括号:遍历字符,若为右括号则检查栈顶是否匹配,否则入栈。-最终栈为空则有效。二、系统设计(共3题,每题15分,总分45分)1.题目:设计美团外卖的实时订单分配系统,支持高并发场景。要求:-说明核心模块(如订单池、骑手队列)、数据结构、约束条件(延迟、负载均衡)。-地域特点:考虑北京三环内订单密度大、骑手动态增减。答案:-核心模块:-订单池:Redis集群存储订单,按区域+优先级(距离/预估时间)排序。-骑手队列:每个区域维护骑手池,按评分/距离排序。-分配算法:轮询+负载均衡(骑手活跃度/距离权重)。-数据结构:json{"orders":{"zone1":[{"id":1,"distance":0.5,"timeout":5},...]},"riders":{"zone1":[{"id":101,"load":2,"score":4.8},...]}}-约束:-订单超时(如5分钟未分配则降低优先级)。-骑手动态加入(心跳更新负载)。解析:-高并发需分布式锁保护关键节点(如订单状态)。-地域特性需本地化缓存减少跨区请求(如三环订单优先分配本地骑手)。2.题目:设计美团闪购的即时配送路由优化系统。要求:-支持路径规划(Dijkstra/Floyd)、实时路况(如拥堵系数),考虑骑手手机端延迟。答案:-路由模块:-静态路网:Graphviz存储道路权重(距离/时间)。-动态更新:WebSocket接收实时路况,动态调整权重。-算法选择:-城市内用Dijkstra(单源最短路径),跨区用Floyd-Warshall。-骑手端适配:-增加移动端延迟补偿(如预留5秒超时)。解析:-考虑美团场景中骑手手机GPS延迟,需预规划+动态微调。3.题目:设计外卖商家优惠券系统,支持多种类型(满减/折扣券)。要求:-说明优惠券校验逻辑、库存控制、分布式事务方案。答案:-优惠券存储:json{"cupid":{"type":"discount","value":0.8,"limit":100},"coupon":{"type":"满30减10","stack":false,"limit":200}}-校验逻辑:sqlSELECTFROMcouponsWHEREcode=user_codeAND(type='discount'OR(type='满减'ANDuser_order>value))ANDexpiry>now()ANDstock>0FORUPDATE-事务:-使用Redis事务(Watch+Lua)或Raft协议保证原子性。解析:-需考虑优惠券叠加冲突(如折扣券+满减不能同时用)。三、数据库与分布式(共4题,每题12分,总分48分)1.题目:美团点评的业务数据量巨大,如何设计高可用订单数据库?要求:-说明分库分表策略、索引优化、容灾方案。答案:-分库分表:-按区域分库:如`order_1`(华东区),避免跨区网络延迟。-订单表分片:`order_id%100`(美团常用取模分片)。-索引优化:sqlCREATEINDEXidx_user_orderONorders(user_id,create_time);-容灾:-MySQL双主(同步+异步复制),跨机房同步。解析:-考虑美团订单高频写入特性,异步复制可降低延迟。2.题目:设计美团支付系统的分布式事务方案。要求:-对比TCC、Saga、本地消息表,说明美团实践。答案:-美团实践:-订单支付:本地消息表(异步补偿)。-跨店预付:Saga(两阶段提交变种)。-本地消息表流程:java//订单模块booleanpayOrder(){booleanres=reduceStock();if(res)saveOrder();returnres;}//消息补偿模块compensateOrder();解析:-本地消息表适用于补偿简单场景,Saga适合强一致性业务。3.题目:美团点评如何实现亿级用户画像的实时计算?要求:-说明数据流处理架构(Flink/Kafka),特征存储方案。答案:-架构:mermaidgraphLRA[用户行为]-->B{Flink}B-->C[实时特征]C-->D(HBase/Redis)-特征存储:-冷特征:HBase(SQL能力)。-热特征:Redis(毫秒级读取)。解析:-考虑用户画像需实时更新(如签到/签到奖励)。4.题目:设计美团点评的分布式缓存策略,解决缓存雪崩。要求:-说明多级缓存(本地+远程)、热点数据预热。答案:-多级缓存:-本地缓存:GuavaCache(秒级数据)。-远程缓存:RedisCluster(热点数据)。-雪崩防御:java//热点数据预热scheduleFixedRate(1,()->preloadHotData());解析:-考虑美团场景中商品页高频访问,需避免远程缓存穿透。四、网络与中间件(共3题,每题15分,总分45分)1.题目:设计美团外卖的实时消息推送系统(如骑手取餐提醒)。要求:-说明WebSocket/Server-SentEvents,流量控制方案。答案:-架构:mermaidgraphLRA[骑手App]<-->B{WebSocketServer}B-->C{MQTT}C-->D{订单模块}-流量控制:-消息压缩:Gzip/Protobuf。-限流:Nginx/Limitless(IP/用户)。解析:-考虑骑手网络不稳定,需断线重连机制。2.题目:设计美团点评的分布式任务调度系统。要求:-对比Cron/Quartz,说明美团自研调度器特点。答案:-美团调度器:-特性:-延迟任务:支持毫秒级执行。-集群化:节点间任务转移。-流程:java//任务注册JobRegistry.register("cleanExpiredOrders",CleanExpiredOrdersJob.class);解析:-考虑美团场景中任务种类多(如优惠券过期清理)。3.题目:设计美团外卖的API网关,处理超长链路。要求:-说明请求合并、服务熔断策略。答案:-请求合并:java//APIGateway合并请求if(userSession.hasPendingOrders()){returnmergeOrders();}-熔断:java//Hystrix配置CircuitBreakercb=newHystrixCommand(){protectedObjectrun(){returncallOrderService();}}.withCircuitBreakerEnabled();解析:-考虑美团API链路长(如用户->骑手->商家),需减少跳转。五、综合与开放问题(共2题,每题20分,总分40分)1.题目:美团点评如何应对双十一等大促流量洪峰?要求:-说明限流、降级、弹性伸缩方案。答案:-限流:-预热期:线上压测+线下模拟。-实时:流量削峰(如排队系统)。-降级:javaif

温馨提示

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

最新文档

评论

0/150

提交评论