我见过太多技术扎实的前端兄弟,栽在了面试这一关。不是代码写得不行,也不是项目经验不够,而是太老实了。
面试官问:“你对闭包的理解怎么样?”
老实人张口就来:“还行吧,平时工作用得少,就知道个大概。”
面试官问:“这个项目你主要负责什么?”
老实人实诚回答:“我就写写页面,接口都是后端给的,没啥难度。”
兄弟,醒醒!这是面试,不是让你写工作总结!你以为的 “实事求是”,在面试官眼里就是 “能力不行”“没思考过”“价值不高”。面试的本质,就是一场短时间的自我营销。你得在 30-60 分钟里,把自己的优势最大化地展示出来。而 “多背” 和 “别太老实”,就是这场营销的核心技巧。
先说说为什么要多背。
前端面试的 “八股文” 不是玄学,是面试官筛选候选人的高效工具。你以为面试官不知道 “面试造火箭,工作拧螺丝”?他们太清楚了!但正因为日常工作里,大家都是搬砖,才需要通过这些标准化的问题,判断你的知识储备和基本功。你背熟了原型链的底层逻辑,面试官就知道你 JS 基础扎实;你背会了 Vue 响应式原理的演进,面试官就明白你不是只会用 API 的 “工具人”;你能把防抖节流的手写思路脱口而出,面试官就会觉得你有实际解决问题的能力。这些东西,靠临场发挥是不行的。尤其是面试紧张的时候,脑子一空白,啥都想不起来。只有提前背熟,形成肌肉记忆,才能在面试官面前侃侃而谈。这里说的 “背”,不是死记硬背,而是理解后的记忆。比如背闭包,你得先搞懂 “词法作用域”“变量提升” 这些底层概念,再结合实际工作中的应用场景(比如防抖节流、模块化)去记。这样你回答的时候,才不是干巴巴的背诵,而是有血有肉的 “经验分享”。
再聊聊别太老实这件事。
这不是让你撒谎造假,而是拒绝无效谦虚,学会合理包装。举几个很现实的例子:
- 你负责过一个后台管理系统的页面开发,别再说 “我就写写页面”,换成 “我负责搭建这个项目的前端架构,封装了通用组件库,优化了列表渲染的性能,把首屏加载时间缩短了 50%”。
- 你用过 Vue 写过几个项目,别再说 “我只会基础用法”,换成 “我熟练掌握 Vue 的响应式原理和组件通信方式,能独立完成中大型项目的开发,还做过 Vuex 状态管理的优化”。
- 面试官问你会不会某个没接触过的技术,别直接说 “不会”,换成 “我虽然没直接用过,但它的核心原理和 XX 技术很像,我之前做过类似的实现,上手应该很快”。
你看,同样的经历,换种说法,在面试官心里的分量完全不一样。
还有一个很重要的点:主动引导话题。
如果面试官问的问题你不太熟,别硬着头皮瞎答,也别直接说不会。可以礼貌地说:“这个问题我了解得不多,但我对 XX 相关的技术研究得比较深,比如 XXX”,然后把话题引到你擅长的领域。面试是双向沟通,不是单向审问。你越主动,越能掌握主动权。我整理了前端面试高频背诵清单(含 JS 基础 + 框架核心 + 工程化 + 手写题),都是我踩坑总结的精华内容,背完直接去面试!
- 1.请求失败会弹出一个 toast,如何保证批量请求失败,只弹出一个 toast
- 2.如何减少项目里面 if-else
- 3.babel-runtime 作用是啥
- 4.如何实现预览 PDF 文件
- 5.如何在划词选择的文本上添加右键菜单(划词:鼠标滑动选 择一组字符,对组字符进行操作)
- 6.富文本里面,是如何做到划词的(鼠标滑动选择一组字 符,对组字符进行操作)?
- 7.如何做好前端监控方案
- 8.如何标准化处理线上用户反馈的问题
- 9.px 如何转为 rem
- 10.浏览器有同源策略,但是为何 cdn 请求资源的时候不会有跨域限制
- 11.cookie 可以实现不同域共享吗
- 12.axios 是否可以取消请求
- 13.前端如何实现折善面板效果?
- 14.dom 里面,如何判定a元素是否是b元素的子元
- 15.判断一个对象是否为空,包含了其原型链上是否有自定义数据或者方法。该如何判定?
- 16.js如何判空?「空」包含了:空数组、空对象、空字符 串、0、undefined、nul、空 map、空set,都属于为空
- 数据
- 17.css 实现翻牌效果
- 18.flex:1代表什么
- 19.一般是怎么做代码重构的
- 20.如何清理源码里面没有被应用的代码,主要是JS、TS、 CSS 代码
- 21.前端应用 如何做国际化?
- 22.应用如何做应用灰度发布
- 23.[微前端] 为何通常在 微前端 应用隔离不选择 iframe 万案
- 24.[微前端] Qiankun 是如何做 JS 隔离的
- 25.「微前端]微前端架构一般是如何做 JavaScript隔离
- 26.[React]循环渲染中 为什么推荐不用 index 做 key
- 27.[React]如何避免使用 context 的时候,引起整个挂载节 点树的重新渲染!
- 28.前端如何实现截图?
- 29.当QPS达到峰值时,该如何处理?
- 30.js 超过 Number 最大值的数怎么处理?
- 31.使用同一个链接,如何实现 PC 打开是 web 应用、手机打 开是一个 H5 应用?
- 32.如何保证用户的使用体验
- 33.如何解决页面请求接口大规模并发问题
- 34.设计一套全站请求耗时统计工具
- 35.大文件上传了解多少
- 36.H5 如何解决移动端适配问题
- 37.站点一键换肤的实现方式有哪些?
- 38.如何实现网页加载进度条?
- 39.常见图片懒加载方式有哪些?
- 40.cookie 构成部分有哪些
- 41.扫码登录实现方式
- 42.DNS 协议了解多少
- 43.函数式编程了解多少?
- 44.前端水印了解多少?
- 45.什么是领域模型
- 46.一直在 window 上面挂东西是否有什么风险
- 47.深度 SEO优化的方式有哪些,从技术层面来说
- 48.小程序为什么会有两个线程
- 49.web 应用中如何对静态资源加载失败的场景做降级处理
- 50.html中前缀为 data-开头的元素属性是什么?
- 51.移动端如何实现上拉加载,下拉刷新?
- 52.如何判断dom元素是否在可视区域
- 53.前端如何用 canvas 来做电影院选票功能
- 54.如何通过设置失效时间清除本地存储的数据?
- 55.如果不使用脚手架,如果用 webpack 构建一个自己的 react 应用
- 56.用 nodejs 实现一个命令行工具,统计输入目录下面指定代码的行数
- 57.package.json 里面 sideEffects 属性的作用是啥
- 58.script 标签上有那些属性,分别作用是啥?
- 59.为什么 SPA应用都会提供一个 hash 路由,好处是什么?
- 60.[React]如何进行路由变化监听
- 61.单点登录是是什么,具体流程是什么
- 62.web 网页如何禁止别人移除水印
- 63.用户访问页面白屏了,原因是啥,如何排查?
- 64.[代码实现JS 中如何实现大对象深度对比
- 65.如何理解数据驱动视图,有哪些核心要素?
- 66.vue-cli 都做了哪些事儿,有哪些功能?
JavaScript
- 不会冒泡的事件有哪些?
- mouseEnter 和mouseOver 有什么区别?
- MessageChannel是什么,有什么使用场景?
- async、 await 实现原理
- Proxy能够监听到对象中的对象的引用吗?
- 如何让 var [a, b] = {a: 1, b: 2} 解构赋值成功?
- 下面代码会输出什么?
- 描述下列代码的执行结果
- 什么是作用域链?
- bind、call、apply有什么区别?如何实现一个bind?
- common.js和es6中模块引l入的区别?
- 说说vue3 中的响应式设计原理
- script标签放在header里和放在body底部里有什么区别?
- 下面代码中,点击”+3”按钮后,age的值是什么?
- Vue中,created和mounted两个钩子之间调用时间差值受什么影响?
- vue中,推荐在哪个生命周期发起请求?
- 不会冒泡的事件有哪些?
- mouseEnter 和mouseOver 有什么区别?
- 为什么Node在使用es module时必须加上文件扩展名?
- package.json文件中的 devDependencies和dependendes对象有什么区别?
- React Portals 有什么用?
- react 和 react-dom是什么关系?
- MessageChannel是什么,有什么使用场景?
- React 中为什么不直接使用requestIdleCallback?
- 为什么react需要 fiber 架构,而Vue 却不需要?
CSS
- css 中的 animation、transition,transform有什么区别?
- 怎么做移动端的样式适配?
- 相邻的两个inline-block节点为什么会出现间隔,该何解决?
- grid网格布局是什么?
- CSS3新增了哪些特性?
- 怎么使用cSS3实现动画?
- 怎么理解回流跟重绘?什么场景下会触发?
- 什么是响应式设计?响应式设计的基本原理是什么?如何进行实现?
- 如果使用CSs提高页面性能?
- 如何实现单行/多行文本溢出的首略样式?
- 如何使用css完成视差滚动效果?
- 怎么使用CSS 如何画一个三角形
- 说说对CSS 工程化的理解
- 怎么触发BFC,BFC有什么应用场景?
- 单行文本怎么实现两端对齐?
- 说说你对 CSS 模块化的理解
- CSS 模块化的实现方式
- 怎么让Chrome支持小于12px 的文字?
- 怎么让Chrome支持小于12px的文字?
- flexbox(弹性盒布局模型)是什么,适用什么场景?
- 如何实现两栏布局,右侧自适应?三栏布局中间自适应呢?
- 设备像素、css像素、设备独立像素、dpr、ppi 之间有什么区别?
HTML
- 什么是DOM和 BOM?
- 简单描述从输入网址到页面显示的过程
- 一台设备的dpr,是否是可变的?
- 前端效如何选择图片的格式?
- 前端跨页面通信,你道哪些方法?
- 说说你对Dom树的理解
- 行内元素有哪些?块级元素有哪些?空(void)元素有那些?
- htm和css中的图片戏与渲染规则是什么样的?
- title与h1的区别、b与strong的区别、与em的区别?
- script标签为什么建议放在 body标签的底部(defer、async)
- 说说你对 SSG 的理解
- 什么是HTML5,以及和HTML的区别是什么?
- 什么是渐进增虽和优雅降级?
- Node 和Element 是什么关系?
- 导致页面加载白屏时间长的原因有哪些,怎么进行优化?
- 如何控制input输入框的输入字数?
- 渐进式jpg有了解过吗?
- 假设我要上传图片,怎么在选择图片后,通过浏览器预览待上传的图片?
React
- 下面代码中,点击”+3”按钮后,age的值是什么?
- React Portals 有什么用?
- react和react-dom是什么关系?
- React 中为什么不直接使用 requestIdleCallback?
- 为什么react 需要 fiber 架构,而Vue 却不需要?
- 子组件是一个Portal,发生点击事件能冒泡到父组件吗?
- React 为什么要废弃componentWillMount、componentWillReceiveProps、componentWillUpdate这三个生命周期钩子?它们有哪些问题呢?React又是如何解决的呢?
- 说说React render方法的原理?在什么时候会被触发?
- 说说React事件和原生事件的执行顺序
- 说说对受控组件和非受控组件的理解,以及应用场景?
- 你在React项目中是如何使用Redux的?项目结构是如何划分的?
- 说说对Redux中间件的理解?常用的中间件有哪些?实现原理?
- 说说你对Redux的理解?其工作原理?
- 说说你对immutable的理解?如何应用在react项目中?
- 说说React Jsx转换成真实DOM过程?
- 说说你在Reac项目是如何捕获错误的?
- 说说React服务端宣染怎么做?原理是什么?
- ReactFiber是如何实现更新过程可控?
- Fiber 为什么是React 性能的一个飞跃?
- setState是同步,还是异步的?
Vue
- Vue 有了数据响应式,为何还要diff?
- vue3为什么不需要时间分片?
- vue3为什么要引入Composition API?
- 谈谈 Vue 事件机制,并手写on、on、on、off、emit、emit、 emit、once
- computed计算值为什么还可以依赖另外一个computed计算值?
- 说一下vm.$set 原理
- 怎么在Vue 中定义全局方法?
- Vue中父组件怎么监听到子组件的生命周期?
- vue组件里写的原生addEventListeners监听事件,要手动去销毁吗?为什么?
- 说说vue3中的响应式设计原理
- Vue中,created和mounted两个钩子之间调用时间差值受什么影响?
- vue中,推荐在哪个生命周期发起请求?
- 为什么react 需要 fiber 架构,而 Vue 却不需要?
- SPA(单页应用)首屏加戏速度慢怎么解决?
- 说下Vite的原理
- Vue2.0为什么不能检查数组的变化,该怎么解决?
- 说说Vue 页面渲染流程
- vue中computedfDwatch区别
- vuex中的辅助函数怎么使用?
- 如果使用Vue3.0实现一个Modal,你会怎么进行设计?
- Vue 3.0中Treeshaking特性是什么,并举例进行说明?
- Vue3.0所采用的Composition Api与Vue2.x使用的Options Api有什么不同?
- Vue3.0性能提升主要是通过哪几方面体现的?
- Vue3.0的设计目标是什么?做了哪些优化?
- 你是怎么处理vue项目中的错误的?
算法
- 最大的钻石
- 举例说明你对尾递归的理解,以及有哪些应用场景
- 去除字符串中出现次数最少的字符,不改变原字符串的顺序。
- 请手写”快速排序”
- 洗牌算法
- 什么是尾调用优化和尾递归?
- 合并K个升序链表
- 什么是时间复杂度?
- 请手写“基数排序”
TypeScript
- 说说对 TypeScript 中命名空间与模块的理解?区别?
- 说说你对 typescript 的理解?与javascript 的区别?
- Typescript中泛型是什么?
- TypeScript中有哪些声明变量的方式?
- 什么是Typescript的方法重载?
- 请实现下面的 sleep 方法
- typescript 中的 is 关键字有什么用?
- TypeScrip支持的访问修饰符有哪些?
- 请实现下面的 myMap 方法
- 请实现下面的 treePath方法
- 请实现下面的 product 方法
- 请实现下面的 myAll 方法
- 请实现下面的 sum 方法
- 请实现下面的 mergeArray 方法
- 实现下面的 firstSingleChar 方法
- 实现下面的 reverseWord 方法
- 如何定义一个数组,它的元紊可能是字符串类型,也可能是数值类型?
- 请补充 objToArray数
注:篇幅所限本文就只贴一下题目了,文中的前端场景面试题汇总PDF已经打包完毕,希望对大家有帮助:
最后想跟大家说:
背八股文,是为了拿到面试的入场券;别太老实,是为了让你的价值被看见。技术能力决定你入职后的下限,但面试表现,决定你能不能拿到入职的机会。那些张口就来的 “标准答案”,那些听起来很牛的 “项目包装”,不是投机取巧,而是每个前端求职者都该掌握的生存技能。别再让 “老实” 拖你的后腿了。从今天开始,把高频面试题背熟,把项目经历润色好。下次面试,挺直腰板,自信点!你要相信,你背过的每一个知识点,都能帮你多拿 1k 的薪资;你说过的每一句 “漂亮话”,都能让你离心仪的 Offer 更近一步。
祝所有前端兄弟,都能面试顺利,Offer 拿到手软!