十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

2024前端面试风向:从Vue3原理到工程化实践的高分攻略

2024前端面试风向:从Vue3原理到工程化实践的高分攻略 1. 2024年前端面试风向高分答案和糊弄答案的分水岭在哪今年我帮团队筛了不少简历、也作为技术面考官参与了二十多场面试最大的感受是前端开发面试题已经过了背八股文就能过关的阶段。前几年候选人把Vue生命周期、flex布局、事件冒泡这些概念背熟基本就能撑过一面现在同样的问题面试官会一直往下追问追到你发现自己其实并没有真正理解为止。举个例子同样是问Vue3的响应式原理三年前的候选人说一句用了Proxy代替Object.defineProperty就能拿个及格分现在这个答案只能算开场白。紧接着的问题是Proxy相比Object.defineProperty到底强在哪、为什么Vue2的数组拦截要单独处理、Vue3的ref和reactive为什么是两套API、依赖收集的targetMap结构是什么样的。每题都是三层以上的递进答不出第二层就露馅了。这种变化背后其实是一个很残酷的筛选逻辑面试官要的不是知识点复读机而是真正写过代码、踩过坑、思考过原理的人。2024年的前端岗位供给远远大于需求一个岗位收到几百份简历是常态面试官只能用追问两三层就卡壳这种低成本方式快速淘汰候选人。对于准备面试的人来说这意味着你不能只刷题你得建立自己的知识体系。我见过太多候选人基础题答得不错一进入场景题就崩盘。比如线上页面白屏了你怎么排查这是一个非常简单但极高频的问题很多人只能答出看控制台报错完全说不清从网络请求、资源加载、JS执行、渲染链路各个阶段的排查工具和判断依据。这类题目没有标准答案但恰恰是区分度最高的部分。所以这篇内容我会按2024年实际面试里出现频率最高的方向来拆解把我作为面试官视角下真正能拿分的答题思路整理出来。你不需要把它当成标准答案背而是理解每道题背后的考察意图再用自己的语言组织出来。1.1 面试题型结构的变化我统计了一下自己参与过的面试发现2024年的前端面试题结构大致是这样一个比例JavaScript语言基础占三成左右框架原理占三成左右工程化和项目经验占三成左右剩下的一成是算法手写和行为面试。这不是绝对标准但能代表大部分中大型互联网公司的考察倾向。注意这里有个变化纯HTML和CSS的知识占比在明显下降。不是说不问了而是很少再单独出题考基本都揉在项目题和场景题里面。比如怎么实现一个三栏布局这种经典题以前是必考现在出现的频率低了很多偶尔出现也是作为引子往BFC、flex布局性能、CSS动画的GPU加速等方向带。另一个变化是AI相关的内容开始渗入面试题。最近的热搜词里也有前端ai开发说明这个方向已经出现在大家的搜索视野里。实际面试中面试官会问你在项目里用过AI辅助编码吗AI生成的前端代码质量如何把控有没有用大模型接口做过前端功能。这些题不考察你会不会训练模型而是考察你是否理解AI时代前端工程师的边界和职责。这些变化合起来指向一个结论面试越来越像一个能力雷达测试而不是题库抽奖。你的知识结构是否完整、项目经验是否真实、解决问题的思路是否清晰在四十五分钟的对话里基本能暴露得干干净净。1.2 一句为什么能过滤掉八成候选人我做面试官有一个习惯对候选人的每个回答都追问一个为什么。这个习惯帮我快速判断对方是真懂还是背的。比如候选人说我用Vite搭的项目我会问为什么选Vite不选Webpack这道题的热度从2023年一直延续到2024年面试命中率极高。回答Vite快是最低分答案因为快只是一个结果。真正加分的是能说出Vite的开发服务器基于原生ESM启动时不需要像Webpack那样打包整个项目浏览器请求哪个模块就转译哪个模块生产构建用Rollup所以叫dev快、build稳。再比如候选人说项目的首屏性能做了优化追问就是你怎么量化优化效果用的什么指标FCP从多少降到多少优化手段里哪一项收益最大。大部分候选人在这一层就答不出来了因为很多人只在简历上写过性能优化这个词但从来没有真正用Lighthouse或者Performance面板测过数据。这就是为什么我说一句为什么能过滤掉八成候选人。面试题本身变得越来越不重要面试题背后的思考过程才是考察重点。你准备面试的时候与其刷一百道题不如把简历上每一个技术点都问自己三遍为什么。2. Vue3与React框架题答出源码级理解才有区别度框架题是2024年前端开发面试题里最容易拉开差距的板块。热搜词里Vue和React相关的内容占比非常之高vue3面试题、vue面试题、react面试题都排在前面。这很符合实际情况国内中大型公司基本就是Vue和React二分天下面试官一定会围绕你简历上主用的框架死磕到底。框架题的答题策略有一个核心原则不要只在API层面回答要往设计动机和源码层面带。比如为什么Vue3的composition API比Vue2的options API更好这个问题如果只回答Composition API能把逻辑聚合在一起这是八十分以下的答案高分答案会提到逻辑复用、Tree-shaking友好、TypeScript类型推导更完善、组件体积控制等多个维度。这背后的原因很简单面试官一天面五六个候选人听过的答案千篇一律。能聊到源码实现和设计动机的人至少说明你真的阅读过框架源码或者深入思考过原理这类候选人通常代码能力也不会差。2.1 Vue3响应式与diff算法的必答模板先看Vue3的响应式原理这道高频题。完整的答题链路应该是按顺序展开的Vue2的Object.defineProperty有什么缺陷、Vue3为什么选择Proxy、Proxy的代理对象和原始对象的区别、响应式系统的三个核心数据结构、派发更新时如何触发组件渲染。Vue2的Object.defineProperty核心缺陷有三个第一是只能拦截对象的属性读写新增属性和删除属性无法被拦截所以Vue2要额外提供Vue.set和Vue.delete第二是数组的拦截需要重写数组方法而且通过下标修改数组仍然无法响应第三是对象嵌套越深递归遍历的性能开销越大。这些其实都是面试官嘴里默认的常识但你要主动讲出来。Proxy的改进在于它是元编程层面的拦截可以拦截对象的所有操作包括属性读取、赋值、删除、in操作符、Object.keys等13种方法。所以Vue3的响应式不再需要重写数组方法新增属性删除属性也天然是响应式的。但Proxy也不是银弹它有两个容易被忽略的点一是Proxy代理的是整个对象访问深层属性时也要在get里进行惰性收集依赖二是对象的原始引用和代理引用不是同一份在解构、展开运算符等场景下会丢失响应式所以Vue3又提供了toRefs、toRaw这些工具函数来兜底。继续说响应式的核心数据结构targetMapWeakMap、depsMapMap和depSet。targetMap以原始对象为keydepsMap以属性名为keydep保存依赖了该属性的副作用函数。这里要能说出为什么targetMap用WeakMap而不用Map因为WeakMap的key是弱引用对象本身被回收时响应式依赖也可以被垃圾回收防止内存泄漏。这个细节直接体现源码阅读水平。diff算法部分Vue3的面试问题通常从Vue3的diff算法相比Vue2做了哪些优化切入。Vue2的双端diff算法会对比新旧VNode数组的头尾节点通过头头、尾尾、头尾、尾头四种比较尽可能复用节点Vue3在此基础上引入了patchFlag和Block Tree在编译阶段就把静态节点和动态节点区分开diff时只对比带patchFlag的动态节点。最核心的更新方式是求解最长递增子序列用贪心加二分查找把移动次数降到最低。你回答完这层面试官很可能会顺口问一句最长递增子序列是什么这个问题我在面试中遇到了不止三次。你要能马上给出定义和简单实现思路比如数组[2,3,1,5,6,4]最长递增子序列是[2,3,5,6]长度为4Vue3的diff里用它来确定哪些节点不需要移动只移动其余节点减少DOM操作次数。能把这个说清楚面试官直接就给你在框架部分打高分了。2.2 React18并发渲染与Hooks闭包陷阱React和Vue的面试题风格差异很大。Vue喜欢问原理和源码React问得最多的是Hooks闭包陷阱、setState是同步还是异步、React18的并发特性以及ClassComponent和FunctionComponent的对比。setState是同步还是异步这道题是React面试的钉子户几乎每场必考。标准答题链路是React18之前setState在事件处理函数中是异步的在setTimeout、原生事件、Promise回调里是同步的因为React的批处理机制只覆盖了合成事件内部React18之后通过createRoot创建应用所有场景下的setState都会自动批处理即使是Promise回调或者原生事件里也会批量合并。你要能进一步解释为什么React要做批处理。如果每次setState都立即触发渲染一个事件处理函数里连续setState三次就会触发三次渲染对性能是灾难。批处理把所有状态更新收集起来在事件循环的每个任务结束后统一渲染一次相当于前端层面的合并请求。这种类比让面试官觉得你真的理解了设计意图。Hooks闭包陷阱是2024年面试的高频追问。面试官会给一个经典例子在useEffect里setInterval每秒读取state并打印结果打印的永远是初始值。原因是useEffect的闭包捕获了初始渲染时的state值后续re-render时定时器闭包里的state引用没有更新。解决办法是使用useRef存储最新值或者在依赖数组里加入state让定时器重新创建。React18的并发特性方面你要能说出startTransition、useTransition、useDeferredValue这三个API的基本用法并且理解可中断渲染的含义。React18渲染不再是一次性不可中断的同步过程而是可以把不同优先级的更新拆开高优先级更新可以先中断低优先级渲染等有空闲时间再继续。这就像操作系统里的任务调度优先级高的任务可以抢占时间片。Hooks的原理方面还有一个高频题为什么useState不能写在条件语句里。因为React在每次渲染时按调用顺序维护Hooks链表如果在条件语句里使用Hooks渲染顺序不一致会导致链表错位React无法正确对应状态。这个问题的本质是Hooks依赖调用顺序而非名称标识。2.3 框架题的回答节奏源码、对比、落地点框架题想拿高分只答原理还不够得有一个清晰的节奏先讲结论再讲源码依据最后落到实际项目中的应用场景。我管这个叫三段式回答法。比如问Vue3的computed和watch有什么区别第一段结论computed是有缓存的派生状态只有依赖变化时才重新计算watch是执行副作用监听值变化后执行回调。第二段源码依据computed内部使用effect实现带dirty标志做缓存getter里收集依赖watch内部通过scheduler控制回调执行时机。第三段落地点项目中一个列表页的筛选结果用computed实现因为数据量大缓存能避免重复计算用户登录状态变化后的路由跳转和埋点使用watch因为这是操作型逻辑需要主动通知。我再强调一下第三段是整个回答的加分项。现在的面试官非常反感知道原理但不会用的候选人。你讲完源码后如果能快速举出项目中的实际场景会显得你不仅看了源码还把知识内化到了工作里。3. JavaScript语言级题目事件循环、闭包与...arg这类基础题的进阶答法JavaScript语言基础是前端面试的根基2024年依然如此。热搜词里前端开发 函数 ...arg这个组合很显眼说明大量前端开发者在搜索函数参数相关的问题尤其是剩余参数rest parameters和展开运算符spread syntax的用法。这类知识点看起来基础但面试中经常作为引子往闭包、作用域链、内存泄漏等方向引导。JavaScript题目有一个鲜明的特点追问深度可以无限延伸。面试官可以从什么是闭包问到垃圾回收机制是什么再到WeakMap和Map的区别三个问题之间逻辑衔接非常自然。你如果只是背了一层第二层就会被打穿。所以语言题的准备策略应该以核心概念底层机制常见坑为单位而不是单独背题。3.1 事件循环宏任务微任务题目九连问事件循环Event Loop是前端面试出现频率最高的JavaScript题目之一没有悬念。经典考法是给一段代码让你说出输出顺序比如setTimeout、Promise、async/await混合的代码考察你能不能分清楚宏任务和微任务的执行顺序。完整的答题框架是JavaScript是单线程语言所有任务分为同步任务和异步任务异步任务又分为宏任务setTimeout、setInterval、I/O、UI渲染、MessageChannel等和微任务Promise.then、MutationObserver、queueMicrotask、async函数await之后的代码等。执行顺序是当前宏任务执行完同步代码后检查微任务队列把微任务全部执行完再执行下一个宏任务。每轮事件循环最后会进行一次UI渲染。这里我要特别提醒两个细节。第一个是async/await的陷阱await后面的代码不会立即执行而是被包装成Promise.then放到微任务队列里。很多人以为await是同步阻塞这是错误的。第二个是Node.js环境下的事件循环和浏览器环境下略有区别Node有process.nextTick优先级高于Promise微任务如果你的简历写了Node这个知识点一定会被追问。另外一个隐藏考点是浏览器一帧里的事件循环。帧内要处理的事情包括宏任务、微任务、requestAnimationFrame回调、样式计算和布局、绘制。注意requestAnimationFrame的回调执行时机是在微任务之后、样式计算之前它和宏任务微任务不在同一个队列。有一个很经典的面试场景题用setTimeout实现动画和用requestAnimationFrame实现动画有什么区别答案就是后者能保证在帧渲染之前执行避免掉帧。3.2 闭包、this指向与 rest 参数的三层递进闭包这个知识点面试官几乎必问而且问的方式五花八门。最经典的问题是闭包是什么、有什么用、有没有什么缺点。很多人能答出函数内部访问外部变量这类定义但更重要的三个维度却常常漏掉。第一个维度是作用域链原理函数被创建时它的作用域链包含当前执行环境的变量对象和所有外部环境的变量对象。函数执行时如果内部找不到变量就沿作用域链逐层向外查找。闭包的本质是函数在定义时记住了它的词法作用域即使外部函数执行完毕闭包仍然持有对外部变量的引用所以外部变量不会被垃圾回收。第二个维度是应用场景模块化开发中的私有变量、函数式编程中的柯里化、防抖节流、单例模式、React Hook里useState和useEffect的实现基础。你能举出两三个具体场景面试官就会认为你是真在用闭包写代码而不是背概念。第三个维度是内存泄漏问题闭包持有了外部函数的变量引用如果不需要了但闭包还被其他地方引用内存就无法释放。解决办法是把闭包引用置为null或者用WeakMap/WeakSet保存让引用变成弱引用。这一层说完面试官基本就会结束这个考点。this指向的问题经常和闭包出现在同一场面试里。核心规律只有一句话this指向函数调用时的调用对象而不是函数定义时的所在对象。四种情况要能脱口而出普通函数调用时this指向window严格模式下是undefined对象方法调用时this指向对象apply/call/bind方法调用时this指向指定的第一个参数new调用时this指向新创建的实例对象。箭头函数没有自己的this它捕获外层作用域的this值所以箭头函数不能被new调用也不能用call/apply改变它的this。关于热搜词里前端开发 函数 ...arg我多说几句。展开运算符在函数中的应用是面试中很高频的代码题。核心考点有三个一是剩余参数...args会把所有参数收集成一个数组这在封装函数、函数重载时非常实用二是展开运算符fn(...arr)会把数组展开为独立参数传入函数三是两者的区别和使用场景——剩余参数永远出现在函数形参列表的最后展开运算符可以出现在数组字面量、对象字面量和函数调用中。高级点还会问展开一个Set得到数组、展开字符串得到字符数组、浅拷贝数组[...arr]、合并对象{...obj1, ...obj2}以及展开运算符只能浅拷贝不能深拷贝。3.3 Promise与异步控制的追问方向Promise相关题目在2024年面试中比重极大因为现在的业务开发基本离不开异步逻辑。面试官最爱问的几道题是Promise.all和Promise.race的区别、Promise.all失败了一个怎么办、怎么实现Promise超时控制、async/await和Promise的互转、手写Promise.all。一道很能区分水平的题是Promise超时控制给定一个Promise和一个超时时间超时后以错误结束怎么实现。很多人的第一反应是Promise.race把原Promise和一个定时器Promise比赛谁先出结果就返回谁。这个方案能得七十分但还有更好的扩展思路AbortController可以取消真正要取消的请求比如fetch调用race只是丢弃结果但底层请求还在跑。如果能把这个差异说出来面试官印象分会大大增加。async/await的错误处理也是一个被低估的考点。面试官会问async函数内部try/catch捕获不到哪些错误以及可以用.catch替代try/catch吗。标准答案是async/await只是Promise的语法糖任何await的Promise被reject时都会在async函数内抛出异常用try/catch捕获所有await错误是可以的但需要注意加await的时候每个都要处理。有些人喜欢用await promise.catch(err handler(err))把所有错误都吞掉这样容易导致后续逻辑拿到未定义值而出现诡异bug这种写法在code review里通常会被打回。Promise系列最后的杀手锏是实现一个简易Promise要求完全符合Promises/A规范包含状态流转、then链式调用、值穿透、错误处理、resolvePromise的处理过程。在面试的手写题阶段这道题的出现频率一直居高不下。如果你能顺畅地写出完整实现并解释清楚每段代码的意图面试官对你JavaScript功底的评价会直接拉到顶级。4. 工程化、性能优化与监控面试官真正想听什么工程化和性能优化类题目是2024年面试里最没法临时抱佛脚的部分。热搜词里前端开发规范vue前端开发skills都指向一个事实越来越多的面试官在考察候选人是否具备工程化思维和团队协作习惯。这一块没有一个标准的答案闭环你只能靠真实的项目经验和踩坑经历来支撑。工程化题目的通杀思路是效率、质量、性能、安全四个维度。无论面试官问的是构建工具选型、代码规范制定、CI/CD流程还是性能监控体系你都可以先快速判断这属于哪个维度然后有逻辑地展开回答。这个思路能让你在面对没准备过的题时也保持着框架感。4.1 Vite为什么能取代Webpack的答辩思路Vite和Webpack的对比题是2024年工程化面试的大热几乎和Vue3、React18在框架题里的地位一样稳。关键要理解清楚底层逻辑Webpack在启动开发服务器时从入口文件开始全量打包构建依赖图把所有模块编译成一个或多个bundle。项目越大启动速度和热更新速度越慢因为热更新也要对变更模块所在的部分做重新编译。Vite利用了浏览器原生ESM支持开发环境中不需要打包直接让浏览器加载ESModule按需编译被请求的模块所以冷启动速度几乎不受项目大小影响。注意这里有一个经典误区Vite的快只在开发环境成立生产构建阶段Vite用的是Rollup速度不一定比Webpack快。面试官问Vite为什么快的时候你把这个边界说清楚等于提前堵住了一个追问陷阱。更深层的对比包括Webpack的生态更加成熟各种loader和plugin一应俱全兼容性更好Vite基于ESM对CommonJS模块需要依赖预构建esbuild预打包某些老库或复杂配置可能踩坑Vite的插件机制和Rollup兼容开发阶段插件用unplugin体系生产阶段可以复用Rollup插件。如果你能结合具体项目里从Webpack迁移Vite遇到的坑比如某些Node模块不兼容浏览器环境、动态import命名的适配回答会非常出彩。4.2 首屏性能优化从指标到执行性能优化题的问法变化也很大。以前是怎么做性能优化现在更常见的是你的项目首屏加载用了哪些优化手段每一项的收益怎么样或者给你一个白屏指标你怎么排查并优化到1秒以内。标准的分析思路是先从指标拆分开始。常见的核心指标有FCPFirst Contentful Paint首次内容绘制、LCPLargest Contentful Paint最大内容绘制、TTFBTime to First Byte首字节时间、CLSCumulative Layout Shift累计布局偏移、INPInteraction to Next Paint交互到下一次绘制的时间。回答性能优化问题时先明确自己用的指标再往下讲手段会显得很专业。接下来讲具体手段我按收益从高到低排一个清单代码分割配合路由懒加载每个路由页面按需加载JS这是几乎所有中大型项目的标配图片处理包括CDN分发、WebP格式、合理尺寸压缩、懒加载和占位图静态资源缓存利用HTTP强缓存和协商缓存给文件名加哈希指纹实现增量更新去掉或按需引入大依赖比如把moment.js换成day.js能把几十KB体积降下来骨架屏和SSR减少白屏感知时间gzip或brotli压缩压缩后JS和CSS字节数能减少60%到80%HTTP/2多路复用减少连接开销甚至HTTP/3也有提。每一项都要能说出收益怎么测量。这里有一个实操技巧我一直很推荐用Performance面板录制加载过程找到长任务Long Task和阻塞渲染的脚本netWork面板里按大小排序找出体积Top3的资源。优化前后用Lighthouse测一遍分数对比就是最好的证明。面试时能说我们的FCP从2.8秒优化到1.2秒LCP从4.2秒到2.1秒比说十句我们做了优化都管用。4.3 监控、日志与代码规范容易被忽略却经常被问2024年面试里前端监控和代码规范被问到的概率明显提高。很多团队发现线上问题只能靠用户反馈才知道所以对监控体系的重视程度越来越高。前端监控类的经典问法是如果线上报错你怎么第一时间发现并定位。一个完整的回答应该包含三层采集层使用window.onerror、unhandledrejection捕获全局JS错误重写console上报日志对HTTP请求做全局拦截统计成功率、上报层通过gif或beacon.sendBeacon上报图片的优点是没有跨域限制且体积小、分析展示层按错误信息、来源URL、用户浏览器、操作路径等维度聚合按错误率升降来报警。如果你能提到错误上报需要去重和限频否则高峰期会把日志服务打爆面试官就知道你真正处理过线上问题。代码规范方向的题目通常是你们项目的前端规范怎么落地的。这里要答的不是我们用ESLintPrettier一句话而是完整的规范体系代码规范ESLint规则、editorconfig、prettier统一格式、Git规范commit message规范、分支管理规范、Code Review机制、组件规范和命名规范、目录结构规范。Vue项目里还会提到组合式API的setup代码块怎么组织、状态管理在哪个目录下、全局样式变量怎么维护。如果能说出规范不只是工具配置还要在CI阶段配合lint-staged做pre-commit检查这种实操细节会非常加分。5. 手写题与场景设计题从会写代码到讲清设计手写题几乎是每家公司的必考环节。2024年的手写题有一个趋势不再只考算法题而是大量考业务里用得上的工具函数和框架原理简化实现。这是因为面试官想看的是你会不会写生产级代码而不是你背过多少题解。手写题有一个通用应对策略先跟面试官确认需求边界再动手写写完自己讲一遍测试用例最后提一下边界情况。这一步很多人不重视直接提笔就写结果写出一个能跑但完全不健壮的版本。我的建议是花三十秒理清需求这三十秒反而会给你加分因为它展现出你在真实工作中面对需求时的思考习惯。5.1 手写题命中率最高的四道题2024年出现频率最高的四道手写题我按命中率排一个序防抖节流、Promise.all、深拷贝、call/apply/bind。防抖节流是绝对的第一名。防抖debounce的核心逻辑是每次触发重置定时器只有等待指定时间没有再次触发才执行节流throttle的核心逻辑是每隔指定时间最多执行一次。手写时注意三点第一确保this指向正确用apply绑定上下文第二注意参数透传用...args接收所有参数第三提供cancel方法让防抖和节流需要取消时可以取消。我见过太多候选人写完基本功能后面试官问如果用户想取消防抖怎么办就直接卡住这是很可惜的失分点。function debounce(fn, delay 300, immediate false) { let timer null; let isInvoked false; function debounced(...args) { if (timer) clearTimeout(timer); if (immediate !isInvoked) { fn.apply(this, args); isInvoked true; return; } timer setTimeout(() { fn.apply(this, args); isInvoked false; timer null; }, delay); } debounced.cancel function () { if (timer) clearTimeout(timer); timer null; isInvoked false; }; return debounced; }Promise.all的手写版本也是一个高频题。关键点是接收一个可迭代对象通常是数组返回一个新的Promise所有promise都成功时才resolve返回值是每个promise结果组成的数组且顺序与输入一致任何一个失败就直接reject需要处理输入数组为空的情况需要保证传入的普通值被Promise.resolve包装。深拷贝是另一个常客它的考点集中在如何处理循环引用、如何处理特殊类型Date、RegExp、Map、Set、函数、如何区分数组和对象。用递归加WeakMap记录已经拷贝过的对象就可以解决循环引用问题。这里要注意为什么用WeakMap不用Map因为WeakMap的弱引用特性让深拷贝完成后的临时映射表可以被回收不会造成内存残留。function deepClone(target, map new WeakMap()) { if (target null || typeof target ! object) return target; if (target instanceof Date) return new Date(target); if (target instanceof RegExp) return new RegExp(target.source, target.flags); if (map.has(target)) return map.get(target); const result Array.isArray(target) ? [] : {}; map.set(target, result); Reflect.ownKeys(target).forEach((key) { result[key] deepClone(target[key], map); }); return result; }最后是call/apply/bind的手写实现。call/apply的核心思路把目标函数挂到指定的this对象上调用它然后删除这个临时属性。bind的核心思路返回一个新函数内部用apply或call绑定this并且要支持柯里化传参。面试官可能会追问bind返回的函数还可以被new吗这个要能回答出来bind返回的函数如果被new调用this会被new实例覆盖而不会被预设的this影响原生的bind会判断当前调用方式手写时通常不处理或说明即可。5.2 场景设计题设计一个前端监控SDK场景设计题在2024年面试中的占比明显上升。面试官会给一个开放需求让你当场设计实现方案比如设计一个前端错误监控SDK“设计一个埋点系统”“设计一个前端权限控制方案”“设计一个富文本编辑器”。这类题的核心不是考察你背了多少设计模式而是考察需求分析能力、系统设计能力和表达能力。以设计前端监控SDK为例我的答题框架是先确认需求边界是错误监控还是行为监控需要上报哪些数据部署环境是单团队还是多团队接入数据上报的时效性要求这些确认完再讲总体架构。架构分四块来讲初始化配置SDK提供init方法接收appId、上报地址、采样率等参数数据采集通过window.addEventListener(error)捕获资源加载错误通过window.onerror捕获JS运行时错误通过window.addEventListener(unhandledrejection)捕获Promise异常通过重写console方法捕获console.error数据处理把原始错误栈、浏览器信息、用户操作路径、当前页面的URL和路由合并成一条结构化记录做去重和合并数据上报用sendBeacon或Image对象发送支持批量上报和本地队列缓存失败时重试。最后补充扩展性和非功能设计SDK需要支持按业务线区分上报需要支持动态开启关闭上报体积要控制对大错误栈做截断不能影响主业务的性能。这样一套下来面试官基本能看到你完整的系统设计能力。5.3 手写题的三个扣分点从面试官视角手写题最常见的扣分点有三个值得单独说一下。第一个是只写功能和场景不考虑边界情况。手写深拷贝时不考虑循环引用、手写debounce时不管immediate参数、手写Promise.all时不处理传入普通值这些都是扣分点。想拿分必须主动写出防御性代码。第二个是不说自己写的是什么就闷头写。候选人写代码的过程中完全沉默面试官很难判断他的思路。正确的做法是写之前先花十几秒说一句自己的实现思路写的过程中简单注释关键逻辑写完了主动讲一遍测试用例。这个习惯在真实面试里非常加分。第三个是暴露还没想清楚就动手的毛病。手写一个方法之前最好先把函数的输入输出约定说清楚比如参数类型、返回值、边界行为。如果在写的过程中发现需求理解有偏差可以主动跟面试官确认这比闷头写一个错误的版本要强很多。6. 项目复盘与行为面试技术面里最容易被低估的一环很多候选人花大量时间准备框架题和手写题却忽略了项目复盘。实际上2024年的面试中项目聊得越深技术基础题的数量就越少。面试官通过半小时的项目沟通基本能判断出你的技术深度、业务理解能力和思考能力所以项目这块绝对不能裸奔。项目复盘有一个核心原则用数据说话不要堆功能。你的简历上写了一堆技术名词但如果每个技术点都说不清它解决了什么问题、带来了什么价值那这段经历在面试官眼里就约等于零。6.1 项目复盘用数据说话而非功能堆砌准备项目复盘时我建议你按项目背景、技术难点、个人贡献、量化结果、复盘反思这五个要素来组织每个项目准备几个不同的讲述版本适应不同岗位方向的提问。举例来说你做一个Vue3的中后台系统不要只说我用Vue3Element Plus搭了一套后台管理系统而要这样说这个项目服务于公司内部运营人员高峰期日活大概五千我负责权限模块和统计报表模块权限模块这边做了基于角色的动态路由和按钮级权限控制通过路由守卫和自定义指令实现统计报表模块数据量比较大接口返回要两秒多我用前端缓存加虚拟滚动把渲染时间从八百毫秒降到了一百五毫秒左右。这种讲法的好处是面试官可以根据你提到的任何一个技术点继续深挖。比如按钮级权限怎么做的虚拟滚动原理是什么路由守卫的beforeEach里做了什么。每一句都是线索每一个线索都指向你真实做过的事情这就是好的项目复盘。再说一个容易被忽略的点项目反思一定要诚实。面试官问这个项目有什么可以改进的地方千万不要说没有我觉得已经很完美了。高情商的说法是承认某些迭代仓促的地方或者指出由于历史原因采用了某个方案如果重做会有更好的选择然后给出具体方案。比如当时权限方案用的是前端路由守卫控制后来发现安全性不够后端也需要校验如果让我重做我会用后端返回菜单和角色权限前端只负责渲染。这种反思体现出你的成长性。6.2 遇到答不上来的问题怎么办面试中被问到完全不会的技术点几乎是每个人都躲不开的事情。关键是应对方式。最差的应对是硬编一个答案或者沉默很久。面试官其实不指望你什么都会他们更在意你面对未知问题时怎么思考和沟通。我推荐一个三层应对策略第一层是诚实表态直接说自己不太了解这个方向但给出一个初步推断或相近的知识锚点。比如被问到OceanBase这类分布式数据库的前端接入要注意什么你可以说我对OceanBase了解不深但数据库连接池、事务一致性这些概念我在MySQL相关项目里了解过如果前端需要直连我猜需要注意连接管理和长耗时查询的阻塞问题。面试官听到这样有条理的推断会觉得你逻辑在线。第二层是快速把它拉回你熟悉的知识体系。比如这个技术我没深入用过不过它和我们项目里用的XX方案在XX维度上是类似的我可以说下我在XX方案上的经验。这相当于主动转换话题把面试引向你更厚的阵地。第三层是表现出学习意愿和行动力。可以说这个方向我回头研究一下如果你方便能不能推荐一两个资料入口。好的候选举止往往比好的答案更有说服力。6.3 反问环节怎么问才加分面试最后的反问环节是很多候选人放弃的一块阵地。其实这里的操作空间很大问得好能给你技术面加不少印象分。我建议问三类问题。第一类是业务和技术结合的咱们团队目前主要服务哪些业务线未来半年重点推进的技术方向是什么这展现了你对业务和技术趋势的关注。第二类是团队协作相关团队现在的代码规范和CodeReview流程是怎么执行的这类问题展现你的工程化意识。第三类是针对面试内容的延伸刚才提到的XX问题如果从源码层面看您觉得最佳实践是什么这类问题既礼貌又显得你还在思考刚才的题。要避免问的问题上来就问加班多不多、岗位薪资范围多少、绩效怎么打。这类问题留给HR环节在技术面阶段问会让面试官觉得你关注点不对。从我自己的面试官视角看一个候选人如果在反问环节能问出团队目前最大的技术挑战是什么或者我的技术栈距离这个岗位的要求还差在哪里我会认为这个人对自己职业发展有认真规划面试评价会悄悄往上拉一档。最后再分享一个小经验面试是一个双向筛选的过程不只是公司在选你你也在选公司。把每次面试都当成一次技术交流而非考试心态会稳很多。我见过很多技术能力不错的人因为紧张而发挥失常也见过技术平平但沟通清晰、复盘到位的候选人拿到offer。2024年的前端面试竞争确实激烈但它淘汰的从来不是基础不够好的人而是只会背题、不会思考的人。希望这篇内容能帮你少走一些弯路。
返回列表