跳到主要内容

现场题(实战)

目标:面试现场常见“白板题”的最小回答要点。

目录

题目 1:流式 + 取消

要点:

  • SSE / fetch 流式读取
  • AbortController 取消
  • 服务端监听 close 中止上游

题目 2:RAG 设计

要点:

  • 切分 → Embedding → 向量检索
  • 引用来源 + 评估指标

最小实现示例

流式 + 取消(伪代码)

const controller = new AbortController();
fetch("/api/ai/chat/stream", { method: "POST", signal: controller.signal });
// 取消
controller.abort();

RAG 最小流程(伪代码)

const chunks = split(doc);          // 切分
const vectors = embed(chunks); // 向量
const topK = search(vectors, qVec); // 检索
const prompt = buildPrompt(topK); // 拼 Prompt

常见陷阱

  • 忘了引用来源 → 面试官会质疑可信度
  • 没有评估指标 → 无法证明效果

评分要点(面试官视角)

  • 是否考虑鉴权/限流
  • 是否考虑引用来源
  • 是否有评估指标

加分点

  • 有清晰的错误码
  • 有成本控制策略
  • 有可观测性日志

追加题目(可选)

题目 3:设计成本控制方案

要点:

  • max_tokens 限制
  • 历史摘要
  • 缓存策略

题目 4:错误码设计

要点:

  • 统一错误码
  • 前端兜底提示

题目 5:引用面板设计

要点:

  • 引用编号
  • 证据展开
  • 原文跳转

题目答案框架(通用)

  1. 先讲目标
  2. 再讲关键步骤
  3. 最后讲指标

快速画图模板

用户 -> 前端 -> 服务端 -> 模型
-> 引用面板 -> 用户

加分回答示例

  • “我会增加 traceId,方便定位问题”
  • “我会限制 max_tokens 控制成本”
  • “我会先召回再重排提升准确率”

题目 6:Prompt 版本管理

要点:

  • v1/v2 版本号
  • 回滚机制
  • 评估指标

题目 7:错误码设计

要点:

  • 统一错误码
  • 前端兜底

题目 8:成本控制

要点:

  • 限制 max_tokens
  • 摘要历史对话

题目 9:引导提问

要点:

  • 示例问题
  • 提示词引导

题目 10:多模型路由

要点:

  • 按任务选择模型
  • 失败回退

题目 11:Prompt 模板管理

要点:

  • 模板文件化
  • 版本回滚

题目 12:日志与可观测

要点:

  • traceId
  • 关键耗时

现场答题技巧

  • 先讲流程图
  • 再讲关键点
  • 最后讲指标

更多现场题(快速练习)

  • 设计一个“超时重试”策略
  • 设计一个“会话摘要”策略
  • 设计一个“引用面板”的 UI
  • 设计一个“成本面板”的字段
  • 设计一个“错误码规范”
  • 设计一个“多模型切换”策略
  • 设计一个“输出校验”流程
  • 设计一个“拒答模板”
  • 设计一个“输入限制策略”
  • 设计一个“日志字段”

题目 13:输出校验流程

要点:

  • schema 校验
  • 失败重试

题目 14:Prompt 模板化

要点:

  • system/task/context/output
  • 版本号

题目 15:用户引导设计

要点:

  • 示例问题
  • 引导文案

评分细则(扩展)

  • 是否讲清楚流程
  • 是否讲清楚数据结构
  • 是否讲清楚评估指标

现场题回答模板

  • 目标
  • 流程
  • 风险
  • 指标

示例(RAG 题)

  • 目标:可追溯回答
  • 流程:切分 → 向量检索 → 生成
  • 风险:引用不准
  • 指标:引用准确率

评分细则(加分)

  • 有明确输入/输出
  • 有清晰接口
  • 有异常处理
  • 有评估指标

补充题目清单

  • 权限设计
  • 成本预算
  • 日志脱敏
  • 缓存策略
  • 灰度发布

快速答题顺序

  • 画流程图
  • 写关键接口
  • 写异常处理
  • 给评估指标

现场题加分点

  • 讲清楚成本
  • 讲清楚稳定性
  • 讲清楚评估

现场题收尾

  • 强调可落地
  • 强调可评估

现场题注意事项

  • 画图清晰
  • 表述简洁

临场表达技巧

  • 先大后小
  • 先结论后细节

最后提示

  • 用词简洁
  • 结构清晰

现场题追加提醒

  • 先给结论
  • 说清楚步骤
  • 给出指标

最后一句

  • 讲清楚即可

结束备注

  • 结构优先

详细答案(示例版)

题目 1:流式 + 取消(详细)

  • 目标:支持流式输出与用户中断
  • 步骤:SSE → 前端流式读取 → AbortController
  • 风险:中断未关闭上游导致浪费
app.post("/chat", async (req, res) => {
res.setHeader("Content-Type", "text/event-stream");
req.on("close", () => controller.abort());
});

题目 2:RAG 设计(详细)

  • 目标:可追溯回答
  • 步骤:切分 → 向量检索 → 重排 → 引用
  • 指标:TopK 命中率

题目 3:成本控制方案(详细)

  • 措施:max_tokens + 历史摘要
  • 补充:小模型优先
  • 指标:单次成本

题目 4:错误码设计(详细)

  • 规范:E_TIMEOUT/E_ABORT/E_UPSTREAM
  • 展示:前端兜底提示

题目 5:引用面板设计(详细)

  • 结构:编号 + 片段 + 跳转
  • 指标:引用点击率

题目 6:Prompt 版本管理(详细)

  • 方案:v1/v2 文件化 + 回滚
  • 指标:效果提升

题目 7:日志与可观测(详细)

  • 字段:traceId/token/latency
  • 指标:错误率、TTFT

详细回答(逐题展开版)

题目 1:流式 + 取消

  • 目标:流式输出、可中断
  • 步骤:SSE → 前端读流 → AbortController
  • 指标:TTFT、平均耗时
app.post("/chat", (req, res) => {
res.setHeader("Content-Type", "text/event-stream");
req.on("close", () => controller.abort());
});

题目 2:RAG 设计

  • 目标:可追溯回答
  • 步骤:切分→检索→重排→引用
  • 指标:TopK 命中率、引用准确率

题目 3:成本控制方案

  • 措施:max_tokens + 历史摘要 + 缓存
  • 补充:小模型优先
  • 指标:单次成本、日均成本

题目 4:错误码设计

  • 规范:E_TIMEOUT / E_ABORT / E_UPSTREAM
  • 展示:前端兜底提示
  • 指标:MTTR

题目 5:引用面板设计

  • 结构:编号 + 片段 + 跳转
  • 交互:折叠/展开
  • 指标:点击率

题目 6:Prompt 版本管理

  • 策略:v1/v2 文件化 + 回滚
  • 流程:A/B → 指标对比 → 上线
  • 指标:合格率

题目 7:错误码设计

  • 重点:统一枚举、可定位
  • 展示:用户可理解文案
  • 指标:故障定位时间

题目 8:成本控制

  • 策略:预算表 + 降级模型
  • 补充:限制历史长度
  • 指标:成本下降率

题目 9:引导提问

  • 做法:示例问题 + 占位提示
  • 风险:引导过强导致偏题
  • 指标:提问成功率

题目 10:多模型路由

  • 做法:按任务选择模型
  • 回退:主备模型切换
  • 指标:成功率

题目 11:Prompt 模板管理

  • 结构:system/task/context/output
  • 版本:v1/v2 回滚
  • 指标:效果提升

题目 12:日志与可观测

  • 字段:traceId、token、latency
  • 告警:错误率阈值
  • 指标:MTTR

题目 13:输出校验流程

  • 校验:JSON schema
  • 失败:重试 + 兜底
  • 指标:合格率

题目 14:Prompt 模板化

  • 拆分:system/task/context/output
  • 原因:可维护/可回滚
  • 指标:改动成本

题目 15:用户引导设计

  • 方式:示例问题、引导文案
  • 目标:提高有效输入
  • 指标:有效输入率

详细答案(逐题完整)

说明:每题提供「目标 → 步骤 → 风险 → 指标」的完整回答。

题目 1:流式 + 取消

  • 目标:一句话说明要解决的问题。
  • 步骤:列出 3 步以内的最小落地流程。
  • 风险:指出最常见的失败场景。
  • 指标:给出 1-2 个可量化指标。
const controller = new AbortController();
fetch(url, { signal: controller.signal });
controller.abort();

详细说明:围绕“流式 + 取消”先给出一句话目标,再描述最小可行实现路径。随后补充关键风险点与兜底措施,并用 1-2 个指标说明效果,确保面试官看到“可落地 + 可评估”。

题目 2:RAG 设计

  • 目标:一句话说明要解决的问题。
  • 步骤:列出 3 步以内的最小落地流程。
  • 风险:指出最常见的失败场景。
  • 指标:给出 1-2 个可量化指标。

详细说明:围绕“RAG 设计”先给出一句话目标,再描述最小可行实现路径。随后补充关键风险点与兜底措施,并用 1-2 个指标说明效果,确保面试官看到“可落地 + 可评估”。

题目 3:设计成本控制方案

  • 目标:一句话说明要解决的问题。
  • 步骤:列出 3 步以内的最小落地流程。
  • 风险:指出最常见的失败场景。
  • 指标:给出 1-2 个可量化指标。

详细说明:围绕“设计成本控制方案”先给出一句话目标,再描述最小可行实现路径。随后补充关键风险点与兜底措施,并用 1-2 个指标说明效果,确保面试官看到“可落地 + 可评估”。

题目 4:错误码设计

  • 目标:一句话说明要解决的问题。
  • 步骤:列出 3 步以内的最小落地流程。
  • 风险:指出最常见的失败场景。
  • 指标:给出 1-2 个可量化指标。
{ "code": "E_TIMEOUT", "message": "请求超时" }

详细说明:围绕“错误码设计”先给出一句话目标,再描述最小可行实现路径。随后补充关键风险点与兜底措施,并用 1-2 个指标说明效果,确保面试官看到“可落地 + 可评估”。

题目 5:引用面板设计

  • 目标:一句话说明要解决的问题。
  • 步骤:列出 3 步以内的最小落地流程。
  • 风险:指出最常见的失败场景。
  • 指标:给出 1-2 个可量化指标。

详细说明:围绕“引用面板设计”先给出一句话目标,再描述最小可行实现路径。随后补充关键风险点与兜底措施,并用 1-2 个指标说明效果,确保面试官看到“可落地 + 可评估”。

题目 6:Prompt 版本管理

  • 目标:一句话说明要解决的问题。
  • 步骤:列出 3 步以内的最小落地流程。
  • 风险:指出最常见的失败场景。
  • 指标:给出 1-2 个可量化指标。

详细说明:围绕“Prompt 版本管理”先给出一句话目标,再描述最小可行实现路径。随后补充关键风险点与兜底措施,并用 1-2 个指标说明效果,确保面试官看到“可落地 + 可评估”。

题目 7:错误码设计

  • 目标:一句话说明要解决的问题。
  • 步骤:列出 3 步以内的最小落地流程。
  • 风险:指出最常见的失败场景。
  • 指标:给出 1-2 个可量化指标。
{ "code": "E_TIMEOUT", "message": "请求超时" }

详细说明:围绕“错误码设计”先给出一句话目标,再描述最小可行实现路径。随后补充关键风险点与兜底措施,并用 1-2 个指标说明效果,确保面试官看到“可落地 + 可评估”。

题目 8:成本控制

  • 目标:一句话说明要解决的问题。
  • 步骤:列出 3 步以内的最小落地流程。
  • 风险:指出最常见的失败场景。
  • 指标:给出 1-2 个可量化指标。

详细说明:围绕“成本控制”先给出一句话目标,再描述最小可行实现路径。随后补充关键风险点与兜底措施,并用 1-2 个指标说明效果,确保面试官看到“可落地 + 可评估”。

题目 9:引导提问

  • 目标:一句话说明要解决的问题。
  • 步骤:列出 3 步以内的最小落地流程。
  • 风险:指出最常见的失败场景。
  • 指标:给出 1-2 个可量化指标。

详细说明:围绕“引导提问”先给出一句话目标,再描述最小可行实现路径。随后补充关键风险点与兜底措施,并用 1-2 个指标说明效果,确保面试官看到“可落地 + 可评估”。

题目 10:多模型路由

  • 目标:一句话说明要解决的问题。
  • 步骤:列出 3 步以内的最小落地流程。
  • 风险:指出最常见的失败场景。
  • 指标:给出 1-2 个可量化指标。

详细说明:围绕“多模型路由”先给出一句话目标,再描述最小可行实现路径。随后补充关键风险点与兜底措施,并用 1-2 个指标说明效果,确保面试官看到“可落地 + 可评估”。

题目 11:Prompt 模板管理

  • 目标:一句话说明要解决的问题。
  • 步骤:列出 3 步以内的最小落地流程。
  • 风险:指出最常见的失败场景。
  • 指标:给出 1-2 个可量化指标。

详细说明:围绕“Prompt 模板管理”先给出一句话目标,再描述最小可行实现路径。随后补充关键风险点与兜底措施,并用 1-2 个指标说明效果,确保面试官看到“可落地 + 可评估”。

题目 12:日志与可观测

  • 目标:一句话说明要解决的问题。
  • 步骤:列出 3 步以内的最小落地流程。
  • 风险:指出最常见的失败场景。
  • 指标:给出 1-2 个可量化指标。

详细说明:围绕“日志与可观测”先给出一句话目标,再描述最小可行实现路径。随后补充关键风险点与兜底措施,并用 1-2 个指标说明效果,确保面试官看到“可落地 + 可评估”。

题目 13:输出校验流程

  • 目标:一句话说明要解决的问题。
  • 步骤:列出 3 步以内的最小落地流程。
  • 风险:指出最常见的失败场景。
  • 指标:给出 1-2 个可量化指标。

详细说明:围绕“输出校验流程”先给出一句话目标,再描述最小可行实现路径。随后补充关键风险点与兜底措施,并用 1-2 个指标说明效果,确保面试官看到“可落地 + 可评估”。

题目 14:Prompt 模板化

  • 目标:一句话说明要解决的问题。
  • 步骤:列出 3 步以内的最小落地流程。
  • 风险:指出最常见的失败场景。
  • 指标:给出 1-2 个可量化指标。

详细说明:围绕“Prompt 模板化”先给出一句话目标,再描述最小可行实现路径。随后补充关键风险点与兜底措施,并用 1-2 个指标说明效果,确保面试官看到“可落地 + 可评估”。

题目 15:用户引导设计

  • 目标:一句话说明要解决的问题。
  • 步骤:列出 3 步以内的最小落地流程。
  • 风险:指出最常见的失败场景。
  • 指标:给出 1-2 个可量化指标。

详细说明:围绕“用户引导设计”先给出一句话目标,再描述最小可行实现路径。随后补充关键风险点与兜底措施,并用 1-2 个指标说明效果,确保面试官看到“可落地 + 可评估”。

完整可运行代码(现场题要点清单)

源码目录:docs/demos/portfolio-demo

node docs/demos/portfolio-demo/index.js