作为一名一路被前端面试毒打过来的老开发,看到“七天背完八股文,面试通过率99%”这种标题,我的第一反应是:别信这个数字,但“背八股文”这件事本身,确实有它的价值。前端面试八股文覆盖的知识点相当固定,说白了就是JavaScript、浏览器、网络、框架、工程化这几大块,把高频题背熟,至少能保证你在一面二面的时候不冷场、不露怯。这篇文章我就以过来人的身份,把七天冲刺怎么安排、核心知识点怎么背、面试时候怎么把背过的东西讲出来,一次性讲透。
不管你是正在求职的应届生,还是工作两三年想跳槽的初级前端,只要你需要在短时间内把前端面试的知识点系统过一遍,这篇文章都应该能帮到你。我会尽量用大白话拆解,把我自己备考时踩过的坑和总结的技巧都放进去。先说清楚,这篇文章不是给你灌“包过”的鸡汤,而是帮你把七天时间真正用在刀刃上。
1. 为什么前端面试要背“八股文”,这东西到底在考什么
很多应届生第一次听说“八股文”这个说法,会觉得它是贬义词,觉得面试官就是在刁难人,问一些工作中根本用不到的东西。但我在面试别人和被别人面试那么多次之后,越来越觉得:八股文的本质,其实是一种快速筛选机制。
面试官要在30到60分钟里判断一个人靠不靠谱,不可能真的让你坐在工位上写一天代码。所以他会用一些高频的、有标准答案的问题,先快速确认你的基础知识扎不扎实。比如问“闭包是什么”,你答得颠三倒四,他基本上就没耐心听你讲后面项目里那些“我没有实际做过”的增量改造了。反过来,如果你能把基础概念讲得透彻,他会默认你的底子是好的,后续再问项目细节,也只是想验证你的实践能力。
这跟高考很像。高考考的不是你以后买菜要不要用导数,而是通过一套标准化题目,筛出学习能力强、能坐得住冷板凳的人。面试八股文筛选的是你愿不愿意沉下心吃透底层逻辑,以及你的表达能不能让别人听懂。这两个能力,在职场上恰恰是稀缺的。
所以我的建议是:别抵触八股文,把它当成一套标准化的复习资料。真正需要背的核心题,大概也就一百多道,但这一百多道背后涉及的原理,其实是串联起来的。你背会了闭包,就自然会牵扯出作用域、变量提升、this指向、垃圾回收;你背会了事件循环,就自然会牵扯出宏任务微任务、异步编程、性能优化。这也是为什么七天冲刺是可行的——因为核心知识点的密度,远比你想的要集中。
我在招聘时经常会遇到一种候选人,简历上写“精通Vue”,但问他“computed和watch的区别”,他只能说出“computed有缓存”这一句。这种回答不能说错,但明显就是没吃透。八股文的正确打开方式,不是背答案,而是把一个答案里藏着的三四个知识点全部展开,串成一张网。
2. 七天冲刺计划:先搭知识框架,再用题海填细节
七天时间背完八股文,听起来很疯狂,但实际上只要你规划得够细,完全是可行的。我见过不少人在面试前临时抱佛脚,结果前三天在翻HTML标签,后四天在焦虑中刷了一堆冷门题,最后上考场发现高频题全没记住。这是典型的不会安排时间。
我把自己的七天冲刺计划分为两个阶段:前两天搭框架,后五天刷题和输出。下面这张表是我推荐的时间分配,你可以根据自己的薄弱项做调整。
| 天数 | 阶段 | 复习重点 | 每日目标 |
|---|---|---|---|
| 第1天 | 框架搭建 | JS核心:作用域、闭包、原型链、this、继承 | 能不看资料口头讲出每个概念 |
| 第2天 | 框架搭建 | 浏览器和网络:渲染流程、缓存、HTTP、事件循环 | 画出关键流程图或时间线 |
| 第3天 | 刷题巩固 | 异步编程、Promise、手写代码 | 完成10~15道手写题,能边写边解释 |
| 第4天 | 刷题巩固 | CSS布局、盒模型、响应式、BFC | 能解释清楚每个属性背后的布局原理 |
| 第5天 | 框架专项 | Vue或React核心:生命周期、响应式、diff、组件通信 | 用一张图说清数据变化到视图更新的全过程 |
| 第6天 | 框架专项 | 工程化、打包工具、性能优化、安全问题 | 背熟20个高频简答题 |
| 第7天 | 模拟输出 | 全真模拟面试、复盘录音 | 做完至少3套面试题,修正表达卡壳点 |
这个计划的核心逻辑是:前两天解决“知识从哪来”,后五天解决“知识怎么输出”。很多人背八股文最大的问题不是记不住,而是记住了却讲不出来。所以我把第七天专门空出来做模拟面试,这是很多人的盲区。
第一天和第二天不需要一上来就背题,而是先把知识地图在脑子里画出来。比如你复习JS,你要知道核心重点就五个:变量提升、闭包、this指向、原型链、事件循环。你复习浏览器,核心重点就是渲染流程、缓存机制、存储方案、HTTP协议。先把这些大项列出来,再往里面填细节,比零散地刷题效率高得多。
到了第三天和第四天,就可以开始用题目来刺激记忆了。我自己的方法是把面试题分成三种:概念题、对比题、手写题。概念题回答“是什么”,比如“什么是BFC”;对比题回答“区别是什么”,比如“Cookie和localStorage的区别”;手写题直接上代码,比如“手写一个防抖函数”。这三种题型的记忆方式完全不同,概念题需要复述,对比题需要列点,手写题需要肌肉记忆,所以一定要分开处理。
3. 核心八股文知识点拆解:背什么、怎么背、怎么答
很多人的误区是把网上流传的几百道面试题全部背一遍,结果背到一半就放弃了。实际上,高频八股文的池子非常稳定,我把它们分成五大块:JavaScript基础、浏览器与网络、CSS与布局、框架原理、工程化与性能。每一块我会挑几个最常考的题目,告诉你面试官想听什么,以及怎么回答才能拿高分。
3.1 JavaScript基础:闭包、原型链、this这三板斧
JS基础里,闭包是绝对的C位。面试官问“什么是闭包”,表面上是考你对作用域的理解,实际上是想看你是否了解JavaScript的变量查找机制。标准的回答思路是:先说定义——闭包是指有权访问另一个函数作用域中变量的函数,通常通过函数嵌套实现;然后说原理——JavaScript采用的是词法作用域,函数在定义时就确定了它的作用域链,所以内部函数可以访问外部函数中的变量;最后说应用——比如防抖节流、柯里化、模块化封装、React Hooks中useState的实现本质,都用到了闭包。
这样回答的好处是,从定义到原理再到应用,一条线下来,面试官能看出你是真懂而不是死记硬背。这里我给一个容易被忽略的加分点:你可以顺带提一句“闭包会长期占用内存,使用不当会造成内存泄漏”,这就自然而然地引导面试官进入下一个问题,你还能顺势展示你对垃圾回收机制的理解。
原型链是第二个高频考点。面试官喜欢问“new一个对象的过程发生了什么”,或者“如何实现一个继承”。这种题你要能一边画图一边讲。标准的回答是:new的过程里,会创建一个新对象,把这个对象的原型指向构造函数的prototype对象,然后把构造函数的this绑定到新对象上,最后如果构造函数没有显式返回对象,就返回这个新对象。继承的实现方式至少有五种:原型链继承、构造继承、组合继承、寄生组合继承、ES6的class继承。我建议你重点掌握组合继承和ES6继承,因为现在面试基本不会再考ES5那套老掉牙的写法了,但你必须清楚class本质也是基于原型链的语法糖。
this指向这个问题,看起来简单,但每年能挂掉一批人。你只需要记住一句话:this的指向是在函数调用时确定的,而不是定义时确定的。然后记住四种调用场景:普通函数调用时,非严格模式下this指向window,严格模式下是undefined;对象方法调用时,this指向该对象;call、apply、bind可以显式指定this;箭头函数没有自己的this,它继承上一层的this。把这些场景背熟,再配合两道题练一下,基本就不会出错了。
3.2 浏览器与网络:事件循环、渲染机制、HTTP缓存
事件循环是我认为前端八股文里最值得吃透的一块,因为它直接关系到你写的代码到底按什么顺序执行。很多新手写异步代码时候经常出现“为什么这个console.log先输出了”的疑问,本质上就是没搞懂事件循环。
面试时你要能说清楚:JavaScript是单线程的,所以它需要一套机制来处理异步任务。代码执行时,同步任务先进入调用栈,异步任务分为宏任务和微任务。宏任务包括script整体代码、setTimeout、setInterval、I/O操作、UI渲染;微任务包括Promise的then回调、MutationObserver、queueMicrotask。执行顺序是:先执行一个宏任务,然后清空本轮所有的微任务,再执行下一个宏任务,如此循环。
这里有个细节容易被遗漏:Promise本身是同步执行的,只有它的then方法里的回调才是微任务。所以面试题里常会有这样一段代码:
console.log('1'); setTimeout(() => console.log('2'), 0); Promise.resolve().then(() => console.log('3')); console.log('4');最终输出顺序是1、4、3、2。因为同步代码1和4先执行,Promise微任务3在下一轮宏任务2之前被清空。你在回答问题的时候,最好边写注释边解释,面试官会觉得你有调试思维。
HTTP缓存也是面试里的大热门。回答这个问题,我建议你用“一图流”的方法,把缓存分为强缓存和协商缓存两条支线。强缓存主要靠Cache-Control的max-age和Expires实现,命中后浏览器会直接使用本地副本,不会发请求;协商缓存靠Last-Modified和ETag实现,浏览器会带上If-Modified-Since或If-None-Match去服务器询问资源是否变动,服务器返回304则表示可以继续用缓存。Cache-Control的优先级高于Expires,ETag的优先级高于Last-Modified,这两个优先级关系是经常会考的点。
渲染机制这个方向的题,通常会让面试官对你的性能优化能力产生好感。你至少要能说清楚浏览器解析HTML到页面展示的完整过程:构建DOM树、构建CSSOM树、合成渲染树、布局、绘制、合成,以及在这个过程中,JavaScript和CSS会如何阻塞渲染。如果你还能补一句“因此我们可以通过defer、async加载脚本,把CSS放在head中,把JS放在body底部,来减少对首屏渲染的阻塞”,那这道题你就彻底答圆了。
3.3 CSS与布局:BFC、盒模型、CSS性能
CSS在很多人眼里是“够用就行”的领域,但面试官偏偏爱从这里出题来试探你的基本功。最经典的三个点:盒子模型、BFC、清除浮动(现在也常问flex和grid,但老面试官习惯先问前面这几个)。
盒子模型你要能说出content-box和border-box的区别。简单说,content-box的宽高只算content区域,再加padding和border会撑大元素;border-box的宽高直接包含content、padding、border。然后你可以补一句应用场景:全局初始化样式里经常设置* { box-sizing: border-box; },就是为了避免布局时被padding干扰。
BFC这个概念,很多新人一听就懵。我用大白话解释一下:BFC就是一个独立的布局区域,它内部元素的布局和外部互不影响。触发条件有overflow不为visible、float不为none、position为absolute或fixed、display为inline-block或flex等。它解决的经典问题是:父元素高度塌陷(子元素float后父元素没高度)、防止margin合并、实现两栏自适应布局。
flex布局的重要性不用多说,你需要把主轴、交叉轴、align-items和justify-content的区别、flex-grow和flex-shrink的计算逻辑搞清楚,再配合一道经典的“如何用flex实现垂直水平居中”题。答法是:display: flex; justify-content: center; align-items: center;,简单明了,但你要懂得为什么是这样,因为这两个属性分别控制主轴和交叉轴的对齐方式。
CSS性能这块,面试官可能会问“重排和重绘的区别”。重排是布局引擎重新计算页面元素位置和大小,开销大;重绘是只改变样式比如color和background-color,不影响布局,开销小。避免重排的常见手段包括:批量修改DOM、使用transform代替top/left动画、用documentFragment减少DOM操作次数。这些知识点既属于CSS性能,又是浏览器渲染的延伸,放在面试里答出来会特别加分。
3.4 Vue和React:生命周期、响应式、数据流
现在前端面试基本绕不开框架。你简历上写了Vue或React,就必须把框架的核心原理吃透。这里我以Vue为例讲几个高频点,React选手也可以对照理解。
Vue响应式原理是每年面试的常青树。你至少要能说出Vue 2和Vue 3的区别:Vue 2用Object.defineProperty来劫持对象的属性访问,所以它没法直接检测到新增属性和删除属性,需要用Vue.set和Vue.delete;Vue 3用Proxy来代理整个对象,所以能直接监听到属性的新增和删除。更关键的是,Vue 3的依赖收集是通过effect副作用函数来管理的,在组件渲染时收集依赖,在数据变化时触发重新渲染,整体性能表现比Vue 2更精细。
computed和watch的区别,我在前面提到过,这里展开一下。标准回答是:computed具备缓存能力,只有依赖的数据发生变化时才会重新计算,所以适合做复杂运算;watch是监听某个数据的变化然后执行回调,适合处理异步操作或开销较大的操作。曾经有个候选人在回答时说“computed里不能发请求,watch里可以”,这个补充点非常好,因为它把两个概念从语法层面拉到了实践层面。
生命周期的问题务必要按顺序背。Vue 3的组合式API里,常用的生命周期是onMounted、onUpdated、onUnmounted。面试官最爱问的是“onMounted和created的区别”,Vue 2里created在模板渲染前执行,可以拿到data但拿不到DOM;mounted在挂载后执行,可以操作DOM。到了Vue 3,setup本身替代了created和beforeCreate,所以这两个老生命周期就不再使用了。如果你能把这个演进逻辑讲清楚,会显得你对框架设计有思考。
组件通信的方式,建议你用列表整理清楚:props和emit用于父子通信,v-model用于表单组件封装,provide/inject用于祖孙跨层级通信,eventbus或mitt适合兄弟组件,vuex或pinia适合全局状态。答题的时候不要只说“我通常用props”,而是要根据场景说明为什么选择这种方式,比如“如果两个组件完全没有嵌套关系,用props链式传递会非常痛苦,这时候全局状态管理更合适”。
3.5 工程化与性能优化:面试中的加分项
工程化和性能优化这两块,往往决定了你是“会写页面”还是“能干活”的人。面试官通常不会出特别深的题,但会考察几个常见概念。
模块化这块,CommonJS和ESModule的区别是高频题。CommonJS是Node.js的模块规范,运行时加载,支持动态导入,因为它是同步的;ESModule是浏览器和服务端通用的规范,编译时加载,支持静态分析,所以可以做tree-shaking。你要能说出“同步加载”和“静态分析”这两个关键词,再补一个实际应用:Vite之所以快,很大一部分原因就是它基于原生ESModule,让浏览器直接加载模块,省去了打包这个过程。
webpack构建流程也是一个经典题。你要知道它是一个从左到右的“串行过程”:从入口文件开始,通过语法分析解析模块依赖,调用对应的loader翻译模块内容,再通过plugin扩展构建行为,最终输出打包产物。我还建议你了解一下loader和plugin的区别:loader本质上是一个转换函数,用来处理非JS模块,比如把图片转成base64、把less转成css;plugin则是在打包的各个生命周期钩子里做额外的事情,比如压缩代码、生成HTML文件。这个区别面试官经常混淆,你能答清楚就是加分项。
性能优化相关问题,我建议你背三个维度:加载优化、渲染优化、运行时优化。加载优化包括代码分割、懒加载、资源压缩、CDN加速;渲染优化包括减少重排重绘、减少DOM层级、使用requestAnimationFrame;运行时优化包括Vue的keep-alive、React的memo和useMemo、长列表虚拟滚动等。回答这类问题时,你最好能结合自己的项目经验,说“我在某个项目中用webpack做了代码分割,把一个首屏请求从2MB降到了800KB”,这样比背一百条理论都有说服力。
安全方向的问题里,XSS和CSRF必须会。XSS是攻击者往页面里注入恶意脚本,防御手段包括对用户输入做转义、设置CSP、对Cookie设置HttpOnly;CSRF是攻击者诱导用户发起非本意的请求,防御手段包括校验Referer、使用CSRF Token、加SameSite属性。这两个概念要区分清楚,别答混。
4. 背完八股文之后,怎么把答案变成面试里能打的话术
背熟知识只是第一步,很多人倒在了“心里知道但嘴上说不出来”。我做过不少次模拟面试,发现一个规律:候选人背答案和讲答案的反差很大。背答案时语速飞快,像在读稿子;讲答案时磕磕巴巴,像在挤牙膏。这里我分享三个非常实用的方法。
第一个方法是STAR原则的面试变体,我把它叫做“概念-原理-应用”三步法。不管是回答任何概念题,都按照这个结构:先说是什么,一两句话讲清定义;然后说原理,拆一下底层机制;最后说应用,举一个实际场景。比如回答防抖节流的区别,先说防抖是“事件触发后等待一段时间再执行,如果中间再次触发就重新计时”,再解释它靠setTimeout实现,最后说“搜索框输入场景适合用防抖,而滚动加载场景更适合用节流”。这样讲,面试官听下来会觉得你有逻辑、有实战,而不是背了模板。
第二个方法是录音复盘。我准备面试时,每天会花20分钟,用手机录下自己回答5道题的音频,然后回放听。你绝对会惊讶于自己的口头禅和废话有多少。我自己那时候的毛病是喜欢说“就是”“怎么说呢”这种水词,听录音的时候觉得特别明显。改掉这些口头禅之后,回答问题的干净程度提升了不止一个档次。这个方法很简单,但坚持三天就能看到明显效果。
第三个方法是“反向提问法”。面试到了最后,面试官通常会问“你有什么想问我的”,很多人不知道这也是一道隐藏的加分题。你可以准备两三个高质量的提问,比如“咱们团队目前的技术栈是什么,对Vue和React的使用比例怎么样”“当前项目里遇到过的最大性能瓶颈是什么”这类问题。这些问题能让面试官感觉到你是真的想加入团队、真的关心实际业务,而不是纯粹来背答案的。同时,你也可以通过他的回答,反向判断这家公司适不适合你。
再补充一点:面试时手写代码不要闷头写。我在面试别人的时候,遇到那种从头到尾一句话不说的候选人,就算代码写对了,我心里也会打个问号,因为实际工作中你不会这样跟同事协作。正确做法是边写边说,把思路讲出来:“我这里先判断一下边界条件,然后用一个变量来保存计算结果。”哪怕你的代码有个小bug,你主动跟面试官互动说“这里我觉得可以用一个缓存来优化”,他也会觉得你是在解决问题,而不是在默写答案。
5. 七天冲刺里的常见误区与避坑:这些坑我替你踩过了
网上的八股文资料五花八门,如果不会筛选,很容易白费功夫。我在反复准备面试的过程中总结出几个比较常见的误区,希望你能绕开。
第一个误区是“把冷门题当重点背”。有人喜欢刷那种问口偏得离谱的题,比如“Node.js的cluster模块底层怎么实现的”“WebGL如何实现粒子系统”。这些问题不是不能考,而是考的概率太低。七天时间有限,你的精力必须优先放在前面列出的那些高频核心题上。冷门题你只需要做到“有印象”,真被问到的时候能说出一两句不至于冷场就够了。我自己的经验是:花一天时间背一百道冷门题,不如花一天时间把闭包、事件循环、原型链这三大金刚练到能上课当老师的程度。
第二个误区是“背概念但不背代码”。八股文里有一半的内容,如果只靠嘴巴背是会被一眼看穿的。比如面试官让你“手写一个Promise.all”,你要是只背了思想而不动手写,一上键盘脑子就空白。这类题必须靠肌肉记忆,我的建议是每天敲十遍,不光是键盘上敲,还要在手机备忘录里默写一遍。等你连续默写三天之后,你在面试现场就会形成条件反射,手会带着大脑走。
第三个误区是“上来就背答案,不梳理框架”。这是新手最容易犯的错误。实际上,八股文的记忆效率取决于你脑子里有没有知识树。比如你背“浏览器从输入URL到页面展示发生了什么”,这道题如果零散背,要背几十个小点;但如果你脑子里有“网络请求-解析HTML-构建DOM-构建CSSOM-渲染”这条线,那所有小点都能顺着这条线自然带出来,不用硬背。所以我在第一天一直强调搭框架,后面刷题都只是在框架上添叶子。
第四个误区是“不会示弱”。面试中遇到不知道怎么回答的问题太正常了,但很多人的应对方式是沉默,或者东扯西扯。正确的做法是诚恳地告诉面试官:“这个点我之前接触比较少,按我的理解大概是这样的……如果哪里不对,希望您能指出来。”然后用你知道的部分去推测。很多面试官其实不期望你每道题都会,他更看重你在面对未知时的反应。你能不慌、有逻辑地分析,哪怕结论不完全对,也比一句“不知道”体面得多。
我把平时面试时候选人反馈比较多的几个问题整理成了一张速查表,方便你最后一天快速过一遍:
| 高频问题 | 面试官真实意图 | 推荐回答要点 |
|---|---|---|
| 箭头函数和普通函数的区别 | 你是否了解this绑定的底层机制 | this指向、arguments、constructor、原型 |
| Vue中key的作用 | 你是否理解diff算法 | 复用节点、最小化更新、避免状态错乱 |
| 什么是跨域,如何解决 | 你是否理解浏览器同源策略 | JSONP、CORS、nginx代理 |
| 前端如何做权限控制 | 你是否理解路由守卫和指令权限 | 路由权限、按钮权限、接口权限分层 |
| 大文件上传怎么实现 | 你是否了解分片和断点续传 | Blob.slice分片、进度展示、服务端合并 |
| 首屏加载慢怎么排查 | 你是否具备性能优化直觉 | Network面板、资源体积分析、懒加载、SSR |
| Cookie、localStorage、sessionStorage区别 | 你是否理解浏览器存储 | 大小、过期时间、请求是否携带、作用域 |
| HTTP和HTTPS的区别 | 你是否理解加密过程 | 端口、证书、对称非对称加密、TLS握手 |
这张表你可以在面试当天早上过一遍,每个问题都用“概念-原理-应用”三步法在心里默答一遍,花不了多少时间,但会让你在上场前心里更有底。
这里我还要强调一个常被误解的点:背八股文绝不是让你去背标准答案,而是让你从这些高频问题里体会到前端知识体系里哪些是“基石”。比如你能把事件循环讲透,你对异步编程的认知就会上升一个台阶;你能把HTTP缓存讲透,你在实际项目里优化资源加载时就更有方向感。这些能力不会因为面试结束而消失,它们是实打实对你未来工作有帮助的。
6. 最后两天:手写题冲刺与模拟面试实战
到了第六天和第七天,你的重心必须从“输入”切到“输出”。下面我把手写题和模拟面试这两块具体怎么练说清楚。
手写题是前端面试里淘汰率最高的一关。我把最高频的手写题分成四类:第一类是工具函数,包括防抖、节流、深拷贝、数组扁平化、去重;第二类是Promise相关,包括Promise.all、Promise.race、实现一个简易Promise;第三类是原生方法重写,包括call、apply、bind、new、instanceof;第四类是场景题,包括大文件上传、虚拟列表、并发请求控制。这四类里,第一类和第二类出现的概率最高,必须先保证闭着眼睛都能写出来。
我举个例子,手写一个防抖函数,你要能写出这样:
function debounce(fn, delay = 300) { let timer = null; return function (...args) { if (timer) clearTimeout(timer); timer = setTimeout(() => { fn.apply(this, args); }, delay); }; }注意,这里的this传递很多人会漏掉。如果不把this传给fn,在对象方法里调用防抖函数时,内部的this会指向错误。能写出这个细节,面试官会对你另眼相看。节流函数同理,关键是理解“防抖是只执行最后一次,节流是保证固定频率执行”。
模拟面试一定要有人陪你练,哪怕是AI也好,或者你自己对着镜子练也行。最好的方式当然是找一位也是在看前端机会的朋友,两人互相提问,一个当面试官一个当候选人。我在准备跳槽时跟朋友约了几次线上模拟,每次一小时,一轮下来,既练了表达,也练了心态。第一次模拟你会觉得紧张、卡壳,但到第三次的时候基本就能感觉到自己说话有条理了。
模拟面试的时候,我会用手机录下整个过程,结束之后回放。重点听三件事:问题回答得完整吗;有没有车轱辘话来回说;哪些题目卡壳了,卡壳的是什么。我把卡壳题单独列一个清单,再继续背一轮。这个流程坚持两轮之后,你就能明显感觉到自己的面试状态上了一个台阶。
7. 我的个人经验:别把七天真当成终点
最后说点掏心窝子的话。七天背完八股文,在时间上是可行的,但如果你真的只打算背七天就上岸,那是对自己的误判。这七天更像是一个“唤醒期”,把大学里学过但已经遗忘的知识重新激活,把平时用到的API背后原理补齐。八股文能帮你敲开面试的门,但真正让你通过面试的,是你有没有在过往的项目里认真解决问题。
我曾经面试过一个候选人,八股文背得很流畅,但问他项目里最复杂的业务场景是什么,他说了半天也没说清楚。后来我给他放了水,让他讲一个自己觉得有成就感的功能,他眼睛突然亮了起来,讲了一个自己做过的数据可视化大屏,从数据清洗到ECharts配置再到性能优化,说得头头是道。虽然他的八股文回答得也不算突出,但我当时就认定这个人值得给一个offer。因为八股文可以临时背,但项目能力是你真正做过才讲得出来的。
所以,如果你还有时间,我建议你在背八股文的同时,把简历上写的项目重新捋一遍。每个项目都要能回答四个问题:这个项目解决了什么问题;我负责了哪些模块;我遇到的最大难点是什么、怎么解决的;如果让我重做,我会在哪些地方优化。这四个问题,配合扎实的八股文基础,才是面试通过率真正接近99%的配方。
最后再分享一个小技巧:面试前一天的晚上不要刷题了,把手机里的面试题清单关掉,早点睡觉。我见过太多人在面试前一天熬夜背题,结果第二天脑子是糊的,连最简单的问题都答不利索。八股文是脑力活,脑力活需要状态。你准备好了一百道题,却因为没睡好而发挥出六成的实力,还不如准备六十道题,养足精神发挥出九十成的实力。这一点,我个人觉得比多背十道题更重要。