面灵AI

美团后端开发岗面经(04)

时间
2026-09
来源
牛客网

《面试题目》

  1. C++11、C++14 和 C++17 分别引入了哪些重要特性?
  2. 什么是完美转发,forward 起什么作用?
  3. AddressSanitizer 的原理是什么,如何用它排查内存问题?
  4. AOP 如何实现,反射在其中起什么作用?
  5. MySQL 的最左匹配原则是什么,如何查看查询是否使用索引?
  6. 可重复读是如何实现的,除了 MVCC 还有哪些方案?
  7. 异步下单为什么选择 Kafka,结果如何反馈给用户?
  8. RAG 的基本实现原理是什么,向量库如何参与检索?
  9. 应用内存持续增长但堆和元空间不变,可能是什么原因?
  10. Redis 的 ZSet 如何实现按分数和时间排序的排行榜?
  11. 如何在不停服的情况下把 16 张表迁移到 64 张表?
  12. 一次 RPC 请求客户端超时而服务端不超时,可能有哪些原因?

《参考解析》

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