上篇资深聊完组件化和多渠道打包,这篇进入美团架构师。架构师面试不再考具体技术方案,而是考系统设计能力——"美团外卖首页怎么设计的?午高峰并发下单怎么处理?30个Android团队协作怎么不冲突?历史技术债怎么治理?"
美团架构师要能站在全局视角看问题。面试官考的是你的思维高度——不是"这个技术怎么实现",而是"这个方案为什么选它、代价是什么、三年后怎么办"。
今天8道题覆盖美团架构师核心考点。
Q1:美团外卖首页怎么设计的?
页面结构:顶部搜索栏+定位、商家列表(无限滚动)、底部Tab。看似简单但涉及大量系统设计。
数据加载:首屏数据分接口请求——定位接口(GPS获取经纬度)→ 附近商家接口(LBS查询)→ 推荐接口(个性化排序)。接口间有依赖关系,用DAG(有向无环图)编排并行请求。阿里的Alpha框架就是做这个——任务按依赖拓扑排序,无依赖的并行执行。
商家列表:RecyclerView + 分页加载。图片Glide加载+磁盘缓存。商家卡片布局复用(ConstraintLayout减少层级)。列表预取——滑到底部前3条就开始加载下一页。
性能优化:首屏预加载(定位和商家接口并行发)、图片WebP格式减少体积、骨架屏占位(数据没回来先展示灰色占位)。首屏目标<1.5s。
追问:商家列表滑动卡顿怎么排查?先线上看APM帧率数据定位是哪些页面卡 → Systrace/BlockCanary定位卡顿代码 → 常见原因:onBindViewHolder做了耗时操作、图片解码在主线程、布局层级太深。
Q2:午高峰并发下单怎么设计?
问题:午高峰每秒上万笔订单,系统不能崩、不能超卖、不能重复扣款。
客户端设计:下单按钮防重(点击后disable + 防抖间隔2秒)、请求超时控制(连接5s读10s)、失败重试(指数退避1s→2s→4s最多3次)、本地幂等ID(UUID防止重复下单)。客户端生成requestId随下单请求发送,服务端用requestId去重。
接口设计:下单接口返回orderId,客户端轮询订单状态(或WebSocket推送)。不直接返回成功/失败——下单是异步流程(创建订单→扣库存→支付→骑手接单)。每个状态变化通过推送通知客户端更新UI。
异常处理:网络超时不确定下单是否成功——先查订单列表确认再提示用户。支付超时自动关单释放库存。弱网环境展示本地缓存的订单状态。
追问:客户端能做哪些并发优化?请求合并(批量操作合并一个接口)、本地队列(网络差时请求入队列,恢复后批量发送)、离线模式(展示缓存数据+后台同步)。美团外卖的购物车就是离线优先设计——加购物车先存本地,联网后同步到服务端。
Q3:多团队协作架构怎么设计?
问题:美团外卖Android团队30+人,多个业务线(商家端/用户端/骑手端)并行开发。
组件化:每个业务线一个组件(独立Module),基础库共享(网络/图片/日志)。组件间通过路由通信,不直接依赖。
分支管理:主干开发(Trunk-Based)+ Feature分支。每个组件独立Git仓库,通过Maven版本号集成。发版时所有组件统一版本号打包。避免"依赖地狱"——A组件用1.0版B组件,C组件用2.0版导致冲突。
代码规范:统一Kotlin/Java编码规范(Ktlint自动检查)、PR必须CI通过+两人Review、架构变更写RFC文档评审。新人入职第一周必须读团队编码规范文档。
追问:怎么避免组件版本冲突?所有组件共享dependency management(BOM文件),统一三方库版本。CI检查版本冲突(依赖树分析),有冲突PR不允许合入。
Q4:技术债务怎么治理?
分类:代码债(重复代码/过长方法/过时API)、架构债(模块耦合/不合理的依赖关系)、工具债(编译慢/CI不稳定)、文档债(缺失/过时)。
量化:用工具扫描技术债务——SonarQube统计代码质量问题、依赖图分析模块耦合度、编译时间监控趋势。把债务转化为具体指标(重复代码率>5%、循环依赖数>10)。
治理策略:新功能开发时顺带还债(Boy Scout Rule——离开时比来时干净)。每季度安排一个Sprint专门还债。高优先级债务(Crash/安全漏洞)立即修复。中优先级(编译慢/测试覆盖率低)跟正常迭代一起做。低优先级(代码风格不一致)有时间再处理。
避免新债务:代码Review强制执行、架构决策写ADR(Architecture Decision Record)、新功能上线前做性能回归测试。技术债务不是不产生,而是控制产生速度——每个Sprint预留20%时间处理债务。
Q5:怎么做技术选型决策?
评估维度:功能满足度、性能表现、社区活跃度、维护成本、迁移成本、团队学习曲线。做对比矩阵打分。
决策流程:技术调研(1-2周)→ PoC验证(2-3周)→ 小范围灰度(1-2周)→ 全量推广。每个阶段有明确的通过标准和退出标准。
文档化:每个技术选型决策写ADR——背景、候选方案、对比、选择理由、风险评估、里程碑。方便后续团队理解决策背景。
追问:Flutter和Compose怎么选?新App/跨端需求用Flutter(一套代码两端跑)。已有Android原生项目用Compose(学习成本低、和原生无缝互操作)。两端都要覆盖且追求一致性用Flutter。
Q6:怎么做线上稳定性保障?
监控指标:Crash率<0.1%、ANR率<0.01%、启动成功率>99%、API成功率>99.5%。每个指标有Owner负责。
报警机制:指标超过阈值自动报警(钉钉/短信)。Crash报警带堆栈+影响用户数。严重问题(Crash率突增>0.5%)自动触发回滚。
灰度发布:新功能先灰度1%用户 → 监控指标无异常 → 扩大到10% → 50% → 全量。灰度期间发现问题立即回滚。美团外卖的每个新功能都要走灰度流程,不允许直接全量。
应急响应:线上严重Bug走热修复(Robust即时生效)→ 2小时内出补丁 → 灰度验证 → 全量推送。非严重Bug跟下个版本修复。每次线上事故做Post-Mortem(复盘会议),找根因不定责。
Q7:架构师的软技能?
技术影响力:在团队内做技术分享、写技术博客、主导技术方向。让团队认可你的技术判断力。
跨团队沟通:跟后端/产品/测试对齐需求和技术方案。能用非技术语言跟产品经理沟通技术风险。架构师花30%时间写代码,70%时间在沟通和决策上。
人才培养:带新人、做Mentor、Review代码时不只指出问题还教方法。让团队整体技术能力提升。一个优秀的架构师离开后团队还能继续运转——说明你把知识传递出去了。
追问:架构师和Tech Lead什么区别?架构师侧重技术方向和系统设计(做什么、怎么做)。Tech Lead侧重团队管理和项目推进(谁做、什么时候做完)。很多公司两个角色是同一个人。
Q8:架构面试怎么答系统设计题?
澄清需求:先问清楚——DAU多少?核心场景是什么?有没有现有系统要兼容?不要上来就画架构图。
分层设计:先画模块划分和数据流,再讲每个模块的技术选型。面试官看的是你的系统思维而不是技术细节。
量化结果:每个方案带数据——"这个方案能支撑10万QPS""首屏加载从2s降到800ms""Crash率从0.3%降到0.08%"。没有数据的架构设计等于空谈。面试官想看你能不能用数据证明方案的价值。
面试Tips:美团架构师面试考系统设计能力。外卖架构考DAG请求编排和性能优化。高并发考客户端防重/超时/幂等。多团队考组件化+分支管理+代码规范。技术债考量化指标和治理策略。技术选型考评估矩阵和ADR文档。架构面试回答要有全局视角——不只讲技术实现,还要讲组织协作、风险控制、长期演进。
下一篇进入算法专项——二叉树遍历、栈与队列、贪心算法、字符串匹配。
做过系统设计的同学评论区聊聊,你们架构师面试被问过什么有意思的题目?
本系列连载中,关注不迷路,下一篇:美团初级Android(算法专项)面试真题
系列简介:Android大厂面经连载,覆盖字节跳动、腾讯、阿里、美团等40+企业,从初级到架构师全岗位覆盖。每篇文章包含真实面试题+详细答案+代码示例,帮你拿到大厂Offer。