面试面经 · 小红书
【小红书】【Agent 开发】【暑期实习二面】面经(八股+大模型项目+手撕)
小红书 Agent 开发 暑期实习二面面经
背景:海外一年制硕士,主攻 NLP 与 LLM 应用,一段大模型应用相关实习,投递岗位为 Agent 开发实习生。
题目摘要
- Java 基础:HashMap 底层实现、ConcurrentHashMap 在 JDK 8 中的锁粒度优化、volatile 的内存语义
- MySQL/Redis 八股:InnoDB 索引结构、最左前缀原则、Redis 持久化机制(RDB vs AOF)、缓存穿透与布隆过滤器
- Agent 项目深挖:RAG 检索链路优化、Function Calling 的 prompt 设计、多轮对话上下文管理、推理成本优化方案
- 手撕算法:设计一个支持
get和put的 LRU Cache(LeetCode 146),要求 O(1) 时间复杂度
项目深挖
面试官对简历中一个「基于大模型的客服 Agent」项目连续追问了约 20 分钟,以下是几个关键回合:
追问 1:RAG 检索效果不好时,你的排查链路是什么?
参考回答方向:回答需体现「分层排查」的思路——先看召回再看重排。具体来说:① 检查 chunk 切分粒度是否合理(如按段落切 vs 按固定 token 切),② 验证 embedding 模型是否与领域匹配(通用 embedding 在垂直领域可能效果差,需用领域微调或替换为更适配的模型),③ 检查召回 TopK 设置,④ 重排阶段是否采用了 cross-encoder 或 LLM 自身 rerank。如果面试官继续追问「如何量化效果」,可以提 Recall@K 和 MRR 指标,以及用人工标注的 golden set 做离线评测。
追问 2:Function Calling 的 prompt 设计踩过什么坑?
参考回答方向:核心观点是「function 描述越具体,模型调用越准确」。踩过的坑包括:① function 名和参数名过于抽象导致模型误选,② 缺少 few-shot 示例时模型会编造参数,③ 多个 function 参数重叠时模型容易混淆。解决方法是:在 system prompt 中提供 2-3 个调用示例,每个 function 的 description 写清楚「何时调用」和「参数含义」,并对关键参数加枚举约束。如果面试官追问「如何评估调用准确率」,可以提用测试集统计 function 调用准确率和参数填充正确率。
追问 3:上下文管理怎么处理长对话?成本如何控制?
参考回答方向:回答分三层:① 滑动窗口裁剪,保留 system prompt 和最近 N 轮对话,② 历史消息摘要(用 LLM 对早期对话做压缩),③ 关键信息抽取(如用户偏好、订单号等结构化字段单独存储)。成本优化方面,可以提:对简单请求走小模型(如 7B/13B 级),复杂推理才调用大模型;缓存用户级公共上下文(如 FAQ 答案);对重复性问题用规则匹配直接返回。如果面试官追问「摘要的丢失率怎么控制」,可以回答用「摘要 + 原文回退」策略,即摘要丢信息时通过检索原文兜底。
手撕算法:LRU Cache
题意:实现一个 LRU(最近最少使用)缓存,支持 get(key) 和 put(key, value) 操作,get 和 put 的时间复杂度均为 O(1)。当缓存容量达到上限时,淘汰最久未使用的 key。
关键思路:
- 数据结构组合:
HashMap<Key, Node>+ 双向链表。HashMap 负责 O(1) 查找,双向链表负责维护访问顺序(头部为最近使用,尾部为最久未使用)。 get操作:命中后将该节点移到链表头部;未命中返回 -1。put操作:若 key 已存在,更新 value 并移到头部;若不存在,插入头部,若容量超限则删除尾部节点并同步删除 HashMap 中的映射。- 注意点:使用
LinkedHashMap在 Java 中可一行实现,但面试官大概率要求手写双向链表,需完整写出addToHead、removeNode、moveToHead三个辅助函数。
面试官在题后追问了「为什么不用数组实现」和「如果并发访问怎么办」,前者答数组移动成本高,后者可提 LinkedHashMap 加锁或分段锁思路。
准备建议
- 八股按「高频 + 深挖」准备:Java 方向重点看 HashMap/ConcurrentHashMap/JVM 内存模型,MySQL 重点看索引和事务隔离级别,Redis 重点看持久化和缓存穿透/雪崩。不要只背结论,要能画出 ConcurrentHashMap 在 JDK 8 中
synchronized + CAS的锁粒度示意图。 - Agent 项目准备「数据说话」:把项目的检索准确率、function 调用成功率、单次请求成本等指标提前算好,每个模块准备 2-3 个量化结果。面试官问「效果怎么样」时,用数字回答比「还不错」有说服力十倍。
- 手撕算法刷「高频 + 变体」:LRU、TopK、合并区间、二叉树遍历、三数之和这类高频题必须闭眼能写。重点练 LRU 和 LFU(LeetCode 460),Agent 方向面试常考缓存类问题,刷完顺手总结「为什么 LRU 适合缓存场景」这类延伸问题。
结果反馈
二面整体节奏紧凑,项目深挖部分占了大半时间,算法题在 15 分钟内完成并通过测试用例。面试结束后第 3 天收到 HR 通知,一面通过,约了 5 天后三面(Leader 面)。
想系统备战大厂大模型/Agent 开发?NiceOffer 提供 SDE+LLM 双轨 1v1 陪跑,合同保底 40w 年薪,文末扫码咨询。