抢先拆解百度2019校招Web前端笔试卷:看似考基础,实际在筛这三层能力
最近好几个准备秋招的学弟学妹找我,问百度前端笔试到底考什么。说实话,网上流传的2019校招Web前端笔试卷(第一批)已经挂了好几年,但每一年都有人把它当“考古题”刷完就扔,挺浪费的。我当年刷这份卷子时也没太当回事,后来真上了考场才发现,那道题PDF里每一类题目背后都有明确的筛选意图——它考的远不止“你背了多少API”,而是你在校期间有没有建立完整的前端知识体系,有没有真正的代码功底,以及面对陌生问题时有没有拆解路径的能力。
这篇文章我就以这套题为例,把前端校招笔试的考察逻辑、典型题型和备战思路完整拆一遍。如果你是正在准备校招或实习的前端方向同学,或者带新人的团队负责人,这篇内容能帮你把“刷题”这件事从“背答案”升级成“补体系”。
另外先说明一点:我不会去逐题搬运原卷,而是按题型和考点维度来分析,因为笔试考点的复用率极高,今天这套题的考察方向,在后续几年别的公司笔试卷里也反复出现,学会“拆题”比记住“某道题”重要得多。
1. 内容整体设计与思路拆解:这套笔试卷到底想筛什么人
1.1 核心需求解析:百度招前端,不是招“页面仔”
先说一个很残酷的行业现实:前端岗位的简历量在整个技术校招里一直是数一数二的,但真正能过笔试的人比例不高。原因不是题太难,而是大部分候选人还停留在“能写页面”的层面,而大厂前端团队要的是“能解决复杂问题”的工程师。
百度2019校招Web前端笔试卷(第一批)的整体设计,明显是奔着“筛选”而不是“考察”去的。整套卷子分为客观题(单选、多选)和主观编程题两大部分,覆盖了JavaScript核心机制、CSS布局与渲染、浏览器工作原理、网络协议、前端框架思想、手写代码能力这几个维度。从考点分布来看,这张卷子在刻意压缩“碎片化知识点”的比重,把大量分值压在“你能否理解前端技术底层的运行逻辑”上。
比如卷子里经常出现的闭包、原型链、事件循环这类题目,表面上是考JavaScript语法,实际上是在考察你对“语言特性如何影响程序执行”的理解深度。一个只写过业务页面的候选人,可能知道闭包能保存变量,但说不清楚闭包导致的内存泄漏是怎么发生的,更谈不上在笔试里快速判断一段代码的输出结果。
再说直白一点:这套题筛的是那种“见过底层、能说原理、能写代码、有排查思路”的候选人。对应届生来说,这个标准听起来不低,但它同样是可以通过系统准备达成的——前提是你得知道该往哪些方向使劲。
1.2 方案选型背后的考量:为什么用笔试而不是纯面试
很多同学不理解,既然考察的是能力和思维,为什么还要先来一轮笔试?直接面试聊不就行了?
从招聘方的角度,笔试有不可替代的优势:标准化、可横向对比、成本低。校招的简历量动辄上万份,如果所有候选人都进入面试环节,技术面试官的时间根本不够用。通过一套设计良好的笔试卷,可以在进入面试前就过滤掉相当一部分基础不扎实的候选人,保证进入面试环节的人都有基本的代码能力和知识储备。
但笔试也有明显的局限,它只能考察“你会不会”,很难考察“你合作起来怎么样”。所以你就会看到大厂的校招流程普遍是:笔试筛基础,面试筛深度,团队面筛协作,HR面筛意愿。每一轮各司其职,笔试卷做的就是在最短时间内用标准化问题完成第一轮分层。
说实话,很多考生拿到卷子后第一反应是“怎么还有网络题”“怎么还考浏览器渲染”,这种反应本身就暴露了对前端岗位认知的偏差。前端不是“写写页面切切图”,而是离用户最近的一层技术实现。你写的每一行代码,最终都要跑在浏览器里、通过网络加载资源、跟后端接口打交道,这些环节的知识,在笔试里出现是理所当然的事情。
2. 核心细节解析与实操要点:从题型看考点,从考点看知识盲区
2.1 选择判断题:覆盖面极广,专治“只会框架不会基础”
先说占比不小的选择题部分。这块题目看起来“简单”,实际上是最容易翻车的地方。因为它的覆盖面极广,从ES5/ES6语法差异、数组方法的使用、事件冒泡捕获机制,到CSS选择器优先级、盒模型、flex布局,再到HTTP状态码、浏览器缓存机制,甚至还包括一小部分数据结构的基础题。
举个例子,卷子里大概率会出现类似这样的考点:给你一段用了var和let声明变量的代码,问你输出什么。这道题表面考的是输出结果,实际考的是“变量提升”和“暂时性死区”这两个概念。你要是没系统学过JavaScript的执行机制,就算平时写代码没出过问题,也照样会在这类题上丢分。
还有一类选择题几乎每年必出:关于this指向的题目。这类题会把函数调用方式、箭头函数、事件绑定混在一起,让你判断执行上下文。说句实话,很多写了两年React的同学,如果不刻意去复习,碰到这种题都得犹豫半天,因为框架帮你把this的坑填平了,你反而不理解底层是怎么回事了。
我的建议是:选择题部分不要靠刷题硬记答案,而是要把每一道题背后对应的知识点展开复习。做对了,要能说出为什么对;做错了,要把相关的知识盲区彻底补上。具体来说,以下几块内容是复习的重中之重:
- JavaScript基础:变量提升、闭包、原型链、作用域、
this指向、事件循环、Promise、async/await、数据类型判断、深浅拷贝。 - CSS基础:盒模型(标准盒模型和IE盒模型的区别)、BFC、层叠上下文、选择器优先级、flex/grid布局、水平垂直居中方案。
- 浏览器与网络:输入URL到页面展示的完整过程、浏览器渲染流程(DOM树、CSSOM、RenderTree)、重排与重绘、HTTP/HTTPS、HTTP缓存(强缓存和协商缓存)、常见状态码含义。
- 框架基础:Vue/React的数据驱动原理、组件通信方式、生命周期、虚拟DOM和diff算法的大致思路。
只要把选择题当成“知识图谱扫描仪”来用,就不难发现自己的薄弱环节在哪。我自己当年复习时的方法是把错题对应的知识点全部手动整理了一遍笔记,而不是在做题软件上收藏一下就算完,效果差别非常大。
2.2 手写代码题:考察的不只是“能不能写出来”
这套卷子的编程题部分,才是真正拉开分差的地方。和LeetCode那种纯算法题不同,百度这套笔试卷里的手写代码题带有明显的前端业务色彩。比如让你手写一个函数实现防抖或节流、手写一个深拷贝、手写一个简单的发布订阅模式、实现数组去重、实现一个Promise.all,或者根据要求实现一个简单的布局。
这类题目为什么难?因为很多候选人在准备笔试时把大量精力放在了刷算法题上,忽略了“用JavaScript实现常见工具函数”这项基本能力。但实际上,前端工程师日常工作中写的大量代码都是这类工具函数——防抖节流用在搜索框和滚动事件里,深拷贝用在数据处理的边界场景,发布订阅模式用在不依赖框架的模块通信中。
我给你拆一道最典型的题:手写深拷贝。这道题看起来简单,实际上至少有三个层次。
第一层:能写出JSON.parse(JSON.stringify(obj))。这算是最基础的答案,但如果你只写到这里,面试官基本会判定你的知识储备不够,因为这种写法至少有四个问题:无法处理undefined、function、Symbol;无法处理循环引用(会直接报错);无法处理Date、RegExp等特殊对象;会丢失原型链上的属性和方法。
第二层:能用递归自己实现深拷贝。能走到这一层,说明你对基本数据类型和引用类型的区别有清晰认知,也懂得用递归处理嵌套对象。但很多人写到这里就结束了,忽略了循环引用的处理。
第三层:能在递归实现的基础上,用WeakMap或数组来记录已拷贝的对象,解决循环引用问题,同时兼顾Date、RegExp、Map、Set等特殊数据结构的处理。能写出这一层的人,在候选人里已经是前百分之十几的水平了。
所以你看,同样一道手写题,背后区分的是你是在“背代码”还是在“理解代码”。我强烈建议各位在复习手写题时,不要只盯着“能不能跑通”,而是要想清楚每一行代码解决了什么问题,边界情况有哪些,为什么这么写。只有做到这个程度,遇到题目变种时你才能从容应对。
2.3 综合应用题型:考察工程化思维和代码组织能力
除了基础选择题和手写代码题,这套卷子里还有一类容易被忽视的题目——综合应用或代码阅读题。这类题通常给一段有一定业务逻辑的代码,让你指出问题、优化方案或补全某个功能。
常见的出题方向包括:
- 给一段操作DOM的代码,问你怎么优化性能(比如批量操作DOM、减少重排重绘、事件委托)。
- 给一个异步流程控制的场景,问你怎么用Promise或async/await改写,避免回调地狱。
- 给一个组件通讯的需求,问你怎么设计数据流和组件结构。
- 给一段涉及大量数据渲染的代码,问你怎么做性能优化(虚拟列表、分页加载等)。
这类题考察的是你的工程化思维,而不是单纯的语言功底。它会明确地告诉你:前端开发不是把功能做出来就完了,还要考虑代码的可维护性、可读性、性能表现。你需要在平时的项目开发中刻意训练这种思维,比如写完一个功能后主动问自己:如果数据量放大十倍怎么办?如果这段代码要交给别人维护,对方能不能快速看懂?如果产品和设计需求变了,我的代码能不能灵活扩展?
很多同学在刷笔试题时只关注“正确答案”,忽略了这类题目真正想看到的“解题过程”。实际上,综合应用题的评分往往很看重你的思路是否完整、边界考虑是否周全、方案是否具备可落地性。你在卷面上多写一句“这里会造成重复渲染,所以我选择用缓存来避免”之类的话,给阅卷人的印象会完全不一样。
3. 实操过程与核心环节实现:按这套方法准备,笔试胜率明显提升
3.1 基础能力排查:用“输出清单”自测是不是真的会了
我特别想给正在准备笔试的同学推荐一个方法:把“我好像知道”变成“我能写出来”。具体做法是建立一份自己的“前端核心知识点输出清单”,每看到一个知识点就问自己三个问题:能不能用自己的话解释清楚?能不能写出一个最小可运行的示例?能不能说出这个知识点在实际项目中的应用场景?
比如看到“事件委托”这个知识点,你可以这样自测:
- 解释:利用事件冒泡机制,在父元素上统一绑定事件处理函数,通过事件对象的
target来判断具体触发元素,从而避免在大量子元素上分别绑定事件。 - 示例:写一个
ul列表,点击每个li都能弹出对应的文本内容,事件只绑定在ul上。 - 场景:在动态渲染列表、长列表性能优化、需要批量绑定事件的场景中特别有用。
如果你能对大多数核心知识点完成这种“输出”,你的基础部分基本就稳了。如果某一步卡住了,说明这个知识点还不是你的,需要立刻回去补。
这里我把自己当年复习时整理的高频考点清单列一下,你可以照着逐项自查:
| 知识模块 | 高频考点 | 自查要求 |
|---|---|---|
| JavaScript | 闭包、原型链、作用域、this、事件循环 | 能手写示例并解释内存回收机制 |
| ES6+ | Promise、async/await、解构、箭头函数、模块化 | 能解释与旧写法的差异及使用场景 |
| CSS | 盒模型、BFC、flex、grid、垂直水平居中 | 能写出多种实现方案并说明差异 |
| 浏览器 | 渲染流程、重排重绘、缓存机制、存储方式 | 能画出完整链路并解释每步作用 |
| 网络 | HTTP/HTTPS、TCP握手、常见状态码 | 能解释从URL输入到页面展示的完整过程 |
| 框架 | 生命周期、组件通信、虚拟DOM、diff思想 | 能口述实现原理,不依赖源码也能说清楚 |
| 手写代码 | 防抖节流、深拷贝、Promise、数组去重、发布订阅 | 能现场手写且处理边界情况,测试通过后再进入下一项 |
3.2 手写代码专项训练:五类必练题目与关键步骤
手写代码题的专项训练,我建议按以下五类来准备,每一类都附上具体的练习步骤和容易踩坑的地方。这不仅是应对百度这套笔试卷,也是很多公司笔试的共同重点。
第一类:JavaScript工具函数
- 防抖(debounce):练习时注意
this指向的保留、参数的透传、立即执行选项的处理。核心思路是每次调用时清除上一次的定时器并重新设置。 - 节流(throttle):练习时注意时间戳方案和定时器方案的区别,以及首次调用是否立即执行。
- 深拷贝:练习时从
JSON方案起步,然后手写递归版,最后用WeakMap处理循环引用,并且要处理Date、RegExp、Map、Set这些特殊类型。 - 数组去重:至少掌握
Set、filter+indexOf、reduce+includes三种写法,并能说明NaN、对象等特殊情况的处理差异。 - 数组扁平化:至少掌握递归、
reduce、flat三种写法,并说明各自的适用场景和限制。
第二类:Promise相关
- 手写
Promise.all:关键在于维护一个结果数组和一个计数器,处理传入空数组的情况,以及某个Promise失败时直接reject。 - 手写
Promise.race:核心是只要有一个Promise状态改变,就整体改变状态。 - 基于Promise实现一个简单的异步串行流程控制,理解
resolve的调用时机。
第三类:设计模式相关
- 发布订阅模式(EventEmitter):练习时注意
on、off、once、emit四个方法的实现,尤其是off时遍历删除的细节和splice的索引问题。 - 单例模式:核心是判断实例是否存在,存在则返回,不存在则创建。
第四类:CSS布局
- 两栏布局(左侧固定右侧自适应)和经典三栏布局(左右固定中间自适应),至少掌握flex和浮动两种实现方式。
- 垂直水平居中方案,至少能写出四种以上,并能说清楚每一种的适用场景(定宽高与不定宽高)。
- 圣杯布局和双飞翼布局如果时间充裕也建议练一下,这类题目偶尔会出现在选择题里。
第五类:原生API模拟
- 手写
Array.prototype.map、reduce、filter,关键点是理解回调函数的参数(当前值、索引、原数组)以及返回新数组的语义。
我在练习这些题目时的经验是:第一遍先看着答案写,第二遍合上答案自己写,第三遍用不同的实现思路再写一遍。三遍下来,你才能说真正“会了”这道题。
3.3 浏览器与网络模块:笔试里的“隐形拉分项”
浏览器工作原理和网络协议,是很多前端候选人准备笔试时最容易忽略的部分。原因也简单:平时开发业务代码时,这些知识很少直接被用到,很多时候浏览器已经把底层细节帮你屏蔽掉了。但笔试偏偏爱考这些,因为它们是区分“会用”和“懂原理”的分水岭。
一个经典的考察方式,让你完整描述“从输入URL到页面展示”的过程。这道题你可以从以下步骤来组织答案:
- 输入URL,浏览器解析协议、域名、端口等组成部分。
- 浏览器查找DNS缓存,如果没命中则发起DNS解析,拿到目标服务器的IP地址。
- 浏览器与目标服务器建立TCP连接(三次握手)。
- 如果使用的是HTTPS协议,还需要经过TLS握手协商加密参数,建立安全连接。
- 浏览器发送HTTP请求(请求行、请求头、请求体)。
- 服务器处理请求并返回HTTP响应(状态行、响应头、响应体)。
- 浏览器解析响应内容,如果状态码是
200则开始解析HTML。 - 解析HTML生成DOM树,解析CSS生成CSSOM树,两者合成RenderTree。
- 浏览器根据RenderTree进行布局(Layout)和绘制(Paint)。
- 如果HTML中引用了JS文件,浏览器会阻塞解析(或按
defer/async属性异步加载),执行JS可能会修改DOM结构,触发重新布局和重绘。 - 在解析过程中,浏览器发现需要加载的图片、CSS、JS等子资源,会继续发起请求,这个过程中会检查缓存策略(强缓存
Cache-Control/Expires,协商缓存Last-Modified/ETag)。
不要小看这个知识点的准备价值。这道题几乎在当年百度这套卷子里是必考的,而且能考察的深度很深——你不仅要说清楚有哪些步骤,最好还能解释每一步的细节,比如为什么TCP要三次握手,强缓存和协商缓存的区别是什么,defer和async对文档解析的影响有什么不同。
如果你能把这个链路讲得清清楚楚,阅卷人一眼就能看出你是有完整知识体系的人,而不是零散地背了一堆面试题。这个印象比那道题本身得分更重要,因为它会影响对你整体水平的判断。
3.4 框架理解:不考源码,但考思想
2019年那会儿,Vue和React在校园招聘里已经非常普及了,但笔试卷里很少直接让你去写Vue或React的语法题。更多时候是换一种角度来考你:比如给出一个“数据变化后界面自动更新”的场景,问你其背后的实现思路。
这就是在考察框架思想,而不是框架API。你可能没读过Vue的源码,但你应该知道Vue是通过数据劫持(Object.defineProperty或Proxy)加依赖收集来实现响应式的;你可能没读过React的源码,但你应该知道React通过虚拟DOM和diff算法来尽量减少真实DOM的操作。
在准备这部分时,我建议你把框架的核心机制按以下问题来梳理:
- 框架为什么要引入虚拟DOM?它解决了什么问题?(跨平台、减少直接DOM操作的性能损耗、让UI更新可以批量调度等)
- 组件化解决了什么问题?(复用、隔离、可维护性)
- 组件间通信有哪些方式?各自的适用场景是什么?(props/$emit、状态管理、事件总线、provide/inject、Context等)
- 生命周期的作用是什么?在哪个阶段适合发请求、在哪个阶段适合清理定时器?
这些问题的答案不需要背源码,但需要你能用自己的话讲清楚。能够达到“给一个非前端背景的人讲明白”的程度,基本就可以应对笔试里的框架题了。
4. 常见问题与排查技巧实录:刷题和复习中容易踩的坑
4.1 你刷了那么多题,为什么分数还是不理想?
我见过太多同学在准备笔试时陷入一个误区:刷题数量上去了,正确率却原地踏步。这种情况通常有以下几个原因。
第一个原因是“只看不想”。做题时选中一个选项后就着急看答案,看到正确答案是C,就“哦”一声划过去。这种刷题方式基本等于无效刷题,因为你的大脑始终处于被动接收状态,没有主动调用已有知识去分析这个题目为什么选C不选B。正确的做法是:不管做对做错,都要把每个选项分析一遍,弄清对在哪、错在哪。
第二个原因是“不整理错题”。人的记忆是会遗忘的,而且遗忘的速度比你想象中快得多。如果做完题后不把错题和相关的知识点整理下来,一周后你再碰到同一道题还是有可能做错。我建议每做完一套题,就把错题按知识点分类整理,形成一个“知识盲区清单”,每周专门花时间重看一遍这个清单。
第三个原因是“只看答案不看解析”。很多在线题库会给答案,但解析可能不完整。如果你只满足于知道答案,一旦题目稍微变形,你依然做不对。这就是为什么我一直强调要看懂“为什么”,而不是记住“是什么”。
4.2 时间不够用:笔试答题的顺序和节奏怎么安排
笔试的时间是有限的,尤其是编程题,可能需要你花费大量的时间去设计和调试。我个人的建议是:先做有把握的题目,再做需要思考的题目,最后再挑战完全没有头绪的题目。
具体来说,你可以按以下节奏来安排:
- 拿到卷子后,先快速浏览全部题目,大致判断每道题目的难度和熟悉程度。
- 优先做选择题和判断题,因为这些题目单题耗时短,先把基础的分数拿到手。
- 再做手写代码题中你有把握的题目,确保自己能完整写出来。
- 最后再处理综合应用难题或代码阅读题,这类题可能耗时较长,而且有时需要深思熟虑。
千万注意一点:不要在完全不会的选择题上浪费太多时间。一张卷子中难免有几道题是你完全陌生的知识点,这种题目快速选择一个相对靠谱的答案就要果断跳过,把时间留给能拿分的题目。心态上也要接受一个现实:你不太可能把所有题目都做完做对,目标是把能拿的分都拿到。
4.3 编程题的“细节分”最容易丢
很多同学在笔试时可能经历过这种情况:明明思路是对的,代码也能跑通,但最后得分却不高。如果你仔细复盘,很大概率是丢在了“细节分”上。
编程题的细节分通常来自以下几个方面:
- 边界条件:函数入参为
null、undefined、空数组、空对象时,你的代码是否还能正常运行?比如手写深拷贝时,如果传入的是一个null,你的递归会不会报错? - 特殊情况:数组去重时,数组里含有
NaN怎么处理?手写Promise.all时,传入空数组应该返回什么? - 代码风格:变量命名是否清晰?缩进是否规范?有没有注释说明关键逻辑?代码风格对最终分数的影响往往被低估,但阅卷人看到一份整洁的代码,体感是完全不同的。
- 复杂度说明:如果时间允许,在答题末尾补充一段关于时间复杂度和空间复杂度的分析,或者你的方案的优缺点、适用场景,这种“超额”输出会非常加分。
这些细节不需要额外的知识点,只需要你在平时练习时养成习惯。每次写完一个函数,都主动检查一下边界条件;每次做完一道题,都写出你的思路和复杂度分析。形成习惯后,在笔试现场你会自然而然地把这些带上。
4.4 发现知识盲区后,如何高效补缺?
在备考过程中,你一定会不断遇到不会的知识点。这时候最忌讳的是打开浏览器漫无目的地搜索,逛了两个小时论坛,收藏了一堆文章,然后发现自己什么也没学会。
我建议你按以下流程来处理盲区:
- 先明确自己具体是哪里不会。是概念不清楚?还是API记不住?还是应用场景不明?
- 针对概念不清楚的问题,找一篇相对权威的博客或官方文档精读,不要只看标题就划走。
- 每读完一个概念,立刻动手写一个最小示例验证一下。比如学闭包,就写一个计数器试试;学事件循环,就写一段包含
setTimeout和Promise的代码,预测它的输出顺序,再实际运行看一下对不对。 - 把你自己的理解总结成一段话,写到笔记里。未来复习时优先看自己的总结,比自己重新翻资料效率高得多。
这个流程看起来简单,但它能确保你每次复习一个知识点,都能形成“理论+实践+输出”的完整闭环,而不是停留在“好像懂了”的虚假安全感里。
5. 准备策略复盘:以这套卷子为镜子,照出自己的真实水平
5.1 时间规划:距离笔试还有4周,怎么安排?
如果你现在距离笔试还有一个月左右的时间,可以按以下节奏来安排复习计划。
第一周:完成知识体系盘点。找一套往年真题或模拟卷,按考试时间完整做一遍,然后逐题分析错误原因,把暴露出来的薄弱知识点列成清单。这一周不需要大量刷题,重点是建立“我知道我不知道什么”的认知。
第二周到第三周:专项突破。根据第一周的清单,把薄弱的知识模块逐个攻破。每一到两天集中解决一个模块,比如周一专门看JavaScript事件循环,周二专门复习CSS布局方案,周三手写防抖节流和深拷贝,以此类推。每个模块复习完后,找对应的专项练习题来检验效果。
第四周:模拟考试和查漏补缺。按真实考试的环境和时间要求做两到三套完整试卷,重点训练答题节奏和时间分配。做完后复盘错题,针对仍然不牢固的知识点做最后一轮强化。
这个计划的核心思路是先诊断、再补漏、后模拟,避免漫无目的地刷题。如果你只有两周时间,可以把第一阶段压缩为两天,但整体框架不变。记住一个原则:针对性地补一个薄弱点,比泛泛地刷十套题更有用。
5.2 从笔试到面试:如何把卷子上的知识转化为面试谈资
笔试只是第一关,如果你顺利通过了笔试,接下来就要面对技术面试。很多人觉得笔试和面试是两回事,但实际上,笔试中暴露的知识点完全可以转化为面试中的谈资。
举一个例子:如果你在笔试中遇到一道关于HTTP缓存的题目,而且没有答好。那么在准备面试时,你就可以专门研究一下HTTP缓存的细节,从Cache-Control的各个指令、到强缓存与协商缓存的配合、再到浏览器刷新时缓存策略的变化。把这些内容吃透后,在面试中当被问到“你做过哪些性能优化”时,你就可以把这个话题自然地引出来,讲述你是如何在实际项目中通过配置缓存头来减少请求的。
这就是把“应试”变成“长本事”的思路。笔试是一个发现问题的工具,而面试是你展示解决方案能力的舞台。如果你能带着这个思路去准备,整个校招过程就不再是痛苦的刷题机器模式,而是一个持续学习、持续补全自己知识体系的过程。
5.3 我的个人体会:这套卷子最值钱的地方不在于题,在于它给你的定位
最后说一点我自己的感受。
百度的这套2019校招Web前端笔试卷(第一批),如果放到今天来看,有些知识点可能已经不是最前沿的了,比如框架版本在更新、工程化工具也在迭代。但它的价值并没有因此打折扣——它依然能非常精准地测出一个人在计算机基础、前端核心知识、代码能力和问题拆解能力这四件事上的水平。
我遇到过一些同学,简历上写着精通JavaScript、熟悉Vue源码,结果笔试里一道闭包的变体题就露了馅;也遇到过看起来履历普通的候选人,却在笔试题上表现出令人惊喜的严谨和深入。这份卷子让我明白了一个道理:title和项目经历可以装饰,但基础知识的扎实程度、代码习惯的优劣、对技术原理的理解,是很难装出来的。
如果你正在准备校招,我真心建议你认真做一套这样的往年笔试卷,不是为了押题,而是为了“照镜子”。做完之后仔细复盘一遍,你大概率会发现,自己以为熟练掌握的知识点里,至少有三分之一其实经不起深问。发现这些问题不是坏事,早点发现,早点补上,你在真正的大考中就不会惊慌。
另外再送一个小技巧:做往年笔试题时,不要只做一遍就完事。隔两周,把同一套卷子拿出来再做一遍,你会发现那些你曾经做错的题,还是有可能会错。这时候再去分析第二次错的原因,往往能暴露更深层的理解问题。这个方法虽然费时,但性价比极高。
前端这个方向,入门容易,做好很难。笔试只是漫长职业路上的一个小关卡,但它筛掉的从来不是运气不好的人,而是准备不足的人。希望你能通过这篇文章,把一套卷子看成一次系统学习的机会,而不是一个需要跨过的坎。毕竟,面试官想看到的,从来都是一个一直在成长的工程师,而不是一个会刷题的学生。