一、HTML与CSS基础:从标签到布局的深度考察
1. HTML5语义化标签的实际应用
面试官常通过”如何优化SEO的HTML结构?”考察语义化理解。正确答案需包含:
- 使用
<header>、<nav>、<main>、<article>、<section>、<footer>替代传统<div> - 示例:电商网站商品页结构
<article class="product-card"><header class="product-header"><h1>无线蓝牙耳机</h1><img src="product.jpg" alt="产品主图"></header><section class="product-specs"><h2>规格参数</h2><ul>...</ul></section></article>
语义化标签提升可访问性(ARIA兼容)和机器可读性,Google搜索算法对此有明确加分。
2. CSS布局方案对比与选择
2024年面试高频题:”Flexbox与Grid如何选择?”。关键判断点:
- Flexbox:一维布局(行或列),适合组件内部元素排列
.menu { display: flex; justify-content: space-between; }
- Grid:二维布局,适合整体页面框架
.container {display: grid;grid-template-columns: 200px 1fr;gap: 20px;}
实际项目中,80%的头部导航用Flexbox,90%的电商列表页用Grid。
二、JavaScript核心:ES6+特性与底层原理
1. Promise与Async/Await的错误处理
考察点:”如何统一捕获异步错误?”。标准解决方案:
// 方法1:Promise.all的catchPromise.all([fetchA(), fetchB()]).catch(err => console.error('统一错误:', err));// 方法2:Async函数包装async function fetchData() {try {const [a, b] = await Promise.all([fetchA(), fetchB()]);} catch (err) {console.error('捕获错误:', err);}}
强调:async/await本质是Generator的语法糖,错误会沿着调用栈向上传播。
2. 事件循环机制深度解析
经典问题:”以下代码输出顺序?”。示例:
setTimeout(() => console.log(1), 0);Promise.resolve().then(() => console.log(2));console.log(3);// 输出顺序:3 → 2 → 1
关键点:
- 宏任务(setTimeout)与微任务(Promise)的执行优先级
- Node.js与浏览器的事件循环差异(Node 11+已与浏览器一致)
三、框架与工程化:React/Vue3实战要点
1. React Hooks使用陷阱
高频面试题:”useEffect依赖项导致无限循环怎么办?”。解决方案:
// 错误示例function Component({ data }) {useEffect(() => {fetchData(); // 每次渲染都执行}, [data]); // data是对象/数组时会引用变化// 正确方案1:使用useRef存储上一次值const prevData = useRef();useEffect(() => {if (prevData.current !== data) {fetchData();prevData.current = data;}}, [data]);}
强调:Hooks依赖项必须使用原始值或稳定引用(如useCallback/useMemo)。
2. Vue3 Composition API优势
对比题:”Options API与Composition API如何选择?”。核心差异:
| 特性 | Options API | Composition API |
|——————————|—————————-|—————————-|
| 逻辑复用 | Mixins(命名冲突)| 自定义Hook |
| 类型支持 | 较弱 | 强类型友好 |
| 代码组织 | 按选项分散 | 按功能聚合 |
示例:自定义防抖Hook
// useDebounce.jsimport { ref, onUnmounted } from 'vue';export function useDebounce(fn, delay = 300) {const timer = ref(null);const debounced = (...args) => {clearTimeout(timer.value);timer.value = setTimeout(() => fn(...args), delay);};onUnmounted(() => clearTimeout(timer.value));return debounced;}
四、性能优化:从指标到方案
1. 关键渲染路径优化
必考题:”如何减少首屏加载时间?”。实操方案:
- 预加载:
<link rel="preload">关键资源<link rel="preload" href="critical.css" as="style">
- 代码分割:React.lazy + Suspense
const LazyComponent = React.lazy(() => import('./Component'));function App() {return (<Suspense fallback={<div>Loading...</div>}><LazyComponent /></Suspense>);}
- 图片优化:WebP格式+响应式图片
<picture><source srcset="image.webp" type="image/webp"><img src="image.jpg" alt="示例"></picture>
2. 内存泄漏场景与修复
经典案例:”闭包导致的内存泄漏如何解决?”。示例:
// 错误示例function setup() {const element = document.getElementById('button');element.onclick = function() {console.log(element); // 闭包持有element引用};}// 修复方案1:移除事件监听function setup() {const element = document.getElementById('button');const handler = function() { console.log(element); };element.onclick = handler;// 组件卸载时执行return function cleanup() {element.onclick = null;};}
五、持续更新机制说明
本题库采用动态更新策略:
- 技术趋势追踪:每月分析MDN/TC39提案更新
- 企业需求对齐:参考LeetCode企业题库与拉勾网招聘数据
- 版本控制:Git仓库管理,支持按年份/技术栈筛选
最新更新(2024-03):
- 新增Web Components面试题
- 更新React 18.2新特性考点
- 补充TypeScript高级类型实战题
建议开发者:
- 关注GitHub仓库的Issues板块提交新题
- 参与每周三晚的直播解析
- 加入Telegram群组获取实时更新
(注:本文题库已通过某头部招聘平台技术负责人验证,确保与当前一线企业面试标准对齐)