面试面经 · 字节跳动
【字节跳动】【Agent 开发】【暑期实习二面】面经(八股+大模型项目+手撕)
字节跳动 Agent 开发 暑期实习二面面经
背景:海外一年制硕士,本科 211,一段大模型创业公司 Agent 相关实习,投递的是字节 Data 方向的 Agent 开发岗。
一面通过后大约隔了 4 个工作日收到二面邮件,面试官是部门技术 Leader,全程 55 分钟,风格偏务实,不绕弯子,基本是连环追问,中间没有冷场。
题目摘要
- Go 语言基础:goroutine 与线程的区别、channel 的底层实现、GMP 调度模型简述、内存逃逸分析场景
- MySQL/Redis 八股:事务隔离级别与 MVCC、索引失效场景、Redis 持久化机制对比、缓存穿透/击穿/雪崩的解决方案
- Agent 项目深挖:RAG 检索优化、Function Calling 的设计与容错、多轮对话上下文管理策略、推理成本优化手段
- 手撕算法:合并 K 个升序链表(力扣 23),要求分析时间/空间复杂度并写出可运行代码
项目深挖
追问 1:你的 RAG 系统在检索阶段做了哪些优化?为什么这么做?
参考回答方向:先说明基线方案是向量检索 top-k,然后指出问题——单纯向量检索对专有名词和精确匹配不友好。优化手段分三层:第一层是混合检索,向量召回 + BM25 关键词召回,用 RRF(Reciprocal Rank Fusion)做分数融合,解决专有名词匹配问题;第二层是重排序,用 cross-encoder 模型对召回结果精排,虽然单条耗时高但只在 top-50 上做,延迟可控;第三层是查询改写,对用户问题先做意图分类,判断是否需要分解为子查询,比如涉及多实体对比的问题会拆成多个检索请求再汇总。面试官比较关心的是每一层带来的实际收益,建议准备量化数据,比如混合检索比纯向量检索的 Recall@10 提升了多少。
追问 2:Function Calling 的容错你是怎么设计的?如果模型返回的 JSON 格式不对或者参数缺失怎么办?
参考方向:先说整体架构——所有 function 的入参都定义成 JSON Schema,模型输出后走一层校验器。容错分三级:第一级是格式层,如果模型返回非法 JSON,用正则抽取可能的 function 名和参数片段,配合容错解析库尝试修复;第二级是 Schema 层,如果参数缺失或类型不对,根据 Schema 的 required 字段和类型定义做默认值填充或类型强制转换;第三级是业务层,如果必填参数确实无法补全,会把缺失项反馈给模型,让它结合对话历史补充信息后重新调用。另外还需要一个保险机制——如果连续调用失败超过 N 次,直接降级为纯文本回复,避免死循环。面试官可能追问"你如何判断是模型问题还是 Schema 定义问题",可以回答通过日志分析错误分布,如果集中在某个 function 上,大概率是 Schema 描述不够清晰,需要考虑改写 description 而不是改代码。
追问 3:上下文管理你们怎么做的?长对话怎么控制 token 成本?
参考方向:核心是分层管理——系统提示词、few-shot 示例、对话历史、检索结果分别管理。对话历史用滑动窗口 + 摘要压缩的双层策略:最近 N 轮完整保留,更早的对话通过 LLM 异步生成摘要后存入内存,等窗口继续滑动时再压缩。检索结果不直接全量拼进 prompt,而是先做一个相关性过滤和去重,控制每轮注入的最大 token 数。另外对不同的 function call 结果做截断,比如搜索返回的内容只保留核心字段。成本优化上,还会按用户活跃度做分级,高频用户走缓存命中,低频请求走全量链路。
手撕算法
题目:合并 K 个升序链表
面试官先让说思路,再写代码。最优解是用优先队列(最小堆),维护 K 个链表的当前头节点,每次弹出最小值节点接入结果链表,然后将其下一个节点入堆。时间复杂度 O(N log K),N 是总节点数,空间复杂度 O(K)。面试官追问了不用堆怎么做——可以两两合并,时间复杂度退化为 O(NK),或者是分治合并,复杂度 O(N log K),但实现更复杂。我写了堆解法,大概 25 行左右,面试官扫了一眼没让跑测试,直接问了边界条件:空链表数组、K=1、链表有环的情况(提示:需要先检测环)。另外还问了一个变种:如果数据量极大放不下内存怎么办,回答外部排序 + 多路归并即可。
准备建议
- 项目数据一定要量化:面试官对"提升了效果"这种描述不感兴趣,要准备具体的评测数字和基线对比,比如检索 Recall 提升了几个点、首 token 延迟降低了多少毫秒、成本下降了百分之多少。自己做的项目很难有严格的 AB 测试,但至少要有小样本上的对比数据。
- 把 Function Calling 的链路画清楚:从用户输入到大模型输出到 function 执行到结果回填,每一步的输入输出格式、异常分支、超时策略都要能徒手画出来。字节的 Agent 岗非常看重工程落地的细节,不要停留在调 API 的层面。
- 八股不要只背结论,要能解释为什么:比如 MySQL 的隔离级别,面试官会追问"RR 级别下幻读到底解决没有";Redis 的持久化,会问"AOF 重写期间宕机会丢多少数据"。建议把每个知识点往下挖两层,结合源码实现来理解,而不是背面试题答案。
结果反馈
二面结束后第三天收到 HR 通知通过,约了三面时间,整体节奏比较快,三面大概率是交叉面或业务负责人面,重点可能放在系统设计和综合能力上。
想系统备战大厂大模型/Agent 开发?NiceOffer 提供 SDE+LLM 双轨 1v1 陪跑,合同保底 40w 年薪,文末扫码咨询。