news 2026/9/3 6:23:25

两个月前端学习后的首次面试实录:八股文必须背熟

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
两个月前端学习后的首次面试实录:八股文必须背熟

两个月前,我还坐在重庆某所大学的宿舍里,对着B站上的HTML教程一边敲代码一边怀疑人生。两个月后,我已经坐在一家互联网公司的会议室里,面对面试官抛来的“说一下闭包是什么”,沉默了将近十秒。这篇文章就是我的前端面试实录,一个只学了两个月前端的大三女生,第一次正式参加前端岗位面试的全过程。

标题里那句“八股文一定要背熟”不是套话,是我这次面试踩坑后最真实的总结。如果你也是刚学前端、正准备找工作,应该能从下面这些题和我的表现里看到自己的影子:背了好几天的东西一紧张全忘了,明明写过一个两个小项目却被追问到怀疑人生。我把这次面试的完整过程、暴露出哪些问题、以及后来重新整理的复习清单都写了出来,希望给同样在路上的你一点参考。

1. 两个月前我还在啃HTML标签,两个月后我坐在了面试间

1.1 从零开始的这两个月,我到底学了什么

先说说我这两个月的真实状态。我是重庆一所普通高校的大三学生,专业和计算机没有直接关系,只是平时偶尔帮同学修修电脑、折腾点小脚本,才算和“编程”沾了点边。决定学前端,是因为刷招聘网站时发现前端岗位多、门槛相对友好,而且不用考研就能在秋招里找到机会。

第一个月,我花在HTML和CSS上。跟着B站一套免费视频课,从最基础的<div><p>标签开始,学到flex布局、响应式、简单的CSS动画。那段时间除了上课,我每天大概能挤出来四到六个小时学习,周末就泡在图书馆。学完CSS后自己照着某个电商App的风格写了一个静态页面,虽然现在看来布局和配色都是一言难尽,但那是第一次知道自己能独立完成一个完整的页面,还是挺有成就感的。

第二个月开始啃JavaScript。阮一峰的《JavaScript教程》配着《现代JavaScript教程》一起看,每天写不少小例子。从变量、函数、对象到DOM操作和事件机制,整体都能跟上。但说实话,那会儿我对“事件冒泡”“事件捕获”这类概念理解得模模糊糊,只知道照着模板敲,并不知道底层到底发生了什么。

到了第二个月下旬,我开始看Vue。照着一个教学视频做了一款待办事项应用,能够新增、删除、标记完成,数据保存在localStorage里。我还在本地用npm run dev跑过几个开源项目,学会了几条常用的Git命令。

这就是我面试前所有的家底:HTML/CSS能写静态页面,JS能处理简单交互,Vue能做最基础的单页应用,再深入的什么都不知道。

1.2 为什么学这么点就敢去投简历

很多同学可能会问,学两个月就去面试,是谁给你的勇气?其实不是我多有底气,而是时间不允许我再慢慢学了。

秋招的节奏就摆在那里,身边的同学考研的考研、考公的考公,剩下几个准备找工作的都开始投简历,每天的“秋招交流群”里滚动着各种公司的宣讲会信息。我如果错过这一波,再做准备可能就得等春招,而春招的坑位明显更少。与其等着把知识全学完再动手,不如先投几家中小公司试试,权当积累面试经验。

投简历前我也犹豫过,觉得自己只学了两月,去面试会不会被当场怼回来。但转念一想,面试本身就是学习的一部分,即使挂了,也能知道企业到底要什么、自己差在哪里。于是我做了一份简历,把会的东西挑了挑放上去,就开始海投。

1.3 现在回看,当时简历上最尴尬的表述

面试完之后我回头审视自己的简历,发现上面写得最多的词就是“了解”和“会使用”。“了解HTML5”“掌握CSS基础”“会使用Vue生命周期”“熟悉flex布局”——这些话放到简历上看着没问题,但落到面试官眼里就是“信息量严重不足”。

比较要命的是,我写了一句“熟练掌握JavaScript”。实际上我连mapforEach的区别都说不太利索。面试官看到这句话,自然就朝深里追问,而我一问就露馅。

后来总结经验,简历上与其写一堆“了解”“掌握”,不如直接写项目细节,比如“用Vue实现了一个待办事项应用,支持增删改查和本地存储”,然后把技术栈和遇到的具体问题列出来。这样面试官能有一个具体的话题来问,你也能提前把相关细节准备好。像我那次简历上写满了模糊词汇,等于把提问的方向盘完全交给了面试官。

2. 面试实录:从第一个问题到最后一个问题

2.1 面试前夜的准备和面试时的开场

面试前那天晚上,我干了两件事,一是把之前写的项目代码全部重新过了一遍,二是在A4纸上写了一份自我介绍,练了差不多十遍。我室友说我那天的状态像在准备演讲比赛。

面试当天,我提前半小时到了公司,在楼下的咖啡馆里还在背Vue生命周期的顺序。上楼后先做了一份笔试题,然后就被带进了会议室。会议室里有两位面试官,一个看起来三十岁左右,应该是我未来可能的直属领导,另一个年轻一些,估计是组里的开发。

开场是自我介绍。我练了很久的稿子,本以为能流畅说出来,结果说了不到两句就开始卡壳,只能低头看手心,幸好把“前端”“JavaScript”“Vue”这几个关键词都说了出来。现在回头看,面试官其实见惯了这种紧张场面,他们真正在意的是后面的技术问题能不能答明白。

2.2 技术面试的题目和我的翻车现场

下面按照当时的提问顺序,列一些我印象深刻的题目,以及我当时的反应和后来补上的正确答案。

第一题是全靠背的HTML语义化。面试官问我:“HTML5有哪些新增的语义化标签,它们有什么作用?”这个词我见过,也知道像是headernavmainarticlefooter这些标签。我把它们背了出来,但面试官追问“为什么需要用这些语义化标签”时,我只憋出一句“代码结构更清晰”,更深层的“有助于SEO”“方便屏幕阅读器无障碍访问”这些点完全没有想到。

第二题是盒模型。这个问题我在视频课里反复看到过,所以回答得比较顺利:box-sizing: content-box时宽度只包括content,border-box时宽度包括content、padding和border。面试官跟了一句“padding和margin对布局有什么影响”的时候,我也能顺着说下去。这道题算是勉强过关。

第三题是flex布局。“flex布局里面justify-contentalign-items分别控制什么?”这个我答得上。但他又问“flex: 1是哪几个属性的简写”,我直接愣住了。我只知道flex: 1能占满剩余空间,却不知道它其实是flex-grow: 1; flex-shrink: 1; flex-basis: 0%三个属性的简写。这一题算是暴露了我只记住用法、不理解底层的毛病。

第四题是JS数据类型。 面试官问“JavaScript有哪些数据类型,typeof null返回什么?”前半段我背得出:numberstringbooleannullundefinedobjectsymbolbigint。但typeof null返回的是"object",我却记成了"null"。面试官听到后很温和地纠正了我,然后追问“为什么typeof nullobject”,我只能摇头。这其实是一个经典的历史遗留问题:早期JavaScript里null的二进制存储是000开头,而000开头被判定为对象类型,这个设计就保留到了今天。

第五题是闭包。 面试官让我“说说闭包是什么,闭包会产生什么副作用”。这个概念我见过很多次,但表达得支离破碎。我说“函数里面返回一个函数,内部函数可以访问外部函数的变量”,但“外部函数的作用域会被保留”“容易造成内存泄漏,需要及时把引用置为null”这些关键点都没有提到。面试官随后问“有没有遇到过闭包引起的内存泄漏”,我只能老实地说了没有。

第六题是事件循环。 这是一道典型的输出顺序题:代码只有三行。setTimeout(() => console.log(1), 0); Promise.resolve().then(() => console.log(2)); console.log(3);。我脑袋里当时全是浆糊,脱口而出“1、2、3”。实际正确顺序是3、2、1,因为同步代码先执行,微任务队列在宏任务队列之前被处理。这道题是我最懊悔的,因为事件循环是高频题,我也看过相关文章,但到了现场完全没能调用出来。

第七题是Vue的v-if和v-show。这个问题我能答完整:v-if是真正的销毁和重建,初始为false时不会渲染DOM,切换开销更大;v-show无论初始真假都会渲染,只是用display:none来控制显示隐藏,初始渲染开销更大。面试官问“那具体场景下选哪个”,我答“频繁切换用v-show,不频繁切换用v-if”,算是过关。

第八题是组件通信。面试官问“Vue组件之间有哪些通信方式?”我说了props和$emit,面试官追问“跨级组件通信用什么”,我脑子里只冒出来“vuex”这个词,却没有想到provide/inject。这题说明我对组件通信的理解只停留在“父子传参”这个层面,对复杂项目里的数据流没有概念。

第九题是手写代码:数组去重。面试官递给我一张纸,让我写一个数组去重的方法。我写了一个Array.from(new Set(arr)),然后他问我“如果不用Set,你能再写一种吗?”我当时想了很久,写了一个嵌套双循环。面试官看了一眼,又问“这个时间复杂度是多少?”我说O(n²)。他点点头,没继续追问。后来我才知道,还可以用reduce配合includesfilterindexOf、以及排序去重等方法。

第十题是防抖节流。面试官问“你了解防抖和节流吗?”我脑子里有一些模糊的印象,知道它们和性能优化有关,但解释不清区别,更写不出实现代码。面试官很有耐心,解释了一遍“防抖是在事件停止触发后才执行,节流是每隔固定时间执行一次”,问我“听过没有”,我说听过,但写不出来。这题基本白送。

2.3 面试官最后问的那个问题

技术问题问完后,面试官露出了一个比较放松的表情,问了一个我到现在还记得很清楚的问题:“你觉得以两个月的学习时间来说,自己现在能不能胜任前端开发?”我没有回答好,只说了句“我会继续努力学习”,然后就沉默了几分钟。

现在想想,这个问题的答案不是让我表态努力,而是想看我对自身能力有没有清晰的认知。比较合理的回答可能是:“以现在的水平,我不能直接上手大型项目,但能完成独立的页面开发,并且我知道自己的短板在哪里,会在入职后快速补齐。”这种回答既能体现真实水平,又不会给人盲目自信的感觉。

2.4 当晚的复盘:我给自己列了一份未掌握清单

晚上回家后,我在手机备忘录里把当天没答出来的题目全部列了一遍,又翻网上的前端面试题库对照了一下,发现自己至少有十几个知识点处于“见过但说不清”的状态。那些我原本以为背熟了的题,在压力环境下经不住任何追问。

我把它们整理成了几个类型:基础概念类(盒模型、语义化标签)、原理类(事件循环、原型链、闭包)、API细节类(flex:1typeof null)、手写题类(数组去重、防抖节流)。这份清单成了我后面一周复习的核心。

3. 为什么背熟八股文,是刚学前端时最划算的投资

3.1 面试官问八股文,到底想验证什么

以前我觉得“八股文”这个词带点贬义,好像会背就能过面试。但真正经历过一次面试后我发现,对于刚入行的新手,面试官问八股文并不是真想考背诵,而是想快速确认三件事:第一,你的基础概念是不是清晰;第二,你有没有理解某些机制背后的原理;第三,遇到问题时你能不能沿着原理找到排查方向。

对于只有两个月的学习者,简历上能写的东西本来就少,项目经验也基本是教学级的小应用。面试官很难通过简历判断你的真实水平,八股文就成了最快的信息获取方式。比如问“闭包是什么”,表面上是考概念,实际上是通过你的表述逻辑,看你有没有建立“作用域、持久引用、内存占用”这一整条知识链的意识。

3.2 几乎所有八股文背后,都对应一个真实工程问题

我在后续复习时发现,前端面试题并不是相互孤立的,它几乎每道题背后都对应着一个工程场景。把这些场景找出来,学起来就不像是在背题,而是在补能力。

我列了一个自己的对照表:

八股文知识点对应真实工程问题
事件循环定时器、接口请求、动画调度的执行顺序管理
闭包封装工具的私有变量、避免全局变量污染
原型链与继承组件库里的类封装、公共方法提取
v-if / v-show首屏加载优化、列表渲染效率
组件通信中大型SPA的数据组织方式
浏览器缓存首屏优化、资源更新策略
防抖节流搜索框输入、滚动事件监听、窗口resize
跨域前后端分离项目的接口联调

这样对照之后,八股文不再是孤立的“概念”,而是一个个可以解决的真实问题。面试官问你“事件循环”,其实是在看你能不能理解浏览器里异步任务到底是怎么运行的。你说清楚了,面试官自然能推测出你在处理复杂交互时起码不会手忙脚乱。

3.3 “背熟”到底是怎么背的:理解优先,输出加持

我经常在刷题软件上看到有人分享“两天背完前端300题”之类的经验,这种速成方法我不太建议。因为八股文背得再熟,面试官只要换一个问法,或者多追问一句“为什么”,原来那种机械记忆马上就会露馅。

我后来摸索出来的背法分三步:

第一步,先回答“这个知识点解决什么问题”。比如防抖解决的是“高频触发事件导致性能浪费”的问题,那你就先记住这个场景。

第二步,再理解“它的核心原理是什么”。还是说防抖,原理就是每次触发时都重置一个定时器,只有最后一次事件不再触发时,定时器才会执行回调。

第三步,用自己的话讲一遍。我会把每个知识点讲给我室友听,或者对着手机录音自言自语,讲得磕巴的地方就是我没有真正理解的地方。

等到再进面试间的时候,我应该能做到的是:不用把定义背得一字不差,但能用自己的语言把概念讲清楚,能自然地接住面试官的追问。这种状态,才是真正意义上的“背熟”。

4. 踩坑后重新整理的前端八股文复习清单

4.1 总体复习策略和时间节奏

面试结束后,我给自己定了一个两周的快速弥补计划。因为还在上课,每天能用的时间大概是三个小时,我的安排是上午一个小时复习,下午一个半小时写代码,晚上半小时复盘。

我把复习分成了“输入-输出-复盘”三个环节:输入就是理解知识点、看文章和文档;输出就是合上资料,把自己当成面试官,把题目默写或讲出来;复盘就是发现自己讲不清的地方,回去重新理解一遍。这个过程看起来很慢,但比直接刷题要牢固很多。

另外,我必须强调一个很多人会忽略的点:每天都要写代码。八股文复习得再好,如果手写题和项目细节不清,面试同样会挂。我给自己定的目标是每天至少完成一道手写题,平时维护一个开源练习仓库,把每天写的小例子都提交上去。

4.2 各模块核心清单和面试追问方向

下面是我整理的前端八股文复习清单,按照模块划分,每一行都标注了容易被追问的方向。这份清单不追求覆盖所有面试题,但对刚入门的初学者来说,优先把这些啃透,比盲目刷几百道题更有效率。

模块核心题目常被追问方向
HTML/CSSHTML5语义化标签、盒模型、flex布局、CSS选择器优先级、响应式布局flex:1简写、BFC是什么、position取值和区别
JavaScript基础数据类型判断、闭包、原型链、this指向、事件循环、防抖节流、深拷贝、数组去重typeof和instanceof区别、闭包内存泄漏怎么办、微任务宏任务执行顺序
浏览器与网络浏览器缓存、跨域、DOM操作性能、渲染机制Cache-Control和ETag逻辑、JSONP原理、CORS具体配置
VueVue生命周期、v-if/v-show、组件通信、响应式原理、nextTick、vue-router各生命周期适合做什么、provide/inject怎么用、vue2和vue3响应式区别
手写代码数组去重、防抖节流、深拷贝、Promise简易版、call/apply/bind、柯里化复杂度分析、边界条件处理、ES6和ES5两种写法

这个表格其实就是我的复习地图。我会在每一项后面标好“已理解”“能讲述”“能手写”三个状态,只有达到“能讲述”和“能手写”之后,才会把这项划掉。

4.3 必须手写的那几道题

面试中手写题是跑不掉的,尤其数组去重和防抖节流,基本属于必考。我在这里放几个我总结的简单实现,供大家参考。

数组去重,最常用的是Set

const arr = [1, 2, 2, 3, 4, 4, 5]; const unique = [...new Set(arr)]; console.log(unique); // [1, 2, 3, 4, 5]

面试官不让用Set时,可以用filterindexOf

const unique = arr.filter((item, index) => arr.indexOf(item) === index); console.log(unique);

核心逻辑是:indexOf返回的是元素第一次出现的位置,如果当前元素不是第一次出现,就过滤掉。这个方法的时间复杂度是O(n²),面试官追问复杂度时,可以直接说出来。

防抖和节流是两段比较容易写的代码。防抖的核心是每次触发时清除上一次的定时器:

function debounce(fn, delay = 500) { let timer = null; return function (...args) { if (timer) clearTimeout(timer); timer = setTimeout(() => { fn.apply(this, args); }, delay); }; }

节流的核心是判断时间间隔:

function throttle(fn, interval = 500) { let last = 0; return function (...args) { const now = Date.now(); if (now - last >= interval) { last = now; fn.apply(this, args); } }; }

写完代码之后,我还会顺便说出一句适用场景,防抖适合搜索框的输入事件,节流适合滚动事件和窗口resize。这种“代码+场景”的组合,面试官一般会认可。

4.4 用费曼技巧把八股文变成自己的东西

学教育心理学的人应该都知道费曼技巧,本质就是“如果你想真正学会一件事,就试着讲给一个完全不懂的人听”。我把这个技巧用在复习八股文上,效果出奇地好。

具体操作是这样的:每天挑三个知识点,然后在手机备忘录里用最直白的语言把它的原理写出来,假装读者是跟我一样刚学前端的小白。比如解释事件循环,我会写成“JavaScript是单线程的,所以遇到异步任务不能干等着,要先把同步代码执行完,再把异步任务按顺序处理。处理时优先把微任务队列清空,然后再去宏任务队列里拿一个任务出来执行。”

写完以后,我会大声朗读一遍,读的时候如果哪个地方卡住了,就说明这个地方还没理解透,我会回头重新查资料。这种“写一遍+读一遍+讲一遍”的方法,比单纯背答案要高效很多,因为它逼着我用自己的语言重新组织了一遍知识。

5. 面试失败后的复盘:给同样只有两个月学习时间的你

5.1 面试失败不是能力判死,而是一种信息反馈

第一次面试的结果并不意外,当天晚上我就收到了很遗憾的通知。说完全不难受是假的,但缓过来以后,我反而觉得这次面试是花最小的代价拿到了最真实的能力报告。

每一道没答出来的题,对应着都是可以补上的知识缺口。比如“事件循环的题目答错”意味着我对异步机制没有建立正确的模型;“防抖节流不会写”意味着我对性能优化场景没有概念;“手写数组去重被追问复杂度”意味着我在算法意识上还很薄弱。与其在图书馆里自我怀疑,不如把这些缺口一个一个填上。

我把这次面试当成了一次免费模拟考,而出题人第一次给我划出了重点范围。如果不是这次面试,我可能还在闷头看Vue教程,完全不知道面试官真正关心的是这些基础能力。

5.2 先从小公司练手,别把第一次面试交给心仪公司

回头看我这次投递,其实有一些选择上的失误。我一开始投了好几家还算知名的大厂,结果基本都石沉大海,反而是几家中型公司给了回应。现在想想,面对第一次面试,如果能有选择的话,我会建议先投几家小公司练手,把面试流程、心理节奏、常见问题摸一遍,再去面对那些更重要的机会。

小公司的面试题通常更贴近基础,能给你一个相对温和的氛围去适应“被面对面提问”的感觉。在小公司面试时练熟自我介绍和几个高频题,把紧张感消耗掉,等到心仪公司的机会来临时,至少在表达上不会拖后腿。

另外,投递简历时不要只刷同一个城市的岗位。我当时只关注了重庆本地的一些公司,后来发现一些二线城市也开放了大量实习和校招岗位,线上远程面试也很常见,机会会宽很多。

5.3 除了八股文,这两件事别忘了

八股文重要,但只背八股文不足以让你胜任一份工作。我总结了两个很容易被初学者忽略的点:

第一,每天都要保持写真实的代码。面试官问你项目经历时,如果只回答“我之前写过一个商城项目”,对方追问“你们怎么处理登录状态的”或者“列表页怎么做性能优化”时,没有真实实践过的人完全答不上来。我接手的一个练习项目里,因为用了组件懒加载,首次加载速度快了不少,这种细节都能成为面试中的加分回答。

第二,学会诚实地表达自己的能力边界。面试中遇到不会的题,不要硬编一个答案,面试官很容易察觉。可以礼貌地说:“这个问题我现在掌握得还不扎实,但我了解它的大概原理是……后续我会把这个知识点补起来。”这种回答比硬编要好得多。后来我再看那些面试复盘帖,很多资深前端也表达过类似观点:更看重候选人面对盲区时的态度和反应。

5.4 我现在的调整计划

面试结束后,我给自己制定了一个新的学习计划,不再追求“一个月学完JS”这种不切实际的目标,而是重新回到基础,把JavaScript、浏览器原理、计算机网络这几个最核心的部分一题一题地啃下去。

同时,我开始维护自己的技术博客,把每天学到、背熟的知识点写成文章发布出去。这不仅是复习,也是在为下一次面试积累“可见的经验”。两个月后,如果有机会再参加面试,我希望面对“说说你对闭包的理解”时,可以从容地讲出三分钟,而不再是沉默十秒。

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

MinerU:4GB 显存跑通文档解析,输出 LLM 可用的 Markdown 与 JSON

MinerU&#xff1a;4GB 显存跑通文档解析&#xff0c;输出 LLM 可用的 Markdown 与 JSON 【免费下载链接】MinerU Transforms complex documents like PDFs and Office docs into LLM-ready markdown/JSON for your Agentic workflows. 项目地址: https://gitcode.com/GitHub…

作者头像 李华
网站建设 2026/9/3 6:23:21

彻底搞懂 JavaScript this 绑定:从调用规则到实战避坑指南

1. 从一段“莫名奇妙”的报错说起&#xff1a;this 为什么是 undefined先还原一个我前几天真实遇到过的场景。同事在代码评审群里发来一段代码&#xff0c;满脸困惑地问&#xff1a;“为什么这里 this 是 undefined&#xff1f;我明明在对象里定义的函数啊。”const user {nam…

作者头像 李华
网站建设 2026/9/3 5:40:04

H5与CSS八股文:从布局到微信生态的实战笔记

说实话&#xff0c;整理这份 H5、CSS 的八股文&#xff0c;是我面了好几轮前端之后才痛下决心做的事。以前总觉得背面试题没意思&#xff0c;但真到写项目的时候才发现&#xff0c;很多问题不是 "会不会写" 的问题&#xff0c;而是 "知不知道为什么要这么写&quo…

作者头像 李华
网站建设 2026/8/31 9:09:01

全栈实战:基于SpringBoot+微信小程序+LayUI的失物招领系统设计与实现

简介&#xff1a;全栈开发是构建现代Web应用的核心能力&#xff0c;它要求开发者掌握从前端到后端、从数据库到部署的完整技术链条。其原理在于通过前后端分离架构&#xff0c;实现业务逻辑、数据管理和用户界面的解耦与高效协作。掌握全栈技术对于开发者理解系统整体架构、提升…

作者头像 李华
网站建设 2026/8/31 11:56:02

新生初一中考规划

下面是为你(一位刚上初一、目标是重点高中的学生)量身定做的三年规划。先记住三句话,再展开: 中考是三年长跑,初一就是起跑线——不是初三才开始冲刺; 先搞清楚「怎么考上」,再谈「怎么学」——录取规则比努力方向更重要; 决定中考成绩的 80% 是习惯和方法,不是天赋。…

作者头像 李华