NiceOffer

面试面经 · 微众银行

【微众银行】【大模型开发】【暑期实习三面】面经(八股+大模型项目+手撕)

微众银行面经大模型开发实习

微众银行 大模型开发 暑期实习三面面经

背景

海外一年制硕士,计算机方向,投递的是微众银行大模型应用开发岗,之前已通过两轮技术面,三面为技术终面,面试官为部门技术负责人,时长约 1 小时。

题目摘要

  1. 编程语言基础(Go):goroutine 与 channel 的底层实现原理,GMP 调度模型中 M 和 P 的对应关系,以及 channel 的缓冲区大小对性能的影响。
  2. MySQL/Redis 八股:MySQL 的 MVCC 机制如何解决幻读问题(RR 隔离级别下);Redis 的持久化机制 RDB 与 AOF 的取舍,以及混合持久化方案的适用场景。
  3. 大模型项目深挖:围绕简历中的 RAG 项目,追问 chunk 切分策略、向量检索召回率优化、以及 Function Calling 在 Agent 中的边界控制。
  4. 手撕算法题:题目为「设计一个支持在平均 O(1) 时间复杂度下执行插入、删除和随机获取元素的数据结构」(LeetCode 380 变体),要求实现 insertremovegetRandom 三个方法,并额外要求 remove 操作返回被删除的元素值。

项目深挖

面试官全程围绕简历上的一个「基于大模型的企业知识库问答 Agent」项目展开,没有问任何简历外的预设问题,以下为追问与参考回答方向。

追问 1:你提到用 RAG 解决幻觉问题,具体是怎么做的?如果检索到的上下文和用户问题语义冲突,模型仍然会输出错误答案,你怎么处理?

参考回答方向:先说明 RAG 的整体链路——文档解析、chunk 切分(按语义段落而非固定长度)、向量化(使用 bge-m3 或 text-embedding-3 系列)、混合检索(BM25 + 向量召回)、重排序(交叉编码器)。然后针对冲突场景,给出两层兜底:一是检索侧的置信度过滤,设定相似度阈值,低于阈值的直接返回「知识库中未找到相关信息」;二是生成侧的约束,在 prompt 中显式指示模型只能基于检索窗口作答,若上下文与问题无关则拒绝回答,同时用 logit 约束或后处理校验答案中的关键实体是否出现在检索文本中。

追问 2:Function Calling 在你的 Agent 中是怎么设计的?如何防止 Agent 无限循环调用工具或陷入死循环?

参考回答方向:Function Calling 采用 JSON Schema 定义工具接口,模型输出结构化参数后由代码执行并返回结果。关键设计点是工具调用的「终止条件」——设置最大调用轮数(如 3 次)、单轮超时时间、以及基于意图分类的「提前退出」逻辑:当用户问题可以直接从知识库回答时,不触发工具调用。另外,在 prompt 中明确每个工具的使用场景和优先级,并在工具返回结果中附加置信度标记,低置信度时不再触发后续调用。

追问 3:推理成本优化具体做了哪些?如果让你把单次对话成本压到原来的 1/3,方案是什么?

参考回答方向:先说已有优化——上下文裁剪(只保留最近 N 轮对话 + 检索摘要)、prompt 压缩(用摘要模型压缩历史)、模型分级(简单问题走小模型,复杂问题走大模型)。针对 1/3 成本目标,给出三个方向:一是缓存层,对高频问题的检索结果和模型输出做语义缓存,命中率 30% 以上即可显著降本;二是蒸馏或微调小模型,针对知识库领域训练一个 7B 参数模型替代通用大模型;三是推理侧优化,如使用投机采样或批量推理,但这需要底层框架支持。

手撕算法题

题目:设计一个数据结构,支持 insert(val)remove(val)getRandom() 三个操作,要求平均时间复杂度 O(1)。remove 需要返回被删除的值,若值不存在返回 -1。元素不重复。

关键思路:核心是「数组 + 哈希表(值到索引的映射)」。数组存储所有元素,哈希表记录每个元素在数组中的下标。

  • insert:先查哈希表判断是否存在,不存在则追加到数组末尾,并在哈希表中记录下标。
  • remove:从哈希表拿到待删元素的下标,将数组最后一个元素移到该位置,更新最后一个元素在哈希表中的下标,然后删除数组末尾元素,并从哈希表中删除目标值。注意需要返回被删值,所以在移动前先取出。
  • getRandom:直接用随机数生成器取 [0, size) 区间的下标,返回对应数组元素。

边界条件:remove 时如果待删元素恰好是数组最后一个元素,则无需移动,直接删除即可。另外,哈希表的删除操作在 Go 中直接用 delete,注意不要遗漏索引更新。

写完后面试官追问了「如果元素允许重复,怎么改?」——答案是数组改为存 (value, id) 对,哈希表存 value -> 对应下标的集合(用 map 套 set),实现逻辑类似但复杂度会略高。

准备建议

  1. 项目细节要能闭环:简历上每个技术选型都要能回答「为什么这么选」「有没有对比过其他方案」「效果如何量化」。面试官会顺着你的回答连续追问 3-4 层,直到你答不出为止。提前把 RAG 的 chunk 策略、检索召回优化、Agent 的边界控制这几个高频深挖点写成文档,反复推演。
  1. 手撕算法不要只刷高频题:微众的技术面比较务实,算法题不偏不怪,但会加一个小的变体要求(如本题要求 remove 返回被删值)。刷题时把 LeetCode 前 100 题的核心解法吃透,同时练习在原有题目的基础上做功能扩展,锻炼应变能力。
  1. Go 语言基础要扎实:微众的底层技术栈偏 Go,面试官会问 goroutine 调度、channel 实现这些偏底层的细节。建议把《Go 语言设计与实现》中调度器和 channel 两章精读一遍,能画出 GMP 模型的状态流转图,并解释 P 的数量和 GOMAXPROCS 的关系。

结果反馈

三面通过,两天后 HR 约了终面聊薪资和入职时间,整体流程推进很快。

想系统备战大厂大模型/Agent 开发?NiceOffer 提供 SDE+LLM 双轨 1v1 陪跑,合同保底 40w 年薪,文末扫码咨询。