面灵AI→

水滴 AI 全栈一面:幻觉治理、Token 成本与计算机基础

轮次
一面
结果
挂
时间
2026-10
来源
牛客网

《面试题目》

  1. 自我介绍。
  2. 实习做了很多内容,哪个是你主要负责的?
  3. 第一个项目和 AI 相关吗?只是做了 AI 服务集成?
  4. 智能问答平台的整个链路是怎样的?
  5. 如何防止或减少大模型幻觉?多轮对话场景下呢?记忆机制怎么做的?
  6. 项目里用到子 Agent 吗?还是简单的问答调用?
  7. 语义识别怎么降低 token 成本?预筛选怎么做的?
  8. 降低 token 成本的方式有哪些?大模型的 KV Cache 机制讲一下。
  9. 如何分析一个算法的时间复杂度?两层循环的时间复杂度是多少?
  10. Function Calling、MCP、Skills 讲一下?有自己写过 Skills 的实践吗?
  11. 进程和线程的区别?JVM 中哪些部分是线程共享的,哪些是独有的?
  12. 两个线程同时对一个变量修改一万次,为什么最终值可能小于两万?
  13. 一个网址从输入到展示经历哪些过程?
  14. TCP 为什么是三次握手而不是四次?

《参考解析》

幻觉治理:分“减少发生”和“发生后兜底”。减少发生:RAG 提供可引用的上下文、提示词要求“只依据资料回答、不知道就说不知道”、降低温度、把复杂问题拆成可验证的小步、对关键实体做规则校验。多轮场景要把历史压缩成结构化记忆(用户目标、已确认事实、待办),而不是把全部对话塞进上下文;每轮检索时用当前意图加历史关键实体做查询改写。兜底:输出后做事实校验(与知识库/数据库比对)、敏感操作二次确认、低置信转人工、答案附来源。评测用忠实度和人工抽检,不能只看“回答流畅”。

Token 成本:手段包括:语义缓存(相似问题直接复用答案)、意图预筛选(先用小模型/规则判断要不要走大模型)、检索压缩(只喂相关片段)、历史摘要与滑窗、模型分级(简单问题小模型、复杂问题大模型)、结构化输出减少废话、批处理与流式。KV Cache 是推理时缓存已计算 token 的 Key/Value 矩阵,后续 token 直接复用,避免重复计算注意力;它省的是算力/首 token 延迟,不省输入 token 的计费,但前缀稳定(把固定系统提示放前面)能提高缓存命中。注意缓存会占显存,长上下文和多会话要设上限。

Function Calling、MCP、Skills:Function Calling 是模型按 schema 输出“要调用哪个函数、参数是什么”,由应用执行后把结果回传;MCP 是标准化的工具/资源接入协议,解决“接一次到处用”;Skills 是把某类任务的流程、约束、示例封装成可按需加载的知识包,解决“怎么做”。三者层次不同:Function Calling 是调用机制,MCP 是连接协议,Skills 是任务方法论。写过 Skills 的话,讲清目录结构、触发描述、渐进式加载和验证方式。

并发与 JVM:两个线程各执行 count++ 一万次,count++ 不是原子操作,包含读、加、写三步,可能交错导致丢失更新;加上 CPU 缓存可见性和指令重排,最终值通常小于两万。解决用 AtomicInteger、synchronized 或 LongAdder。JVM 线程共享:堆、方法区/元空间、运行时常量池、直接内存;线程独有:程序计数器、虚拟机栈、本地方法栈。进程是资源分配单位,线程是 CPU 调度单位,线程共享进程内存,切换开销更小。

URL 访问流程:浏览器解析 URL → 查 DNS(浏览器缓存、系统缓存、hosts、递归解析)→ 建 TCP 连接(三次握手,HTTPS 再加 TLS 握手)→ 发 HTTP 请求 → 经过 CDN/负载均衡/网关到后端 → 后端处理并返回 → 浏览器解析 HTML、构建 DOM/CSSOM、布局、绘制、执行 JS → 加载子资源。缓存、重定向、HTTP/2 多路复用都会影响过程。

三次握手:核心是双方确认“自己的发送和接收能力都正常”,并同步初始序列号。两次不够:服务端无法确认客户端收到了自己的 SYN-ACK;四次可以但没必要,因为服务端的 SYN 和 ACK 可以合并成一个报文。四次挥手则是因为 TCP 全双工,两个方向要分别关闭。