Java 开发工程师(智能客服)二面面经
完整信息
本篇目录
面试公司:百度
面试时间:7月17日
面试岗位:Java开发实习生(智能客服)
第一个项目:
- 优惠券秒杀中,为什么使用 Redis Lua 脚本进行校验和库存预扣?
- 你所说的 Lua 脚本“回退”是指什么?什么情况下需要回退?
- 如果 Lua 脚本已经执行成功,但后续订单消息发送到 Kafka 失败,应该怎么处理?
- 只依靠 Lua 脚本和消息队列,就能保证库存不超卖和一人一单吗?
- 如果绕过 Redis 入口,直接在数据库中更新库存,数据库层面如何防止超卖?
- 你简历中提到 Cache Aside,能介绍一下它的完整执行流程吗?
- 缓存未命中后,谁负责查询数据库并重新写入缓存?
- 为什么采用“更新数据库,然后删除缓存”,而不是“更新数据库,然后直接更新缓存”?
- 并发更新缓存时,可能出现什么数据一致性问题?
- 为什么使用 ThreadLocal 存储用户信息?
- 请求结束后,ThreadLocal 中的数据会自动移除吗?你是怎么清理的?
第二个项目:
- 你的系统整体是不是由 Agent 中控和知识库两部分组成?
- 能简单介绍一下 ReAct 的推理与行动机制吗?
- 模型在推理过程中,怎么知道应该使用哪个工具?
- 你这个 Agent 中一共有多少个工具?
- 当 Agent 中包含很多工具和 Skill 时,模型选择工具还会准确吗?
- 企业级场景中,一个用户可能拥有 200 多个工具和 Skill,怎么保证工具选择效果?
- 有没有了解过,模型在面对多少个工具或 Skill 时,选择效果是最优的?
- 通过业务分类减少候选工具时,如果用户问题比较模糊,是否可能选错类别?
- 如果第一层类别选择错误,导致后面无法找到正确工具,应该怎么处理?
- 工具很难严格划分到单一业务类别时,分类方案还是否可行?
- 模型已经思考完成,也选择好了工具,接下来它是怎么真正调用工具的?
- 流式输出时,工具名称和参数 JSON 是分片返回的,平台怎么判断已经获得一个完整的工具调用?
- 流式场景下,怎么识别完整的 MCP 命令或者 Tool Call 参数?
- ReAct 是一个不断思考、行动、观察的循环,它有没有可能一直循环下去,无法停止?
- 你在项目中是否遇到过 Agent 无限循环的问题?你是怎么解决的?
- 为什么在 ReAct 前面增加 Plan-and-Execute?
- 加入规划机制后,如果模型在执行过程中仍然出现幻觉,应该怎么处理?
- 某个问题按照流程必须先调用工具,但模型没有调用工具,直接给出答案,应该怎么解决? 例如用户查询实时天气,模型没有调用天气工具,直接回答“今天是晴天”,怎么防止这种情况?
- 如何判断模型的答案是正确、错误还是幻觉?
- 工具已经正常调用,真实数据也拿到了,但模型最终回答与工具数据不一致,怎么预防或缓解?
- 在 Agent 整个执行流程中,哪些环节可能导致模型出现幻觉?
- 除了 Prompt 和 Reflection,还有哪些方法能够降低幻觉?
- 如何保证最终回答忠实于工具结果,而不是使用模型自身知识进行补充?
- 你的 RAG 使用了向量检索和 BM25 混合召回,为什么要同时使用这两种检索方式?
- 向量检索和 BM25 分别解决什么问题?
- 为什么仅使用向量检索可能无法很好地召回专业术语、类名和关键词?
- 你的向量检索使用的是什么算法?
- 是否了解 HNSW 的检索原理?
- HNSW 的层级结构是怎样的?
- HNSW 有哪些局限性?
- 为什么 HNSW 的检索性能比较高?
- HNSW 是否可能出现漏召回?
- 如果正确结果没有进入 HNSW 的候选集,应该怎么处理?
- 只考虑 HNSW 或 ANN 检索本身,不考虑 Embedding、切分等环节,如何缓解漏召回?
- Query Rewrite 用在 RAG 流程中的哪个位置?
- 检索时,是原始 Query 和改写 Query 一起检索,还是只检索改写后的 Query?
- 除了原始 Query 和改写 Query 双路检索,还有什么方法能够提高召回效果?
- 是否了解 HyDE?
- 除了 HyDE 和多角度改写,还有哪些召回策略?
- 为什么企业级 RAG 通常使用多路召回,而不是只依赖 Query Rewrite?
二面:
- 你平时使用 Claude 或 Codex 做编程吗?有什么心得或者技巧?
- 你在里面用了哪些 Skill?
- 你如何理解 Harness Engineering?
- 你如何理解 OpenClaw?
- Claude或者 OpenClaw 具体应该怎么实现?你有去看过吗?
- 你怎么理解 Loop Agent 或者 Loop Engineering?
- 最简单的 Loop Agent 应该怎么设计?
- 你做了两路混合召回之后,又引入了二阶段 Rerank。Rerank 起什么作用?
- 如果不使用二阶段 Rerank,会有什么问题?
- Rerank 为什么能够提升检索效果?
- 既然已经有 BM25 和向量检索,为什么还需要引入 Rerank?
- 为什么不把 Rerank 作为第三路召回,与 BM25、向量检索一起执行?
- 三路召回后再进行加权融合,为什么不行?
- 先用向量检索召回1000条,再用 BM25 缩小到100条,最后用 Rerank 缩小到10条,这样行不行?
- 第一阶段使用向量模型 A 和 BM25 召回100条,第二阶段不用 Rerank,改用向量模型 B 重排,行不行?
- 如果向量模型 A 和向量模型 B 的网络结构、训练数据都不同,是否可以利用模型 B 对候选文档重新排序?
- 你的长期记忆是怎么做的?
- 长期记忆是怎么召回的?
- 用户一个月前说喜欢吃辣,一周前又说不能吃辣,现在应该怎么判断他能不能吃辣?
- 你的长期记忆具体是怎么存储的?
- 既然记忆存储在向量数据库里,你是怎么对已有记忆进行更新的?
- 你的上下文压缩是怎么做的?
- 上下文压缩有没有可能把关键信息压缩丢失?
- 如果用户购买某个商品花了500元,压缩后把“500元”丢失了怎么办?
- 你如何定义哪些内容属于重要信息?
- 面对开放式对话,系统如何判断某条信息必须保留?
- 如何设计上下文压缩,尽可能避免金额、订单信息等关键数据丢失?
- 你加入 Query Rewrite 是为了解决什么问题?#发面经攒人品#
本篇目录
当前问题0179
- 01
优惠券秒杀中,为什么使用 Redis Lua 脚本进行校验和库存预扣?
- 02
你所说的 Lua 脚本“回退”是指什么?什么情况下需要回退?
- 03
如果 Lua 脚本已经执行成功,但后续订单消息发送到 Kafka 失败,应该怎么处理?
- 04
只依靠 Lua 脚本和消息队列,就能保证库存不超卖和一人一单吗?
- 05
如果绕过 Redis 入口,直接在数据库中更新库存,数据库层面如何防止超卖?
- 06
你简历中提到 Cache Aside,能介绍一下它的完整执行流程吗?
- 07
缓存未命中后,谁负责查询数据库并重新写入缓存?
- 08
为什么采用“更新数据库,然后删除缓存”,而不是“更新数据库,然后直接更新缓存”?
- 09
并发更新缓存时,可能出现什么数据一致性问题?
- 10
为什么使用 ThreadLocal 存储用户信息?
- 11
请求结束后,ThreadLocal 中的数据会自动移除吗?你是怎么清理的?
- 12
你的系统整体是不是由 Agent 中控和知识库两部分组成?
- 13
能简单介绍一下 ReAct 的推理与行动机制吗?
- 14
模型在推理过程中,怎么知道应该使用哪个工具?
- 15
你这个 Agent 中一共有多少个工具?
- 16
当 Agent 中包含很多工具和 Skill 时,模型选择工具还会准确吗?
- 17
企业级场景中,一个用户可能拥有 200 多个工具和 Skill,怎么保证工具选择效果?
- 18
有没有了解过,模型在面对多少个工具或 Skill 时,选择效果是最优的?
- 19
通过业务分类减少候选工具时,如果用户问题比较模糊,是否可能选错类别?
- 20
如果第一层类别选择错误,导致后面无法找到正确工具,应该怎么处理?
- 21
工具很难严格划分到单一业务类别时,分类方案还是否可行?
- 22
模型已经思考完成,也选择好了工具,接下来它是怎么真正调用工具的?
- 23
流式输出时,工具名称和参数 JSON 是分片返回的,平台怎么判断已经获得一个完整的工具调用?
- 24
流式场景下,怎么识别完整的 MCP 命令或者 Tool Call 参数?
- 25
ReAct 是一个不断思考、行动、观察的循环,它有没有可能一直循环下去,无法停止?
- 26
你在项目中是否遇到过 Agent 无限循环的问题?你是怎么解决的?
- 27
为什么在 ReAct 前面增加 Plan-and-Execute?
- 28
加入规划机制后,如果模型在执行过程中仍然出现幻觉,应该怎么处理?
- 29
某个问题按照流程必须先调用工具,但模型没有调用工具,直接给出答案,应该怎么解决? 例如用户查询实时天气,模型没有调用天气工具,直接回答“今天是晴天”,怎么防止这种情况?
- 30
如何判断模型的答案是正确、错误还是幻觉?
- 31
工具已经正常调用,真实数据也拿到了,但模型最终回答与工具数据不一致,怎么预防或缓解?
- 32
在 Agent 整个执行流程中,哪些环节可能导致模型出现幻觉?
- 33
除了 Prompt 和 Reflection,还有哪些方法能够降低幻觉?
- 34
如何保证最终回答忠实于工具结果,而不是使用模型自身知识进行补充?
- 35
你的 RAG 使用了向量检索和 BM25 混合召回,为什么要同时使用这两种检索方式?
- 36
向量检索和 BM25 分别解决什么问题?
- 37
为什么仅使用向量检索可能无法很好地召回专业术语、类名和关键词?
- 38
你的向量检索使用的是什么算法?
- 39
是否了解 HNSW 的检索原理?
- 40
HNSW 的层级结构是怎样的?
- 41
HNSW 有哪些局限性?
- 42
为什么 HNSW 的检索性能比较高?
- 43
HNSW 是否可能出现漏召回?
- 44
如果正确结果没有进入 HNSW 的候选集,应该怎么处理?
- 45
只考虑 HNSW 或 ANN 检索本身,不考虑 Embedding、切分等环节,如何缓解漏召回?
- 46
Query Rewrite 用在 RAG 流程中的哪个位置?
- 47
检索时,是原始 Query 和改写 Query 一起检索,还是只检索改写后的 Query?
- 48
除了原始 Query 和改写 Query 双路检索,还有什么方法能够提高召回效果?
- 49
是否了解 HyDE?
- 50
除了 HyDE 和多角度改写,还有哪些召回策略?
- 51
为什么企业级 RAG 通常使用多路召回,而不是只依赖 Query Rewrite?
- 52
你平时使用 Claude 或 Codex 做编程吗?有什么心得或者技巧?
- 53
你在里面用了哪些 Skill?
- 54
你如何理解 Harness Engineering?
- 55
你如何理解 OpenClaw?
- 56
Claude或者 OpenClaw 具体应该怎么实现?你有去看过吗?
- 57
你怎么理解 Loop Agent 或者 Loop Engineering?
- 58
最简单的 Loop Agent 应该怎么设计?
- 59
你做了两路混合召回之后,又引入了二阶段 Rerank。Rerank 起什么作用?
- 60
如果不使用二阶段 Rerank,会有什么问题?
- 61
Rerank 为什么能够提升检索效果?
- 62
既然已经有 BM25 和向量检索,为什么还需要引入 Rerank?
- 63
为什么不把 Rerank 作为第三路召回,与 BM25、向量检索一起执行?
- 64
三路召回后再进行加权融合,为什么不行?
- 65
先用向量检索召回1000条,再用 BM25 缩小到100条,最后用 Rerank 缩小到10条,这样行不行?
- 66
第一阶段使用向量模型 A 和 BM25 召回100条,第二阶段不用 Rerank,改用向量模型 B 重排,行不行?
- 67
如果向量模型 A 和向量模型 B 的网络结构、训练数据都不同,是否可以利用模型 B 对候选文档重新排序?
- 68
你的长期记忆是怎么做的?
- 69
长期记忆是怎么召回的?
- 70
用户一个月前说喜欢吃辣,一周前又说不能吃辣,现在应该怎么判断他能不能吃辣?
- 71
你的长期记忆具体是怎么存储的?
- 72
既然记忆存储在向量数据库里,你是怎么对已有记忆进行更新的?
- 73
你的上下文压缩是怎么做的?
- 74
上下文压缩有没有可能把关键信息压缩丢失?
- 75
如果用户购买某个商品花了500元,压缩后把“500元”丢失了怎么办?
- 76
你如何定义哪些内容属于重要信息?
- 77
面对开放式对话,系统如何判断某条信息必须保留?
- 78
如何设计上下文压缩,尽可能避免金额、订单信息等关键数据丢失?
- 79
你加入 Query Rewrite 是为了解决什么问题?#面经#