ThunderBit AI后端一二面面经

ThunderBit · AI后端开发工程师 · 一面/二面 · 2026-06

《面试题目》

一面(视频面,约55分钟)

  1. 自我介绍
  2. 第一个项目用到了状态机,状态机主要是干嘛的?这个流程有哪些状态,状态之间是怎么流转的?
  3. 提到了分布式锁和幂等防重,讲讲这两个分别是什么、有什么区别?
  4. Redis 缓存中,为什么把会话这种热数据放缓存,不直接放数据库?
  5. 如果 Redis 挂了,数据会丢吗?
  6. 在 AI 调用中为什么特别在意消息重复提交的问题?
  7. AI 是怎么调用工具的?整个流程是怎样的?

《参考解析》

  1. 分布式锁 vs 幂等防重:分布式锁解决的是”同一时刻只允许一个执行者操作共享资源”的互斥问题(关注并发控制);幂等防重解决的是”同一个请求被重复执行多次,结果应该保持一致”的问题(关注结果一致性),两者常配合使用——例如用分布式锁保证扣库存操作互斥,同时用幂等表/唯一约束防止重复扣减。
  2. 会话数据放缓存而非直接放数据库的原因:会话数据访问频率极高(几乎每个请求都要校验),直接查数据库会带来巨大的 IO 压力和延迟;Redis 基于内存的读写速度比磁盘数据库快几个数量级,且天然支持设置过期时间(TTL),非常适合会话这类”访问频繁、有效期短”的热数据。
  3. Redis 挂了数据是否会丢:取决于持久化策略——若未开启 RDB/AOF,Redis 重启数据全部丢失;开启 RDB 则可能丢失最近一次快照之后的数据;开启 AOF(尤其 always 策略)能最大程度减少数据丢失但性能开销更大;生产环境通常采用主从+哨兵/集群模式,配合 RDB+AOF 混合持久化来兼顾性能与可靠性。
  4. AI Agent 调用工具的流程:模型根据用户输入和可用工具的描述(Function/Tool Schema)判断是否需要调用工具,生成结构化的工具调用请求(如 JSON 格式的函数名+参数)→ 后端解析该请求并实际执行对应工具/接口 → 将执行结果作为新的上下文回传给模型 → 模型基于工具结果继续推理或生成最终回答,这一过程可能循环多轮(即 ReAct 模式)。