美团后端开发岗面经(04)
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- C++11、C++14 和 C++17 分别引入了哪些重要特性?
- 什么是完美转发,
forward起什么作用? - AddressSanitizer 的原理是什么,如何用它排查内存问题?
- AOP 如何实现,反射在其中起什么作用?
- MySQL 的最左匹配原则是什么,如何查看查询是否使用索引?
- 可重复读是如何实现的,除了 MVCC 还有哪些方案?
- 异步下单为什么选择 Kafka,结果如何反馈给用户?
- RAG 的基本实现原理是什么,向量库如何参与检索?
- 应用内存持续增长但堆和元空间不变,可能是什么原因?
- Redis 的 ZSet 如何实现按分数和时间排序的排行榜?
- 如何在不停服的情况下把 16 张表迁移到 64 张表?
- 一次 RPC 请求客户端超时而服务端不超时,可能有哪些原因?
《参考解析》
- C++11 带来移动语义、右值引用、智能指针和 lambda,C++14 放宽泛型 lambda 等限制,C++17 增加结构化绑定、
if constexpr和并行算法等。实际选择要看编译器和运行环境支持情况。 - 完美转发利用转发引用和
std::forward保留实参的左值或右值属性,使包装函数不额外改变重载决议。它常用于泛型工厂、容器和库代码。 - AddressSanitizer 在编译时插入检查,并用影子内存标记越界、释放后使用等非法访问。配合复现用例和堆栈信息,可以快速定位到具体代码行。
- Spring AOP 通常通过代理对象织入切面,JDK 动态代理面向接口,CGLIB 通过子类代理类。反射负责读取方法和注解元数据,但不是唯一的增强机制。
- 联合索引从最左列开始连续匹配,遇到范围条件后后续列通常不能继续用于定位。
EXPLAIN可以查看访问类型、候选索引、实际使用索引和扫描行数。 - InnoDB 用 MVCC 为普通一致性读提供快照,用锁限制写写和当前读冲突;串行化隔离级别也可以通过更强的锁实现,但并发度更低。
- Kafka 能用分区顺序和持久化日志承接削峰,订单状态写回数据库后可通过查询、推送或回调反馈。消息重试必须配合幂等键,不能把“发送成功”当成订单完成。
- RAG 先切分文档并生成向量,在线按问题召回相似片段,再把片段交给模型生成回答。分块、Embedding、召回和重排都要用离线评测集验证。
- 还可能是线程栈、直接内存、JNI 分配、文件描述符或本地库缓存增长。应结合进程 RSS、Native Memory Tracking、线程数和系统指标逐层排查。
- ZSet 用 score 排序并以 member 去重;分数相同的场景可把时间编码进 score,或用复合 member 再在读取时按时间二次排序,需注意精度和更新语义。
- 采用双写或变更捕获同步新旧表,先回填并校验,再让读流量灰度切换,最后停止旧表写入。迁移脚本要可重入,且全过程保留回滚开关。
- 可能是网络抖动、客户端超时配置过短、代理层超时、服务端响应写出阻塞或重试造成的重复请求。应串联请求 ID、客户端、网关和服务端日志定位耗时段。