前端状态、性能与恢复

共 27 题
#

1. 长会话如何用虚拟列表和稳定锚点渲染,流式增长时怎样避免滚动跳动

A 虚拟列表仅用于减少内存,与滚动位置无关
B 用稳定 key、scroll anchoring 并区分"是否在底部"决定是否自动跟随,避免流式增长跳动 ✓ 正确答案
C 流式增长时总是自动滚到底部
D 无需虚拟列表,直接渲染全部消息即可
#

2. 如何用 rAF/时间片节流增量更新,同时保证停止按钮、输入框和页面滚动响应

A 每个 token 都立即渲染,保证实时性
B 用 rAF/时间片批量更新并让出主线程,保证停止按钮、输入和滚动及时响应 ✓ 正确答案
C 渲染优先级最高,停止按钮可稍后响应
D 时间片调度与输入框响应无关
#

3. AbortController 能取消哪些浏览器工作,服务端模型推理为何还需要独立取消协议

A AbortController 能直接取消服务端模型推理
B 前端 abort 后服务端必然停止
C AbortController 只取消浏览器侧连接,真正停止推理与计费需服务端独立取消协议 ✓ 正确答案
D 服务端无需取消协议
#

4. 流式聊天中“停止生成”后如何清理未完成的 DOM 节点、撤销已渲染的占位符

A 停止后直接清空整个消息即可
B 停止生成无需清理 DOM
C 停止不影响已渲染的占位符
D 取消请求后统一走 stopped 状态,清理占位符与未闭合内容,保证 DOM 与数据一致 ✓ 正确答案
#

5. 消息列表的虚拟滚动应如何处理变高项(带代码块、表格、图片)防止布局抖动

A 渲染后测量实际高度并缓存,图片加载后重测,动态校正偏移 ✓ 正确答案
B 用固定高度估算所有消息即可
C 变高项无法用虚拟滚动
D 高度缓存与滚动无关
#

6. IndexedDB 如何持久化允许落地的会话状态,刷新后怎样与服务端版本合并

A IndexedDB 是权威源,刷新后直接用它
B 无需与服务端合并
C 刷新后总是以本地为准
D 先读本地立即渲染,再按版本号与服务端合并,未提交编辑保留 ✓ 正确答案
#

7. 断线恢复如何使用游标、事件 ID 和去重;旧流晚到时如何防止串写新消息

A 重连后从开头重新拉取即可
B 旧流晚到应直接写入覆盖新消息
C 事件 ID 不必要,重复无妨
D 用游标续传、事件 ID 去重,并用 requestId 隔离丢弃旧流晚到事件 ✓ 正确答案
#

8. 大附件如何做分片、Hash、进度、重试和 MIME 校验,Web Worker 适合卸载哪些工作

A 一次性上传整个文件,无需分片
B MIME 用扩展名判断即可
C 分片 + Hash 校验 + 断点续传,用 magic bytes 校验 MIME,Hash/解析等重计算放 Web Worker ✓ 正确答案
D Web Worker 可以访问 DOM 做渲染
#

9. IndexedDB 存储哪些会话数据(消息、附件、引用),如何加密与同步到服务端

A 存消息、附件元数据、引用与版本,敏感数据用 Web Crypto 应用层加密,附件大文件存对象存储 ✓ 正确答案
B IndexedDB 本身加密,无需额外处理
C 原始大文件直接存 IndexedDB
D 同步总是全量传输
#

10. 聊天应用在网络中断时已发出的请求如何避免重复扣费(前端幂等 ID)

A 前端生成幂等 ID 并重试时复用,服务端按 ID 去重只计费一次 ✓ 正确答案
B 重试时每次都生成新 ID,各计各的
C 幂等 ID 只由服务端生成,前端无需参与
D 网络中断后无需重试
#

11. 跨标签页打开同一会话时,BroadcastChannel 如何同步流事件、避免重复请求

A 每个标签页各自发起请求即可
B 用 BroadcastChannel 同步流事件,并用 leader 选举保证单一请求者避免重复扣费 ✓ 正确答案
C BroadcastChannel 只能发消息,不能同步状态
D 多标签页无需协调
#

12. 跨标签页并发编辑同一会话时,BroadcastChannel 与服务端版本号如何解决冲突

A BroadcastChannel 同步后无需版本号
B 并发编辑时直接覆盖即可
C BroadcastChannel 负责实时同步,服务端版本号做乐观并发控制决定最终一致性 ✓ 正确答案
D 版本号只用于显示,不用于冲突检测
#

13. 前端遥测怎样记录性能和错误而不采集完整 Prompt、文件内容或敏感 URL

A 遥测应完整采集 Prompt 便于诊断
B 只上报聚合指标与脱敏标识符(如 prompt_hash),不采集完整 Prompt 与文件内容 ✓ 正确答案
C URL 原样上报即可
D 遥测无需隐私考虑
#

14. 大型附件上传(>10MB)应如何分片、断点续传、并行上传,前端 UX 如何设计

A 一次性上传整个大文件,失败重来
B 取消后已传分片全部作废
C 上传无需进度显示
D 分片并行上传 + 断点续传 + 进度可取消可重试,Hash 放 Worker 计算 ✓ 正确答案
#

15. Web Worker 在 AI 前端应用中适合卸载哪些工作(Markdown 解析、JSON Schema 校验、向量计算)

A Worker 适合渲染 DOM 的 UI 任务
B 所有任务都放 Worker 最好
C 适合卸载 Markdown 解析、JSON Schema 校验、向量计算等计算密集且不依赖 DOM 的任务 ✓ 正确答案
D Worker 通信无成本,可随意使用
#

16. 会话历史的本地缓存与远程同步策略(last-write-wins、CRDT、版本号)

A 所有场景都用 CRDT 最稳妥
B 同步策略与一致性无关
C last-write-wins 永远正确
D 按冲突频率与一致性需求选择:单用户用 last-write-wins,协同编辑考虑 CRDT,版本号提供冲突检测 ✓ 正确答案
#

17. 流式输出中的“粘贴文本”与“模型输出”应如何在视觉上区分(背景色、边框)

A 两者应完全一致显示,避免用户困惑
B 用不同背景色/边框/标签区分来源,并保证无障碍对比度 ✓ 正确答案
C 只需要文字提示,无需视觉区分
D 区分无意义,模型输出与粘贴文本本来就不同
#

18. 前端缓存 Provider 列表、模型元信息的能力如何减少首屏延迟,又避免过期数据

A 用缓存版本号 + TTL + ETag 条件请求,先渲染缓存再后台校验更新 ✓ 正确答案
B 缓存永远不过期,省事
C 元信息缓存会必然导致数据过期,应禁用
D 只有网络请求才能保证数据正确
#

19. 错误重试(断线重连、Provider 错误)应做几次指数退避,避免前端“卡死”等待

A 无限重试直到成功
B 重试不需要退避间隔
C 所有错误都要重试
D 指数退避加抖动,最多重试 3-5 次,区分可重试与不可重试错误并设超时 ✓ 正确答案
#

20. 聊天应用切换到后台标签页时,是否应暂停流渲染(性能优化)

A 暂停 DOM 渲染但保留数据接收与连接,回前台时渲染最新状态 ✓ 正确答案
B 后台继续满速渲染,保持实时
C 后台应完全断开请求
D 后台渲染无关紧要
#

21. 聊天前端如何用消息 ID、游标和幂等提交处理 SSE 重连,避免重复 Token 或消息顺序错乱

A 重连后从头重放全部事件
B 事件 ID 无法使用
C 用事件 ID + 游标续传、幂等键去重、序列号校验顺序,避免重复与乱序 ✓ 正确答案
D 顺序错乱无法避免
#

22. React 或 Vue 的增量渲染怎样避免每个 Token 触发全树重渲染,并保持 Markdown 和代码块稳定

A 每 token 直接 setState 全量更新最准确
B 流式更新应禁用 memo
C memo 无法避免全树重渲染
D 用 memo 拆分组件 + rAF 批量合并 + 解析结果缓存,只更新变化叶子节点保持稳定 ✓ 正确答案
#

23. 用户在工具调用期间刷新页面时,前端如何从服务端恢复 Agent 状态并展示可继续或需审批的节点

A 刷新后 Agent 任务作废,需重新开始
B 工具调用状态无法持久化
C 刷新后无需展示审批节点
D 服务端持久化 Agent 状态,刷新后恢复并展示可继续/需审批节点 ✓ 正确答案
#

24. 如何设计乐观 UI、取消生成和重新生成操作,使客户端状态与 Provider 已产生的计费事实一致

A 用 requestId 关联服务端计费记录,以服务端实际消耗校正 UI 状态 ✓ 正确答案
B 以乐观 UI 显示为准,忽略服务端
C 取消生成就不会产生任何费用
D 计费与 UI 无需一致
#

25. 长对话中的虚拟列表、上下文摘要和滚动锚点如何协作,避免恢复历史时跳动或丢失未读内容

A 恢复时总是自动滚到底部
B 锚点用像素偏移最稳定
C 摘要节点不可展开
D 虚拟列表 + 稳定锚点 + 上下文摘要,恢复时锚定原位置并保留未读提示 ✓ 正确答案
#

26. 流式结构化 JSON 尚未闭合时,前端如何显示可用字段并在解析失败后平滑回退到文本展示

A 必须等完整 JSON 才渲染
B 无法增量解析 JSON
C 解析失败就抛异常
D 增量解析先渲染可用字段,解析失败时平滑回退到 Markdown 文本 ✓ 正确答案
#

27. 如何用 Web Vitals、首 Token 延迟和用户中断率评估 AI 界面性能,而不是只测接口 P95

A 只测接口 P95 即可
B 中断率与性能无关
C 综合 Web Vitals、首 Token 延迟与用户中断率等用户视角指标 ✓ 正确答案
D 首 Token 延迟就是接口 P95