刷最近的面经你会发现一个明显变化:越来越多公司不再让你默写算法,而是直接丢给你一个跑不起来的前端项目,然后说------「你可以打开你的 AI 工具,把这个 bug 修好。」
这不是传言。ShowMeBug 这类面试平台已经在帮助中心挂出了官方的 AI Coding 面试指引,教面试官怎么围绕「候选人使用 AI」来设计考点;牛客上《7 道 AI 编程高频面试题》这类涵盖 Cursor、Claude Code、Skills 的帖子也在疯传。背后的信号很明确:面试考的不是你会不会写代码,而是你会不会驾驭 AI 写代码。
但很多人栽就栽在,以为「能用 AI」等于「能让 AI 随便写」。真正拉开差距的,是下面这 3 个瞬间------面试官打断你,恰恰是因为你在这 3 个地方暴露了短板。
打断瞬间 1:你上来就让 AI 重写整个文件
场景是这样的:项目里一个列表页,切换筛选条件后数据偶尔显示成上一次的结果。你打开 AI,第一句话就是「这个页面有 bug,帮我重写一下这个组件」。
面试官这时候大概率会打断你:「先别急着让 AI 改,你自己能先定位到是哪一行出的问题吗?」
他打断的理由,不是嫌你慢,而是这个动作暴露了你没有「先定位、后修复」的工程习惯。
这个 bug 的本质其实是竞态:两次请求并发,后发先至,旧响应覆盖了新响应。一个有经验的候选人会先做三件事------
- 复现:手动快速切换筛选,确认能稳定复现;
- 缩小范围:打开 Network 面板,对比两次请求的发起顺序和响应回来顺序------顺序对不上,立刻锁定是竞态而不是接口问题;
- 最小可疑代码 :定位到发起请求的那段
useEffect。
到这一步,你才把「改哪一小段」交给 AI,而不是把整个文件丢过去。
jsx
// 有竞态隐患的写法:后发先至时,旧响应会覆盖新响应
useEffect(() => {
fetch(`/api/list?filter=${filter}`)
.then(res => res.json())
.then(data => setList(data));
}, [filter]);
正确的修法,是让 AI 帮你加上请求取消:
jsx
useEffect(() => {
const controller = new AbortController();
fetch(`/api/list?filter=${filter}`, { signal: controller.signal })
.then(res => res.json())
.then(data => setList(data))
.catch(err => {
if (err.name !== 'AbortError') console.error(err);
});
return () => controller.abort();
}, [filter]);
顺带一提:如果这时候你说「加个防抖不就行了」,多半会被追问。防抖只是降低了触发频率,并没有消灭竞态------只要接口够慢,后发先至照样发生。能主动说出「防抖不够,得取消请求」,这个瞬间你就已经赢了大多数人。
这个瞬间考察的能力点:问题定位能力。 面试官想看到的是,AI 之前你已经把问题收敛到了一个明确的范围。能不能让 AI 改,前提是你自己知道该改哪。
打断瞬间 2:AI 给了修复,你直接点了采纳
第二种被打断的场景:AI 三秒生成了一段修复代码,你看了一眼「好像没问题」,直接采纳,准备进入下一步。
面试官打断你:「先别采纳。你能说一下它为什么这样改吗?有没有它没考虑到的情况?」
这一句话,考的是你对 AI 输出的批判性验证能力。
很多人没意识到,AI 修 bug 最常见的问题不是「修不好」,而是「修好了表面,埋了新坑」。拿上面的竞态来说,AI 很可能给你一个「能跑」但更隐蔽的方案,比如自增 requestId 比对:
jsx
// 看起来修好了,实际上把竞态藏得更深
let requestId = 0;
useEffect(() => {
const id = ++requestId;
fetch(`/api/list?filter=${filter}`)
.then(res => res.json())
.then(data => {
if (id === requestId) setList(data);
});
}, [filter]);
这段代码在当前组件里确实能跑。但它只做到「丢弃过期响应」,请求本身依然会跑完------带宽照耗、服务端压力照旧;而且 requestId 放在模块作用域里,组件一旦在同页面挂载两份就互相污染。相比之下,AbortController 是真正把请求取消掉。两种方案的差别,就是「治标」和「治本」的差别------而这正是面试官想听你讲出来的。
所以一个成熟的候选人,在采纳前至少会问自己三个问题:
- 它改的原理是什么?(AbortController 中断的是哪个请求,为什么旧请求要被丢弃)
- 边界情况覆盖了吗?(组件卸载时会不会还在请求中?快速连续切换 5 次会怎样?)
- 有没有引入副作用?(取消请求会不会影响其他地方共享的逻辑?错误处理把 AbortError 过滤掉了吗?)
如果时间允许,最好的动作是当场补一个最小验证:写一个会触发竞态的测试用例,跑一遍,证明修复前后行为差异。
这个瞬间考察的能力点:验证与批判能力。 面试官不是要你会背八股,而是要确认你不会把 AI 的输出当成黑盒照单全收。能不能 review AI 的代码,是「会用 AI」和「被 AI 用」的分水岭。
打断瞬间 3:你描述需求给 AI 时,说得含糊不清
第三个瞬间最容易被忽略,却往往是决定性的。你给 AI 的 prompt 是这样的:「这里不对,帮我改改。」AI 来回问你几轮,你还是说不清到底要什么,最后改出来的东西驴唇不对马嘴。
面试官打断你:「你刚才想让 AI 做什么?能不能用一句话说清楚?」
这个瞬间,考的根本不是技术,而是你把问题拆解、表达清楚的能力------这恰恰是用好 AI 的核心。
AI 的能力上限,很大程度取决于你喂给它的上下文质量。同样是修一个竞态 bug,两种 prompt 的差距是巨大的:
差的 prompt:
这个列表有 bug,帮我修一下。
好的 prompt:
列表页在
filter变化时发起请求,存在竞态:快速切换时旧请求的响应会覆盖新响应。请用 AbortController 在useEffect清理函数里取消上一次请求,并处理AbortError,不要引入额外依赖。
前者 AI 只能瞎猜,后者 AI 一次就能给出接近正确的方案。现场真正好用的 prompt 模板,就是五个槽位:
现象 :列表页切换筛选后,偶尔显示旧数据 复现 :快速连续切换两次筛选必现 期望 :始终只渲染最新一次请求的结果 约束 :用 AbortController,不引入新依赖 边界:组件卸载时,未完成的请求也要取消
把这五项填进去,措辞不漂亮也没关系,AI 一次就能给出八九不离十的答案。能把需求、现象、约束、边界讲清楚的人,用 AI 的效率是含糊表达者的几倍。
这也是为什么越来越多面试官把这个环节单独拎出来考------它本质上是在测你的工程沟通能力,只不过对象从「同事」变成了「AI」。
这个瞬间考察的能力点:拆解与表达能力。 prompt 写得好不好,就是工程思维清晰不清晰的外显。
为什么面试官开始这么考了
可能有人会问:好好的八股文不考了,折腾这个干嘛?
原因其实很直接。现在用 Claude Code、Codex 这类工具,一句 prompt 就能生成整个组件、整个功能,「把代码写出来」这件事的成本被打下来了。公司稀缺的不再是「会写的人」,而是「知道该写什么、写得对不对的人」。面试只是跟上了这个现实:既然入职之后你天天要跟 AI 协作,那面试干脆就现场考你怎么协作。
而且这类题的区分度比八股高得多。八股可以提前背,现场怎么用 AI 却没法排练------你定位问题的习惯、验证输出的态度、表达需求的清晰度,十几分钟内就会暴露得清清楚楚。
所以三个打断瞬间,归根结底考的是同一件事:当代码不再稀缺,你的判断力是不是稀缺的。
| 打断瞬间 | 你的暴露点 | 面试官真正在考 |
|---|---|---|
| 上来让 AI 重写整文件 | 不定位就动手 | 问题定位能力 |
| AI 修复直接采纳 | 不验证就照收 | 批判与验证能力 |
| 描述需求含糊不清 | 讲不清要什么 | 拆解与表达能力 |
现场修 bug 速查表(建议收藏)
面试现场如果被要求用 AI 修 bug,按这个顺序走,基本不会踩坑:
| 步骤 | 动作 | 一句话要点 |
|---|---|---|
| 1. 复现 | 手动稳定复现 | 复现不了,先别碰 AI |
| 2. 定位 | Network/断点缩小范围 | 锁定最小可疑代码 |
| 3. 拆解 | 现象+复现+期望+约束+边界 | prompt 质量=你的表达 |
| 4. 生成 | 让 AI 改局部,不是整文件 | 范围越小,AI 越准 |
| 5. 验证 | 讲原理+补边界用例 | 采纳前先自我 review |
| 6. 回归 | 确认没引入副作用 | 改动后跑一遍相关逻辑 |
写在最后
AI 没有让前端面试变简单,反而把门槛从「记忆」抬到了「判断」。以前背八股能混过去,现在面试官一句「你打开 AI 改一下」,立刻就能看出你是真的懂,还是只会复制粘贴。
如果你也在准备这类面试,不妨先拿自己项目里的一个真实 bug 练一遍上面的 6 步------练的不是代码,是你在 AI 面前的判断力。 练的时候最好像面试那样边做边讲,很多时候你不是不会,而是讲不出来。
你在面试里遇到过「允许用 AI」的环节吗?你是怎么应对的?评论区聊聊。