ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

爱奇艺2020校招前端笔试题真题解析与备考复盘

2026/8/29 22:42:28 拓冰建站 浏览量
爱奇艺2020校招前端笔试题真题解析与备考复盘 爱奇艺2020校招前端方向笔试题第一场真题解析与备考复盘如果你正在准备前端校招爱奇艺这套2020年的笔试题值得认真刷一遍。虽然年份稍早但里面考察的JS基础、网络协议、布局实现和手写代码几乎就是现在前端面试的核心版图。前端面试有个特点框架年年变hooks、微前端、工程化工具层出不穷但语言基本功和浏览器原理这类底层能力一直是筛人的硬指标。这套卷子正好把这些考点串了起来非常适合用来检验自己的基础扎不扎实。这篇文章我会按题型模块逐类拆解把每一道题背后考察的知识点、解题思路和容易踩的坑都讲清楚同时结合后来几届校招的命题趋势帮你判断哪些内容需要重点投入、哪些可以战略性放弃。无论你是在校生第一次投实习还是转行前端准备冲击大厂这篇文章都能当成一份阶段自测清单用。1. 笔试题整体设计与考察思路拆解1.1 爱奇艺校招笔试的命题特点先说说这套卷子的整体观感。爱奇艺作为头部视频平台前端团队日常要处理播放器、页面性能、复杂交互这类高并发、高复杂度场景所以笔试命题明显偏向“基础扎实、原理清晰、代码能力过关”的筛选标准。题型上一般包括单选、多选、填空/简答和编程题覆盖专业基础、逻辑思维和代码实现三个维度。从2020年第一场笔试题来看核心模块有这么几个JavaScript语言特性原型链、闭包、事件循环、CSS布局与渲染机制、浏览器原理缓存、渲染进程、存储、网络协议HTTP缓存策略、TCP握手、以及现场手写代码数组去重、防抖节流、深拷贝等。这套结构其实代表了当时互联网公司前端笔试的通用模板后来很多厂子的笔试题也大量沿用类似框架。值得注意的一个细节是这套题里几乎没有直接考React或Vue的具体API而是把重点放在“框架底层依赖的语言和浏览器机制”上。原因很简单——校招生的框架经验普遍停留在使用层面试官真正想考察的是你在脱离框架之后能不能理解整个前端系统是怎么运转的。框架可以入职后现学但语言功底和计算机基础短期补不上来所以笔试环节就先把这批人筛出来。1.2 这些考点为什么到现在依然重要有人可能会问2026年了前端都卷到AI、WebAssembly、微前端了2020年的题还有参考价值吗我的观点是考点本身不过时但需要结合新环境重新理解权重。举个例子事件循环机制依然是面试必问题但现在的追问会更深比如“Node.js和浏览器事件循环的差异”“async/await在微任务队列中的具体调度顺序”“新版的queueMicrotask API”。所以如果你只背了当年的答案可能应付不了现在的追问。但反过来如果你能把2020年这套卷子里的基础题吃透、真正理解背后的原理那些新问题其实都是同一棵知识树上的分支。再比如HTTP缓存2020年考的是Cache-Control和ETag的基本配合现在的高频考点不过是加上了HTTP/2、HTTP/3的缓存行为差异、CDN场景下的缓存策略底层的强缓存与协商缓存逻辑完全没变。这也是我推荐所有备考前端校招的同学都刷一遍老题的原因老题是地基新题是地基上盖的楼地基不稳看再多新题也白搭。1.3 备考视角的题型权重评估从实际备考效率出发我给这套卷子的题型画一个优先级梯队。第一梯队必须完全掌握JS基础题、浏览器缓存/渲染机制、手写代码题。这三大块在几乎所有前端笔试中的出现概率接近100%而且分值占比高属于“丢分就很伤”的部分。第二梯队需要熟练CSS布局题、网络协议题TCP/UDP/HTTP状态码、ES6新特性。这些出现概率也很高但考察深度相对浅只要知识点成体系、能做基础推导就能拿分。第三梯队看剩余时间前端工程化、安全攻防、性能优化。爱奇艺这套卷子里这些内容占比较低但如果你的目标厂子名单里有字节、阿里这类笔试风格偏工程化的公司还是需要补充。建议你按这个梯队分配复习时间不要平均用力。很多同学复习时最容易犯的错就是在偏门考点上死磕结果基础题反而没时间打磨。笔试是限时淘汰赛你不需要答对每一道题只需要在有限时间内把最稳的分全拿住。2. JavaScript核心考点深度解析2.1 变量提升与暂时性死区这套笔试题里关于变量提升的题目表面是让判断输出结果实际考察的是对JavaScript执行上下文创建阶段的理解。老手都知道var声明的变量在编译阶段会被提升到作用域顶部并初始化为undefined而let和const虽然也会被提升但因为存在暂时性死区TDZTemporal Dead Zone在声明语句之前访问会直接抛ReferenceError。笔试里最常见的出法是这样的代码片段console.log(a); // 输出什么 var a 10; console.log(b); // 输出什么 let b 20;第一行输出undefined第二行直接报错。很多同学只知道“let不会提升”但准确的说法是let也会提升只是被TDZ保护起来了在初始化之前访问会报错。这个区别面试官如果追问你就必须说清楚。我当时在复习时总结了一个便于理解的说法var的提升是“声明初始化为undefined”一起完成let的提升只有“声明”初始化要等到执行到那一行才发生所以中间这一段就是暂时性死区。2.2 闭包的作用域链与应用陷阱闭包几乎每场前端笔试必考。爱奇艺这套题里出了一道典型的循环闭包问题原题大概是这么个意思for (var i 0; i 5; i) { setTimeout(function () { console.log(i); }, 100); }输出结果是5个5而不是0、1、2、3、4。原因在于var声明的i是函数作用域循环结束后i的值已经变成5而setTimeout的回调是在循环结束之后才执行的访问到的自然是同一个i。解决办法有三个用let声明i、用立即执行函数传参保存、或者用bind绑定参数。这道题真正的价值不在于记住答案而在于理解闭包的本质是“函数与其词法作用域的引用关系”。当回调函数被创建时它记住了外部作用域中的i变量而不是i在当时的值。所以解决这类问题的核心思路就是“把每次循环的独立值保存到一个新的作用域中”。我见过不少同学在简历上写“熟练掌握闭包”结果连这道经典题都答不利索。建议你不仅会做还要能现场讲清楚“为什么var会这样而let不会”因为面试官下一步大概率就是这么追问的。2.3 事件循环机制与宏任务微任务调度事件循环这道题算得上笔试界的“常青树”了。爱奇艺2020年第一场的版本是让判断下面代码的输出顺序console.log(script start); setTimeout(function () { console.log(setTimeout); }, 0); Promise.resolve() .then(function () { console.log(promise1); }) .then(function () { console.log(promise2); }); console.log(script end);正确输出顺序是script start、script end、promise1、promise2、setTimeout。核心规则是当前宏任务执行完毕后会清空整个微任务队列然后再去取下一个宏任务执行。Promise的then回调属于微任务setTimeout的回调属于宏任务所以即使setTimeout的延迟是0也得排在微任务后面。现在的面试在这个基础上会不断加码比如问你async函数中await后面代码的执行时机。这里有个细节值得注意await后面实际相当于包了一层Promise它后面的代码要等await表达式resolve之后才作为微任务继续执行。比如async function test() { console.log(1); await Promise.resolve(); console.log(2); } test(); console.log(3);输出是1、3、2。因为调用test时同步执行了console.log(1)遇到await立即让出执行权后面的console.log(2)被放入微任务队列而主线程继续执行console.log(3)。这个知识点在笔试中出现的频率极高建议把“宏任务 - 微任务 - 渲染”这个完整的调度链条背熟。2.4 原型链与继承的笔试高频考法原型链这个考点爱奇艺的题一般不会直接问“什么是原型链”而是给你一段对象操作的代码让你判断属性访问结果或者 instanceof 的返回值。核心要掌握三个关键点第一每个对象都有一个隐藏的__proto__属性指向它构造函数的prototype对象。第二当访问对象属性时如果自身没有就沿着__proto__链向上查找一直找到Object.prototype再往上就是null。第三instanceof检查的是构造函数的prototype是否出现在对象的原型链上。一道很经典的题目是function Parent() {} function Child() {} Child.prototype new Parent(); var child new Child(); console.log(child instanceof Child); // true console.log(child instanceof Parent); // true console.log(child.constructor Child); // false最后一个输出false是因为Child.prototype被整个替换成了Parent实例导致child.constructor沿着原型链找到了Parent。ES5时代修复这个问题要给Child.prototype重新指定constructor属性ES6的class语法则自动帮你处理了这一点。笔试中如果考到class继承的extends实现原理本质上就是做“原型链挂接构造函数调用”这两件事。3. 浏览器原理与网络协议必考内容3.1 HTTP缓存策略强缓存与协商缓存的完整配合爱奇艺作为视频网站对HTTP缓存的重视程度非常高因为这直接关系到视频资源、图片资源的加载速度。笔试里这一块喜欢用选择题或简答题形式考察核心是搞清楚两对头部的配合逻辑。强缓存阶段浏览器直接读取本地缓存不发请求到服务器。相关的响应头主要是Cache-Control和Expires其中Cache-Control的max-age值优先级高于Expires。Cache-Control还支持no-cache、no-store、public、private等指令笔试常考的是区分“no-cache允许缓存但每次必须验证”和“no-store完全禁止缓存”的区别。当强缓存失效后浏览器带着请求头发送协商缓存验证。这里又分两种方式基于时间的Last-Modified/If-Modified-Since和基于唯一标识的ETag/If-None-Match。两者同时存在时ETag优先级更高因为时间戳的精度只能到秒无法识别同一秒内的内容变化而ETag基于内容哈希精度更高。我建议把整个流程画在自己的笔记里按“首次请求 - 缓存命中 - 强缓存失效 - 协商缓存验证 - 重新缓存”这个顺序走一遍笔试里遇到任何缓存题都能找到对应位置。3.2 浏览器渲染流程与重排重绘优化渲染机制相关题目在这套试卷里通常以“性能优化”的面目出现。要理解优化手段先得知道浏览器从拿到HTML到最终显示页面经历了哪些步骤解析HTML生成DOM树、解析CSS生成CSSOM树、合并成渲染树、布局计算、绘制、合成。其中布局和绘制是两个最耗时的阶段。重排reflow发生在几何信息改变时比如修改元素的宽高、位置、字体大小、窗口缩放。重绘repaint发生在视觉样式改变但几何信息不变时比如修改颜色、背景、可见性。重排一定会触发重绘但重绘不一定会触发重排。笔试中常考的手段包括批量修改DOM、使用DocumentFragment、将频繁变化的元素设为绝对定位脱离文档流、用visibility代替display:none、缓存width/height避免强制同步布局等。这里有一个“强制同步布局”的细节值得展开。当你先读取某个元素的offsetHeight然后又修改它的样式再读取下一个元素的offsetHeight浏览器为了返回准确值会强制提前执行一次布局造成性能损耗。正确做法是先把所有要读的值都读出来再统一修改样式。这个细节在笔试里可能不会单独考但面试聊到性能优化时是很好的加分项。3.3 跨域问题与常用解决方案对比跨域是前端笔试必考题爱奇艺的题一般会给出具体场景然后让你选择可行的方案。核心前提要清楚跨域限制是浏览器行为不是HTTP协议本身的行为所以服务器之间的请求不受此限制。最基础的方案是JSONP利用script标签不受同源策略限制的特性通过动态创建script标签发起GET请求服务端返回一段JS代码调用前端预先定义好的回调函数。JSONP的局限性是只支持GET且错误处理能力弱。笔试题里常把这个和CORS做对比让你选择更优解。CORS跨域资源共享是现在的标准方案核心是通过服务器返回Access-Control-Allow-Origin等响应头来授权。简单请求和非简单请求的处理方式不同非简单请求比如带自定义头或用PUT/DELETE方法会先触发一次OPTIONS预检请求这是笔试高频考点。另外如果涉及携带Cookie前端需要设置withCredentials后端需要明确指定Access-Control-Allow-Origin为具体域名而不能用星号。还有几种方案也是笔试备选答案通过nginx反向代理同源转发、通过postMessage实现跨窗口通信、通过WebSocket不受同源策略限制。后两种在特定场景下很好用但笔试里通常不是最优解注意审题。3.4 TCP连接管理三次握手与四次挥手网络协议题在2020年这套试卷里占了一定比例。最基础的是三次握手建立连接和四次挥手断开连接。注意这里考察的不是背口诀而是理解每一阶段存在的理由。三次握手是为了确认双方的发送和接收能力都正常。第一次客户端发送SYN服务端知道客户端发送能力正常第二次服务端回复SYNACK客户端知道服务端发送和接收都正常第三次客户端发送ACK服务端确认客户端接收能力正常。为什么要第三次因为如果只靠两次握手服务端无法确定客户端是否收到了自己的应答可能出现客户端已放弃、服务端还在等待的情况。四次挥手断开连接的原因是TCP是全双工的每次关闭一个方向都需要一个单独的FIN和ACK过程。主动关闭方发送FIN后被动关闭方可能还有数据要发送所以先回复ACK表示“收到你的关闭请求”等数据处理完毕后再发FIN最终主动方回复ACK连接完全关闭。笔试里常考TIME_WAIT状态出现在哪一侧、为什么要等待2MSL答案是保证最后一个ACK到达对端以及让网络中残留的数据包过期这个细节能体现你对协议的深入理解。4. CSS布局与工程化考点4.1 垂直水平居中的多方案对比CSS布局题基本出现在每一套前端笔试卷里爱奇艺的版本是经典的“让一个元素在父容器中垂直水平居中”。这个题的开放性很高因为实现方式非常多不同场景适用不同方案。建议你至少掌握四种并且能说清楚各自的适用条件和副作用。文本级居中用flex就够父级display:flex子级margin:auto或者父级设置justify-content:center和align-items:center。这是现代布局最通用的方案笔试中95%的场景用它都不会错。定位居中方案适合已知子元素宽高的场景父级position:relative子级position:absolutetop:50%、left:50%再用margin-left和margin-top负值回移一半尺寸。这里的margin值必须精确等于宽高的一半改起来比较麻烦所以一般笔试不建议选这个。transform居中方案是定位方案的改进版不用知道宽高absolute定位到50%后再用translate(-50%, -50%)回移。配合CSS变量或calc也能实现但要注意transform会影响子元素内部的fixed定位上下文。grid布局居中是最简洁的代码之一父级display:grid子级margin:auto或者父级place-items:center。笔试中如果你已经写了别的grid答案顺手把居中也用grid做代码风格会很统一。4.2 BFC与IFC的核心机制及应用场景BFC块级格式化上下文是一块独立的渲染区域内部元素的布局不会影响外部元素。笔试中常考的是“如何触发BFC”“BFC解决了什么问题”。触发方式包括overflow不为visible常用hidden、float不为none、display为inline-block/flex/grid/flow-root、position为absolute/fixed等。经典应用场景有三个。第一是清除浮动当父元素的所有子元素都float后父元素高度塌陷给父元素设置overflow:hidden或display:flow-root可以让父元素重新包裹浮动的子元素。第二是防止margin合并兄弟块级元素之间的垂直margin会取较大值而不是相加把其中一个放进BFC容器里就能取消这种合并。第三是阻止元素被浮动元素覆盖这在双栏布局中很常见。IFC行内格式化上下文虽然没有BFC考得频繁但理解它有助于解决行内元素的垂直对齐问题。IFC中撑起一行高度的不是什么行内元素而是line boxline box的高度取决于行内元素的自身高度和vertical-align等属性理解这个机制对处理文字和图片的基线对齐问题非常有用。4.3 经典两栏与三栏布局实现思路爱奇艺这类公司的笔试里布局题往往不满足于问“怎么做”而是给出一段HTML结构让你在指定CSS条件下完成双栏或三栏布局。最常见的双栏布局是左侧固定宽度200px左右、右侧自适应。可以用的方案有flex、floatBFC、absolute定位、grid等。笔试题如果要求“右侧栏优先加载”就需要在HTML结构上把右侧写在前面然后用负margin方式实现这就是圣杯布局和双飞翼布局的核心思路。三栏布局的经典解法同样不少。flex方案最直观左右各占固定宽度中间flex:1。grid方案更简洁声明grid-template-columns: 200px 1fr 200px即可。floatmargin方案需要处理中间列的负margin代码稍复杂但能体现你对传统布局的理解。从备考角度看flex和grid两种方案必须写得又快又对因为这是高频考点。圣杯和双飞翼布局现在笔试出现的频率有所下降但如果你投的目标公司考得比较老派还是需要掌握原理和关键代码。4.4 CSS工程化预处理器与模块化方案2020年这套笔试题在CSS工程化方向上没有考得很深但近几年的趋势是加入preprocessor相关内容。笔试题常问的是Sass/SCSS与原生CSS的区别以及变量、嵌套、mixin、继承这几个核心特性分别解决什么问题。另一个考点是CSS模块化方案包括CSS Modules、BEM命名规范、CSS-in-JS等。这三者解决的问题类似但思路不同。CSS Modules通过编译过程给类名加哈希后缀实现局部隔离BEM通过命名约定Block-Element-Modifier来避免样式冲突靠的是人的纪律性CSS-in-JS则把样式写进JavaScript里利用JS的作用域和组件化能力管理样式。笔试如果问你“项目中的样式隔离方案如何选”需要结合项目规模、团队协作方式、是否使用组件库来回答。还有一个容易被忽视的考点是CSS性能优化包括选择器优先级、样式计算的复杂度、避免使用过度限制的后代选择器比如ul li ul li每多一层后代选择器都会增加匹配成本、利用cssnano压缩、合并重复样式规则等。视频网站的前端对样式加载性能很敏感所以这类题在爱奇艺的笔试里是加分项。5. 手写代码与算法题的备考策略5.1 高频手写题防抖与节流手写代码环节是校招笔试的压轴模块也是拉开分数差距的地方。爱奇艺2020年第一场的手写题范围基本锁定在前端日常开发的高频工具函数上其中防抖debounce和节流throttle是出场率最高的两个。防抖的核心思路是在一定延迟时间内如果事件再次触发则重新计时。只有当连续触发停止后才会执行目标函数。实现起来非常简洁function debounce(fn, delay) { let timer null; return function (...args) { if (timer) clearTimeout(timer); timer setTimeout(() { fn.apply(this, args); }, delay); }; }这里有个容易被忽略的细节内部函数要用function而非箭头函数并在调用目标函数时用apply传入this。否则this指向会丢失在Vue组件里就会出问题。另外防抖还有“立即执行”版本也就是第一次触发立即执行之后在延迟时间内停止反复触发实现方式是通过判断timer是否存在来决定是否立即执行。节流的核心思路是在一定时间间隔内只执行一次函数不管事件触发多少次都按固定频率执行。最常用的实现是用时间戳function throttle(fn, interval) { let lastTime 0; return function (...args) { const now Date.now(); if (now - lastTime interval) { lastTime now; fn.apply(this, args); } }; }笔试中常常会让写“带头部立即执行且尾部等待执行的节流”这个版本更完整。判断一个实现是否专业就看你能不能写清楚leading和trailing两种模式的控制逻辑。实际项目里搜索框输入建议用防抖滚动事件监听用节流这个区分也经常在面试里追问。5.2 高频手写题深拷贝与数组去重深拷贝在笔试中出现频率极高。最基本的版本是用JSON.parse(JSON.stringify(obj))但这么做有两个致命缺陷会把undefined、Symbol、Function类型的属性直接丢失而且遇到循环引用会直接报错。所以笔试如果要求实现深拷贝多半是要你考虑这些边界情况的。一个相对完整的深拷贝实现要解决三个问题区分基本类型和引用类型、兼容数组和普通对象、处理循环引用。核心代码如下function deepClone(obj, map new WeakMap()) { if (typeof obj ! object || obj null) return obj; if (map.has(obj)) return map.get(obj); const result Array.isArray(obj) ? [] : {}; map.set(obj, result); for (const key of Object.keys(obj)) { result[key] deepClone(obj[key], map); } return result; }这里用WeakMap而不是Map来存循环引用是因为WeakMap使用弱引用不会阻止垃圾回收避免在克隆完成后产生内存泄漏。数组去重的方法同样不少笔试答案可以从最简单的Set一行解法开始const unique [...new Set(arr)];然后可以补充reduce实现、filter indexOf实现、对象键值去重、以及“要求保留原始顺序且数据量很大”时的Map版本。每种方法的时空复杂度不同笔试中如果给了时间/空间限制条件需要敏锐判断该用哪种。5.3 排序算法的时间复杂度边界虽然前端岗位不像后端那样重度依赖算法但笔试中常会考基础排序算法比如快速排序、归并排序、插入排序。爱奇艺这套题的算法难度整体不高一般不会考动态规划或复杂图论能把经典排序算法的时间复杂度边界弄清楚基本够了。我的建议是重点掌握快速排序的partition思想因为它在解决“第K大”问题时也能用到。快速排序的最坏情况是O(n^2)比如总是选到最小元素当基准平均情况是O(n log n)可以通过随机选取基准或三数取中来规避最坏情况。归并排序的时间复杂度稳定在O(n log n)但空间复杂度是O(n)笔试如果问到“稳定排序且时间稳定”的算法答案就是它。对于前端来说实际业务代码中直接手写排序算法的场景很少因为Array.prototype.sort的V8实现TimSort已经很快很稳。但笔试考排序不是为了让你生产中造轮子而是考察基本的算法思维和复杂度分析能力所以不必刷难题做熟这几类基础算法就够了。5.4 链表中环的检测与双指针技巧虽然算法题占比不是最高但爱奇艺的笔试题还是会出现经典的数据结构问题。链表中检测是否有环就是一个非常典型的题目用快慢指针就能优雅解决慢指针每次走一步快指针每次走两步如果存在环快指针一定会和慢指针在环内相遇如果快指针先到达链表尾部null说明无环。这个问题可以延伸出很多变体找到环的入口节点、判断两个链表是否相交并找到交点。找环入口的思路是在快慢指针第一次相遇后让一个指针从头开始走另一个从相遇点继续走两者再次相遇的位置就是环的入口。核心数学推导是头节点到环入口的距离等于相遇点到环入口的距离加上若干个环的周长。这类题目对前端工程师的实际价值在于锻炼链式数据结构的敏感度——无论是操作DOM节点的nextSibling还是处理链表形态的数据结构这种思维方式都是通用的。笔试中能在15分钟内写出正确代码基本上就能在这个环节拿满分数。6. 框架与工程化的加分方向6.1 前端框架理解从使用到原理的距离2020年爱奇艺这套笔试题的框架部分占比不高但并不意味着框架不重要。随着近几年前端岗位竞争加剧框架原理的考察力度逐年提升。如果这套卷子你刷完之后还有余力建议把框架原理补上它会成为拉开差距的筹码。React方向的常考点包括虚拟DOM的diff过程、Fiber架构解决了什么问题、Hooks的依赖收集机制、useEffect和useLayoutEffect的区别。Vue方向常考响应式原理Proxy vs Object.defineProperty、依赖收集与触发更新、虚拟DOM的patch过程、computed和watch的实现差异。笔试中这类题多以问答形式出现不需要手写框架源码但需要你对核心机制有清晰的层次化理解。我的建议是不要直接读源码而是按“设计动机 - 核心概念 - 数据流 - 更新机制”这个顺序去学。先回答“它为了解决什么问题而存在”再回答“它内部如何工作”最后回答“用的时候有哪些注意点”。这种结构化的表达方式在笔试简答题和面试中都非常加分。6.2 前端工程化打包工具与构建流程工程化这个考点在2020年笔试中偶有出现但近两年越来越常态化。常考内容包括Webpack的核心概念entry、output、loader、plugin、devServer、热更新HMR的原理、代码分割Code Splitting的实现方式、Tree Shaking的生效条件。现在的新趋势是Vite的ESBuild和Rollup、还有Rspack这类用Rust写的构建工具笔试中如果出现对比题需要知道它们各自的定位和优势。Vite的核心设计是开发环境下基于原生ESModule的按需编译启动速度远快于Webpack全量打包生产环境则用Rollup做打包。这一套逻辑在理解上并不难难的是和Webpack做横向对比时不能只说“快”还得说清楚为什么快——因为Webpack开发时要把所有模块的依赖关系预先构建成bundle而Vite直接把源码交给浏览器浏览器自己去请求ESModule只有在请求时才编译对应模块。笔试如果考工程化选择题经常会在“开发体验”“首次启动速度”“产物优化”这些维度上让你排序。只要抓住“开发重体验、生产重体积”这个原则大多数题都能答对。6.3 前端安全XSS与CSRF的攻防对策安全问题是笔试中性价比很高的一类题目。代码量不大知识点明确基本是背了就能拿分。最高频的考点是XSS跨站脚本攻击和CSRF跨站请求伪造。XSS的核心是攻击者把恶意脚本注入到页面中执行。防御手段首要是对用户输入做过滤和转义输出到HTML时用textContent而不用innerHTML使用CSP内容安全策略限制脚本来源。存储型XSS比如把恶意评论存进数据库其他用户访问时执行是对视频网站威胁最大的一种因为视频网站的弹幕、评论、个人签名都是注入点。CSRF的核心是攻击者诱导用户浏览器向已登录的目标站点发送伪造请求。防御手段包括校验请求头Referer/Origin、使用CSRF Token、在关键接口上要求自定义请求头因为跨域请求无法携带自定义头跨域限制本身就成了防御层。2020年的卷子里还没有把SameSite Cookie属性作为考点但现在的笔试答案里建议加上这条因为SameSiteLax/Strict是浏览器层面最省事的防护方案。6.4 性能优化从指标到落地的完整链路性能优化在爱奇艺这类重内容、重体验的平台笔试中经常出现。考察形式可能是“列举你知道的前端性能优化手段”这类开放题也可能给一个首屏加载过慢的真实场景让你分析可能的原因并给出优化方案。我建议按“指标 - 瓶颈定位 - 优化手段 - 验证”这个链路来组织答案。核心指标包括FPFirst Paint、FCPFirst Contentful Paint、LCPLargest Contentful Paint、CLSCumulative Layout Shift等。瓶颈定位要看你优化的是哪个环节网络链路减少请求数、启用HTTP/2、配置CDN、使用图片懒加载、解析渲染链路减少JavaScript体积、拆包、并行加载、避免阻塞渲染、运行时链路减少不必要的重渲染、优化长列表、使用Web Worker处理耗时任务。在笔试题里答这种开放题时注意不要只罗列名词要按“优先级 适用场景”分层次展开。比如先做“最高优先级压缩关键渲染路径中的资源”再做“中优先级图片优化与代码分割”最后做“优化级缓存策略与预加载”。这样考官一眼就能看出你不是背的而是真正做过性能排查的人。7. 备考中的常见问题与应试技巧实录7.1 时间分配与答题顺序的经验刷过爱奇艺这套笔试题后你会发现在线笔试的时间其实非常紧张单选多选加手写题通常要在90到120分钟内完成大量内容。我的经验是进入考试后先花2分钟扫一遍全部题目按“简单题 - 中等题 - 难题”的顺序作答千万不要在第一道题上死磕否则很容易出现后面大题没时间写的情况。手写代码题建议先写能跑通的朴素解法保证拿基础分再考虑优化方案。比如数组去重第一反应写Set解法这个又能跑又简洁就不要纠结“面试官会不会觉得太简单”。笔试的判分逻辑是“通过测试用例给分”一个复杂度高但能跑对的答案永远好过一个理论最优但没写出来的答案。时间分配上建议基础选择题控制在总时长的30%以内手写题预留至少40分钟。如果你的目标公司笔试没有在线判题而是一个邮箱收代码文件那么代码缩进、注释、命名规范也要注意因为这些是看得见的专业素养分。7.2 利用这套题目进行自测的方法这套2020年的题怎么用才能发挥最大价值不建议直接从头刷到尾那样和背答案没什么区别。我的建议是先按考试模式做一遍不看答案记录每道题的耗时和正确率然后再对照答案把错题和蒙对的题归入三类——基础概念不牢、代码能力不足、题型不熟最后针对性补漏。补漏时可以建立自己的错题本。前端笔试的很多知识点是互相关联的比如你搞不懂事件循环紧接着Promise的执行顺序题也会错你搞不懂重排重绘性能优化题就答不到位。错题本不需要形式花哨关键是在每道题旁边写下“考察的知识点是什么”和“我错在哪一层理解”。这个总结过程比刷十套新题的收益还要大。两周之后再把这套题重新做一遍尤其是手写代码部分看看能不能在30分钟内全部写完。如果第二次的正确率明显提升说明你的基础已经从“听过”变成了“会用”。如果还是卡壳那就说明不是记忆问题而是理解深度不够需要回到对应章节重新看。7.3 基于真题预测的复习优先级排序最后分享一个我从这套题延伸出来的复习策略。前端校招笔试的知识点虽然多但出题密度差异很大。按这套2020年真题的高频区间我建议按下面这个顺序安排复习。最高优先级JavaScript语言机制作用域、闭包、原型、事件循环、HTTP缓存、浏览器渲染、手写函数防抖节流、深拷贝、数组去重。这些内容你闭着眼都要能写出来。次高优先级CSS布局与居中、网络协议基础TCP握手挥手、HTTP状态码、ES6新特性、常见设计模式。这些内容出题概率高但知识点密度适中可以系统过一遍。中级优先级框架原理React/Vue二选一精读、前端工程化核心流程、性能优化方法论、安全攻防基础。笔试出现频率低于前面两组但面试和后续复试环节价值很高值得投入时间。低优先级具体框架API背诵、细碎CSS属性记忆、冷门算法题。这些内容性价比低建议放到选做清单有余力再补。笔试本质上是一场“在有限时间内证明你的基础足够扎实”的考试。把上面这些高频区块打牢再在面试环节展示你的项目亮点整个求职链路会顺畅很多。这套题目虽然来自2020年但它对应试方向和重点的指向性在今天依然很有参考价值。我自己的体会是准备笔试不要贪多贪多嚼不烂。与其刷完十套不同公司的真题但每套都是七成把握不如把两三套高质量的真题啃透每个考点都做到“能讲清原理、能写出代码、能说出注意点”。这样上了考场不管题目怎么换皮你都能一眼看穿它考的是哪个知识点。希望这篇解析能帮你把这套爱奇艺真题的价值榨干祝备考顺利。