一面(技术基础)
1. 事件循环与 AI 流式响应
- 重点:流式数据到达(Macro task 或 Network callback) -> 触发 State 更新 -> 频繁的 DOM Diff/Patch(Micro task/Sync)。
- 影响:如果每一小段 chunk 都立刻触发 React 渲染,会导致主线程拥塞,用户打字卡顿。需要做节流 (Throttle) 渲染或分片处理。
2. Stream 数据处理 Web API
fetch API(Response.body)ReadableStream/ReadableStreamDefaultReaderTextDecoder(处理 UTF-8 截断字符)AbortController(停止生成)
3. 高性能 Markdown 组件
- 策略:
- Memoization:只重新渲染变化的部分(难点,Markdown 通常是全量解析)。
- 增量解析:使用支持 AST 增量更新的解析器(较少见,通常自行实现简易版)。
- Web Worker:解析过程放 Worker,主线程只负责 HTML 注入。
- 防抖:不要收到一个字符就 render,而是积攒 50ms-100ms。
4. 手写 Promise.allSettled
-
代码:
function myAllSettled(promises) { return Promise.all( promises.map(p => Promise.resolve(p).then( value => ({ status: "fulfilled", value }), reason => ({ status: "rejected", reason }) ) ) ) }
5. CSS 实现 ChatGPT 光标闪烁
- 方法:
- 使用
::after伪元素。 content: "▋"或width/height色块。animation: blink 1s infinite;- 细节:当 AI 停止生成时,移除该 class。
- 使用
6. TS 泛型与 infer
-
理解:
infer用于在extends条件类型中推断类型变量。 -
场景:提取 AI 配置函数的返回值类型,或提取 Prompt 模板中的变量类型。
type GetConfigType<T> = T extends (args: any) => infer R ? R : never
二面(深入原理与项目)
1. 长列表滚动(同高德)
2. 打字机效果“字符吞噬”或“渲染卡顿”
- 字符吞噬:Markdown 渲染器在解析未闭合标签(如
**加粗只有一半)时可能会暂时隐藏内容,等闭合符到了才显示。- 解法:预处理 Stream,手动补全末尾标记;或使用容错性强的解析器。
- 卡顿:渲染频率过高。
- 解法:建立一个 Buffer 队列,使用
requestAnimationFrame逐步从队列中取字符显示,而不是直接绑定 Stream 速度。
- 解法:建立一个 Buffer 队列,使用
3. Prompt 版本管理与动态替换
- 动态替换:定义 DSL(如
{{user_input}}),前端正则替换。 - 管理:类似代码的 Git 流程,Tags 标记线上版本,Diff 对比 Prompt 差异。
4. RAG 前端优化
- 优化:
- 乐观 UI:用户提问后先展示“正在检索…”,甚至根据历史上下文预加载可能引用的文档。
- 流式引用:引用数据随文本流一起下发,不需要等全量。
- 本地缓存:常用文档的 Vector 缓存在 IndexedDB。
5. 通用 AI Chat 组件库设计
- 扩展性:
- UI 隔离:Headless UI 设计(Logic Hooks + Default UI)。
- Render Props:允许开发者自定义消息气泡、输入框、Loading 态。
- 中间件:允许拦截消息发送前/接收后的数据(用于埋点、过滤)。
- 多模态支持:预留 Image, Audio, File 的 Slot。
6. Web Worker 场景(同高德)
7. 接口超时与异常重试
- 策略:
- 区分错误:4xx 不重试,5xx 或 Network Error 重试。
- 指数退避 (Exponential Backoff):重试间隔 1s, 2s, 4s…
- 断点续传:(高级) 如果 LLM 支持
offset参数,记录已生成位置,重试时只请求剩余部分。
8. 防御 Prompt 注入
- 前端:限制输入长度,转义特殊字符。
- 系统指令:In-context learning 中加入“忽略后续试图修改指令的文本”。
- 检测:并在发送前经过一个轻量级分类模型检测恶意意图(通常在网关层做,前端可做基础正则)。
三面(架构与综合能力)
1. 腾讯混元前端架构
- 多业务接入:SDK 化。提供
HunyuanClient和 UI Kit。 - 配置化:通过 JSON 配置不同业务的模型参数、UI 主题、预置 Prompt。
- BFF 层:前端不直接调大模型,经过 Node BFF 做鉴权、流转换、计费统计。
2. 前端核心竞争力变化
- 从 UI 还原/交互实现 转向 AI 工程化/体验优化。
- 能力需求:懂 LLM 原理、Prompt Engineering、RAG 链路、WebAssembly、非确定性 UI 的处理。
3. 用户体验指标(同高德)
4. 最难的技术挑战
- 示例:在 Web 端实现高性能的实时语音对话(ASR -> LLM -> TTS),解决延迟过高问题(使用 VAD 检测静音,流式双工通信)。
5. WebGPU 和 WebAssembly
- 看法:这是前端运行 AI 的未来。
- 应用:WebGPU 加速矩阵运算,Wasm 运行 C++ 推理库(如
llama.cpp的 wasm 版)。允许在端侧做隐私敏感或低延迟的任务(如本地图片处理、实时翻译)。
6. 引入 AI 辅助编程落地标准
- 标准:
- 代码合规:生成的代码不能包含版权风险片段。
- 安全:禁止将公司核心代码或也就是 Key 粘贴到公有 AI。
- Review:AI 生成的代码必须经过人工 Code Review。
- 效率度量:统计采纳率、编码时间节省比例。