美团AI后端开发一面面经
面试题目
- 前置环节:AI Coding 测试。
- 项目背景:实习经历介绍及项目深入拷打(涉及JWT、SDS、位图、一主多从架构、事件驱动模型)。
- Redis/并发:
- 在Lua脚本执行时,是否还会有并发问题?
- Java并发:synchronized原理及锁优化过程。
- 缓存击穿的成因与解决方案。
- 项目实践:AI Coding的具体实施过程与测试方法。
- 手撕算法:K个一组翻转链表(除了递归,讨论迭代法)。
- AI/大模型相关:
- 是否了解LLM、Agent及Skill的概念?
- 对LangChain框架的理解。
- 学校内接触大模型的场景与深度。
参考解析
- Lua脚本并发性:Redis执行Lua脚本时是原子性的,脚本执行期间不会被其他命令插入,因此不会产生传统意义上的并发竞争,但需注意脚本执行时间过长会导致Redis阻塞。
- synchronized原理:基于对象头(Mark Word)实现,底层通过Monitor对象实现互斥。锁优化过程包括:偏向锁 -> 轻量级锁(自旋) -> 重量级锁(OS互斥量),锁消除和锁粗化是进一步的优化手段。
- 缓存击穿:指热点Key过期瞬间,大量请求直接打到数据库。解决方案:使用互斥锁(如Redis分布式锁)只允许一个线程回填缓存,或设置逻辑过期时间,或通过热点数据永不过期处理。
- K个一组翻转链表(迭代法):思路是先测量链表长度,按K分组;每组内利用指针反转(头插法或三个指针原地旋转),并将上一组的尾部指向当前组的新头,下一组的头部指向当前组的尾部。