先说结论:基础没有消失,资深标准正在变化
Vibe Coding 降低了代码生成和 API 查询成本,但没有降低软件失败的代价。代码来得越快,审查边界、验证行为、定位故障和对结果负责越重要。
面试也不会整齐地从“八股”切换到 AI 协作。不同公司、岗位和面试官差异很大,标准化基础题仍是成本较低的筛选手段。对资深工程师,更常见的有效追问是:
- 为什么这个机制会产生当前现象?
- 结论在哪些条件下失效?
- 出现性能、并发或安全问题时怎样定位?
- 为什么选择这个方案,替代方案有什么代价?
- 这是生产经验、个人实验,还是根据原理作出的推断?
- AI 生成的代码看似能跑,怎样证明它可以进入系统?
因此复习策略不是“继续背完所有题”或“以后全靠 AI”,而是:
基础知识达到稳定过线水平,主要精力投入项目深挖、工程取舍、代码审查和验证证据。
对已有 11 年 Web/full-stack 经验、正在转向机器人系统软件和工业可视化的工程师,Vue、TypeScript 与 Node.js 是能力底座和差异化资产,不应成为占满全部学习时间的舒适区。
四层知识地图
| 能力层 | 掌握标准 | Vue / TypeScript / Node.js 示例 | 复习策略 |
|---|---|---|---|
| 必须闭卷掌握 | 能用自己的语言解释机制,并写出最小代码 | 响应式与更新调度、控制流收窄与类型擦除、事件循环与错误传播 | 周期性回忆,五分钟讲清,接受两层追问 |
| 资深工程追问 | 能联系故障、性能、安全、可靠性和架构边界 | 更新风暴、异步竞态、运行时数据污染、事件循环阻塞、背压、优雅停机 | 用真实项目或可复现实验回答,说明取舍和指标 |
| 可以借助文档或 AI | 知道从哪里查、如何做最小实验确认 | 冷门 API 参数、少用配置、精确守卫顺序、版本相关实现细节 | 不长期背诵,面试前按职位描述定向恢复 |
| AI 代码审查能力 | 能指出风险、修改理由和验证证据 | 断言代替校验、资源泄漏、缺少超时、错误吞没、无界并发、错误权限假设 | 保留 AI 初稿、审查记录、修复和测试结果 |
哪些内容不值得长期投入
- 仅对某个旧版本成立、又能快速查询的执行顺序。
- 为展示技巧而构造的 TypeScript 递归类型谜题。
- Vue 2 的冷门 API 和已经退出主流项目的配置细节。
- 没有输入规模、环境和测量数据的性能结论。
- 脱离业务不变量的“最佳实践”列表。
这不表示这些内容永远不会被问到,而是它们不应挤占建立新职业证据的时间。遇到目标公司明确使用旧技术栈时,再进行定向准备。
三条专题主线
Vue:从 API 使用推进到更新模型
闭卷掌握响应式依赖、更新调度、computed/watch、key 和组件状态所有权。资深追问集中在高频更新、异步竞态、组件边界、大列表和 Web3D 对象如何避免无意义深代理。
目标不是背 Vue 源码函数名,而是能把一次状态写入追踪到 effect、scheduler、组件渲染和 DOM patch,并知道如何用 Vue Devtools 与浏览器 Performance 验证。
TypeScript:从“有类型”推进到可信边界
闭卷掌握结构化类型、unknown、判别联合、泛型关系、类型收窄和类型擦除。资深追问集中在公共 API 类型、方差、严格配置、声明文件、运行时输入和类型测试。
看到 AI 生成的 req.body as Command、response.json() as User 时,应立即追问:数据由谁验证、验证了哪些业务约束、失败如何处理、类型断言的证据是什么。
Node.js:从“异步非阻塞”推进到服务可靠性
闭卷掌握 V8/libuv/OS 的职责、事件循环稳定关系、I/O 与 CPU 任务边界、Stream 背压和错误传播。资深追问集中在尾延迟、事件循环阻塞、内存、超时取消、幂等、优雅停机和可观测性。
回答“Node.js 是单线程”时必须说明指的是 JavaScript 执行模型,而不是整个运行时只有一个线程。回答“流省内存”时必须说明缓冲、背压、并发和测量条件。
仍需单独准备的通用基础
这三条主线不能代替 JavaScript 语言、浏览器、网络、数据结构、数据库和系统设计。至少要能解释:
- 作用域、闭包、原型、Promise、微任务和错误传播。
- 浏览器渲染、布局绘制、事件、缓存、同源策略和常见安全边界。
- HTTP 方法语义、状态码、缓存、Cookie、认证与授权。
- 常见数据结构复杂度、并发限制、数据库索引和事务边界。
本轮文章不重复扩写这些主题,避免把索引变成无法复习的百科全书。
资深回答的六步结构
面对原理题或场景题,可以按六步组织,而不是一上来倾倒术语:
- 结论:先直接回答问题,限定讨论条件。
- 机制:说明关键数据流、控制流或类型关系。
- 场景:把机制放回输入规模、并发、生命周期和业务目标。
- 风险:指出错误、安全、性能、一致性和维护风险。
- 替代方案:比较至少一个可行替代,并说明采用成本。
- 验证与证据:给指标、profile、日志、测试、故障复盘或最小实验;没有生产经历时明确说是实验或推理。
“我会使用虚拟列表”只是方案名称;“先证明 DOM 数量和 layout/paint 是主要瓶颈,再决定虚拟列表窗口、滚动定位和可访问性策略”才体现资深判断。
跨栈场景:机器人与工业设备状态平台
问题:5,000 台设备高频更新,页面越来越卡,如何定位?
1. 先定义现象和目标
确认是消息延迟、交互卡顿、图表掉帧还是内存上涨;记录设备数、每台更新频率、单条消息大小、允许的 UI 新鲜度和报警延迟。没有这些条件,“优化 Vue”没有明确目标。
2. 把链路拆开测量
1 | 设备 / 模拟器 |
- 网关观察吞吐量、事件循环延迟、CPU、内存、队列深度和下游耗时。
- 浏览器观察消息处理耗时、Long Task、Vue 组件更新、DOM 数量、layout/paint 和帧率。
- 给消息加时间戳与 correlation ID,区分服务端积压、网络延迟和前端处理延迟。
3. 分离采集频率与展示频率
设备数据可以高频到达,但人眼和 DOM 不需要逐条刷新。把数据写入有界缓冲,按 100 至 250 ms 合并为 UI 快照。位姿展示可按设备保留最新值;报警、审计和控制结果不能用同样策略静默覆盖。
4. 守住类型和业务边界
WebSocket 数据先视为 unknown,验证消息类型、设备标识、时间戳、数值范围和版本,再转换为判别联合。TypeScript 接口不能代替这些检查。
5. 根据证据选择优化
- Vue 更新过多:批量发布快照、稳定 props、减少无意义深响应。
- DOM 数量过多:虚拟滚动、分组展开或只展示视口数据。
- Canvas/WebGL 绘制过重:控制渲染频率、复用对象、减少材质和 draw call。
- 主线程解析或计算过重:评估 Worker,并计入数据复制与调度成本。
- Node.js 消费跟不上:使用背压、有界并发、批处理、过载拒绝或分区扩展。
6. 给出验收指标
例如:在 5,000 台设备、每台每秒 10 条模拟遥测下,网关队列不持续增长;报警端到端 p99 小于约定阈值;页面交互无超过约定时长的 Long Task;稳态内存不随运行时间持续增长。具体阈值必须由业务和测试环境确定,不能把示例数字写成行业标准。
AI 生成代码审查练习
下面是一段表面上能工作的 AI 生成代码:
1 | app.post('/devices/:id/command', async (req, res) => { |
对于普通信息系统,这段代码已经缺少关键边界;对于机器人命令接口,直接上线更不可接受。
至少应发现的问题
as RobotCommand只是类型断言,没有验证请求体结构、数值范围和命令版本。- 没有认证,也没有验证用户是否有权操作目标设备和当前空间。
- 没有命令 allowlist、安全门控、设备状态检查和速度/工作空间限制。
- 没有超时、取消和下游无响应时的行为定义。
- 不清楚命令是否幂等;客户端重试可能造成第二次物理动作。
- 没有 command ID、审计记录、操作者、批准信息和结果状态。
- async 失败如何进入 Express 错误边界不明确,可能产生未处理 rejection 或错误响应。
- 没有同一设备的并发、顺序、状态冲突和急停优先级策略。
- HTTP 返回成功是否表示“已接收”“已规划”“已下发”还是“已执行完成”不明确。
- 没有指标、trace 和安全事件日志,故障后无法还原链路。
修正方向
安全的接口不是增加几个 try/catch。它至少需要如下分层:
1 | HTTP 边界 |
LLM 可以生成 handler、schema 初稿和测试样例,但它不能从不存在的需求中推导出可信权限、设备安全状态和物理约束。工程师必须补齐系统保证,并通过测试、仿真、故障注入和现场安全流程验证。
复习时应保留 AI 初稿、审查清单、修正后的代码与测试结果。这个过程比只展示“我用 AI 很快写完接口”更能证明新时代的工程能力。
面向当前职业转型的复习投入
以下比例针对“资深 Web/full-stack 工程师转向机器人系统软件、工业可视化和机器视觉”的当前阶段,不是所有读者的通用公式。
非求职冲刺期
| 投入 | 方向 | 交付物 |
|---|---|---|
| 45% | 机器人数字孪生、调试台、视觉引导或设备状态项目 | 可运行 Demo、架构图、事件日志、失败案例和演示视频 |
| 25% | C++、Python、Linux、坐标系、运动学和工业通信 | SDK 调用、坐标变换实验、协议模拟器、测试记录 |
| 15% | JavaScript、Vue、TypeScript、Node.js 机制恢复 | 机制卡、最小示例、两层追问答案 |
| 10% | AI 辅助编码、代码审查、测试和验证 | AI 初稿、拒绝理由、修复 diff、自动化测试 |
| 5% | 项目复盘、简历叙事和口头表达 | STAR/架构复盘、三分钟与二十分钟两个版本 |
这个配置的理由是:Web 基础已经是优势,继续投入会提高熟练度,却不能单独证明机器人系统能力。当前更稀缺的是把 Web3D、实时数据、设备状态、视觉和安全约束整合成可检查的作品。
投递前六至八周
把通用编程基础、编码练习和模拟面试提高到总时间的 30% 至 35%,依据目标职位描述补齐算法、网络、数据库和目标语言;同时继续维护项目 Demo 和证据,不要在面试前把作品开发完全停掉。
目标职位不同,权重也应调整:
- 工业数字孪生 / 机器人可视化:Vue/Three.js、实时数据、性能和坐标系权重更高。
- 机器人应用软件 / 系统集成:Node/Python/C++、设备协议、状态机、异常恢复权重更高。
- 机器视觉应用:OpenCV、标定、PnP、手眼标定、部署与光学条件权重更高。
- 纯 VLA、强化学习或控制算法岗位:当前仍是高跨度方向,不能用 Web 八股或 Agent 使用经验替代数学、训练和机器人实验能力。
分级自测题
A. 基础事实:能否直接回答
- Vue 的
computed与watch分别解决什么问题? key为什么首先是身份问题?- TypeScript 的
unknown和any有什么差别? - 类型断言为什么不能校验 JSON?
- Node.js 所谓“单线程”的边界是什么?
writable.write()返回false表示什么?
B. 机制解释:能否继续追问两层
- 一次 Vue 响应式写入怎样到达 DOM 更新?
- 为什么从
reactive直接解构可能丢失响应性? - 判别联合怎样与
never形成穷尽性检查? - Promise 微任务、
process.nextTick()和事件循环是什么关系? pipeline()比连续pipe()多承担了什么职责?
C. 工程决策:能否比较方案
- 高频设备数据应该每条更新 UI、定时批量发布还是只保留最新值?不同消息是否应使用相同策略?
- 什么情况下选择 Worker Threads,什么情况下选择独立进程或服务?
- 运行时校验使用手写 guard 还是 schema 库,怎样决定?
- Vue 页面缓存解决了什么,数据缓存又由谁负责?
D. 故障诊断:能否提供证据
- 页面运行两小时后内存持续增长,先看哪些指标和 profile?
- Node.js 平均延迟正常但 p99 很高,怎样分层定位?
- 路由参数切换后偶尔显示上一台设备,原因和修复是什么?
- AI 生成的重试逻辑导致设备动作重复,系统缺了哪些保证?
E. 项目证据:能否诚实说明边界
- 哪个项目证明你处理过实时数据、背压或高频渲染?
- 哪个故障是你亲自定位的,最初假设与最终原因是否一致?
- 哪些结论只有个人实验,还没有生产验证?
- 如果重新设计当前项目,会保留和改变什么?
可执行复习清单
机制卡
- [ ] 每张卡只覆盖一个机制,包含结论、运行过程、失败边界和最小实验。
- [ ] 能闭卷讲五分钟,并回答至少两层“为什么”和“什么时候失效”。
- [ ] 面试价值:通过基础筛选,避免资深候选人在核心原理上失速。
项目深挖包
- [ ] 准备架构图、关键接口、状态流、技术取舍、性能数据、测试和一次失败复盘。
- [ ] 能围绕同一项目接受二十分钟追问,而不是只复述产品功能。
- [ ] 面试价值:证明系统集成、正确性、可靠性、可观测性和交付能力。
AI 代码审查记录
- [ ] 保留原始提示和生成代码,不把修正后的结果伪装成人工一次写成。
- [ ] 标出接受、拒绝和需要实验确认的部分,并写明证据。
- [ ] 用测试、静态检查、基准或故障注入验证修正结果。
- [ ] 面试价值:证明会使用 AI,同时保留工程判断和结果责任。
职业转型证据
- [ ] 至少完成一个机器人调试台、数字孪生或视觉引导工作流的可运行作品。
- [ ] README 说明数据流、状态、坐标系、安全边界、故障处理和测试策略。
- [ ] 明确区分已有 Web 工程证据、正在形成的机器人软件能力和尚未证明的算法能力。
- [ ] 面试价值:把“11 年 Web 工程师想转机器人”变成“能够交付面向机器人的软件系统,并持续补强机器人深度”。