简介:本文梳理2024年前端开发面试核心考点,涵盖框架原理、性能优化、工程化等六大模块,提供代码示例与备考策略,助力开发者高效备战技术面试。
2024年前端技术生态呈现三大核心趋势:框架深度优化(React 19/Vue 3.4+)、全栈化能力(Next.js/Nuxt 3普及)、AI辅助开发(GitHub Copilot代码生成)。面试官更关注候选人对技术原理的理解而非工具使用,例如React Hooks的闭包陷阱、Vue响应式系统的底层实现。
备考建议:
function Counter() {const [count, setCount] = useState(0);const handleClick = () => {setTimeout(() => {setCount(count + 1); // 闭包导致count始终为初始值console.log(count); // 输出0而非预期值}, 1000);};return <button onClick={handleClick}>{count}</button>;}
问题:如何修复上述闭包问题?
答案:使用函数式更新或useRef保存最新值
// 方案1:函数式更新setCount(prev => prev + 1);// 方案2:useRefconst countRef = useRef();countRef.current = count;// 在setTimeout中使用countRef.current
Vue 3的Proxy实现相比Vue 2的Object.defineProperty有三大优势:
面试题:如何手动触发Vue组件的重新渲染?
答案:
// 方案1:修改key强制替换<Component :key="componentKey" />// 修改componentKey值触发重新创建// 方案2:使用v-if切换<Component v-if="showComponent" />// 切换showComponent状态
某电商网站首屏加载时间达5秒,优化方案包括:
// React示例const OrderList = React.lazy(() => import('./OrderList'));function App() {return (<Suspense fallback={<Spinner />}><OrderList /></Suspense>);}
<picture><source srcset="image.webp" type="image/webp"><img src="image.jpg" alt="示例" loading="lazy"></picture>
<link rel="preload">
<link rel="preload" href="critical.js" as="script">
面试题:如何定位并修复以下内存泄漏?
function setup() {const elements = [];const interval = setInterval(() => {const div = document.createElement('div');elements.push(div); // 持续累积DOM节点}, 1000);return interval;}
解决方案:
function setup() {const elements = [];const interval = setInterval(() => {const div = document.createElement('div');elements.push(div);elements.length > 10 && elements.shift(); // 限制数组长度}, 1000);return () => clearInterval(interval); // 返回清理函数}
面试题:如何配置Webpack实现以下需求?
配置示例:
// webpack.config.jsmodule.exports = (env) => {const isProd = env.production;return {mode: isProd ? 'production' : 'development',optimization: {splitChunks: {cacheGroups: {vendor: {test: /[\\/]node_modules[\\/]/,name: 'vendors',chunks: 'all'}}}},output: {library: {type: 'umd',name: 'MicroApp'}}};};
面试题:设计一个基于Qiankun的微前端方案,需满足:
实现要点:
registerMicroApps([
{
name: ‘subapp’,
entry: ‘//localhost:7100’,
container: ‘#subapp-container’,
activeRule: ‘/subapp’
}
]);
start();
2. 子应用配置:```javascript// subapp/src/public-path.jsif (window.__POWERED_BY_QIANKUN__) {__webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;}
面试题:实现一个DeepReadonly类型,使对象所有层级属性变为只读
type DeepReadonly<T> = {readonly [P in keyof T]: T[P] extends Object? DeepReadonly<T[P]>: T[P];};// 测试用例const obj: DeepReadonly<{a: {b: number}}> = {a: { b: 1 }};obj.a.b = 2; // 报错:Cannot assign to 'b' because it is a read-only property
面试题:实现PickByValue类型,筛选对象中值类型为指定类型的属性
type PickByValue<T, V> = {[K in keyof T as T[K] extends V ? K : never]: T[K];};// 测试用例type Mixed = { a: number; b: string; c: boolean };type NumbersOnly = PickByValue<Mixed, number>; // { a: number }
系统学习路径:
实战练习平台:
面试技巧:
2024年前端面试更注重技术深度与工程能力,建议每天投入2小时进行源码阅读(如React reconciliation算法)和性能优化实践。记住:优秀的面试表现=扎实的基础+清晰的表达+解决问题的思维过程。