外观
简历逐条追问
依据:前端实习简历、Go 全栈实习简历。整理日期:2026-10-31。
本文是围绕当前简历的学习口播与追问材料,供掌握后选用。覆盖两版简历全部 17 条经历要点,相同机制合并讲解。项目回答结合已有笔记和关键源码静态阅读;实习经历仅依据简历,没有公司源码,相关答案是需要用真实案例补全的框架。本次没有运行服务或性能测试,文中的验证方法不代表已经执行。
每组按“简历触发词 → 主问 → 回答思路 → 递进追问 → 证据”展开。追问可沿前序回答继续深入,也可作为备选分支,不需要一次把所有细节塞进主回答。
一、简历与问题对应表
| 编号 | 方向 / 经历要点 | 简历触发词 | 主问 | 答案入口 |
|---|---|---|---|---|
| I1 | 实习:权限改造 | 页面级、按钮级、动态路由、权限指令、三端 | Q5、Q6 | 本文实习部分;真实权限矩阵待补 |
| I2 | 实习:迭代与性能 | ECharts、虚拟列表、分页、懒加载、CDN、异步导入 | Q7、Q8 | 本文性能与大屏部分;实测记录待补 |
| I3 | 实习:工程化 | 请求拦截器、通用组件、Apifox、提交前检查 | Q9 | 本文工程化部分;配置与复用案例待补 |
| F1 | SimulSpeak:媒体与会话 | Hook、连接启停、资源释放、异步停止 | Q10 | 前端实现与难点 |
| F2 | SimulSpeak:字幕状态 | 句子 ID、终态、引擎优先级、迟到覆盖 | Q11 | 前端实现与难点 |
| F3 | SimulSpeak:高频事件 | 按句节流、列表与索引裁剪 | Q12 | 前端实现与难点 |
| F4 | SimulSpeak:画中画 | 独立窗口、状态复用、样式与关闭清理 | Q13 | 前端实现与难点 |
| F5 | Blog:阅读交互 | 二三级标题、活动高亮、passive、rAF | Q14 | 前端实现与难点 |
| F6 | Blog:贡献图 | 服务端获取、SVG、缓存再验证、ref | Q15 | 前端实现与难点 |
| F7 | Blog:内容页面 | MDX、静态参数、元数据、sitemap | Q16 | 前端实现与难点 |
| G1 | EinoTalk:业务闭环 | JWT、管理员中间件、Axios、Zustand | Q17 | 前端笔记 |
| G2 | EinoTalk:分发抽象 | channel / Kafka、持久化、回显、缓存 | Q18 | Go 实现与难点 |
| G3 | EinoTalk:跨实例路由 | Redis 在线位置、节点总线、Lua 所有权比较 | Q19 | Go 实现与难点 |
| G4 | EinoTalk:AI 助手 | Eino、异步、流式聚合、超时、工具范围 | Q20 | Go 实现与难点 |
| G5 | SimulSpeak:业务媒体分层 | api-server、PBX、SDP / ICE、媒体管线 | Q21 | Go 实现与难点 |
| G6 | SimulSpeak:分阶段翻译 | 快翻、上下文纠错、异常降级、配音派发顺序 | Q22 | Go 实现与难点 |
| G7 | SimulSpeak:实时闭环 | WebSocket → Zustand、会话 Hook | Q10—Q12、Q21 | 与 F1—F3 共用,按全栈链路展开 |
下文“核心”表示直接支撑简历主张,“深入”表示进一步推演边界,不代表有统计依据的面试频率。
二、开场与经历真实性
Q1.请介绍一下自己,为什么投这个岗位?
触发依据: 两份简历分别投前端和 Go 全栈,同时出现前端实习、Go 后端与 AI 项目。考查目标: 方向是否清晰,经历能否服务于岗位。
回答思路: 当前身份 → 最相关经历 → 一个具体技术问题 → 希望承担的工作。学校、年级和到岗情况按真实信息补充。
前端版口播:“我主要准备前端开发实习,实习中做过权限改造和业务页面,个人项目更关注实时应用中的状态与资源管理。比如同传项目中,同一句字幕会先后收到识别、快翻和纠错结果,我用句子标识和状态规则组织更新。博客项目主要体现阅读交互和组件边界。我希望参与业务前端开发,继续积累性能分析和工程协作经验。”
Go 全栈版口播:“我有前端实习经历,也在 Go 项目中练习了鉴权、消息分发和异步协作。即时通信项目重点是把页面、接口、消息推送与状态更新串成闭环,同传项目涉及业务控制与媒体服务的分工。我希望做能跟进完整业务链路的 Go 全栈开发。”
| 递进追问 | 触发依据 | 回答要点 |
|---|---|---|
| 更擅长前端还是后端? | 同时介绍两端 | 用能独立定位的问题和可展示的模块说明,明确当前主方向,不用“都精通”。 |
| 前端经历怎么帮助你写后端? | “完整业务链路” | 举接口契约、错误码或实时事件形态影响前端的例子,说明如何共同定义。 |
| AI 能力和你的工作分别是什么? | AI 项目 | 模型负责识别、翻译、生成;工程工作包括编排、身份、状态、错误和资源管理。 |
| 每周来几天,实习多久? | 日常实习 | 给确定安排及可能冲突;当前简历仍有占位,需要提前补真实信息。 |
Q2.哪些是独立开发,哪些基于已有工程?
触发依据: “独立开发”“持续开发”“基于既有 Next.js 博客工程二次开发”。考查目标: 个人工作边界和项目理解。
回答思路: 分开讲项目来源、复用基础、本人完成的模块、本人解决的问题。Blog 明确是二次开发;另外两个项目也按真实来源说明。能解释整个系统可以证明理解范围,具体工作归属需要真实经历支撑。
| 递进追问 | 触发依据 | 回答要点 |
|---|---|---|
| 你新增了什么,和原工程有什么区别? | “二次开发” | 对照一个具体交互讲改前、改后、改动位置与原因。 |
| 能现场指出核心代码吗? | “独立开发” | 从用户入口讲到状态、异步调用和清理,再定位文末证据。 |
| 技术栈里的东西都亲自用过吗? | 技术栈较长 | 区分深入实现、实际接入和仅了解;能讲清使用位置再保留。 |
| 有用户吗,部署在哪里? | “应用 / 平台” | 如实说明本地演示、个人部署或真实使用,没有用户规模就不报规模。 |
| 项目与实习时间重叠,怎么安排? | 两版时间线 | 用实际阶段、投入和复用部分解释,不编造迭代记录。 |
准备材料: 每个项目一页“来源、本人工作、可演示链路、限制”清单,记录到经历素材库。
Q3.你解决过最难的问题是什么?
触发依据: “主导权限改造”“迟到结果覆盖”“跨实例路由”。考查目标: 问题、行动和结果能否形成因果链。
回答思路: 只选一件亲自完成、能复盘的事。项目学习口播示例:“同传中同一句字幕由多个异步来源更新,最后收到的不一定最适合展示。我把更新集中到按句子归并的状态逻辑里,分别考虑识别终态、翻译终态与纠错优先级。这样可以明确哪些更新允许覆盖,哪些应该拒绝。但这不等于完整的乱序协议,比如被裁掉的旧句重新到达,还需要另行处理。”真实经历版再补当时的发现、复现与验证过程。
| 递进追问 | 触发依据 | 回答要点 |
|---|---|---|
| 难在哪里,为什么普通 CRUD 思路不够? | 异步更新 | 难在时序与状态约束;举“纠错先到、快翻后到”的事件序列。 |
| 你试过什么方案,为什么改? | 解决过程 | 只讲真实试过的方案;没有历史记录时将替代方案作为现在的分析。 |
| 怎么证明问题解决了? | “拒绝错误覆盖” | 给事件序列、预期状态与实际结果;有测试文件不等于测试已通过。 |
| 重新做会怎么改? | 当前限制 | 选一个优先项,如会话版本与服务端修订号,解释收益和协议成本。 |
Q4.你说提升速度、减小体积,有数据吗?
触发依据: 实习中的“减小打包体积、提升首屏加载速度”。考查目标: 性能结论是否可验证。
回答思路: 区分“机制存在”和“效果实测”。没有可比数据时,说明具体完成的改动、影响哪条路径,以及没有保留可靠提升比例。有数据时解释指标、环境、修改前后、统计方法和归因。
| 递进追问 | 触发依据 | 回答要点 |
|---|---|---|
| 首屏具体指什么? | “首屏速度” | 定义可见内容或可操作时间,必要时用 LCP 等指标;接口耗时不等于首屏耗时。 |
| 开发模式还是生产包? | 性能测量 | 使用可比生产构建,保持设备、网络、缓存和数据规模一致。 |
| 动态导入一定减少总下载量吗? | “减小体积” | 区分首屏资源、按需 chunk 和最终总资源量,还要考虑额外请求与共享依赖。 |
| CDN 命中和首次访问怎么比? | “CDN 加速” | 冷热缓存、地域与源站分开分析,不能混用条件计算收益。 |
| 后端同期也优化了,怎么证明你的效果? | 归因 | 保持其他条件不变,或用资源时序与主线程分析隔离;不能隔离就说明是整体结果。 |
三、实习:医疗三端管理平台
Q5.怎样把页面级权限升级到按钮级?
对应:I1,核心。触发依据: 页面级下沉到按钮级、动态路由、自定义权限指令。考查目标: 权限模型、前后端职责与升级过程。
回答框架: 先用真实动作说明页面权限为什么不够,例如能看列表但不能编辑。再解释用户、角色、权限点的关联,登录后怎样获得权限,路由与按钮如何消费。重点讲后端如何校验操作权限及数据范围,最后讲旧权限映射和升级过渡。具体标识、多角色规则和上线过程目前没有材料,按实际经历补全。
| 递进追问 | 触发依据 | 回答要点 |
|---|---|---|
| 页面、按钮、接口、数据权限分别是什么? | “权限下沉” | 分别控制页面进入、动作展示、服务端操作和可访问数据范围,按钮隐藏不能代替接口授权。 |
| 用户、角色、权限怎么关联,多角色取并集还是交集? | “按角色” | 画真实关系,解释显式拒绝、管理员例外与冲突规则;不默认实际是完整 RBAC。 |
| 权限点按按钮名字还是业务动作定义? | 按钮级 | 业务动作标识通常更稳定;说明真实命名与前后端映射,以及旧标识兼容。 |
| 动态路由什么时候注入,刷新页面呢? | “动态路由” | 恢复身份 → 获取权限 → 加入路由 → 进入目标页,覆盖未就绪和获取失败。 |
| 切换账号会继承旧路由吗? | 登录恢复 | 清理旧路由、权限、缓存与连接,新身份初始化完成再导航。 |
| 权限异步返回后,指令会重新更新吗? | 自定义指令 | 解释真实生命周期;只在挂载检查一次,可能无法响应后续变化。 |
| 移除 DOM 和禁用按钮怎么选择? | “显隐” | 根据可发现性、禁用原因与布局选择;移除后权限增加时要考虑恢复方式。 |
| 用户直接调接口,或者运行中权限被撤销呢? | 前端控制边界 | 后端按身份、操作、资源范围拒绝;前端配合真实权限刷新策略,不能只靠隐藏。 |
需要补真实材料: 一组改造前后权限矩阵、一个动作的前后端流程、本人实现范围、一次允许与拒绝的回归记录。
Q6.同一套权限如何覆盖 PC、大屏、小程序?“主导”体现在哪里?
对应:I1,深入。触发依据: 三端一体化、独立负责大屏与小程序权限重构。考查目标: 语义统一、平台差异与协作。
回答框架: 共用身份含义与业务权限语义,三个端分别用自己的路由、组件和渲染能力消费。选一个“查看科室报表 / 导出报表”的动作,讲入口、操作和数据范围怎样对应,再讲本人制定、实现、协调、验收了哪些内容。是否真正共用权限接口或统一包,需要按事实回答。
| 递进追问 | 触发依据 | 回答要点 |
|---|---|---|
| PC 指令能直接搬到小程序吗? | 三端差异 | 运行环境和组件机制不同,可共享判断语义,视图接入分别实现。 |
| 小程序为什么既有权限组件又有函数? | “组件与校验函数” | 组件处理声明式展示,函数服务事件、导航和业务分支,保持判断规则一致。 |
| 大屏不渲染图表,数据还会请求吗? | 动态渲染 | 检查请求是否阻断及后端过滤;不显示不等于数据没有下发。 |
| 多科室数据怎么隔离,医生兼任怎么办? | “分级管控” | 服务端按可信身份和授权关系确定范围,多归属按业务规则处理,不能信任任意科室参数。 |
| 老页面怎么迁移,漏配时怎么办? | “重构” | 讲旧新映射、缺省行为、回归范围与回退方法,使用实际采用的方案。 |
| 你怎么推动其他人配合,又如何验收? | “主导” | 具体讲权限点文档、接口约定、任务分工;用角色 × 端 × 动作 × 数据范围矩阵验收。 |
Q7.虚拟列表、分页、懒加载、CDN 分别解决什么问题?
对应:I2,核心。触发依据: 同一条经历列出多种优化。考查目标: 是否先定位瓶颈,再选工具。
回答框架: 先选实际页面,说明现象、数据规模与分析依据。分页控制单次数据量,虚拟列表限制已加载数据对应的 DOM,懒加载推迟非关键资源,CDN 改善静态资源分发,防抖 / 节流限制重复操作,异步导入改变代码加载时机。逐项对应真实落点,不是每个页面都需要全用。
| 递进追问 | 触发依据 | 回答要点 |
|---|---|---|
| 你看到的是接口慢、下载慢还是渲染慢? | “大数据量” | 用网络时序、响应大小、长任务和布局记录分辨,先说定位证据。 |
| 有分页为什么还要虚拟列表? | 两种机制 | 连续加载或单页较多时仍有大量 DOM;小数据场景可能无需虚拟化。 |
| 可视范围怎么算,行高不固定呢? | “虚拟列表” | 固定行高由滚动偏移计算索引,留缓冲与占位;变高需要测量、缓存和位置修正。 |
| 搜索防抖后旧请求晚到,仍会覆盖吗? | “防抖” | 会有可能;请求取消或序号检查解决结果竞态,防抖只减少发起次数。 |
| 节流和防抖分别用在哪? | 两者同时出现 | 用真实交互说明持续过程定期响应和等待输入稳定的区别。 |
| 懒加载会影响首屏吗? | “图片懒加载” | 首屏关键图及时加载,非关键图延后,预留尺寸避免布局跳动。 |
| 动态组件是不是自动拆包? | “动态组件与异步导入” | 动态选择组件不自动产生异步模块边界,要用构建结果确认。 |
| CDN 上更新后用户拿到旧文件怎么办? | “CDN 加速” | 说明真实文件哈希、HTML 与静态资源的缓存策略,避免所有资源一概长期缓存。 |
| 最终快了多少? | 性能成果 | 按 Q4 给可比记录;没有数据就说明机制效果和缺口,不补造比例。 |
Q8.ECharts 大屏怎样应对频繁刷新和大量数据?
对应:I2,深入。触发依据: 独立负责大屏、医疗可视化。考查目标: 图表生命周期、数据与刷新协作。
回答框架: 选真实图表讲指标含义、接口、数据转换、初始化、更新与销毁,再讲刷新频率、容器尺寸和页面切换清理。下面采样、暂停轮询等只是可选设计,实际做过才能写成成果。
| 递进追问 | 触发依据 | 回答要点 |
|---|---|---|
| 为什么不每次数据变更都重新初始化? | 图表更新 | 通常复用实例更新配置,重建有额外成本并可能丢交互状态,结合真实使用方式解释。 |
| 页面切换后还在请求吗,实例谁销毁? | 生命周期 | 停定时器、移监听、销毁实例;异步请求晚到不能更新已卸载视图。 |
| 只监听窗口 resize 够吗? | 大屏自适应 | 容器变化不一定来自窗口变化,需要分析布局和容器尺寸观察。 |
| 几万数据点都画出来吗? | 大数据 | 按业务聚合、窗口化或采样,但不能随意丢异常点改变统计含义。 |
| 上次轮询未完成,下次又触发怎么办? | 高频刷新 | 控制在途请求、超时、取消或版本检查,避免堆积和旧结果覆盖。 |
| 多图表重复请求、后台仍刷新怎么处理? | 资源成本 | 可共享数据源;按实时性决定隐藏时降频、恢复时补拉,说明实际实现范围。 |
| 能解释业务指标吗? | 医疗可视化 | 用脱敏例子说明单位、分子分母、时间范围与空值,不能只讲图形样式。 |
Q9.封装了什么,请求与提交前检查链路如何落地?
对应:I3,核心。触发依据: 通用工具、请求拦截器、组件、Apifox、husky 等。考查目标: 抽象边界和协作质量。
回答框架: 选一个封装讲“哪些重复 → 哪些规则稳定 → 怎样保留差异 → 如何接入”。工程化讲从 Git hook、暂存文件筛选到格式化、规则检查和阻断提交的链路。具体脚本与团队采用过程需要真实材料支撑。
| 递进追问 | 触发依据 | 回答要点 |
|---|---|---|
| 拦截器做什么,业务层做什么? | 请求封装 | 统一凭证和通用错误适合集中;业务数据、重试、提示需要明确边界。 |
| HTTP 200 但业务失败怎么办?多个接口同时 401 呢? | 接口联调 | 区分业务 code 与 HTTP 状态,统一失效处理,避免重复跳转和提示。 |
| 通用组件怎样避免越封装越难用? | 组件复用 | 抽稳定行为,用属性、事件或插槽保留差异,举实际复用案例。 |
| Mock 成功为什么真实接口还会出错? | Apifox | 类型、必填、权限、分页、时区、空值与真实规模可能不同。 |
| husky、lint-staged、ESLint、Prettier 各负责什么? | 工具链 | 分别是 hook 接入、暂存文件任务范围、代码规则、格式化,解释真实调用关系。 |
| 能保证没有 bug 吗,绕过 hook 怎么办? | 提交检查 | 本地检查只覆盖规则;CI 可做强制门禁,但未落地时只能作为方案。 |
| 历史代码太多、规则冲突怎么办? | 团队落地 | 统一配置、减少重复格式规则、按改动范围渐进治理,举真实遇到的问题。 |
四、SimulSpeak:前端与实时交互
Q10.从点击开始到停止,前端发生了什么?
对应:F1、G7,核心。触发依据: 客户端封装、Hook、连接启停、异步准备期间停止。考查目标: 流程、取消与资源所有权。
参考口播: “我用自定义 Hook 编排会话,WebSocket 与 RTC 客户端负责各自连接细节。开始时生成会话标识、申请音频,随后建立业务连接并交换媒体信令,字幕事件交给状态层。停止时同步解除订阅、关闭连接、停止媒体轨道和可视化。用户可能在授权还没结束时停止,所以采集异步返回后还要检查停止意图,避免继续创建资源。现有停止标记覆盖部分流程,停止后马上重启等交错还需要单独验证。”
| 递进追问 | 触发依据 | 回答要点 |
|---|---|---|
| 为什么连接实例用 ref,状态用 state? | 客户端封装 | ref 保存跨渲染可变句柄;UI 状态需要通知渲染,连接句柄变化无需每次更新视图。 |
| 重渲染会重新连接吗? | Hook | 看创建入口、effect 依赖和清理,写进 Hook 本身不保证只创建一次。 |
| 麦克风拒绝授权怎么办? | 申请音频 | 捕获异常、结束准备状态、给提示,释放已经创建的资源。 |
| 授权没结束时点停止,只关 RTC 够吗? | 异步停止 | 不够,promise 晚到可能产生新轨道;返回后需检查并释放晚到资源。 |
| 停止马上开始,旧任务怎么识别? | 停止标记 | 单个布尔值可能被新会话重置;会话代数或独立取消上下文属于可改进方案。 |
| 卸载和手动停止有什么区别? | 清理 | 卸载必须释放资源,停止还要更新用户可见状态;清理要容忍重复调用。 |
| 关 WebSocket 就能关麦克风吗? | 多类资源 | 不能,核对 MediaStreamTrack.stop、RTC、可视化、心跳及握手等待定时器的归属。 |
证据: S1。不要将现有清理机制扩写成已经实现完整自动重连或断线恢复。
Q11.同一句字幕怎么合并,为什么不能按最后收到的消息覆盖?
对应:F2、G7,核心。触发依据: 句子 ID、终态标记、引擎优先级。考查目标: 状态模型与乱序边界。
参考口播: “同一句话会出现识别、快翻与模型修订,我按句子标识更新同一行。英文识别与中文翻译分别保存状态,更新前判断是否把终态退回中间态,以及是否用低优先级结果覆盖已有纠错。列表负责展示,索引负责找到同句状态。终态有阶段语义,例如机器翻译最终结果仍可能在界面上作为待纠错草稿,不能只根据事件名字认定整句已完全定稿。”
| 递进追问 | 触发依据 | 回答要点 |
|---|---|---|
| 英文和中文能共用一个 final 吗? | 分开状态 | 两条链路独立推进,识别完成不等于翻译结束。 |
| LLM 先到、TMT 后到呢? | 引擎优先级 | 对应分支拒绝低优先级覆盖 AI 终态;不能外推成所有来源任意乱序都正确。 |
| final 后收到 partial,或者重复 final 呢? | 终态保护 | 对应分支忽略回退;相同 ID 不新建行,但同阶段不同 final 是否覆盖还需要修订规则。 |
| 没有 ID 的消息怎么处理? | 按 ID 合并 | 当前忽略空或缺失标识,避免错误归并;可能丢展示内容,应从协议和日志定位。 |
| 列表顺序是真实说话顺序吗? | 列表 | 本地序号在首次建行时分配,不等于服务端句序;强顺序需协议支持。 |
| 为什么数组和 Map 不会不一致? | 两种状态结构 | 更新时统一替换同句对象,裁剪时同时清索引与节流记录。 |
| 时间戳能替代引擎优先级吗? | 新旧判断 | 时间戳不能单独表达阶段与修订;可演进为会话标识、句子序号和修订号。 |
证据: S2。已有测试文件可用于学习事件序列,本文未执行测试。
Q12.按句节流和列表裁剪优化了什么?
对应:F3,核心。触发依据: TMT 中间结果节流、限制长会话状态规模。考查目标: 性能与正确性的取舍。
参考口播: “我只对机器翻译中间结果按句子限制应用频率,减少密集更新推动状态变化;终态不经过这段中间态节流。长会话限制保留行数,列表、索引和节流记录同步清理。它控制的是部分更新次数和保留状态,不会减少服务端识别成本。归并内部仍有复制和遍历,效果需要用固定回放与性能分析验证,不能从有 Map 就推出整个更新是常数时间。”
| 递进追问 | 触发依据 | 回答要点 |
|---|---|---|
| 为什么按句,不全局节流? | “按句” | 一个句子的高频事件不应压制另一个句子的正常反馈。 |
| 最后一次 partial 一定会补发吗? | 限频 | 当前是时间检查后跳过,没有独立尾触发补发队列;终态走其他更新规则。 |
| final 落在节流窗口会丢吗? | 中间态节流 | 这段逻辑只限制 TMT 非 final,终态仍按自身规则处理。 |
| 数组裁了,Map 没裁会怎样? | 同步裁剪 | 内存仍增长,旧索引可能影响归并,节流记录也要清理。 |
| 被裁的旧句重新到达呢? | 裁剪边界 | 可能重新建行;序号水位或有界删除记录是可改进方案。 |
| Map 查找快,为什么更新不一定快? | 索引 | 数组与 Map 的复制、行替换遍历、超限排序仍有成本。 |
| 为什么不只用虚拟列表,怎样测收益? | 长会话 | 虚拟化减少 DOM,不自动减少 store;固定事件流比较提交、渲染、长任务和堆内存。 |
证据: S2。行数上限不等于单行文本长度和全部会话资源都有严格内存上界。
Q13.画中画怎么共享字幕,关闭时如何清理?
对应:F4,核心。触发依据: Document Picture-in-Picture、独立窗口、状态复用。考查目标: 跨文档渲染与资源管理。
参考口播: “我在画中画文档中创建容器与 React root,渲染订阅同一字幕 store 的组件。这里复用当前应用运行时状态,不是独立打开另一个应用就自动同步。独立文档有自己的样式环境,需要注入样式。用户关闭窗口时,通过生命周期事件统一卸载 root、移除容器与监听并通知状态变化。打开前先做能力探测,失败则给提示。”
| 递进追问 | 触发依据 | 回答要点 |
|---|---|---|
| 和视频画中画有什么区别? | Document PiP | 这里展示 DOM 字幕与交互,不只是一个视频元素。 |
| 为什么主页面 CSS 不直接生效? | 独立文档 | 样式表与变量作用域独立,字体、主题和布局需要处理。 |
| 两个 root 自动共享 Context 吗? | 新 React root | 不自动继承 provider,外部 store 共享与 Context 继承是两回事。 |
| 两边修改设置都同步吗? | 状态复用 | 区分共享状态与窗口局部状态,只有接入同一状态源的设置才同步。 |
| 反复或同时打开会创建多个窗口吗? | 窗口管理 | 已打开时复用;并发打开的竞态另查,单例不自动保证没有竞争。 |
| 点系统关闭按钮,主页面怎么知道? | 关闭清理 | 监听画中画窗口生命周期,统一执行清理与状态通知。 |
| 主页面后台运行或浏览器不支持怎么办? | 能力边界 | 展示能力不保证所有后台采集持续;当前不支持时提示,页面字幕仍可用,额外降级方案不冒充已实现。 |
证据: S3。
五、Blog:阅读交互与内容链路
Q14.目录怎样确定当前章节,为什么用 rAF?
对应:F5,核心。触发依据: 二三级标题、活动高亮、被动监听、rAF。考查目标: 事件、布局读取与清理。
参考口播: “目录筛选二、三级标题,通过锚点找到正文元素,根据相对视口位置选择越过顶部偏移线的最后一个标题。滚动回调取消尚未执行的帧并重新安排一次计算,尽量合并高频事件。它仍会遍历标题、读取布局,不代表计算成本消失。桌面吸顶、移动端折叠,卸载时清理滚动和缩放监听以及待执行帧。”
| 递进追问 | 触发依据 | 回答要点 |
|---|---|---|
| 标题可见就能决定活动项吗? | 高亮规则 | 多个标题可能同时可见,还要考虑固定顶部区域,需要稳定选择规则。 |
| rAF 是固定每秒 60 次,等于时间节流吗? | 绘制调度 | 受刷新与页面状态影响,不是固定计时器;对齐绘制也不能避免重回调卡顿。 |
| passive 能减少遍历吗? | 被动监听 | 不会,它表达不取消默认行为,不能作为 scroll 计算量下降的证据。 |
| getBoundingClientRect 一定强制重排吗? | 位置读取 | 取决于布局是否失效和读写顺序,避免说成每次必定重排。 |
| 为什么不用 IntersectionObserver? | 方案选择 | 可作为替代,但仍需多个候选的选择和边界规则,当前实现未采用。 |
| 中文、重复标题怎么处理? | 锚点 | 目录与正文 ID 生成规则一致,当前读取会解码;重复标题回到生成链路核对。 |
| 文章最后一节很短,高亮会怎样? | 偏移线 | 可能无法越过阈值,需按实际滚动范围验证,必要时补底部规则。 |
| sticky 为什么失效? | 桌面吸顶 | 排查滚动容器、祖先 overflow、可用高度与定位边界。 |
证据: B1。当前扫描有线性成本,不能写成 O(1)。
Q15.贡献图为什么拆成服务端取数据、客户端做动画?
对应:F6,核心。触发依据: 服务端数据、SVG、ref、缓存再验证、页面隐藏与减少动画偏好。考查目标: 渲染边界、缓存与 DOM 更新。
参考口播: “服务端组件请求贡献数据并处理失败,把可序列化数据传给客户端展示组件。请求配置一小时再验证,不是精确每小时主动轮询。动画路径按数据计算并复用,逐帧状态用局部变量和 ref 管理,直接更新限定 SVG 属性,避免每一帧都把进度放进 React state。页面隐藏时不推进动画,减少动画偏好开启时用静态展示。”
| 递进追问 | 触发依据 | 回答要点 |
|---|---|---|
| use client 就表示没有服务端 HTML 吗? | 组件边界 | 不能画等号,要区分客户端组件、预渲染和水合,结合实际渲染路径解释。 |
| 为什么不用 state,直接改 SVG 会冲突吗? | ref 动画 | 每帧 state 可能增加 React 工作;需明确动画拥有的属性,并在重启和数据变化时重置。 |
| useMemo 缓存什么? | 路径复用 | 周分组、路径与月份标签,依赖必须匹配输入,否则可能使用过期结果。 |
| 一小时缓存意味着所有人看到同一份数据吗? | 再验证 | 取决于请求键与部署,用户名变化会改变请求,不能把缓存概念无限外推。 |
| 接口失败时怎么办? | 错误提示 | 当前返回失败提示;重试和旧数据兜底若未实现只能作为候选。 |
| 页面隐藏时取消所有 rAF 了吗? | “不推进” | 当前检查 hidden 后跳过推进,但仍安排下一帧,不能说成显式取消全部循环。 |
| 偏好运行中变化、组件卸载呢? | 减少动画 | 监听媒体查询变化,重置后决定是否启动;清理帧和监听。 |
证据: B2。
Q16.MDX 怎么变成页面,SEO 信息从哪里来?
对应:F7,核心。触发依据: Contentlayer2 / MDX、App Router、静态参数、元数据、结构化数据、sitemap。考查目标: 内容与页面生成链路。
参考口播: “本地 MDX 经过内容层处理字段、派生信息和正文编译,路由页面按 slug 找文章并选择布局。静态参数声明待生成路径,元数据组织标题与摘要,结构化数据描述文章语义,sitemap 给出站内 URL。这条链路基于已有工程,需要说明哪些来自模板、哪些由我修改,目录和贡献动画则属于另一类客户端交互。”
| 递进追问 | 触发依据 | 回答要点 |
|---|---|---|
| Markdown 与 MDX 有什么区别? | MDX | MDX 可结合组件表达内容,因此需要组件映射、构建处理与可信内容边界。 |
| slug 怎样生成,多级与重复路径呢? | 文章路径 | 从文件路径到路由数组解释,核对唯一性、编码与冲突。 |
| 未知 slug 一定 404 吗? | 静态参数 | 要看查找、动态参数和 not-found 处理,静态参数函数本身不代表边界齐全。 |
| 新文章是不是要重新构建? | 本地内容 | 按真实构建部署流程回答,不套用在线 CMS 即时更新。 |
| 草稿在哪过滤? | 发布链路 | 检查列表、详情、静态参数、sitemap 与订阅输出,不只看首页。 |
| metadata、结构化数据、sitemap、分享卡片分别做什么? | SEO 能力 | 分别讲页面信息、语义、URL 发现和分享展示;配置存在不证明排名与访问增长。 |
| 能直接让用户上传任意 MDX 吗? | 内容组件 | 可信本地内容执行链不能直接用于不可信用户输入,需要隔离和限制。 |
证据: B3,模板归属见 Q2。
六、EinoTalk:Go 全栈与即时通信
Q17.从登录到发送一条私聊消息,前后端怎样配合?
对应:G1,核心。触发依据: JWT、管理员中间件、Axios、Zustand、聊天闭环。考查目标: 身份、接口、消息与视图协作。
参考口播: “登录后前端保存认证信息,HTTP 请求统一附加凭证并区分未认证和无权限响应。后端校验 JWT,管理员接口增加角色校验,具体资源再做业务授权。发消息后进入构造、落库尝试与投递,再由实时事件更新聊天状态。发送者也收服务端回显,所以前端不能无条件再追加一份。HTTP 鉴权、WebSocket 连接鉴权、每条消息的资源权限需要分开核对,不能看到 JWT 就认定全部没有越权。”
| 递进追问 | 触发依据 | 回答要点 |
|---|---|---|
| JWT 是加密的吗,payload 能直接信吗? | JWT | 常见签名 JWT 不等于加密;先校验签名、有效期等,再使用可信声明。 |
| JWT、管理员、资源权限各解决什么? | 多层授权 | 身份、特定角色操作、具体数据访问是不同层次,不能相互替代。 |
| 伪造发送者或发到非成员群呢? | 发消息 | 从可信连接身份确定发送者,验证群成员资格;需查 WS 入站实际实现。 |
| 401 和 403 怎么处理? | Axios | 未认证清状态并跳转,无权限独立提示,同时核对 HTTP 与业务 code。 |
| token 存 localStorage 有什么问题? | 凭证保存 | 同源脚本可访问,XSS 影响凭证;Cookie 替代还需讨论 CSRF 与部署条件。 |
| 刷新页面恢复 store 就算登录有效吗? | Zustand | 本地状态恢复不等于服务端再次验证,应区分凭证、内存状态与实际有效性。 |
| 切换会话时旧请求晚到? | 聊天状态 | 按会话归属保存或检查版本,不能直接写进当前窗口。 |
证据: E1、E2。
Q18.channel / Kafka 共用分发,抽象在哪里,可靠性如何?
对应:G2,核心。触发依据: 共用消息处理、持久化、回显、群发、缓存。考查目标: 复用边界与可靠性。
参考口播: “两种模式主要区别是消息来源,进入业务后都要构造、尝试落库、私聊或群发、更新缓存、判断 Agent 触发。我集中公共业务逻辑,把用户和群投递保留为接口能力,减少维护时两份规则分叉。channel 方便单机使用,Kafka 提供队列接入,但共用代码不自动产生相同可靠性。当前落库失败只记日志,仍可能继续推送,不能承诺端到端不丢或 exactly-once。”
| 递进追问 | 触发依据 | 回答要点 |
|---|---|---|
| 为什么抽接口,不写一个大结构体兼容? | 分发抽象 | 只暴露公共逻辑需要的能力,入口与连接管理保留自身职责。 |
| channel 满了怎么办? | channel 模式 | 核对缓冲和发送分支,阻塞、丢弃、拒绝各有代价,不能推定已有完善背压。 |
| Kafka 能保证整场聊天严格有序吗? | Kafka 模式 | 分区顺序与实际键只是部分条件,消费并发、重试、跨节点和展示还影响端到端顺序。 |
| 库失败但用户看到了,历史会怎样? | “继续推送” | 可能实时可见、历史缺失;改进要显式返回持久化失败并定义发送状态。 |
| 加重试会重复吗? | 上一问改进 | 稳定请求标识、数据库唯一约束、消费与展示去重需配合;随机消息 ID 不自动解决重复请求。 |
| 为什么私聊回显,群聊不另发发送者? | 回显与群发 | 私聊依赖服务端规范化回显;群成员列表若含发送者,再单发可能重复。回显不等于对方已读。 |
| Redis Pipeline 是原子事务吗? | 缓存更新 | 普通 Pipeline 批量发送命令,不保证组合原子;不能照搬注释里的“原子”说法。 |
| 如何验证双模式一致,可靠消息怎么演进? | 两种入口 | 同一组正常与失败用例分别跑;先定义接受、持久化、投递、已读,再考虑事务发件箱、重试、回执和补拉。 |
证据: E2、E3。可靠性演进方案不能作为已完成成果。
Q19.用户连在另一个实例,消息如何找到他?
对应:G3,核心。触发依据: 在线路由、节点总线、Lua 比较所有权。考查目标: 连接位置与重连竞态。
参考口播: “消费消息的实例不一定有收件人的连接,我用 Redis 保存用户到节点的映射。本地直接投递,远端通过节点总线转发。跨节点重连后新实例覆盖路由,旧实例注销时先比较仍归自己再原子删除,防止删掉新映射。当前所有权值是节点标识,解决跨节点的一类竞态,同节点不同连接还需更细标识。转发用 Pub/Sub,订阅断开时没有持久补偿保证。”
| 递进追问 | 触发依据 | 回答要点 |
|---|---|---|
| Kafka 消费者为什么不能直接发给用户? | 消费与连接分离 | 消息被哪个实例处理,和浏览器连在哪个实例,是不同维度。 |
| 为什么不广播所有节点? | 定向转发 | 广播简单但无效处理更多;定向依赖路由准确,需要说明取舍。 |
| 先 GET 再 DEL 为什么不行? | 原子删除 | 两命令之间新节点可能注册,Lua 把比较与删除放在一次执行中。 |
| A 的心跳会覆盖 B 新路由吗? | 重连 | 续约也比较所有者,只延长仍归自身的记录,不能无条件重写。 |
| 同节点重新连接、多端同时登录呢? | 节点级所有权 | 相同节点无法区分连接代数;单值映射也不表达多端,需要连接 ID、集合与逐连接清理设计。 |
| 节点崩溃后立刻恢复吗? | 在线映射 | 靠 TTL 清脏记录,期间仍可能转到死节点,不能说无感恢复。 |
| Redis 抖动超过 TTL,续约能重建吗? | 心跳 | 当前续约只处理存在且匹配的记录,不自动 SET 重建,恢复注册策略需另查。 |
| 发布成功就是用户收到了吗? | Pub/Sub | 不等于目标节点处理、连接写入或客户端接收,Pub/Sub 也无离线持久保障。 |
| 怎样验证不误删? | Lua 比较 | 让 B 先注册,再让 A 延迟注销,检查路由与收包;同节点做独立用例。 |
证据: E4。TTL 与心跳间隔是配置参数,不是实测故障恢复时间。
Q20.AI 助手怎样接入,工具查询怎么避免越权?
对应:G4,核心。触发依据: Eino、异步、流式聚合、超时、后端限定范围。考查目标: 编排、流式语义与授权边界。
参考口播: “私聊目标为助手或群消息命中触发条件时,分发流程异步调用 Agent,避免主路径等待模型。流式片段按时间与字符量阈值聚合后推送,减少细碎事件。工具身份与会话范围由后端绑定,模型只提供关键词等业务参数,不能自行换成别人身份。这仍依赖上游身份和群成员授权正确,提示词不能代替鉴权。调用有超时和失败处理,但已输出部分文本后出错的语义需要单独分析。”
| 递进追问 | 触发依据 | 回答要点 |
|---|---|---|
| 为什么异步,每条消息起 goroutine 会怎样? | 异步调用 | 避免阻塞分发,但超时不限制同时调用数;并发限制、限流和队列属于演进方案。 |
| 为什么时间、字符量双阈值? | 流式聚合 | 文本少时保证及时反馈,密集时限制积压;阈值不是实测首 token 延迟。 |
| 中文为什么不用字节数? | 字符量 | UTF-8 字节数不等于字符量,当前用 rune;它也不等同所有组合字符的视觉数量。 |
| 断线重发 delta 会重复拼接吗? | 流式协议 | 需流标识、分片序号或全量快照与终态规则;完整重放能力需要另查。 |
| 模型要求查询用户 B,工具会照做吗? | 后端范围 | 身份来自后端 scope,不由模型参数覆盖;同时限制关键词、limit 与查询输入。 |
| 绑定群 ID 就够了吗? | 会话范围 | 上游仍要验证发起人群成员资格;scope 不能替不可信身份补鉴权。 |
| 工具失败时怎样降级? | Agent 编排 | 当前工具流初始化失败可尝试普通流,再失败尝试一次生成;不是所有流中途错误都完整重试。 |
| 部分文本出来后超时会怎样? | 调用超时 | 当前消费可返回已有文本,非空结果不一定进入空回复兜底,需明确完成与部分结果语义。 |
| Mock 成功能证明真实模型可用吗? | 模型接入 | 只能验证部分契约与编排;真实凭证、工具兼容、限额、质量和成本另测。 |
| 历史越长越好吗? | 上下文 | 受 token、成本、延迟和信息质量限制,讲清窗口、摘要和检索的实际边界。 |
证据: E5。主线是“可信身份 → 授权范围 → 工具查询”,不是只讲提示词。
七、SimulSpeak:Go 后端与媒体编排
Q21.为什么拆业务服务与 PBX,音频和字幕各走哪里?
对应:G5、G7,核心。触发依据: 业务媒体分层、SDP / ICE、WebRTC、字幕编排。考查目标: 职责和跨层排障。
参考口播: “浏览器用 WebSocket 交换业务控制、媒体信令和字幕,用 WebRTC 与媒体节点建立音频通道。业务服务负责会话、节点选择、信令转发和字幕编排,PBX 持有媒体连接并处理音频管线。它便于分别调试部署,也增加跨组件状态和排障成本。媒体实际直连还是中继取决于选中的候选对,不能只画一条固定路径。”
| 递进追问 | 触发依据 | 回答要点 |
|---|---|---|
| SDP 与 ICE 分别做什么? | 信令 | SDP 描述媒体协商信息,ICE 发现选择连通路径,信令通道传递这些信息。 |
| WebSocket 连好了,为什么没声音? | 两条连接 | 查采集轨道、媒体协商、候选、收发统计、解码和播放,业务通道不证明媒体成功。 |
| STUN、TURN 各解决什么? | 候选路径 | 一个帮助发现网络映射,一个提供中继候选;是否实际使用靠配置与统计确认。 |
| 能不能用 WebSocket 传 PCM? | 技术选择 | 可作另一方案,但需自行处理分帧、缓冲、时序与背压,不能笼统说一定更慢。 |
| PBX 下线能无感切另一个吗? | 服务拆分 | 新会话选择不自动迁移存量 RTC 状态,要重新协商或明确失败恢复。 |
| 字幕迟了,怎样区分哪层慢? | 实时编排 | 关联同会话、句子的采集、识别、翻译、纠错、推送、展示时间,先定义指标边界。 |
| 为什么 SQLite 够用,何时升级? | 技术栈 | 结合单机需求分析,并发写、共享存储与多实例部署是升级条件,不冒充已完成迁移。 |
证据: S1、S4;字幕归并见 Q11。
Q22.为什么快翻后再纠错,配音顺序怎样管理?
对应:G6,核心。触发依据: 快翻草稿、上下文纠错、异常降级、配音派发顺序。考查目标: 多阶段状态与有序输出。
参考口播: “快翻先提供可读译文,模型结合已获得的上下文给修订结果,前端区分草稿与修订并保护优先级。配音按句分配序号,结果准备后登记任务,再从下一个待派发序号推进。它管理任务派发,不等于已经证明合成、回传和播放全程严格有序。模型失败时,保留已显示草稿也不自动意味着句子终结或配音完成降级,要沿失败分支逐条检查。”
| 递进追问 | 触发依据 | 回答要点 |
|---|---|---|
| 只用模型不是更简单吗? | 两阶段 | 状态更简单,但首译等待、成本与反馈质量要权衡,没有实测就不报差值。 |
| 纠错一定更准吗? | 模型修订 | 可能改善也可能误改,用固定语料、人工评价和术语误改统计验证。 |
| 上下文会包含未来内容吗? | 已获得上下文 | 解释构造时点与快照,实时系统不能提前知道未来句子。 |
| 多回调并发怎么避免重复调用或重复播报? | 多阶段 | 看锁保护、一次性启动、结果选择与快照,避免持锁慢请求。 |
| 后一句先完成,前一句卡住怎么办? | 按序派发 | 当前从下一序号取任务,可能队首等待;失败需完成或显式跳过才能推进。 |
| 有跳过函数就说明所有异常都能降级吗? | 上一问 | 不成立,要查每个失败入口是否终结状态并通知协调器。 |
| LLM 报错返回后,一定会用快翻配音吗? | 异常降级 | 当前纠错错误分支记录后返回,不能由此推出备用文本选择、终态或完整配音兜底。 |
| 为什么派发顺序不等于播放顺序? | 顺序边界 | 合成耗时、音频回传、缓冲和播放器调度仍会影响最终可听顺序。 |
| 首译、纠错、配音延迟怎么测? | 实时性 | 同一句分别定义首次可用译文、修订完成、首次可听音频,不混为一个延迟数字。 |
证据: S5。简历中的“异常降级”需重点核实:能讲清具体分支后再保留相应承诺范围。
八、跨项目深入追问
Q23.用户偶尔收不到消息,或字幕不更新,你怎么排查?
触发依据: 两个项目都有实时异步链路。考查目标: 分层定位。以下是假设排障,不是已发生的事故记录。
回答思路: 先限定用户、时间、会话、事件和复现条件,再找最后一个成功点。EinoTalk 沿发送、接收、业务与落库、路由、跨节点、本地连接、前端处理、会话展示排查。SimulSpeak 检查媒体入站、识别、翻译、推送与 store 接受条件。区分“事件没到”和“事件到了但被拒绝或显示在别处”。
| 递进追问 | 触发依据 | 回答要点 |
|---|---|---|
| 日志需要哪些关联字段? | 沿链路 | 会话、句子 / 消息、节点、连接和阶段标识,控制日志量及正文敏感信息。 |
| 库里有消息,说明后端没问题吗? | 落库成功 | 后续路由、推送、协议与状态仍可能失败,不能据此排除。 |
| WS 收到了,但字幕没动呢? | 事件已到 | 查类型、ID、会话归属、终态、引擎规则,再查组件订阅。 |
| 单机好、双实例坏先看什么? | 跨节点 | 消费在哪、连接在哪、路由、节点订阅和本地连接,串节点证据。 |
| 只在反复开始停止时发生呢? | 会话清理 | 查旧异步、停止标记、遗留订阅与新旧句柄,控制交错来复现。 |
| 怎么证明修好,不是偶然好了? | 验证 | 保留触发序列,确认改前可失败、改后符合预期,并覆盖相邻边界。 |
Q24.再给你一周,优先改什么,如何测试?
触发依据: 独立开发、异步、异常降级与跨实例。考查目标: 正确性优先级和最小验证闭环。
回答思路: 先选影响正确性的限制。EinoTalk 可先明确“已发送”和持久化失败的关系,SimulSpeak 可先补失败句子的终结 / 跳过规则与会话代数,Blog 先修真实导航边界或已测出的瓶颈。给最小交付和验证条件,不用继续增加技术栈代替优先级判断。
| 递进追问 | 触发依据 | 回答要点 |
|---|---|---|
| 为什么优先这一项? | 排序 | 说明影响范围、触发条件、成本与可验证性,没有发生频率数据就不假设频率。 |
| 单元、集成、端到端分别测什么? | 测试 | 纯归并用单元;Redis、数据库和节点契约用集成;浏览器采集及完整连接用端到端。 |
| 怎样测竞态和乱序? | 异步限制 | 控制事件与 promise 完成顺序,避免只靠随机等待,同时测允许与拒绝的更新。 |
| AI 测试贵怎么办? | 模型接入 | Mock 验证确定性编排,小规模固定语料验证真实契约与质量,结论分别记录。 |
| 怎么看资源泄漏? | 生命周期 | 重复创建关闭后看稳定趋势与活动资源,结合 profile 找保留来源,不用一次快照下结论。 |
| 一周做不完怎么办? | 最小交付 | 先明确错误语义、最小修复和关键回归,更大可靠性方案分阶段。 |
九、源码与答案证据索引
路径相对本文,符号用于复习定位。实现证据不代表测试已运行成功或个人贡献已经确认。
| ID | 问题 | 源码 / 答案入口 | 重点核对 |
|---|---|---|---|
| S1 | Q10、Q21 | 会话 Hook、RTC、WS | start / stop、closeClients、停止检查、媒体轨道与等待定时器 |
| S2 | Q11、Q12 | 字幕归并、字幕测试 | applyTranslationResult、applyTmtFinal、applyLlmTmtFinal、trimSubtitleState,各分支终态语义 |
| S3 | Q13 | PiP 管理、PiP 组件 | DocumentPiPManager、独立 root、样式、pagehide 与清理 |
| S4 | Q21 | PBX 桥接、RTC 管理 | 信令、媒体职责与候选路径 |
| S5 | Q22 | 同传编排、编排测试 | runLLMRevision 错误分支、reserveAutoTTS、markAutoTTSSkipped、runTTSCoordinator |
| B1 | Q14 | 目录组件 | update、onScroll、顶部偏移、帧取消与清理 |
| B2 | Q15 | 服务端数据、动画组件、路径计算 | revalidate、ref、hidden、媒体查询与 effect |
| B3 | Q16 | 内容配置、文章路由、sitemap | 字段、slug、静态参数、metadata、草稿与未知路径 |
| E1 | Q17 | 鉴权、Axios、认证状态、聊天状态 | JWT、管理员、401 / 403、凭证与状态,另核 WS 授权 |
| E2 | Q17、Q18 | 公共分发、channel 入口、Kafka 入口 | messageDispatcher、persistMessage、processTextMessage、回显与 Agent |
| E3 | Q18 | Redis 服务 | AppendToList 的 Pipeline,不把注释当事务保证 |
| E4 | Q19 | 集群桥接、在线注册、节点总线 | Register / Unregister / Renew、节点所有权、TTL、Pub/Sub |
| E5 | Q20 | Agent 编排、工具、模型客户端 | ToolScope、buildBuiltinTools、streamWithFallback、pumpStream、部分流与取消 |
更多口播:SimulSpeak 原有面经、EinoTalk 原有面经。旧材料若与当前承诺范围不同,应回到源码核对。
十、复习顺序与准备检查
- 先练 Q1—Q4:方向、个人边界、困难案例、指标口径。
- 前端方向练 Q5—Q16,优先权限、媒体清理、字幕归并、滚动目录;实习补真实案例。
- Go 全栈练 Q5—Q10、Q17—Q22,再把 Q11—Q12 接到实时链路。
- 最后练 Q23—Q24,要求能给定位顺序、当前限制与验证方法。
| 检查项 | 完成标准 | 当前状态 |
|---|---|---|
| 主问口述 | 60—90 秒,先直接回应,再讲机制、例子和边界 | 未准备 |
| 递进追问 | 能解释为什么、替代方案与失败条件 | 未准备 |
| 实习案例 | Q5—Q9 每组至少一个真实案例,有本人动作与结果 | 待补材料 |
| 源码定位 | 从用户操作找到关键状态与异常分支 | 未准备 |
| 演示 | 至少一条正常链路、一条失败或竞态链路 | 待运行 |
| 指标 | 有环境、样本、口径与对照,没有就不报比例 | 待实测 |
| 承诺边界 | 按钮隐藏不当接口授权,Pub/Sub 不当持久队列,派发有序不当播放有序 | 需重点复习 |