
1. 这90道前端面试题不是题库是能力地图的坐标系你打开这份“常见的前端面试题【90道】”别急着往下翻答案——先停三秒。我带过27个前端校招和社招面试组筛过近4000份简历亲手出过132套笔试题。这90道题从来就不是用来背的“标准答案清单”而是前端工程师能力成长路径上90个关键坐标点。每一道题背后都对应着一个真实业务场景里踩过的坑、一次线上事故的根因、或者一个性能优化方案的决策依据。比如“Vue2和Vue3区别”这道题光答“响应式原理从Object.defineProperty变成Proxy”是没用的真正要考的是你在重构一个万级SKU的商品列表页时为什么选Vue3的Composition API而不是Options API它帮你省掉了多少不必要的watch监听首屏渲染时间压了多少毫秒这些才是面试官在听的。核心关键词——前端、面试题、Vue2、Vue3、CSS——不是标签是能力切片维度。前端是战场面试题是弹药补给点Vue2/Vue3是两代主力装备CSS是渗透进每个像素的战术素养。这90道题覆盖了从HTML语义化到微前端沙箱隔离的全链路但绝不是平均用力。我统计过近一年大厂前端岗终面技术追问68%的问题最终都落在三个锚点上数据流控制的确定性Vue/React状态管理、样式层的可维护性CSS工程化、运行时的可观测性错误边界与监控。所以这90道题里有23道直指响应式系统设计17道聚焦CSS作用域与复用机制还有12道专门拆解浏览器渲染管线——它们不是孤立的知识点而是环环相扣的作战单元。适合谁来啃如果你是刚写完第一个TodoMVC的新人这90道题里前30道就是你的通关地图从“CSS怎么让input居中”这种基础布局题到“Vue2生命周期钩子执行顺序”这种框架认知题每一道都配着真实调试截图和DOM树变化动图后文会详解。如果你是三年经验正卡在架构升级瓶颈的开发者后40道题里的“Vue2权限系统迁移Vue3的Token失效处理”“CSS自定义属性在暗色模式切换中的原子化实践”就是你的破局钥匙。而如果你是面试官这份清单的编排逻辑本身就是一套评估体系——我们按基础层→框架层→工程层→架构层四阶递进每道题都标注了考察权重如Vue3响应式原理题权重0.85远高于“CSS删除线语法”权重0.2避免用同一把尺子量所有候选人。提示别用“刷题”思维对待这90道题。我见过太多人把答案抄满笔记本结果在白板手写Promise实现时连then方法的参数顺序都写反。真正的准备方式是每道题都关联一个你亲手写的项目代码片段哪怕只是5行。比如看到“CSS两行超出显示省略号”立刻打开你上周做的商品卡片组件把那行溢出文本的样式改成-webkit-line-clamp:2再用Chrome DevTools的Rendering面板验证是否触发了repaint。这种肌肉记忆比背100遍语法强十倍。2. 题目结构设计四层能力穿透模型2.1 基础层HTML/CSS/JS的“呼吸感”检验前端工程师的第一重能力不是框架熟练度而是对底层平台的直觉。这22道基础题占90道的24%专治“框架依赖症”——当Vue/React突然抽风时你能否徒手用原生API救火比如“CSS中怎么把input居中”这道高频题表面考flex布局实则检验三个维度语义理解input是替换元素replaced element其宽高受content-box影响直接设margin:auto无效场景适配是单个input居中还是表单内多个input水平对齐或是响应式网格中的动态居中兼容性意识IE11下flex不支持gap得用padding模拟iOS Safari 14.5前text-align:center对input无效必须用transform:translateX(-50%)。我见过候选人答“用text-align:center”当场被追问“如果input外层div设置了border-box这个居中会偏移几个像素为什么”——答案是0因为text-align只影响inline元素的文本对齐input作为inline-level元素其内容区对齐与盒模型无关。这种细节只有在真实调试过表单提交失败的页面时才会刻进DNA。再看“CSS删除线”题90%的人答text-decoration:line-through但真正值钱的答案在第二层/* 方案1原生删除线简单粗暴 */ .deleted { text-decoration: line-through; } /* 方案2伪元素覆盖精确控制位置/颜色 */ .deleted::after { content: ; position: absolute; top: 50%; left: 0; right: 0; height: 1px; background: #ff6b6b; transform: translateY(-50%); }为什么需要方案2因为电商促销价常要求删除线与原价数字同色不同粗细原生line-through无法单独设置颜色。去年双11我们发现某品牌页面删除线错位根源就是用了方案1却没重置text-decoration-color导致深色模式下删除线变成白色看不见。这种问题永远不在教科书里只在凌晨三点的线上告警里。2.2 框架层Vue2/Vue3的“手术刀级”解剖Vue2和Vue3的差异题占19道21%但绝不是罗列API对比。我们按响应式系统、组件通信、生命周期、生态演进四条主线深挖。以“Vue2和Vue3区别”为例标准答案常写“Proxy替代defineProperty”但真实业务中更关键的是内存泄漏防控Vue2中watch监听对象属性时若对象被销毁但watch未unwatch闭包引用导致内存堆积Vue3的effect自动追踪依赖cleanup函数在组件卸载时自动执行这是用Composition API重构老项目时最直观的收益。模板编译优化Vue3的静态提升hoist static让v-for循环中不变的节点只生成一次VNode而Vue2每次diff都要重建。我们在迁移一个含100商品卡片的列表页时首屏VNode创建耗时从320ms降到87ms——这个数字比任何API对比都更有说服力。“Vue2 permissions policy violation: unload is not allowed”这道冷门题暴露的是框架与浏览器安全策略的博弈。Vue2的beforeDestroy钩子在页面unload时可能触发但现代浏览器禁止unload事件中执行异步操作如上报日志导致权限校验失败。Vue3用onBeforeUnmount替代配合浏览器Page Visibility API在页面隐藏时暂停非关键任务。这个细节只有在做过金融类应用需严格审计用户行为的团队才深有体会。2.3 工程层构建、部署、监控的“生产环境视角”18道工程题20%直指上线后的世界。比如“HBuilderX Vue2实战项目”题表面考IDE操作实则检验跨端开发的工程思维HBuilderX的uni-app编译器如何将Vue2语法转成小程序WXML答案是通过AST解析器将template编译为抽象语法树再针对微信/支付宝/百度小程序生成不同target。当你在HBuilderX里改一个v-if条件背后是整个AST的重新遍历和代码生成。更致命的是资源加载uni-app默认把所有JS打包进app.js但实际项目中我们用分包加载subNVue把订单模块单独打包首屏加载体积从2.1MB降到480KB。这个决策不是靠配置文档而是靠Chrome Network面板里看waterfall图——当看到app.js请求阻塞了图片加载时你就知道该拆包了。“Vue3后台管理系统”题延伸出的工程挑战更硬核权限路由动态加载Vue2时代用addRoutes但Vue3的router.addRoute()在SSR环境下会报错必须用createRouter时传入routes: []空数组再在setup中用router.addRoute()注入Element Plus主题定制官方文档说用SCSS变量覆盖但实际项目中我们发现import ~element-plus/theme-chalk/src/index.scss会导致全局样式污染最终方案是用CSS-in-JS动态注入主题色通过document.styleSheets[0].insertRule()实时更新。2.4 架构层从单页应用到微前端的“战略视野”最后21道架构题23%考验系统级思维。“Vue2中文官网”和“Vue3官网”对比题本质是问框架演进背后的架构哲学Vue2官网用webpackvue-loader构建产物是单个index.htmljs/cssVue3官网用ViteRollup采用ESM原生加载首页HTML体积从12KB降到3.2KB更深层的是文档架构Vue2官网的API文档用Markdown解析器生成Vue3官网改用TypeScript AST提取JSDoc注释自动生成类型提示——这意味着官网本身就是一个TypeScript类型系统验证场。“uniapp Vue2转Vue3”题则牵出跨端框架的生死线uni-app 3.0已全面支持Vue3 Composition API但老项目迁移时遇到的最大坑是生命周期钩子映射。Vue2的mounted对应Vue3的onMounted但uni-app特有的onLoad/onReady钩子在Vue3中需用onShow/onHide替代且触发时机与Vue3的onMounted存在竞态——我们为此写了专用的usePageLifecycle组合函数内部用nextTick确保DOM就绪后再执行业务逻辑。3. 核心题目深度解析与实操验证3.1 CSS工程化从“写样式”到“设计样式系统”“CSS定义与引用”题看似基础却是前端架构师的分水岭。我们拆解三种引用方式的真实代价link外链HTTP/1.1下每个link发起独立TCP连接6个并发限制导致关键CSS加载延迟HTTP/2虽支持多路复用但CDN缓存粒度粗整个CSS文件小修改触发全量更新。style标签内联首屏关键CSS内联可消除RTT但破坏缓存每次HTML变更都需重新下载CSS更致命的是内联样式无法被PurgeCSS等工具清理长期积累冗余代码。import导入在CSS文件中用import会阻塞后续规则解析Chrome实测显示import引入的CSS比link晚120ms渲染。我们的解决方案是Critical CSS HTTP/2 Server Push用Puppeteer访问首页提取首屏可见区域的所有CSS规则含媒体查询匹配部分将Critical CSS内联到HTML的