☰
前端暑期实习面试笔试全攻略:考点分析、手写题与项目经验
2026/10/5 7:49:01 网站建设 项目流程

暑期实习前端面试笔试,其实是把大学里学的知识、平时自己写的代码和临场快速解题的能力放到一块儿一次性验收。我自己准备暑期实习时,3月中旬开始投递,前后折腾了一个多月,笔试做了近十套,面试聊了七八家,才算真正摸清这套游戏的规则。这篇总结汇总就是那段经历的复盘,重点把笔试考什么、面试问什么、项目怎么讲、坑怎么避拆开讲。适合正在准备暑期实习或日常实习的同学,也适合刚转前端还没理清复习方向的朋友做一份查漏补缺的清单。

前端这个岗位的面试,表面上考察范围一年比一年宽,但底层逻辑其实非常稳定:基础扎不扎实、项目有没有深度、遇到问题能不能落地。下面我按流程拆开讲,每部分都会配合具体的例题和解析思路。

1. 暑期实习前端面试笔试整体节奏:先搞清楚“考什么”再复习

1.1 实习面试的时间线与投递策略

大部分公司的暑期实习招聘在每年的2月底到4月底之间集中开放,3月到5月是笔试和面试的高峰期。如果你想赶上第一波,提前批的官网投递一般2月就开了,内推码在某些招聘社区和牛客上能找到不少,能拿到内推就尽量走内推,简历被捞起来的概率会高一些。

投递策略上,我的建议是“海投但要分梯度”:梦厂投几家,中型公司投几家,练手的公司也投几家。练手公司不是让你去敷衍,而是用它们来适应笔试节奏和面试氛围,毕竟很多人第一次笔试都会因为紧张或者不适应时间分配而翻车。

时间节点上,最好在投递前至少留出一个月的集中复习期。投递太早容易在笔试环节就暴露基础漏洞,投递太晚又会跟学校的课程设计、期末考试撞车,压力很大。我当时是寒假开始系统复习,开学后边上课边刷题,到3月中旬正好把主要知识点过完一遍。

1.2 用“考察范围反推复习主线”

前端实习笔试面试的考察范围,可以粗略分成六块:HTML/CSS基础、JavaScript核心、框架应用、网络与浏览器、工程化工具、算法与手写代码。不同公司在这六块上的权重不太一样,大厂更重视基础和算法,中小厂更看项目匹配度和框架熟练度。

我整理过一张复习优先级表,按实习面试真题的出现频率做过一轮统计:

考察维度常见题型准备深度
JavaScript核心选择题、手写题、问答极高,几乎每场必考
CSS基础与布局选择题、代码输出高,笔试选择题高频
框架应用场景题、项目追问极高,面试主战场
网络与浏览器选择题、简答高,缓存和跨域常年出现
工程化与部署简答、场景题中高,问得越来越细
算法与数据结构编程题中大厂必考,难度一般到LeetCode中等

复习主线不要按教科书顺序来,而是按“面试官常问清单”来反推。比如你觉得浏览器缓存很重要,就专门去啃Cache-Control、ETag、强缓存与协商缓存的区别;你觉得闭包和事件循环绕不开,就先把这两块理解到能给别人讲明白的程度。前端八股文被很多人吐槽死记硬背,但如果能把每个条目背后的原理也讲清楚,面试官反而会认可你的学习深度。

1.3 项目经验与技术栈的匹配度

项目面在实习面试里的分量,其实比很多同学想象中重。大多数应届生简历上写的都是后台管理系统、商城、博客这类常规项目,技术栈高度雷同。如果你用的是若依这类成熟脚手架开发,或者自己用Vue3封装了一套组件库,面试时怎么讲出差异化就很重要。

我的建议是:项目可以普通,但你得能说清楚“我改了什么”“我为什么这么改”“遇到的问题是怎么定位的”。同样是后台管理项目,别人只做增删改查,你如果做了按钮级权限控制、路由懒加载、组件按需加载、接口请求的统一封装,这些细节就是面试官愿意听的亮点。

如果简历上写了组件库、微前端、SSR、低代码平台这类关键词,一定要确保自己真的理解底层原理。面试官看到这些词的兴趣会立刻提高,追问也会深入得多。比如你说自己封装过组件库,他大概率会问:组件之间的通信怎么设计?怎么避免props层层传递?插槽和render函数各自的适用场景是什么?答不上来反而比不写更减分。

2. 笔试与机试:手写题、算法题、选择题三类题型的准备细节

2.1 笔试题型概览

前端实习笔试的格式通常比较固定:选择题(包含单选和多选)、简答题、编程题(有的公司拆成算法题和前端手写题)。整套卷子限时90到120分钟,常见的痛点是时间不够用。

选择题主要考细节,比如以下哪些方式可以改变this指向、typeof null的结果是什么、flex布局中align-items的默认值是多少、哪些属性可以触发GPU加速。这些题目不难,但非常考验知识点的准确性,复习时不能只求理解,该记的结论还是要记牢。简答题一般会让你解释某个概念,比如跨域是什么、为什么要使用虚拟DOM、浏览器从输入URL到页面展示发生了什么,属于“背了就能拿分”的类型,但要注意用自己的话组织,不要像背书一样。

编程题里,算法题和手写题往往交替出现。有些公司算法题和手写题都放在一个编辑器里,前面几道是算法,后面几道是手写一个防抖函数或者实现某个原型方法。后面这几道对前端同学来说反而是送分题,但如果你平时习惯用脚手架开发、很少手写核心API,临场写不出来也很正常。所以复习时,手写题一定要脱离IDE,在空白文本里直接写,手机上写也可以,重点是练出手感和边界条件意识。

2.2 手写题高频清单

常考的手写题,我按出现频率列一个清单,这些都是前端笔试里的“老演员”了:

  • 手写防抖函数和节流函数
  • 手写深拷贝,要求处理对象、数组、Date、RegExp、循环引用
  • 手写Promise,至少实现then、catch、resolve、reject、all、race
  • 数组去重、数组扁平化、实现柯里化函数
  • 手写new、instanceof、call、apply、bind
  • 实现一个简单的事件总线(EventEmitter)
  • 实现LRU缓存淘汰算法
  • 手写一个简单的虚拟DOM渲染或diff(高级考察)

以深拷贝为例,很多人能写出第一版,但处理循环引用时容易卡住。正确思路是用WeakMap保存已拷贝的对象,拷贝前先检查是否存在,存在就直接返回,避免栈溢出。代码大致是:

function deepClone(target, map = new WeakMap()) { if (typeof target !== 'object' || target === null) return target; if (map.has(target)) return map.get(target); const clone = Array.isArray(target) ? [] : {}; map.set(target, clone); for (const key in target) { if (Object.prototype.hasOwnProperty.call(target, key)) { clone[key] = deepClone(target[key], map); } } return clone; }

这类题目看起来简单,但真正拿满分需要把所有边界情况都考虑到。手写Promise更是如此,光是处理状态流转的边界就能看出一个人的代码功底。我的建议是不要背答案,而是自己写三遍以上,每写一遍替换一种实现思路,写多了之后面试时即使紧张,肌肉记忆也能帮你撑过去。

2.3 算法题的准备边界

前端实习的算法题,难度基本在LeetCode简单到中等之间。常考的题型集中在数组、字符串、哈希表、链表、二叉树、双指针和动态规划入门。刷题量不用追求几百道,但每个常见题型至少要练熟几道代表题。

我的刷题策略是按题型分类练习,而不是按题号顺序刷。比如花一周把二叉树相关的简单题和中等题刷完,再花几天把动态规划的基础模型过一遍。刷题时优先看经典题:两数之和、三数之和、反转链表、合并两个有序链表、二叉树的前中后序遍历、层序遍历、最长回文子串、爬楼梯、最大子数组和、有效的括号。

笔试现场遇到没见过的题很正常,靠的是平时练出的“拆题能力”。读题后先分析最暴力的解法是什么,再想想能不能优化时间和空间复杂度。就算最后AC不了,能写出暴力解法、讲清楚优化思路,部分公司也会给一定分数。

2.4 机试的时间分配与本地环境

机试容易翻车的地方反而不在题目本身,而在环境适配。有些公司的笔试系统只支持特定浏览器,代码编辑器没有自动补全,还不允许粘贴外部代码。我第一次用某家的在线编辑器时,连函数声明都因为不习惯而写慢了,后面才慢慢适应。

做编程题时,先花两三分钟通读所有题目,评估难度,优先做有把握的题。选择题控制在40%的时间以内,把更多时间留给编程题。写完代码后一定自己跑一遍测试用例,尤其注意边界条件,比如输入为空、长度为1、全是重复元素的情况。

如果你拿到的是带摄像头监控的机试,注意保持环境安静,别在答题过程中看手机。部分公司机试规则里明确写了“切屏会被记录”,我身边有同学因此被判违规。规则不合理的也有,但现阶段只能遵守。

3. 面试八股文高频考点:把“基础原理”讲成自己的话

3.1 JavaScript核心:闭包、事件循环、this、原型链

JavaScript核心是前端面试的重灾区,也是最能拉开差距的部分。最常见的开场问题是“说说你对闭包的理解”。面试官想听的不是“函数里面返回函数”这句话,而是你能说出闭包的形成机制:函数在定义时会记录所在的作用域,当内部函数被外部变量引用时,这个作用域链不会被销毁,导致外部函数的变量被保留下来。能举出闭包的实际应用场景会更好,比如防抖、节流、模块化封装私有变量,以及循环中let块级作用域的原理。

事件循环也是高频考点,追问深度可以从宏任务微任务到浏览器渲染机制。要能画得出完整流程:执行同步代码,遇到微任务放进微任务队列,遇到宏任务放进宏任务队列,同步代码执行完毕后依次清空微任务,再从宏任务队列取出一个任务执行,如此循环。面试中经常会给你一段代码问你输出顺序,比如:

console.log('1'); setTimeout(() => console.log('2'), 0); Promise.resolve().then(() => console.log('3')); console.log('4');

答案是1、4、3、2。如果连这题都犹豫,说明事件循环的基础还不牢。

this指向和原型链也是必考。this的指向总结下来无非四条规则:默认绑定指向window或undefined、隐式绑定指向调用者、显式绑定通过call/apply/bind、new绑定指向新对象。箭头函数没有自己的this,它的this沿作用域链向上查找。原型链要能说清__proto__和prototype的区别,以及instanceof的查找机制。

3.2 CSS高频题:居中、布局、BFC、响应式与动画

很多前端同学在CSS上栽跟头,就是因为觉得CSS“没什么好复习的”。实际上笔试选择题里CSS的细节题非常多,面试里也常会现场让你说几种垂直居中的方案。

垂直居中的方案至少要知道三种以上:flex布局、grid布局、绝对定位加transform、表格布局。每种方案的适用场景也要能说清楚,比如flex兼容性最好但需要注意容器高度,绝对定位加transform适合已知容器大小的场景,grid在一维布局下反而有点杀鸡用牛刀。

BFC是CSS面试的经典概念。要能说出BFC的形成条件,比如float不为none、overflow不为visible、display为inline-block或flex、position为absolute或fixed。更要能说清BFC的作用:清除浮动、防止margin合并、阻止元素被浮动元素覆盖。CSS动画方面,高频考点是transform和animation配合使用,以及如何避免动画导致的性能问题。能用will-change做优化、能用transform代替top/left做位移动画,这些都是加分项。面试官如果深挖动画性能,还会问到GPU加速的触发条件和层合成的概念。

布局方面,flex和grid需要对常用属性非常熟悉,比如flex: 1到底代表什么、flex-shrink和flex-grow的计算方式、grid-template-columns和grid-area怎么用。响应式布局里,媒体查询、rem/vw适配、移动端1px问题都是常客。

3.3 框架面试的重点:Vue组件通信、响应式原理、diff;React Hooks与Fiber

框架这一块,Vue和React至少要有一个能聊得足够深入。以Vue3为例,组件通信是必考:props和emit、provide/inject、事件总线、v-model的语法糖、Vuex或Pinia状态管理。每种通信方式的适用场景要能说出来,比如跨多级组件传值用provide/inject,复杂状态共享用Pinia,兄弟组件传值可以先提升到父组件再通过props下发。

响应式原理是深水区。Vue2的Object.defineProperty和Vue3的Proxy要能对比着讲,包括为什么Vue3要换成Proxy、数组和对象新增属性的区别、依赖收集和触发依赖的流程。能说出“使用Proxy可以拦截整个对象而不用遍历所有属性”这个关键点,面试官会继续追问:那Proxy为什么性能更好?这时候就要提到懒代理机制,访问到哪个属性才代理哪个属性,避免了Vue2初始化时递归遍历带来的开销。

diff算法也需要准备。虚拟DOM的diff过程是逐层对比,同层之间通过key来优化复用。Vue的diff采用双端指针的方式,React的diff则完全不同。如果你只熟悉Vue,最好把Vue3的diff流程讲清楚,至少要说得出patch、props比较、children比较这几个阶段。

如果你面的是React岗位,Hooks和Fiber是绕不开的。useState、useEffect的依赖数组机制、useMemo和useCallback的区别、为什么要用key、Fiber架构下render阶段和commit阶段的区别,这些都要有概念。特别是Hooks的闭包陷阱,面试官特别喜欢出实景题,比如在setTimeout中打印state为什么拿不到最新值。

3.4 浏览器与网络:缓存、跨域、性能优化、安全

浏览器缓存是一个百问不厌的考点,而且问法很多变:强缓存和协商缓存的区别、Cache-Control和Expires的区别、ETag和Last-Modified的区别、哪些资源适合强缓存哪些适合协商缓存。我建议你要是能把“浏览器从地址栏输入URL到页面展示”的完整过程串下来,里面顺带把DNS解析、TCP握手、HTTP请求、缓存判断、渲染流程全部带出来,这一串能讲完,网络和浏览器部分基本就稳了。

跨域问题的解决方案要准备:JSONP的原理和限制、CORS的配置和预检请求、反向代理的配置思路、postMessage的使用场景。很多前端新人不知道跨域是浏览器层面的限制,反而把问题归结为“后端不让我调”,这个认知偏差面试官一眼就能看出来。就讲清楚一点:跨域请求本身发出去了,服务端也收到了,是浏览器拦了响应。

性能优化适合跟项目面结合起来答。比如首屏加载白屏怎么排查、图片懒加载怎么实现、长列表渲染卡顿怎么优化、打包体积过大怎么处理。能配合项目里的具体数据和优化前后对比,说服力会强很多。

安全方面只要掌握XSS和CSRF就够了。XSS的核心是不要信任用户输入,处理方式是转义、CSP、避免使用innerHTML插入不可信内容。CSRF的核心是跨站请求伪造,防御手段有同源检测、CSRF Token、SameSite Cookie。

3.5 工程化与其他:模块化、构建工具、微前端、nginx部署

工程化问题这两年问得越来越多。模块化是基础,CommonJS和ESModule的区别要说清楚,包括导出方式、加载时机、动态导入。Webpack的核心概念至少要掌握entry、output、loader、plugin、tree-shaking、代码分割。Vite要能讲出它为什么比Webpack快,核心在于开发环境用原生ESM、按需编译,而不是先打包再启动。

如果你在简历里写了微前端相关项目,那history路由、沙箱隔离、样式隔离、应用通信这几个概念要准备得很充分。微前端不是所有公司都考,但一旦考了就会问得很深,比如JS沙箱的实现原理(快照沙箱还是代理沙箱)、样式冲突的解决方案(CSS Module、前缀隔离、Shadow DOM)。

nginx部署前端项目也是被问到的热点,尤其是简历里写了部署经验时。config文件的server块、root和index配置、try_files解决history路由404问题、静态资源缓存配置、gzip压缩,这几项能熟练说出来就够用了。手头有服务器的同学,建议自己真的部署一次Vue项目,面试时提到部署过程会很有底气。

4. 项目面与场景题:把“做过的东西”讲成能打的面试素材

4.1 项目介绍的基本框架:背景、难点、解决方案、成果

项目面最怕的就是候选人把自己做过的事讲成流水账:先做了什么,又做了什么,最后做完了。面试官听完只记得你做了个后台管理系统,但完全不知道你的价值在哪里。

推荐用“背景-难点-方案-成果”四段式来讲项目:先一句话交代项目背景和用户群体,再抛出你在项目中遇到的最大技术难点,接着详细讲你是怎么分析问题、对比方案、最终落地的,最后给出量化的成果。哪怕你的项目很简单,只要有一个点讲得够深,面试官就会觉得你有解决问题的能力。

举个例子,如果你做过一个后台管理系统的权限控制,可以这样展开:背景是需要给不同角色分配不同菜单和按钮权限;难点是动态路由和页面刷新后权限丢失;方案是用后端返回的权限码在前端本地做路由过滤,同时利用路由守卫在每次跳转时校验,通过Pinia状态管理和本地缓存做持久化;最后实现了登录后按角色生成路由表,也解决了用户手动输入URL绕过权限的问题。这样一个项目点就非常能体现工程思维。

4.2 高频场景题与追问:前端传参、大文件上传、接口并发与重试

场景题考察的是临场设计能力,面试官会给一个实际业务场景,让你说思路。前端传参是其中被问得非常多的:GET传参和POST传参的区别、查询参数传数组怎么处理、对象参数怎么保持嵌套结构、如何防止参数在传输过程中被篡改。后端项目的接收方式是Java SpringBoot,这时候谁都能猜到会问前后端参数格式要对接,比如JSON字段命名风格是camelCase还是snake_case,日期格式怎么统一。

大文件上传也是一个很典型的场景题。基础方案是切片上传,把大文件切成一个个固定大小的分片,每个分片独立上传,全部上传完成后后端合并。进阶追问非常密集:怎么实现断点续传?答:用file对象的lastModified加文件名生成唯一标识,计算已上传的分片index,然后继续传未完成的分片。怎么实现秒传?答:上传前先计算文件整体MD5,向服务端查询这个指纹是否已存在,存在就直接返回上传成功。会不会用到Web Worker?答:大文件的MD5计算很耗时,可以放到Worker里执行,避免阻塞主线程。

接口并发和幂等问题也是一些公司会问的场景题。前端在某些场景下会重复提交表单,比如用户双击提交按钮,后端没做幂等就会产生两条订单。前端方案是提交前做按钮loading禁用,提交中设置一个isSubmitting标志。如果涉及多条请求,可以用requestId去重,同一请求在短时间内不重复发送。后端幂等问题虽然不归前端管,但理解了整个链路,面试时能讲得更完整。

4.3 技术亮点的包装:组件库、权限控制、微前端、AI辅助编程

项目面能不能出彩,重点在于你会不会“包装”技术亮点。这里的包装不是造假,而是把你做过的所有认真思考过的点都梳理出来。比如你把表格封装过一遍,把常用的搜索栏、分页、操作按钮整理成了一个通用组件,这就是组件封装能力。你说自己做过组件库,面试官会问到你如何设计API、如何处理插槽和默认行为、如何发布和维护,这些问题如果都能接得住,项目面基本就稳了。

如果你用了微前端来拆分一个巨石模块,可以从团队协作的角度讲为什么需要微前端:多个团队技术栈不同、部署独立、互不阻塞。这个回答比单纯说“我用了qiankun”要高级得多,因为面试官想听到的是你做技术选型时的取舍过程。

近一年前端AI相关的热度涨得很快。如果你的日常开发里用了AI辅助编程工具,比如Cursor或GitHub Copilot,这个也可以作为谈资。但谈到AI辅助编程时不要只说“我让它帮我写了个页面”,而要聊你是怎么设计prompt、怎么审查它生成的代码、怎么在面对模棱两可的需求时用AI辅助梳理技术方案的。

5. 常见问题与避坑实录:面试踩过的坑,希望你少走

5.1 简历与投递阶段的坑

简历最忌讳的是堆砌名词。我见过太多同学把“熟练掌握Vue、React、Webpack、Vite、TypeScript、Node.js”全部写上去,面试官随便挑一个深入问就露馅。建议把自己真正能在白板上写出来的技术写上去,也可以分梯度,比如“熟练掌握”和“了解”分开列,这样面试官也不会奔着最深的点去问。

项目经历不要只写一行。写项目时,每一段经历至少包含三行:项目背景和你负责的模块、技术难点和解决方案、量化成果或成长收获。如果还能附上项目地址,会更加分。

投递时简历文件格式用PDF,命名规范一点,比如“张三_前端开发_北京_2026届.pdf”。有些公司的系统会自动解析简历,命名不规范的简历甚至可能被放在次要筛选列表里。

5.2 笔试机试阶段的坑

机试时最容易犯的错是死磕一道题。笔试系统可以自由切换题目,但你的时间是固定的。模拟面试练习时,我给自己定的规则是:一道题超过15分钟没思路就跳过,先做后面的题,最后回过头来用暴力解法兜底。

另一个坑是编译环境。有些公司的编程题默认是JavaScript Node环境,输入输出需要自己处理readline,不是浏览器环境的fetch。如果不熟悉Node的输入输出写法,笔试特别容易在没必要的环节上卡住,考前一定要练几道模拟题熟悉环境。

机试之前记得检查网络环境。我在一次笔试中遇到断网,恢复后系统提示切屏时间过长,差点被判违规。如果条件允许,尽量用有线网络或者网速稳定的WiFi。

5.3 面试过程中的失误与调整

面试中最大的失误是“不懂装懂”。被问到不会的问题,硬答只会让面试官觉得你缺乏判断力;大方承认这块掌握得不够扎实,同时尝试基于已有的知识给出部分思路,反而会留下不错的印象。有一次我被问到“Web Worker里面能不能操作DOM”,我一开始不确定,就照实说“我平时更多用Worker做计算,DOM操作我记得是有限制的”,面试官反而接着解释起来,场面并不尴尬。

还有一个小坑是回答问题没有结构。面试官问“讲讲事件循环”,如果从同步异步开始讲,讲了五分钟还没到微任务宏任务,面试官可能已经走神了。建议先给出核心结论,再展开细节。比如先说“事件循环就是同步代码执行完后,先处理微任务队列,再抽取一个宏任务执行,循环往复”,然后再用代码例子解释,这样更清晰。

5.4 心态与长期规划:技术广度之外的学习方向

暑期实习面试说到底,考察的不只是你现在会什么,还有你是否具备持续学习和解决新问题的潜力。前端领域变化很快,框架、工程化工具、AI辅助开发方式都在演进。如果你的学习路线规划里,有“前端之外再补一块后端知识”的计划,面试时也可以讲出来。比如我说过自己正通过一个Node.js项目学习服务端知识,面试官并没有质疑野心太大,反而问我计划怎么分配时间,这其实也是一个展示自律和规划能力的机会。

前端转Agent开发或AI辅助开发也是最近讨论热度很高的方向。作为在校生,不需要急着做深度转型,但保持关注、了解AI开发工具的工作方式,比如怎么让LLM辅助写代码、怎么用API能力快速搭一个原型,这些都是能在面试中讲出新鲜感的话题。

哪怕这次面试没有拿到offer,也要把每一轮面试当成一次免费的学习机会。我在每次面试后都会把没答上来的问题记到备忘录里,回去查资料、写总结。几轮下来,你会发现面试官问来问去就是那些知识点的组合,准备得越充分,后面的面试就越有底气。

最后再分享一个小技巧:面试前半小时,别再去翻新的知识点。利用这段时间把你最擅长的部分再默念一遍,把手写题的模板在脑子里过一遍,让自己进入“我能行”的状态。面试这东西,实力和状态缺一不可。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询