面试面经 · 微众银行
【微众银行】【大模型开发】【暑期实习一面】面经(八股+大模型项目+手撕)
微众银行 大模型开发 暑期实习一面面经
背景:海外一年制硕士,计算机相关,一段中小厂后端实习,两个大模型相关课程项目。
题目摘要
- Go 语言基础:goroutine 与 channel 的底层原理,GMP 调度模型简述;
defer的执行时机与常见坑;sync.Map适用场景。 - MySQL 八股:InnoDB 索引结构(B+ 树)为什么快;最左前缀原则;事务隔离级别与 MVCC 实现。
- Redis 八股:缓存穿透/击穿/雪崩的区别与解决方案;Redis 分布式锁的坑(Redlock、续期);持久化 RDB/AOF 对比。
- 大模型项目深挖:RAG 系统如何做召回与重排;Function Calling 的触发机制与工具调用失败处理;上下文窗口管理策略;推理成本优化手段。
- 手撕算法题:「合并 K 个有序链表」(力扣 23),要求写代码并分析时间复杂度。
项目深挖
面试官对项目细节追问很密,基本是顺着一条逻辑线往下挖,建议提前把项目每个模块的“为什么这么做”想清楚。
追问 1:你的 RAG 系统,召回阶段为什么选向量检索 + 关键词混合?只用向量检索不行吗?
参考方向:向量检索擅长语义相似但词面不匹配,关键词(如 BM25)擅长精确匹配(人名、编号、专业术语)。单独向量检索在低频专有名词上召回差,混合召回能互补。面试官可能进一步问“怎么融合”,可以答 RRF(Reciprocal Rank Fusion)或加权分数融合,并提一句当时对比过纯向量召回,Hit Rate 提升了 X 个百分点。
追问 2:Function Calling 如果模型调用了不存在的工具,或者参数格式错误,你怎么处理?
参考方向:先说设计时做了两层校验——第一层是模型输出后先做 JSON Schema 校验,失败则返回“重试”指令并附上错误信息让模型重新生成;第二层是运行时兜底,工具不存在时返回一个固定错误提示,并让对话流程继续而非崩溃。再补充一点,实际测试中 GPT-4 这类模型在定义清晰时很少出错,但开源小模型(如 Qwen-7B)出错率高,所以加了一层规则修正。
追问 3:上下文管理你怎么做的?如果对话超过窗口长度,直接截断吗?
参考方向:直接截断会把早期关键信息丢掉,我当时的方案是三层:1)系统提示词 + 工具定义常驻;2)最近 N 轮对话保留完整;3)更早的对话做摘要压缩(调用 LLM 生成摘要)。另外,对超长工具返回结果(比如数据库查询)做了截断和字段筛选。面试官可能追问“摘要压缩本身也消耗 token,怎么平衡”,可以答设置阈值,比如超过 20 轮才触发压缩,且摘要只保留一次。
手撕算法题:合并 K 个有序链表
题意:给定 K 个升序链表,合并成一个升序链表,返回头节点。
关键思路:
- 优先队列(最小堆):维护 K 个链表的当前头节点,每次弹出最小值,将其 next 入堆。时间复杂度 O(N log K),N 为总节点数,空间 O(K)。
- 面试官可能追问“不用堆怎么做”——答分治合并(两两合并,类似归并),复杂度 O(N log K),但实现略复杂。
我写的堆解法,面试官看了一遍,没让优化,直接过了。
准备建议
- 项目准备按“决策-对比-数据”结构:每个技术选型(向量库、embedding 模型、RAG 框架)都要能说出对比过哪些方案、为什么选这个、效果差多少。空说“效果好”没用,要有量化指标,比如召回率提升、响应延迟下降。
- Go 和 Java 二选一,但语法基础必须扎实:面试官明确说“看你简历写了 Go,我们后端也主要用 Go”,然后直接问 goroutine 调度。建议把《Go 语言设计与实现》的调度器章节读一遍,至少能画出 GMP 模型图,说出 P 的数量默认等于 CPU 核数、work stealing 机制。
- 大模型八股要覆盖“工程落地”层面:纯问 Transformer 结构(自注意力、位置编码)概率低,但 RAG、Agent、Function Calling、成本优化一定是重点。建议自己跑一个最小 Agent 项目(比如用 LangChain 或直接调 API 实现一个带工具调用的问答机器人),把踩过的坑(工具调用死循环、token 超限、延迟高)记录下来,面试时主动讲出来,比被动挨问效果好得多。
结果反馈
一面通过,约 5 天后二面,二面侧重系统设计和团队协作。
想系统备战大厂大模型/Agent 开发?NiceOffer 提供 SDE+LLM 双轨 1v1 陪跑,合同保底 40w 年薪,文末扫码咨询。