28届双非双一流本科AI Native北京某厂面经
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 你选择的高并发项目是如何保证库存不会超卖的?
- 你锁的是座位还是库存?
- 说一下实习项目的全链路。
- 实习项目中的 365atlas 是什么?为什么会产生那么多 Vectors?
- worker 机制处理过程中失败怎么办?
- 什么是写前围栏和心跳续约?
- 智能体项目的数据如何存储,文档如何进入库中,缓存放在哪里?
- 在智能体中,如何判断结构化、递归、语义以及 LLM 语义?
- 调用链是什么结构?如何判断该执行哪个?
- 如何保证检索的准确度?
- B+ 树为什么被选用作为 MySQL 的存储数据结构?
- 说一下你对 MVCC 的了解。
- 对布隆过滤器有了解吗?
- 布隆过滤器误判率过高了如何解决?它有一个竞品叫什么?
- 对 JVM 有了解吗?说一下常见的垃圾回收器。
《参考解析》
- 库存防超卖:将扣减操作放在数据库事务或原子缓存操作中,并用条件更新保证只有库存充足时才能成功。高并发场景还要配合幂等键、限流和必要的排队机制,避免重复请求造成多次扣减。
- 锁定对象:锁的粒度应与业务资源一致,通常锁定具体库存记录或商品维度,而不是无关的座位对象。选择分布式锁时要设置唯一持有者标识、过期时间和续约机制,并在释放时校验持有者。
- RAG 数据链路:文档先解析和清洗,再按语义切分并生成向量,向量与原文片段及权限信息一并入库。查询时对问题向量化、召回候选片段、重排和拼接上下文,最后交给模型生成答案。
- 向量数量增长:文档切分后每个片段通常生成一个向量,切分过细、重复导入或多版本共存都会放大数量。应记录文档版本和片段唯一键,避免重复写入,并根据检索效果调整切分策略。
- 失败处理与一致性:worker 任务需要持久化状态、重试次数和幂等键,失败后按可重试/不可重试分类处理。超过重试上限应进入人工处理或死信队列,并保留可观测的错误记录。
- 写前围栏与心跳续约:写前围栏通常是在获得锁后递增令牌,写入方携带令牌让存储层拒绝旧持有者的操作;心跳续约则在任务仍运行时延长锁有效期。两者分别解决旧请求越权写入和长任务锁提前过期的问题。
- 布隆过滤器:它用位数组和多组哈希函数表示集合,查询“存在”只代表可能存在,而“不存在”可以确定。误判率过高时可扩大位数组、选择合适的哈希数量或重建过滤器;常见的替代方案是 Cuckoo Filter。
- B+ 树与 MVCC:B+ 树的非叶节点只存键、叶节点存数据且通过链表连接,能减少磁盘 IO 并高效支持范围查询。MVCC 通过隐藏版本列和 undo log 保存历史版本,让不同事务按可见性规则读取数据,减少读写互相阻塞。
- JVM 垃圾回收器:常见收集器包括 Serial、Parallel、CMS 和 G1,选择取决于堆大小、吞吐量和停顿目标。G1 按 Region 管理堆并优先回收收益高的区域,适合需要较可控停顿的服务。