news 2026/8/30 21:18:14

前端秋招面试全攻略:技术盘点、项目深挖与实战复盘

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
前端秋招面试全攻略:技术盘点、项目深挖与实战复盘

1. 秋招前的自我评估:别急着海投,先把“技术栈”理清楚

前端这个方向,看起来入门门槛低,但秋招的竞争烈度一点不比后端低。我见过不少同学 7 月份才开始刷题,简历上堆了一堆“熟悉 Vue/React”“了解 webpack”,结果一面就被问穿。问题不在他们不努力,而是努力的方向太散——今天看一篇“前端性能优化清单”,明天背一道“浏览器从输入 URL 到页面展示发生了什么”,后天又去搞微前端,最后每个点都只知道半层皮。

我 6 月初做的第一件事,不是打开招聘软件,而是花了一周时间给自己做了一次“技术盘点”。所谓盘点,就是把前端知识体系拆成几个大块,逐个对照自己真实掌握程度打分。我的打分标准不是“看过文章”或者“能背概念”,而是“能不能脱离资料、手写实现、并且讲清楚为什么”。按这个标准,我给自己拉了一张表:

知识模块自评分数主要薄弱点
JavaScript 基础与进阶7/10原型链的隐性转换场景、手写 Promise 的边界情况
浏览器与网络6/10HTTP 缓存细节、渲染流程各阶段触发条件
框架(Vue/React)7/10响应式原理源码级理解、diff 算法推导过程
工程化(webpack/Vite)5/10Loader 和 Plugin 的实现原理、构建性能优化
项目经验6/10亮点不足,缺少能“深挖三层”的技术点
算法与数据结构5/10动态规划、二叉树题目熟练度不够

这张表直接决定了我后面三个月的准备策略:JavaScript 和框架保持刷题节奏,工程化和算法是重点补强项,项目经验则花了大功夫重构。

为什么要强调自我盘点这一步?因为很多同学秋招失利,不是基础差,而是把有限时间平均分配到了所有知识点上,而面试官其实只会揪着简历上的内容往深处问。与其面面俱到,不如重点突破几个自己真正能讲透彻的点。后来我在面试中明显感觉到,当我把“Vue3 响应式原理”和“前端工程化构建链路”这两个点吃透之后,面试官在这两个方向上的追问基本都能接住,这就是所谓的“一技之长”。

另外,技术栈的选择也要提前想清楚。秋招市场上 React 和 Vue 的岗位比例大概四六开,一二线大厂很多团队是 React 为主,但 Vue 的岗位数量也相当可观。我自己的情况是 Vue 用得更多,React 属于“能写但不够深”,所以我把重点放在 Vue3 + TypeScript + Vite 这条链路上,React 只做基础层面的准备。这样做的代价是有些 React 核心岗位我直接放弃了,但好处是我在 Vue 方向上的竞争力明显更强。秋招不是要把所有技术栈都学一遍,而是在一个主栈上做到足够深,同时了解另一个主流的框架的基本用法,这才是性价比最高的策略。

2. 简历项目:一个能“深挖三层”的项目胜过大而全的五个项目

简历上的项目是面试官提问的主要来源,这一点几乎人人知道,但真正把项目准备到位的人并不多。我对比过我自己的前后两版简历,第一版写了三个项目:一个后台管理系统、一个仿 Ant Design 的组件库、一个用 Node.js 写的简单博客系统。看起来数量够,但每个都只能讲到“我用了什么技术”,根本经不起追问。比如那个后台管理系统,面试官一问“你这里面菜单权限是怎么实现的”,我当时的回答是“用路由守卫判断用户角色”,再问“刷新页面后权限信息丢失怎么处理”“不同角色共用一个路由表还是动态添加路由”,我就有点卡壳了。

后来我做了个大手术:砍掉一个项目,把精力集中在一个“在线文档协同编辑系统”上。为什么要选这个方向?因为它天然能引出前端领域最多的高阶问题:操作转换(OT)还是 CRDT、文本编辑器底层实现、WebSocket 消息同步、离线编辑与冲突处理、前端性能优化、甚至 IndexedDB 本地缓存。面试官一听就知道这个项目有深度,不需要我强行包装。

项目重构的时候,我给自己定了三条硬性标准。第一,简历上写的每一句话都必须能展开讲十分钟以上;第二,项目里至少要有两个亮点能让面试官主动追问;第三,每一个技术选型都要能解释“为什么不用另一个方案”。拿协同编辑来说,我最初选用 OT 方案,因为 CRDT 的上手成本更高,而且社区成熟实现相对少。但面试官如果问“为什么不用 CRDT”,我需要能说出两者的核心区别:OT 通过操作变换保证文档状态一致,需要中心化服务器做排序和转换;CRDT 则通过数据结构本身保证分布式场景下的最终一致。这样一层一层往下挖,才叫真正吃透了一个项目。

项目的准备过程非常耗费时间。我不是只看文档,而是把核心逻辑手写了一遍,包括文本操作的表示、操作的合并与转换、WebSocket 消息的协议设计。这些代码不一定要放到项目里跑,但它们让我能应付面试官的任何追问。事实证明,这种准备方式带来的不只是面试中的从容,还有我对前端本身的理解深度提升了一个层次。

如果你是现在才开始准备秋招,时间可能不够像我这样重构一个完整的协同编辑项目。那我的建议是:不要新开一个项目,而是把已有的项目往里“钻”——选一个已经写过的后台管理系统,把某一两个模块(比如权限控制、文件上传、数据可视化大屏)做到极致,把所有相关的问题都提前准备一遍。面试官看重的不是项目名字潮不潮,而是你在这个项目里体现出来的思考深度。

3. 简历投递策略与时间线:海投不是乱投,每个阶段要有节奏

秋招的时间线大概分成几个阶段,不同阶段投递策略完全不一样。我是 6 月底开始投第一批提前批,7 到 8 月是提前批集中期,8 月中旬到 9 月底是正式批高峰,10 月基本就是补录和捡漏了。这里有个非常重要的经验:提前批的面试难度未必比正式批低,但面试反馈通常更快、流程更短,而且很多公司提前批挂了还能继续投正式批,相当于多了一次机会。所以我的建议是:不要等到 9 月才出手,7 月初就应该开始投递第一批公司,先拿几家练手。

“海投”这两个字听起来简单,实际操作有很多讲究。我最初就是投了 70 多家,但前 10 家因为心态没调整好、面试经验不足,基本都挂在了二面上。后来我总结出一个策略:把公司分成三批,第一批是“不太想去”的公司或者规模较小的中厂,用来练手和积累面试经验;第二批是“想去但没那么执念”的公司,这些是主战场,每一家都要认真准备;第三批是“最想去”的几家大厂,放在最后阶段,等前面积累了足够的面试经验再上。

这个策略的价值在于,你不会在最想去的公司面试时还在犯低级错误。比如我第一次面试时,面试官问“事件循环中宏任务和微任务的执行顺序”,我虽然答出来了,但当时脑子很紧张,连代码示例都写得不顺畅。到第三四场面试的时候,同样的题目我能很自然地边写边讲,面试官追问“async/await 在微任务队列里的时机”我都能接住。面试本身就是一种技能,需要练。

另外,投递渠道的选择也值得说道。三分之一以上的公司,我是在官网或者官方招聘公众号直接投的;还有三分之一是通过内推;剩下的零零散散来自招聘平台。内推的回复速度确实快一些,但没有内推也完全不用慌,官网投递反而是最稳妥的,因为很多公司秋招只处理官方渠道的简历。这里还有个细节:简历文件名一定要用“姓名_学校_岗位_联系方式”的格式,不然 HR 在几百份简历里根本懒得点开你的文件。

简历投出去之后,每天要做两件事:记录状态、复盘面试。我建了一个在线表格,列了公司名称、岗位方向、投递时间、笔试链接是否收到、面试轮次、面试时间、问到的问题、挂掉的原因,所有信息一目了然。每次面完立刻写复盘,不然过两天就忘了,再面试又踩同样的坑。这个习惯帮我后面效率提升了不止一倍。

4. 面试实战复盘:我把高频问题分成六类,每一类都有答题框架

秋招这几个月,我实际参与的面试大概有 50 轮以上,把被问到的问题记录下来之后,我发现它们基本可以归成六大类。下面我逐一拆解,每一类我都会给出高频题、答题框架和面试官真正想考察的点。

4.1 JavaScript 基础与进阶:不只要会写,还要能推导

JavaScript 是前端面试的绝对核心,几乎每一轮技术面都会花一半时间在上面。高频题包括“事件循环(Event Loop)”“闭包与作用域链”“this 指向的四种绑定规则”“原型与原型链”“Promise/A+ 规范与手写实现”“函数柯里化与偏函数”“深拷贝的实现与缺陷”等。

我自己的心得是,单纯背诵概念回答不了面试官的追问。比如“闭包”这道题,面试官通常不会只满足于“函数内部引用外部变量”这个定义,他们会继续问“闭包会造成哪些内存问题?怎么避免?”“用闭包实现一个计数器,每次调用加一,怎么保证多个计数器互不影响?”如果只背过定义,到这里就卡住了。

我常用的答题框架是“是什么、为什么、怎么用、有什么坑”四步走。拿闭包举例:先说明闭包是函数和它声明时的词法环境的组合;再解释为什么 JS 需要闭包——因为 JS 的函数是一等公民,可以在其他函数内定义并被返回,而返回后它的外部变量不能被垃圾回收,这就要求它保留一份对外部作用域的引用;然后举实际场景——防抖节流、模块化封装、函数工厂;最后讲坑——闭包导致的内存泄漏和意外共享变量问题。

这里我想特别强调手写题的作用。我面试中遇到过至少十种手写实现:手写 Promise、手写防抖节流、手写 new 运算符、手写 call/apply/bind、手写深拷贝、手写数组去重、手写发布订阅 EventEmitter、手写 LazyMan、手写并发控制、手写 reduce 等。市面上有很多现成的“手写题大全”,但光抄一遍没有意义,我建议每个手写题都必须做到三步:第一步理解题目要求和边界情况;第二步不看答案自己写一遍;第三步把代码里每个关键点都讲清楚,比如手写 Promise 时,为什么 resolve 和 reject 只能调用一次、then 方法为什么要返回一个新的 Promise 而不是 this 本身。

4.2 浏览器与网络:性能优化的土壤,也是高频追问点

这一块我整理出三大核心:浏览器渲染原理、HTTP 协议、前端缓存。高频题包括“从输入 URL 到页面展示发生了什么”“浏览器渲染流程中会触发重排重绘的操作有哪些”“简述 HTTP 缓存机制,强缓存和协商缓存分别是什么”“HTTP/1.1、HTTP/2、HTTP/3 的区别”“跨域的解决方案”等。

这类题目最容易犯的错误是答得太泛。比如“从输入 URL 到页面展示发生了什么”,很多同学开口就是 DNS 解析、TCP 连接、发送请求、解析 HTML、加载资源、渲染页面,这样答没错,但太过流程化,面试官很难判断你是真的理解还是背下来了。更好的做法是把每一步展开到足够细:比如在解析 HTML 时,CSS 会阻塞渲染吗?JavaScript 会阻塞 DOM 解析吗?这两种阻塞有什么区别?在 Render Tree 构建阶段,display: none 的元素为什么不生成渲染节点?这些细节才是面试官想听到的。

我在准备这一块时,发现最有效的方法是在本地启动一个服务,实际验证缓存行为。用 Express 起一个静态资源服务,通过设置不同的 Cache-Control 和 ETag 响应头,观察浏览器请求状态是 200 from memory cache 还是 304 Not Modified。自己亲手操作过一次,比背十遍缓存流程都管用。

4.3 框架:源码级理解的“试金石”

框架题在前端面试里分量极重,尤其是一二线公司,几乎必问源码级理解。以 Vue3 为例,我最常被问到的有:“Vue3 的响应式原理相比 Vue2 有什么改进”“computed 的实现原理,为什么它会有缓存”“Vue3 的 diff 算法和 Vue2 有什么不同”“watch 和 computed 的区别和使用场景”“v-if 和 v-show 的区别及底层实现”等。

这里我踩过的最大一个坑,是把“熟悉原理”理解成了“看过原理文章”。直到我第一次被面试官问“Vue3 中 ref 和 reactive 的实现区别是什么,深层响应式和浅层响应式分别怎么处理”,我才意识到自己只记得 ref 用 reactive 包裹对象、reactive 用 Proxy 代理对象,但对“targetMap 和 depsMap 的嵌套 Map 结构到底怎么工作”“副作用函数 trigger 时怎么收集依赖”这些底层细节并不清楚。

那次面试挂了之后,我静下心花了差不多两周时间,从 createReactiveObject 这个函数开始读 Vue3 的响应式源码,把依赖收集、触发更新的整个链路用一张流程图手画了出来,然后对照着源码逐行看。后来我基本可以从“Vue2 用 Object.defineProperty 遍历对象属性”这个起点,一路推导到“Vue3 用 Proxy 拦截整个对象,因此可以监听新增属性和数组索引变化”,再到“为什么 Vue3 还要提供 ref 来处理基础类型数据”。把这条链路讲通之后,几乎任何响应式相关的追问都能应对。

React 方向的准备我没有走那么深,但也整理了核心问题:useState 与 useReducer 的实现机制、useEffect 的依赖收集与清理、虚拟 DOM 和 diff 算法、React 18 的并发特性与时间切片。如果你是 React 主力,建议把 Fiber 架构的基本原理和 scheduler 的调度逻辑搞清楚,这是 React 面试里面最能体现深度的问题之一。

4.4 工程化:大厂面试的隐形门槛

很多同学前期准备会忽略工程化,但面到二面三面,面试官普遍会开始考察工程化能力。高频问题包括“webpack 的构建流程是什么”“Loader 和 Plugin 有什么区别,分别解决什么问题”“有没有自己写过 Loader 或 Plugin”“Vite 为什么比 webpack 快,原理是什么”“怎么做构建性能优化”“前端代码分割有哪几种方式”等。

工程化这块的难度在于,只看文档不实操很难答好。我第一次被追问“webpack 打包后,bundle 文件里那些 webpack_modules 里的函数是干什么的”,直接愣住。后来我专门做了一个实验:写一个最简单的入口文件,用 webpack 打包,然后打开产物代码逐行分析,看看 webpack 是怎么把一个模块包装成函数、怎么构建模块依赖图、怎么实现懒加载的代码切割。分析完这段产物代码之后,webpack 的运行时对我来说就不再是黑盒了。这也是我全篇文章里最强烈的一个建议:把构建产物拆开看一遍,比你看十篇 webpack 原理文章都有用。

Vite 的问法通常集中在开发服务器为什么快、生产构建为什么用 Rollup、依赖预构建解决了什么问题这几个点上。还有一个高频衍生题是“ES Module 和 CommonJS 的区别”,这个必须熟练掌握,因为它几乎是所有构建相关原理的地基。

4.5 计算机基础:前端面试里的“硬通货”

一线大厂的技术面里,前端基础和计算机基础通常是混合考察的,尤其是算法题和操作系统、网络相关的基础题。操作系统问得最多的包括“进程和线程的区别”“死锁产生的条件”“什么是协程”;数据结构与算法则涵盖数组、链表、栈、队列、哈希表、二叉树、图、排序、查找、动态规划、贪心等。

我的算法准备从 6 月初开始,每天保持 1 到 2 道题的节奏,按分类刷,重点放在高频题型上:二叉树的前中后序遍历(递归和迭代版本都要会)、层序遍历、二叉树最近公共祖先、反转链表、合并两个有序链表、无重复字符的最长子串、三数之和、最大子序和、爬楼梯、打家劫舍等。刷题的时候我的习惯是每道题先自己想思路,超过 20 分钟没有思路就直接看题解。看完题解后不是直接下一题,而是合上答案自己写一遍,写完之后再分析这道题的时间复杂度、空间复杂度,以及能否优化。

有一个特别重要的经验是:算法题只能刷不能背。面试的时候一旦被问到背过的题,你会非常想直接复述答案,但面试官只要稍微改一下输入数据或者加一个限制条件,你就会露馅。所以与其背题,不如掌握每类题型的通用解法。比如二叉树题目普遍对应 DFS/BFS;字符串子串类题目绝大多数可以用双指针或滑动窗口;最值问题优先考虑动态规划;在有序数组中查找目标值想到二分查找。把这些大框架建立起来,即使面试遇到没刷过的题,也能有个比较靠谱的思考方向。

4.6 前端安全与性能优化:展示项目亮点时的加分项

日常开发里,普通业务代码写得再多,也很难体现区别于同龄人的竞争力。但如果你能在安全或者性能优化上做出一些有针对性的方案,面试官就会觉得你是一个“能独立解决问题”的工程师,而不仅仅是“会写页面”的人。

前端安全方面的高频题有“什么是 XSS,怎么防范”“什么是 CSRF,怎么防范”“HTTPS 的握手过程”“跨站脚本攻击和跨站点请求伪造有什么区别”。我一般这样答:XSS 的核心是“不信任用户输入”,所以要做输入过滤、输出转义、设置 Cookie HttpOnly 和 CSP 头;CSRF 的核心是“验证请求来源”,所以用 SameSite Cookie、校验 Origin/Referer、加 Token 来解决。把“攻击原理”和“防御方案”对应起来讲,面试官就能判断你有真实理解。

性能优化这个方向的问法更开放,常见的有“你们项目做了哪些性能优化”“首屏加载慢怎么排查”“长列表怎么优化”“聊聊前端监控”。这一块我建议和简历里的项目结合起来答,比如我在协同编辑项目里做的优化:通过 Web Worker 把操作转换的计算放到后台线程,避免阻塞编辑器的输入渲染;用 IndexedDB 做文档内容的本地缓存,二次打开时秒开;采用虚拟滚动渲染大型文档的目录结构,确保长文档不会卡顿。每个优化点都能讲出优化前后的数据对比,这比背几条性能优化清单有说服力得多。

5. 笔试攻略:30 多场笔试总结出的做题顺序与取舍法则

秋招的笔试环节被很多人轻视,但它其实是简历初筛之后的第一道硬关。我总共做了 30 多场笔试,总结出几个非常实用的经验。

第一,先浏览全部题目再动手。前几场笔试我都是顺着顺序做,结果前面一道运算量很大的算法题浪费了差不多 40 分钟,后面几道简单题反而没时间做。后来我学乖了,拿到试卷先花两分钟把所有题目看一遍,大致标记一下每道题的难度和预估耗时,然后从简单难度的题目开始做,最后集中精力攻难题,这样分数往往更高。

第二,前端笔试题通常分成三块:选择题/填空题(覆盖 HTML、CSS、JavaScript 基础)、编程题(算法与手写题)、问答题。选择题拿分相对容易,但陷阱也多,主要考察细节记忆;编程题是拉开差距的关键,所以我前面提到的每天刷 1 到 2 道算法题的节奏,在笔试阶段要适当增加,尤其是笔试前一周,可以集中刷目标公司的往年真题。

第三,专门练习手写题。现在很多公司的笔试和一面是合并的,手写 Promise、手写防抖节流几乎是必考。我准备了一套自己的“手写题速查表”,每道题只写三要素:核心逻辑、边界情况、易错点。考前快速过一遍,非常有效率。

第四,如果笔试平台支持本地 IDE,建议把代码先在本地调试好再粘贴过去。有些平台的环境比较旧,ES6+ 语法可能不兼容,提前在本地确认语法没问题能少踩很多坑。另外,笔试过程中如果某道算法题完全没有思路,不要死磕,先写一个暴力解法的框架,能拿部分分数。很多 OJ 平台是按测试用例算分的,能过一两个测试用例也是一种收获。

6. 高频面试场景还原:这五个问题,我几乎每三轮就会被问一次

除了上面六大类的知识考察,面试里还有一些“通用场景题”,这些问题不直接考某个知识点,但答得好坏会极大影响面试官对你的评价。我整理了五个出现频率最高的,把自己的真实回答方式和心路历程写出来。

6.1 “你先做个自我介绍吧”

这题看似简单,其实是整场面试的定调环节。我见过不少同学自我介绍就是重复简历上的内容——“我叫什么,来自哪个学校,熟悉什么技术,做过什么项目”,一段话背完,不但没留下印象,还浪费了建立第一印象的机会。

我的回答框架是这样的:开场一句话说明我是谁,然后把重点放在“我做过最值得说的一件事”上。比如我会说“我来自 XX 学校,前端方向,最近在做一个在线文档协同编辑系统,里面涉及 OT 算法和 WebSocket 同步,我对前端框架原理和工程化比较感兴趣”。这样面试官接下来的提问方向基本就会往项目上靠,而不是从题库里随机抽题。你可以在自我介绍里引导面试官提问,这是很多同学没有意识到的主动权。

6.2 “你项目中遇到最大的挑战是什么?怎么解决的?”

这道题考察的是解决问题的思路,而不是问题本身。我的答题逻辑是“背景—冲突—方案—结果—沉淀”五步。背景:我在做协同编辑,需要实现多人同时编辑一个文档且互不冲突。冲突:初始用了简单的 setInterval 轮询同步,但很快发现两个人同时编辑时会出现互相覆盖的问题。方案:调研了 OT 和 CRDT 两种方案,最终选择 OT,实现了包含保留、删除、插入三种操作类型的转换算法,并为每个操作加上版本号,在服务端做操作的合并和排序。结果:多人同时编辑同一个文档段落时,冲突率下降到接近零。沉淀:我意识到分布式一致性问题不仅存在于协同编辑领域,也存在于很多实时交互场景,这个研究过程让我对“操作”和“状态”的建模有了更深的理解。

这套回答的好处是,它把“项目经历”和“个人能力”做了绑定,面试官听完能直接判断出你的项目参与深度和技术成长曲线。

6.3 “你怎么理解前端这个岗位?未来 3 到 5 年怎么规划?”

这个问题在不同公司问到的概率差异很大,但有一个答法绝对安全:把前端定位成“用户体验和业务价值的连接者”,而不是简单的“写页面的人”。我会说,前端的本质是把后端的数据和服务能力,转化成人人可以感知和使用的界面。规划上,我会先在前端基础与架构方向深耕,然后逐步扩展到 Node.js 服务端和全栈能力,未来希望能成为一个懂业务、懂体验、懂工程的前端架构师。这样说既展示了长期思考,也没有让自己显得好高骛远。

6.4 “你经历过最失败的或者最遗憾的一件事是什么?”

这题考察的是自我认知和复盘能力。我的建议是,不要说自己从来没有失败过,这很假;也不要选一个完全暴露致命缺陷的失败案例。选一个技术上或者项目协作上的小挫折,然后重点讲自己怎么从失败中学习。比如我在一次团队项目中,由于前期没有做好状态管理设计,导致后期功能迭代时频繁出现状态不一致的 bug。后来我主动重构了状态层,引入了更严谨的数据流方案,并借此学习了前端状态管理设计模式。这样答既真诚,又体现了成长。

6.5 “你还有什么想问我的?”

这题看起来是收尾,但答好了也能加分。我不建议问“薪资多少”“加班多吗”这类问题,虽然合理,但放在这个环节不太合适。我会根据面试轮次选择问题:一面问“请问团队目前用的技术栈是什么?前端代码规模和团队协作流程大概是怎样的”;二面问“这个岗位未来半年的核心目标是什么”;三面问“团队目前在前端工程化和基础设施上最需要补强的方向是什么”。这些问题会让面试官觉得你是认真思考过这份工作的。

7. 手写题特训:我在最后一个月集中攻克的十道高频题

手写题基本贯穿前端面试的每一轮。我把自己在面试中遇到过的、以及朋友面经里反复出现的手写题整理成了一份清单,最后一个月集中刷了两遍,效果非常明显。这里挑十道最核心的分享出来,每道题我都附上思路和关键点。

1. 手写 Promise(含 resolve、reject、then、catch):关键在于状态只能从 pending 变为 fulfilled 或 rejected,且不可逆。then 方法返回一个新的 Promise,从而实现链式调用。回调的执行时机要严格按照微任务来,在原生环境里用 Promise.resolve().then() 来模拟。

2. 手写防抖函数(debounce):核心是用定时器延迟执行,每次触发重新计时。要注意立即执行版本(leading)以及取消功能。

3. 手写节流函数(throttle):核心是限制执行频率。有两种实现方式:时间戳版本(立即执行,停止触发后不再执行)和定时器版本(延迟执行,停止触发后还会执行一次)。要能说出两者区别。

4. 手写 call/apply/bind:核心是通过临时把函数挂到目标对象上调用,从而改变 this 指向。bind 需要柯里化,并且支持 new 调用时忽略绑定的 this。

5. 手写 new 运算符:先创建空对象,把空对象的原型指向构造函数的 prototype,再执行构造函数并绑定 this,最后判断构造函数返回的是对象还是原始值。

6. 手写深拷贝:考虑数组、对象、Date、RegExp、Map、Set、循环引用等情况。面试中循环引用是高频考点,通常用 WeakMap 解决。

7. 手写数组去重:至少能说出三种解法——Set、filter + indexOf、Map 记录已出现值。其中 NaN 的处理是加分项。

8. 手写 instanceof:核心是递归检查右侧对象的 prototype 是否出现在左侧对象的原型链上。

9. 手写 EventEmitter:包含 on、once、emit、off 四个方法。once 的核心是用一个包装函数,触发一次后自动解绑。

10. 手写并发控制:给定一个任务数组和并发数,实现一个函数,保证同时执行的任务不超过并发数。核心是用一个计数器加一个任务队列,每完成一个从队列里取出下一个。

我自己练习手写题时有个方法:第一遍闭卷写,写不出来的标记;第二遍对着源码理解每行代码的意义;第三遍再闭卷写一遍,争取顺带讲出每个关键设计的原因。第三遍可能最花时间,但收益最大。

8. 面试复盘方法:每次面完花 20 分钟做这件事,胜率翻倍

面试后的复盘才是拉开差距的关键。我前几场面试挂了之后,第一反应是“哎,又挂了”,然后就去刷手机,完全不知道下次怎么改。后来我强迫自己面完当场打开表格,花 20 分钟记录下面试中被问到的每一个问题,然后给每个问题打一个标记:

  • A:答得很好,面试官没有追问;
  • B:答出来了但不够深,面试官追问时有迟疑;
  • C:完全没答出来,或者答错了。

记录完之后,我会针对 C 类问题立刻查资料,补知识盲区;对 B 类问题,我会挑出其中被追问的那几个点,进一步深挖,直到我能把整个链路讲通;对 A 类问题简单看一眼就好。

这个习惯坚持到 8 月中旬之后,我的 C 类问题数量明显下降,B 类问题逐渐转化为 A 类。面试本质上就是一场信息战,复盘就是你把“不知道的信息”转化为“知道的信息”的过程。同样的坑踩一次是不小心,踩两次就是复盘没有做到位。

这里我要特别提醒一个误区:不要只复盘“不会做的题”,也要复盘“会做但没答好的题”。比如我有一场面试问“Vue3 的 watchEffect 和 watch 有什么区别”,我其实知道核心区别在于 watchEffect 会自动收集依赖、watch 需要手动指定依赖,但当时我回答得太啰嗦,先说了一堆“watchEffect 是立即执行”之类的边角料,导致面试官以为我不理解。后来复盘时我意识到,这种比较类型的问题应该先给结论,再展开细节。先说“watchEffect 自动追踪内部响应式依赖,watch 显式指定监听源”,然后用代码举例子。这个调整之后,我在后面几场面试中遇到类似比较题,答得又快又准。

9. offer 选择:技术方向、业务前景与团队氛围的三方权衡

大概到 9 月中旬,我开始陆续收到几个 offer,这时候又面临新的问题:到底选哪个?很多同学觉得拿到 offer 就万事大吉,但 offer 选择其实直接决定了你接下来两三年的成长轨迹,值得认真想清楚。

我把 offer 分为三类:大厂核心部门、中厂核心部门、大厂边缘部门。表面上大厂核心部门听起来最优,但也要看具体岗位的技术栈是不是你想深入的,团队的氛围是不是偏向技术成长。中厂核心部门往往是“业务增长快、个人能见度高”的选择,技术提升不一定比大厂慢。大厂边缘部门反而要小心,因为业务不稳定、团队流动性高,进去之后可能天天写需求,技术成长有限。

我的选择逻辑是:优先看岗位技术方向与我的主栈匹配度,再看业务的长期价值。比如有一个电商大厂的 offer 虽然平台很大,但岗位是偏运营活动的 H5 开发,技术含量相对较低;另一个中厂的 offer 是负责协同办公产品的核心前端,涉及富文本编辑器、WebSocket 实时通信、数据可视化,技术成长空间明显更大。最后我选择了后者。每个人情况不同,但一个通用建议是:秋招的第一份工作尽量选择能让你在头两年快速成长的地方,而不是单纯看平台大小。

另外,多和已经入职的学长学姐聊聊,比你去论坛看各种爆料有用得多。问清楚团队的日常节奏、技术氛围、晋升机制、有没有技术分享,这些是招聘 JD 上看不到的信息。

10. 秋招期间的心态管理:焦虑是常态,但不能被它带着走

最后聊一个特别容易被忽略的问题:心态。秋招是一场马拉松,周期长达三四个月,期间会经历笔试挂、一面挂、二面挂、HR 面挂等各种“挂”。我 7 月份有一周内连续被三家公司的二面刷掉,当时直接产生了“我是不是不适合干前端”的想法。事后回看,那一周挂掉的原因并不复杂——要么是项目深挖没准备好,要么是某类手写题不熟,都还在可修复的范围内,但当时心态崩了,导致后面几场面试表现更差。

我后来用几种方式来管理自己的心态。第一,把秋招看作一个概率游戏,不把单场面试的成败等同于个人价值。一家公司挂掉可以有很多原因:岗位不匹配、竞争者太强、面试官风格,甚至只是运气不好。第二,设置“求职日”和“恢复日”的节奏。周一、周三、周五集中投递和面试,周二、周四、周末专心复盘和补基础。这样做能避免连续几天都在面试中消耗自己。第三,保持运动。我每天下午出去跑三公里,跑步的时候什么都不想,回来之后脑子清醒很多。这个习惯陪伴了我整个秋招,强烈推荐。

还有一个很小的技巧:每次面试之前,提前十分钟在房间里模拟一遍自我介绍和项目亮点,让大脑进入“面试模式”。虽然听起来有点迷信,但实战下来真的有用,能显著减少面试刚开始几秒钟的紧张感。

11. 前端面试八股文与外卖:一条帮助记忆的复习路径

秋招准备过程中,我整理了一整套自己的“前端面试八股文”笔记,大概两万多字,按模块划分,每个模块下设高频题和参考答案。这里我并不是让大家去背八股文,而是提供一个复习框架。因为面试题虽然千变万化,但考的点是有限的,把所有高频考点按模块整理出来之后,你就能做到心中有数。

我整理的过程中特别注重“关联记忆”。比如把“浏览器渲染流程”“performance 性能优化”“前端监控”放在同一个模块下,因为它们在概念上是强相关的——渲染流程里各个阶段对应的耗时指标,正是性能优化时需要监控和优化的对象。把知识点关联起来,比孤立记忆效果好很多。

如果你现在才开始准备,时间不够把所有知识点都系统过一遍,那我的建议是挑三个核心模块重点突破:JavaScript 基础、你主要的框架、工程化。这三个模块覆盖了大约七成的面试提问。项目深挖单独准备,算法题保持每天练习,其他模块(如浏览器网络、安全)至少过一遍概念。这样能保证你在短时间内把性价比最高的分数拿到手。

前端秋招这条路,回头看并没有想象中那么难,但也不是一条轻松的路。它考验的是你是否足够了解自己、愿意为每一个“为什么”去深挖到底。如果你正走在这条路上,希望这篇面经能帮你少踩几个坑。技术之外,保持耐心和复盘习惯,offer 只是时间问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/30 21:16:32

面试不只是面经:用工程化思维提高求职胜率

去年年底,我连着面了十几家公司,从大厂到创业公司都有。那段时间我把每天的时间切成三块:白天上班,晚上研究岗位和公司,周末做模拟面试和复盘。三个月下来,我拿到四个offer,也积累了一整套关于“…

作者头像 李华
网站建设 2026/8/30 21:16:19

DBeaver 数据迁移完全指南:跨数据库传输一次讲透

DBeaver 数据迁移完全指南:跨数据库传输一次讲透 【免费下载链接】dbeaver Free universal database tool and SQL client 项目地址: https://gitcode.com/GitHub_Trending/db/dbeaver 把 MySQL 的一张表搬进 PostgreSQL,手工复制 SQL 又慢又容易…

作者头像 李华
网站建设 2026/8/30 21:15:37

oh-my-pi 计划模式(plan mode)全解:先想清楚再动手

oh-my-pi 计划模式(plan mode)全解:先想清楚再动手 【免费下载链接】oh-my-pi ⌥ Coding agent with the IDE wired in 项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi oh-my-pi 是一款把 IDE 能力接入终端的编码智能体&…

作者头像 李华
网站建设 2026/8/30 21:04:58

华为OD面试全流程实战:从机试到定级谈薪的避坑指南

我接到华为OD招聘电话的时候,正在工位上改一个第三版方案。电话那头自我介绍“华为OD招聘组”,我第一反应其实有点懵,当时我对OD的记忆还停留在“外包”两个字上。后来我认真查了很多资料,又在技术社区、招聘平台和几个技术群里翻…

作者头像 李华