
后台不少同学最近在准备前端实习面试翻来覆去刷的都是LeetCode和各种面经结果一碰到笔试就发懵。正好我整理笔记时翻到了早年参加网易校招前端开发实习生笔试时的复盘记录借着这个话题把当时印象深刻的题型、考察点、以及我踩过的坑一并梳理出来。这篇内容不是官方原卷而是基于记忆和同批笔试同学交流后还原的高频考点与解题思路对于正在备战前端岗位笔试的同学尤其是目标放在大厂实习方向的朋友应该能帮你在短时间内理清复习重点。整场笔试时间紧凑题量大最让我意外的不是难度而是它对“基础细节”的执着。下面我从题型结构、核心考点、编程题实战、以及答题策略几个维度展开聊尽量还原当时的现场感也把值得反复琢磨的解题逻辑讲透。1. 这次笔试在考什么题型结构与考察意图拆解1.1 网易前端实习生笔试的题型构成我当时参加的那场笔试整体分为四块客观选择题、基础填空题、代码输出题和手写编程题。时间大约90分钟题量在40道上下。乍一看时间还算充裕但真正上手后会发现选择题里藏着大量需要仔细推敲的边界情况稍不注意就会掉进陷阱。选择题部分主要覆盖HTML、CSS、JavaScript基础以及少量浏览器原理和网络相关的内容。比如HTML语义化标签的适用场景、CSS选择器优先级计算、盒模型在不同box-sizing下的实际宽高、JavaScript数据类型判断、作用域与闭包、this指向、事件循环基础顺序等。这些知识点单独拿出来都不难但出题风格偏向“给一段代码问输出什么”或者“在某种场景下选最优方案”这就非常考验平时写代码时有没有真正理解底层机制。填空题的比例不大但分值不低。我当时遇到的有填写一段正则表达式的缺失部分、补全某个CSS布局的关键属性、补齐事件委托的实现代码等。这类题目没有选项可以蒙只能靠对知识点的准确记忆和运用。代码输出题是整场笔试中最让我“血压升高”的部分。它通常会给你一段看似简单的JS代码混着var、let、setTimeout、Promise、作用域、闭包然后让你写出最终输出顺序。这类题考的不只是语法而是你对JavaScript执行机制、事件循环、微任务与宏任务的理解深度。最后是两道手写编程题一道偏算法逻辑一道偏前端场景应用。算法题常见的有数组去重、字符串处理、排序变种这类考察基础数据结构和编码能力前端场景题则偏向防抖节流、简单的组件逻辑、数据转换、DOM操作等考察把需求落地的能力。1.2 为什么用这些题型筛选候选人大厂实习生的笔试筛选逻辑和正式社招不一样它不指望你已经具备多深的工程经验而是想看你的基础功底和可培养潜力。毕竟实习生进组后大部分时间是从写页面、改bug、补单测这类基础工作做起如果连变量提升、事件循环、CSS选择器优先级这些底子都不牢带起来会非常吃力。所以笔试题里反复出现的“给代码猜输出”类题目本质是在考察一件事你写代码的时候到底是靠运行结果去猜还是靠语言规范去推。我记得有一道题是var和let在for循环中配合setTimeout的经典输出题答案很多人都背过但真正能解释清楚“为什么var是5个5let是0到4”的人其实少之又少。笔试的筛选作用就在这里它会通过追问细节的方式把“背答案”和“真懂”区分开。另外编程题占比不低也说明了网易这类公司在选拔时的倾向他们希望实习生具备独立拆解问题的能力而不是只会复制粘贴代码。手写编程题往往没有太偏的算法但要求逻辑清晰、边界处理完整这恰好是判断候选人是不是“能干活”的直观方式。2. 高频基础题解析JS核心概念是拿分基本盘2.1 数据类型与变量提升题目笔试选择题里“给代码猜输出”最集中的考点第一就是数据类型判断。比如会给你typeof null、typeof undefined、Object.prototype.toString.call([])、[] instanceof Array这类组合让你选结果。这里有个常见的坑typeof null返回的是object而不是null这个历史遗留问题当年不知道坑了多少人。不止笔试我后来面试别人时也经常拿这个当考察点因为它能反映出候选人有没有真正读过权威文档。变量提升是另一个必考项。题目往往会写成这样在函数内部先console.log(a)再var a 10问输出什么。答案是undefined因为var a会被提升到函数顶部但赋值不会提升。如果出题人再加点料把函数声明和函数表达式混在一起比如同时有var foo function(){}和function foo(){}那情况就更复杂了函数声明提升优先级高于变量声明提升但同名变量赋值会覆盖函数声明。我的建议是准备这类题目不要死记答案而是去理解JavaScript引擎执行代码时的两个阶段编译阶段创建执行上下文、处理声明和执行阶段逐行执行赋值与调用。脑子里有了这个模型不管题目怎么变你都能推出正确结果。我当时就是靠画执行上下文的栈结构图把这类题目彻底搞定的强烈推荐你也试试。2.2 作用域闭包与this指向的必考套路作用域和闭包在选择题、输出题里都是重头戏。常见套路是外层函数return一个内层函数内层函数引用了外层函数的变量然后连续调用问输出结果。这题只要理解“闭包会保留对外层作用域变量对象的引用而不是值”就能解对。还有一道让我印象深刻的变形题在循环里用var创建一个闭包闭包内引用循环变量然后立即执行或者延迟执行问你输出什么。这里需要特别注意“立即执行”和“延迟执行”的区别。如果循环体内是fn()立即执行那输出是每次循环时的当前值如果是setTimeout(fn, 1000)延迟执行那等回调执行时循环已经结束拿到的全是最终值。很多人只背了“var是最终值、let是当前值”的结论但没搞懂为什么一旦题目换壳就翻车。this指向属于典型的“背会口诀也不一定做对”的考点。笔试喜欢出的是对象方法中的this、普通函数调用中的this、箭头函数中的this、以及通过call/apply/bind改变this后的输出。我当时的做题思路是抓住一条主线this的指向取决于函数被调用时的调用方式而不是定义位置箭头函数例外它没有自己的this直接沿用定义时所在作用域的this。遇到题目先判断是不是箭头函数再判断调用方式思路清晰之后正确率会大幅提升。3. 编程题实战从读题到AC的全过程拆解3.1 拿稳基础编程题的答题节奏笔试里的第一道编程题通常不会太难目的是让大多数候选人能拿分但想把分数拿满也不容易。我遇到的一道题是给定一个字符串找出里面出现次数最多的字符并返回它和出现次数。乍一看很简单但要注意题目有没有限定“只考虑小写字母”“是否包含空格”“多个字符出现次数相同时返回哪个”等边界条件。我当时写题时的习惯是先不急着写代码花1分钟把题目要求逐条拆出来确认输入输出格式然后把可能的边界情况列在草稿纸上。这道题的常规解法是用一个对象或Map来统计每个字符的出现次数然后遍历找出最大值。但如果你直接用{}作为计数容器又没处理Object.create(null)或者Map的特殊情况遇到constructor、toString这类原型链上的属性时就会统计出错。我笔试时用的Map既避免原型链问题又能保证插入顺序算是一个稳妥的选择。这类基础题的关键在于“稳”不需要奇技淫巧也不需要一行流但代码结构要清晰、变量命名要语义化、边界处理要完整。阅卷人虽然主要看结果但笔试系统往往会有额外测试用例来校验边界情况漏掉空格、大小写、空字符串这些细节直接就是扣分点。3.2 手写工具类题目是拉分关键第二道编程题通常更贴近前端实际场景我当时遇到的是让我实现一个简单的防抖函数。原题大概是实现一个debounce函数要求传入一个函数和延迟时间返回一个新的函数新函数在连续触发时只在最后一次触发后的延迟时间后执行。防抖节流这种题现在已经是前端笔试标配了但那年它还属于“会的人不多”的拉分题。实现防抖的核心是理解闭包和定时器的配合外层函数保存一个timer变量内层函数每次被调用时先清除上一次的定时器再重新设置定时器延迟时间到了才执行原函数。关键是this要指向调用者参数要透传所以内部要用apply或call来实现。我还记得当时额外考虑了“立即执行版本”的扩展虽然题目没要求但写上去后会让阅卷人觉得你对这个概念理解得更深。所谓立即执行版就是第一次触发时立即执行后续连续触发只在停止后重新计时这个场景在表单提交按钮上非常实用。如果题目没明确要求不建议主动写复杂版本因为容易引入bug但可以在注释里简单说明思路展示你的扩展思维。这种手写工具类题目拉分效果非常明显。因为大部分候选人只知道防抖节流的“概念”能把代码完整写对的人并不多。所以如果你正在准备笔试我强烈建议把防抖、节流、数组去重、深拷贝、数组扁平化、发布订阅、Promise.all这些经典手写题都过一遍最好做到闭卷能写、边界能讲。4. 笔试中的常见失误与排查策略实录4.1 时间分配失误前松后紧导致编程题没写完整我这场笔试最大的失误就是在选择题上花的时间太多。当时遇到一道关于CSS选择器优先级的计算题我反复算了三遍结果浪费了将近8分钟导致后面手写编程题时时间紧张第二道题只写完主体逻辑边界处理部分匆匆带过。考完复盘时才意识到笔试的时间分配应该按照分值占比来而不是按照题目顺序来。合理的分配策略是选择题和填空题控制在总用时的40%以内代码输出题控制在20%剩下40%留给手写编程题。编程题哪怕思路不完整也要把关键逻辑写出来尽量把能拿的分拿到。一道编程题完全空着和写了一部分但没跑通在阅卷时的印象分差距非常大。另外做题过程中遇到卡壳的题建议先标记出来跳过去做完后面的再回头处理。我在笔试时发现一个现象很多选择题的正确答案往往能从其他题目的上下文里找到线索比如前面代码输出题里用到的某个API特性正好能解答后面选择题里的一个陷阱。先易后难不仅节省时间还能帮你建立信心。4.2 对“基础但不常用”知识点的忽视考后和几个同学交流发现大家失分最多的不是难题而是那些平时很少写、但笔试爱考的基础API。比如Array.prototype.reduce的完整用法、Object.defineProperty的参数说明、querySelectorAll返回的是静态NodeList而不是动态集合、getBoundingClientRect拿到的位置信息包含哪些字段等。这些知识点不是不会用而是平时写业务代码时很少主动用到导致在笔试压力下记忆模糊。我当时在填空题里就栽在了一个正则表达式上题目要求写一个匹配手机号的正则部分缺失让补全我纠结了很久是否应该考虑带国家区号的场景结果越纠结越乱。其实这类题只要抓住题干的限定条件就好不要自己给题目加需求默认最简单清晰的解法通常就是出题人想要的。最好的应对办法是在笔试前抽出两三天把MDN上高频API的文档过一遍不要求背参数但要能回想起“有什么方法可以用、大概怎么用、有没有坑”。这个复习量看起来很大但当你真正进入面试季时会发现这些细节恰恰是区分候选人的关键。4.3 编程题提交前不检查边界条件的坏习惯我以前写算法题有个非常不好的习惯能跑通示例用例就急着提交总觉得边界条件是小概率事件结果笔试系统一跑隐藏用例就挂掉一大半。后来我养成了一个固定动作代码写完后先花一分钟检查三件事。第一空输入能不能处理比如空数组、空字符串、null第二极端值会不会出问题比如全是相同字符、数组只有一个元素、超大数字第三输出格式是不是严格符合题目要求比如该用引号的用了单引号该换行的没换行。特别是手写编程题笔试系统判题通常很严格多一个空格少一个分号都可能判错。我记得当时防抖函数里题目要求返回的新函数需要透传参数我一开始写的是fn.apply(this, arguments)后来想了想如果考试环境是ES6应该用剩余参数...args更安全最后把两种写法都注释上了并在最终代码里用了剩余参数形式。这种细节如果没注意到可能整道题就白写了。建议准备笔试的同学平时刷题时尽量用牛客网这类模拟笔试的环境它和真实笔试的判题机制非常接近。多练几次之后你就会自然而然地养成写完整边界处理的习惯而不是每次都被隐藏用例教做人。5. 准备策略复盘从这场笔试反推复习优先级5.1 基础巩固优先于框架学习我在笔试前其实花了不少时间看Vue源码分析和各种工程化教程结果笔试题里几乎没怎么涉及框架内容反而全是JS基础、CSS布局和浏览器原理。那次经历给我的冲击很大我开始重新思考实习笔试的复习优先级框架可以等拿到面试机会后再针对性地补但语言基础、浏览器机制、网络基础这些内容是每一轮笔试都会反复考察的硬通货。现在再回头看我会建议准备前端实习岗位笔试的同学把复习重心按此排序JavaScript核心机制原型、闭包、异步、事件循环、CSS布局与选择器、浏览器渲染原理与HTTP基础、手写代码能力、数据结构与算法基础。把前四项搞定通过笔试的概率会大很多。不是说框架不重要而是框架的知识更适合在面试环节去展示笔试环节它很难出彩。5.2 用“输出”驱动输入拿真题和模拟题做限时训练再有效的复习资料如果只看不练效果也会大打折扣。我后来准备笔试时的核心方法是限时刷整套的真题或模拟题。手机调成勿扰模式定好90分钟倒计时用白纸当草稿纸完全模拟笔试现场的节奏和压力。每套题做完后不急着看答案而是先把每一道错题对应的知识点列出来再回MDN或者权威书籍里去查漏补缺。这种“输出倒逼输入”的方式比漫无目的地刷知识点效率高得多。因为你做的每一道错题都能非常精准地暴露出一个具体的薄弱环节而不是笼统的“我不太会JS”。我当时就是通过这种方式发现自己对Object.defineProperty的属性描述符理解不够透彻于是专门花了半小时把value、writable、get、set、configurable、enumerable各自的含义和组合效果梳理了一遍后面再碰到相关题目基本都能秒答。5.3 不会的题要有一套考场应急策略考场上总会遇到个别完全没思路的题这时候怎么处理也会影响整体成绩。我的策略是主观题一定不能留白哪怕写不出标准答案也要写出你的思考过程和能想到的相关知识点。比如让你实现一个“无限级联动选择器”你即使写不出完整代码也可以先把组件的数据结构描述出来把选择器的交互逻辑拆解清楚再写一部分静态结构代码。阅卷人看到的是你的思考能力而不只是最终代码。客观题如果完全不会可以用排除法结合知识迁移去猜。前端笔试的选择题四个选项里通常有一两个是明显错误或者比较片面的说法排除掉之后剩下两个再仔细对比差异点猜对的概率会提升不少。但记住这是最后手段如果时间允许还是优先静下心来做推导。6. 写在最后的一点体会复盘这场笔试我最深的感触是前端开发实习生笔试虽然看起来涉及面很广但它的核心逻辑其实非常朴素——考察你对JavaScript语言本身的理解、对浏览器运行机制的认识、以及对代码边界情况的敏感度。这些东西靠临时突击很难补上来它们更像是长期写代码过程中积累出来的“肌肉记忆”。如果你现在还在大二大三最好的准备方式不是刷题而是多写、多踩坑、多想一想“为什么运行结果和自己预想的不一样”。等真正进入笔试阶段再用真题去做查漏补缺你会发现很多题目你其实已经通过实践经验默默掌握了大半。最后分享一个我后来一直在用的复习习惯每次笔试或面试结束后不管结果如何第一时间把遇到的考点和题目回忆版整理成笔记标注出自己的失分原因和对应的知识盲区。坚持几场下来你手上就会积累一份非常宝贵的个人题库这份题库的含金量比任何网上的面经都高因为它完全基于你自己的真实情况。毕竟笔试只是起点真正的成长发生在每一次复盘和查缺补漏里。