美团AI全栈工程师面经
《面试题目》
一面 (40min)
- 实习与项目深度拷打:RAG检索流程,文件上传耗时优化(8s到2s),两阶段检索逻辑,ES选型原因,WebSocket vs SSE。
- HTTPS通信过程。
- Redis主从同步过程及常见数据结构(压缩列表连锁更新、哈希表、跳表)。
- 线程池参数及拒绝策略。
- 场景题:一亿条数据快速导入MySQL。
- 场景题:微博大V发帖,用户关注50人且每人千条动态的Feed流实现与数据结构设计。
- 手撕:链表重排。
二面 (80min)
- 实习与项目深度拷打:死锁检测、MVCC、SQL优化器实现、B+树原理、隔离级别实现、MySQL内存模型与日志系统、SQL调优。
- ThreadLocal原理与内存泄漏。
- 基于MySQL实现分布式锁。
- 手撕:合并两个有序数组 (O(1)空间复杂度)。
- AI Coding:实现AI自动提交周报。
《参考解析》
- RAG两阶段检索:第一阶段粗排快速召回候选集,第二阶段精排(Cross-Encoder)提升准确率,从而平衡性能与效果。
- Redis压缩列表连锁更新:当新增元素导致prevlen长度从1字节变为5字节时,可能引发后续节点的连锁重分配,可通过ziplist结构优化解决。
- MySQL分布式锁:利用
SELECT ... FOR UPDATE或唯一索引冲突实现。需注意设置锁超时时间及处理死锁逻辑,生产环境推荐结合Redis或Zookeeper。 - Feed流设计:采用“拉模型”或“推拉结合”。关注博主列表可用Redis ZSet存储,score为时间戳,利用Redis的交集/并集或缓存队列实现快速分页拉取。
- ThreadLocal内存泄漏:ThreadLocalMap的Key为弱引用,Value为强引用。若线程池未销毁,ThreadLocal对象被回收后,Entry残留Value无法释放,需显式调用
.remove()。