一、框架原理与生态:从源码到工程化
1. React 18 新特性与并发渲染
React 18 引入的并发渲染(Concurrent Rendering)是面试热点。需理解其核心机制:通过优先级调度(如startTransition)实现非阻塞更新。例如,在搜索框场景中,高优先级用户输入会打断低优先级结果渲染,避免界面卡顿。
代码示例:
import { startTransition, useState } from 'react';function SearchBox() {const [query, setQuery] = useState('');const [results, setResults] = useState([]);const handleChange = (e) => {setQuery(e.target.value); // 高优先级更新startTransition(() => {fetchResults(e.target.value).then(data => setResults(data)); // 低优先级更新});};// ...}
2. Vue 3 组合式 API 与响应式原理
需掌握reactive、ref的底层实现:Vue 3 使用 Proxy 替代 Object.defineProperty,支持数组变化检测和嵌套对象响应式。对比 Vue 2 的局限性,如无法监听新增属性。
性能优化点:shallowRef和shallowReactive可跳过深层响应式,适用于大型对象或第三方库集成。
3. 状态管理:Redux vs. Zustand
Redux 的中间件机制(如redux-thunk、redux-saga)仍是复杂状态管理的首选,但 Zustand 的轻量级(40行代码)和简洁 API 成为新宠。面试中需对比两者适用场景:
- Redux:大型应用、需要时间旅行调试
- Zustand:中小型应用、追求开发效率
二、性能优化:从指标到工具链
1. LCP/CLS/FID 核心指标优化
Google 的 Core Web Vitals 是 SEO 排名关键因素。优化策略包括:
- LCP(最大内容绘制):延迟加载非关键资源,使用
loading="lazy"属性 - CLS(布局偏移):为图片设置
width/height属性,避免无尺寸媒体加载导致的布局抖动 - FID(首次输入延迟):减少主线程任务,使用
Web Worker处理计算密集型任务
2. 代码分割与动态导入
React 的React.lazy和 Vue 的异步组件可实现路由级代码分割。结合Suspense处理加载状态:
// React 示例const LazyComponent = React.lazy(() => import('./LazyComponent'));function App() {return (<Suspense fallback={<div>Loading...</div>}><LazyComponent /></Suspense>);}
3. 缓存策略:Service Worker 与 HTTP Cache
Service Worker 的cacheFirst策略适用于静态资源,而动态 API 数据需结合stale-while-revalidate。面试中需设计缓存失效逻辑,例如通过版本号或哈希值控制资源更新。
三、工程化与工具链:从构建到部署
1. Vite vs. Webpack 构建工具对比
Vite 的核心优势在于基于 ES Modules 的开发服务器,冷启动速度比 Webpack 快 10-100 倍。但 Webpack 的插件生态仍不可替代,尤其在复杂场景(如微前端)中。
面试题示例:如何用 Vite 优化一个大型 React 项目?
- 答案要点:启用
esbuild预构建、按需导入依赖、利用@vitejs/plugin-react的 HMR 优化
2. TypeScript 高级类型与泛型
需掌握实用类型(Utility Types)如Partial<T>、Pick<T, K>,以及泛型约束:
type User = { id: number; name: string; age: number };type PartialUser = Partial<User>; // { id?: number; name?: string; age?: number }// 泛型约束示例function logId<T extends { id: unknown }>(obj: T): T['id'] {console.log(obj.id);return obj.id;}
3. 微前端架构设计
主流方案包括 Single-SPA、qiankun 和 Module Federation。需对比各自特点:
- Single-SPA:轻量级,但需手动处理路由和状态
- qiankun:基于 Single-SPA 的封装,提供沙箱隔离和样式隔离
- Module Federation:Webpack 5 原生支持,实现组件级共享
四、安全与跨端:从 XSS 到 WebAssembly
1. XSS 攻击与防御
防御策略需覆盖:
- 输入验证:使用
DOMPurify库过滤恶意脚本 - CSP(内容安全策略):限制
script-src为可信域名 - 上下文转义:根据插入位置(HTML/Attribute/JS)选择不同转义函数
2. 跨端开发:Flutter vs. React Native
React Native 的“Learn Once, Write Anywhere”理念与 Flutter 的“Skia 引擎自绘”形成对比。面试中需分析两者适用场景:
- React Native:适合已有 React 团队,需要快速迭代
- Flutter:适合高性能需求,如游戏或动画密集型应用
3. WebAssembly 应用场景
WASM 可将 C/C++/Rust 代码运行在浏览器中,典型用例包括:
- 图像处理(如 Photoshop 网页版)
- 加密算法(如 WebCrypto API 的补充)
- 游戏引擎(如 Unity 的 WebGL 导出)
五、面试策略与软技能
1. 项目经验阐述技巧
使用 STAR 法则(Situation-Task-Action-Result)描述项目,例如:
“在电商项目中(Situation),需优化首屏加载速度(Task)。通过代码分割和预加载关键资源(Action),LCP 从 3.2s 降至 1.8s(Result)。”
2. 算法题备考建议
重点练习:
- 链表操作(如反转链表)
- 二叉树遍历(前序/中序/后序)
- 动态规划(如斐波那契数列优化)
3. 薪资谈判话术
先了解市场行情(如 Levels.fyi 数据),再结合自身优势:
“我注意到贵司中级前端薪资范围是 25-35k,根据我 3 年 React 开发经验和开源项目贡献,希望能在 32k 左右达成一致。”
结语
2024 年的前端面试更注重技术深度与工程能力的结合。建议开发者通过以下方式提升竞争力:
- 参与开源项目,积累实战经验
- 定期阅读 RFC(如 React 19 提案)
- 构建个人技术博客,系统化知识体系
前端技术日新月异,但底层原理与工程思维始终是核心。祝各位在面试中展现技术实力,斩获理想 offer!