一、HTML基础:结构与语义化
1.1 语义化标签的作用与使用场景
语义化标签是前端面试中的高频考点,其核心价值在于提升代码可读性、SEO优化及无障碍访问。例如,<header>、<footer>、<article>等标签能明确内容结构,而<nav>标签则直接关联导航功能。
面试题示例:
- 为什么推荐使用
<section>而非<div>包裹内容?
答案:<section>强调内容的独立性,适用于逻辑分组(如文章章节),而<div>仅作为通用容器。语义化标签能帮助浏览器理解页面结构,提升渲染效率。
1.2 表单验证的常见实现方式
前端表单验证需兼顾用户体验与数据安全。原生HTML5通过type属性(如email、number)和required属性实现基础验证,而JavaScript可通过正则表达式或第三方库(如Yup)实现复杂逻辑。
代码示例:
<input type="email" required placeholder="请输入邮箱"><script>const emailInput = document.querySelector('input[type="email"]');emailInput.addEventListener('blur', () => {const pattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;if (!pattern.test(emailInput.value)) {alert('邮箱格式错误');}});</script>
二、CSS核心:布局与动画
2.1 盒模型与布局方式对比
盒模型是CSS布局的基石,需明确box-sizing: content-box(默认)与border-box的区别。后者将边框和内边距计入宽度,简化布局计算。
面试题示例:
- 如何实现一个宽度固定、内边距自适应的容器?
答案:设置box-sizing: border-box后,直接通过padding调整内边距,宽度保持不变。
2.2 Flexbox与Grid的适用场景
Flexbox适用于一维布局(如导航栏、卡片排列),而Grid擅长二维布局(如复杂网格系统)。两者结合可解决大多数响应式需求。
代码示例:
/* Flexbox实现水平居中 */.container {display: flex;justify-content: center;align-items: center;}/* Grid实现九宫格 */.grid {display: grid;grid-template-columns: repeat(3, 1fr);gap: 10px;}
三、JavaScript进阶:原型链与异步编程
3.1 原型链与继承的实现
原型链是JavaScript实现继承的核心机制。通过Object.create()或构造函数+prototype可创建继承关系。
面试题示例:
- 如何判断一个对象是否属于某个类?
答案:使用instanceof运算符或Object.prototype.toString.call()。function Person(name) {this.name = name;}const p = new Person('Alice');console.log(p instanceof Person); // true
3.2 异步编程的解决方案
从回调函数到Promise,再到Async/Await,JavaScript异步处理不断演进。需掌握Promise链式调用、错误捕获及Async函数的返回值。
代码示例:
// Promise链式调用fetch('https://api.example.com/data').then(response => response.json()).then(data => console.log(data)).catch(error => console.error('Error:', error));// Async/Await简化async function fetchData() {try {const response = await fetch('https://api.example.com/data');const data = await response.json();console.log(data);} catch (error) {console.error('Error:', error);}}
四、浏览器与性能优化
4.1 事件循环机制解析
JavaScript单线程特性依赖事件循环(Event Loop)处理异步任务。宏任务(如setTimeout)和微任务(如Promise.then)的执行顺序是面试重点。
面试题示例:
- 以下代码的输出顺序是什么?
console.log('1');setTimeout(() => console.log('2'), 0);Promise.resolve().then(() => console.log('3'));console.log('4');
答案:1 → 4 → 3 → 2(微任务优先于宏任务)。
4.2 性能优化策略
优化方向包括减少HTTP请求、压缩资源、使用CDN、懒加载及防抖/节流。例如,图片懒加载可通过IntersectionObserver实现。
代码示例:
const lazyImages = document.querySelectorAll('img[data-src]');const observer = new IntersectionObserver((entries) => {entries.forEach(entry => {if (entry.isIntersecting) {const img = entry.target;img.src = img.dataset.src;observer.unobserve(img);}});});lazyImages.forEach(img => observer.observe(img));
五、前端框架核心原理
5.1 Vue/React的响应式原理
Vue通过Object.defineProperty或Proxy实现数据劫持,React则依赖虚拟DOM和Diff算法。需理解setState的异步特性及key属性的作用。
面试题示例:
- 为什么React的
key不能使用索引?
答案:索引作为key会导致列表更新时组件状态错乱,应使用唯一ID。
5.2 虚拟DOM的优势与局限
虚拟DOM通过减少直接操作真实DOM的次数提升性能,但首次渲染可能更慢。需权衡更新频率与复杂度。
六、实战建议与备考策略
- 分模块复习:按HTML/CSS/JavaScript/框架/性能分类整理笔记,结合思维导图强化记忆。
- 模拟面试:通过LeetCode、Codewars等平台练习算法题,重点训练递归、动态规划等高频考点。
- 项目复盘:梳理个人项目中的技术难点与解决方案,准备“STAR法则”回答(情境、任务、行动、结果)。
- 关注前沿:了解Web Components、微前端等趋势,体现技术敏感度。
本文通过系统梳理前端基础知识与高频面试题,结合代码示例与实战策略,为开发者提供一站式复习指南。掌握这些核心要点,助你自信应对前端面试!