前端技术演进下的核心面试题与工程实践
最近在筛选简历时发现一个有趣现象:很多自称精通 Vue/React 的候选人,被问到为什么 Vue3 要用 Proxy 替代 defineProperty 时,答案依然停留在性能更好这种表面说辞;能熟练配置 Webpack 的人,却说不太清 Tree Shaking 在 ES Modules 和 CommonJS 环境下工作机理的本质差异。
更明显的是面试中的两极分化——一部分人还在卷手写 Promise、虚拟 DOM 这类经典八股,另一部分人已经开始被追问如何为微前端场景设计 CSS 沙箱、如何在 React Server Components 中处理第三方非兼容库。前者回答得再流畅,也掩盖不住对现代工程化场景的陌生;后者哪怕某个细节卡壳,展现的却是解决真实复杂问题的思维路径。
技术演进的核心转向
这种割裂感背后,是前端技术演进轨迹的明显转向:
-
框架熟练工价值正在稀释 当 create-vite、Next.js、Nuxt 这类工具链能自动生成 80% 的配置,当 Copilot 能补全半数业务组件代码,会用框架已从稀缺能力变为入职基线。企业开始默认你应该掌握框架,然后追问:框架为什么这样设计?它解决了什么特定场景问题?
-
基建感知力成为分水岭 以前知道 Webpack 配置算加分项,现在需要理解 Vite 的预构建如何基于 ESM 提升冷启动速度、TurboPack 的增量计算如何利用 Rust 重写编译管线。工具链的快速迭代,倒逼你必须建立对底层架构的持续追踪习惯。
-
垂直领域穿透正在重新定义竞争力 可视化工程师得懂 WebGL 渲染管线和 GPU 加速;性能优化专家得会解读 Core Web Vitals 背后浏览器渲染引擎的工作机制;跨端开发者需要理解 JS 引擎绑定到原生平台的通信损耗在哪。泛泛而谈我会 React 已经不够,需要你在特定纵深领域形成技术解释力。
如果你最近面试时感到背的题没考,考的题没准备,或者发现日常工作越来越像在重复调用 API,那么下面这组问题或许能帮你定位自己与技术演进方向的偏差:
- 当你说我熟悉 Vite,是真的理解其基于 ESM 的按需编译原理,还是仅停留在配置 vite.config.js?
- 你简历上的性能优化,有多少是 Lighthouse 分数驱动的指标游戏,有多少是真正解决过首屏渲染被第三方脚本阻塞的实际案例?
- 面对如何设计一个支持版本回滚的前端灰度发布系统这样的问题,你的思考是从 CDN、打包策略、还是从服务端流量切分开始?
高频实战面试题精选
基础与交互
- 如何判断用户设备
- 将多次提交压缩成一次提交
- 介绍下 navigator.sendBeacon 方法
- 平滑跟随导航(电梯导航)该如何实现
- 退出浏览器之前,发送积压的埋点数据请求,该如何做
- 如何统计页面的 long task(长任务)
- PerformanceObserver 如何测量页面性能
- 移动端如何实现下拉滚动加载(顶部加载)
- 判断页签是否为活跃状态
- 在网络带宽一定的情况下,切片上传感觉和整体上传消费的时间应该是差不多的这种说法正确吗
- 大文件切片上传的时候,确定切片数量的时候,有哪些考量因素
- 页面关闭时执行方法,该如何做
- 如何统计用户 pv 访问的发起请求数量
- 长文本溢出,展开/收起如何实现
- 如何实现鼠标拖拽
- 统计全站每一个静态资源加载耗时,该如何做
- 防止前端页面重复请求
- ResizeObserver 作用是什么
- 要实时统计用户浏览器窗口大小,该如何做
- 当项目报错,你想定位是哪个 commit 引入的错误的时,该怎么做
- 如何移除一个指定的 commit
- 如何还原用户操作流程
- 可有办法将请求的调用源码地址包括代码行数也上报上去
- 请求失败会弹出一个 toast,如何保证批量请求失败,只弹出一个 toast
架构与工程化
- 如何减少项目里面 if-else
- babel-runtime 作用是啥
- 如何实现预览 PDF 文件
- 如何在划词选择的文本上添加右键菜单
- 富文本里面,是如何做到划词的
- 如何做好前端监控方案
- 如何标准化处理线上用户反馈的问题
- px 如何转为 rem
- 浏览器有同源策略,但是为何 cdn 请求资源的时候不会有跨域限制
- cookie 可以实现不同域共享吗
- axios 是否可以取消请求
- 前端如何实现折叠面板效果
- dom 里面,如何判定 a 元素是否是 b 元素的子元素
- 判断一个对象是否为空,包含了其原型链上是否有自定义数据或者方法。该如何判定
- is 如何判空?空包含了:空数组、空对象、空字符串、0、undefined、null、空 map、空 set,都属于为空的数据
- css 实现翻牌效果
- flex:1 代表什么
- 一般是怎么做代码重构的
- 如何清理源码里面没有被应用的代码,主要是 JS、TS.CSS 代码
- 前端应用如何做国际化
- 应用如何做应用灰度发布
高级场景与框架
- 微前端为何通常在微前端应用隔离,不选择 iframe 方案
- Qiankun 是如何做 JS 隔离的
- 微前端架构一般是如何做 JavaScript 隔离的
- 循环渲染中为什么推荐不用 index 做 key
- 如何避免使用 context 的时候,引起整个挂载节点树的重新渲染
- 前端如何实现截图
- 当 QPS 达到峰值时,该如何处理
- js 超过 Number 最大值的数怎么处理
- 使用同一个链接,如何实现 PC 打开是 web 应用、手机打开是一个 H5 应用
- 如何保证用户的使用体验
- 如何解决页面请求接口大规模并发问题
- 设计一套全站请求耗时统计工具
- 大文件上传了解多少
- H5 如何解决移动端适配问题
网络与性能
- 站点一键换肤的实现方式有哪些
- 如何实现网页加载进度条
- 常见图片懒加载方式有哪些
- cookie 构成部分有哪些
- 扫码登录实现方式
- DNS 协议了解多少
- 函数式编程了解多少
- 前端水印了解多少
- 什么是领域模型
- 一直在 window 上面挂东西是否有什么风险
- 深度 SEO 优化的方式有哪些,从技术层面来说
- 小程序为什么会有两个线程
- web 应用中如何对静态资源加载失败的场景做降级处理
- html 中前缀为 data-开头的元素属性是什么
- 移动端如何实现上拉加载,下拉刷新
- 如何判断 dom 元素是否在可视区域
- 前端如何用 canvas 来做电影院选票功能
- 如何通过设置失效时间清除本地存储的数据
- 如果不使用脚手架,如果用 webpack 构建一个自己的 react 应用
- 用 nodejs 实现一个命令行工具,统计输入目录下面指定代码的行数
- package.json 里面 sideEffects 属性的作用是啥
- script 标签上有那些属性,分别作用是啥
- 为什么 SPA 应用都会提供一个 hash 路由,好处是什么
- 如何进行路由变化监听
- 单点登录是什么,具体流程是什么
综合与算法
- web 网页如何禁止别人移除水印
- 用户访问页面白屏了,原因是啥,如何排查
- JS 中如何实现大对象深度对比
- 如何理解数据驱动视图,有哪些核心要素
- vue-cli 都做了哪些事儿,有哪些功能
- JS 执行 100 万个任务,如何保证浏览器不卡顿
- JS 放在 head 里和放在 body 里有什么区别
- Eslint 代码检查的过程是啥
- 虚拟滚动加载原理是什么,用 JS 代码简单实现一个虚拟滚动加加载

