跳到正文

简历逐条追问 ​

依据:前端实习简历、Go 全栈实习简历。整理日期:2026-10-31。

本文是围绕当前简历的学习口播与追问材料,供掌握后选用。覆盖两版简历全部 17 条经历要点,相同机制合并讲解。项目回答结合已有笔记和关键源码静态阅读;实习经历仅依据简历,没有公司源码,相关答案是需要用真实案例补全的框架。本次没有运行服务或性能测试,文中的验证方法不代表已经执行。

每组按“简历触发词 → 主问 → 回答思路 → 递进追问 → 证据”展开。追问可沿前序回答继续深入,也可作为备选分支,不需要一次把所有细节塞进主回答。

一、简历与问题对应表 ​

编号方向 / 经历要点简历触发词主问答案入口
I1实习:权限改造页面级、按钮级、动态路由、权限指令、三端Q5、Q6本文实习部分;真实权限矩阵待补
I2实习:迭代与性能ECharts、虚拟列表、分页、懒加载、CDN、异步导入Q7、Q8本文性能与大屏部分;实测记录待补
I3实习:工程化请求拦截器、通用组件、Apifox、提交前检查Q9本文工程化部分;配置与复用案例待补
F1SimulSpeak:媒体与会话Hook、连接启停、资源释放、异步停止Q10前端实现与难点
F2SimulSpeak:字幕状态句子 ID、终态、引擎优先级、迟到覆盖Q11前端实现与难点
F3SimulSpeak:高频事件按句节流、列表与索引裁剪Q12前端实现与难点
F4SimulSpeak:画中画独立窗口、状态复用、样式与关闭清理Q13前端实现与难点
F5Blog:阅读交互二三级标题、活动高亮、passive、rAFQ14前端实现与难点
F6Blog:贡献图服务端获取、SVG、缓存再验证、refQ15前端实现与难点
F7Blog:内容页面MDX、静态参数、元数据、sitemapQ16前端实现与难点
G1EinoTalk:业务闭环JWT、管理员中间件、Axios、ZustandQ17前端笔记
G2EinoTalk:分发抽象channel / Kafka、持久化、回显、缓存Q18Go 实现与难点
G3EinoTalk:跨实例路由Redis 在线位置、节点总线、Lua 所有权比较Q19Go 实现与难点
G4EinoTalk:AI 助手Eino、异步、流式聚合、超时、工具范围Q20Go 实现与难点
G5SimulSpeak:业务媒体分层api-server、PBX、SDP / ICE、媒体管线Q21Go 实现与难点
G6SimulSpeak:分阶段翻译快翻、上下文纠错、异常降级、配音派发顺序Q22Go 实现与难点
G7SimulSpeak:实时闭环WebSocket → Zustand、会话 HookQ10—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 有什么区别?MDXMDX 可结合组件表达内容,因此需要组件映射、构建处理与可信内容边界。
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问题源码 / 答案入口重点核对
S1Q10、Q21会话 Hook、RTC、WSstart / stop、closeClients、停止检查、媒体轨道与等待定时器
S2Q11、Q12字幕归并、字幕测试applyTranslationResult、applyTmtFinal、applyLlmTmtFinal、trimSubtitleState,各分支终态语义
S3Q13PiP 管理、PiP 组件DocumentPiPManager、独立 root、样式、pagehide 与清理
S4Q21PBX 桥接、RTC 管理信令、媒体职责与候选路径
S5Q22同传编排、编排测试runLLMRevision 错误分支、reserveAutoTTS、markAutoTTSSkipped、runTTSCoordinator
B1Q14目录组件update、onScroll、顶部偏移、帧取消与清理
B2Q15服务端数据、动画组件、路径计算revalidate、ref、hidden、媒体查询与 effect
B3Q16内容配置、文章路由、sitemap字段、slug、静态参数、metadata、草稿与未知路径
E1Q17鉴权、Axios、认证状态、聊天状态JWT、管理员、401 / 403、凭证与状态,另核 WS 授权
E2Q17、Q18公共分发、channel 入口、Kafka 入口messageDispatcher、persistMessage、processTextMessage、回显与 Agent
E3Q18Redis 服务AppendToList 的 Pipeline,不把注释当事务保证
E4Q19集群桥接、在线注册、节点总线Register / Unregister / Renew、节点所有权、TTL、Pub/Sub
E5Q20Agent 编排、工具、模型客户端ToolScope、buildBuiltinTools、streamWithFallback、pumpStream、部分流与取消

更多口播:SimulSpeak 原有面经、EinoTalk 原有面经。旧材料若与当前承诺范围不同,应回到源码核对。

十、复习顺序与准备检查 ​

  1. 先练 Q1—Q4:方向、个人边界、困难案例、指标口径。
  2. 前端方向练 Q5—Q16,优先权限、媒体清理、字幕归并、滚动目录;实习补真实案例。
  3. Go 全栈练 Q5—Q10、Q17—Q22,再把 Q11—Q12 接到实时链路。
  4. 最后练 Q23—Q24,要求能给定位顺序、当前限制与验证方法。
检查项完成标准当前状态
主问口述60—90 秒,先直接回应,再讲机制、例子和边界未准备
递进追问能解释为什么、替代方案与失败条件未准备
实习案例Q5—Q9 每组至少一个真实案例,有本人动作与结果待补材料
源码定位从用户操作找到关键状态与异常分支未准备
演示至少一条正常链路、一条失败或竞态链路待运行
指标有环境、样本、口径与对照,没有就不报比例待实测
承诺边界按钮隐藏不当接口授权,Pub/Sub 不当持久队列,派发有序不当播放有序需重点复习

面试后把未答清的问题记入模拟面试记录和待解决问题,保留当时回答及后续修正。

理解机制,讲清取舍,用复盘检验掌握。