2025前端面试题

483 阅读4分钟

前端面试题与答案详解


一、HTML

1. HTML5新特性有哪些?

答案

  • 语义化标签<header><nav><article><section><footer>等,提升代码可读性和SEO。
  • 多媒体支持<audio><video>标签直接嵌入音视频。
  • 图形绘制<canvas>和SVG支持动态图形。
  • 本地存储localStoragesessionStorage替代Cookie。
  • Web API:地理定位(Geolocation)、Web Workers多线程、WebSocket全双工通信。

2. 语义化标签的作用及使用场景?

答案

  • 作用:提高代码可读性,便于SEO爬虫解析,增强无障碍访问(屏幕阅读器)。

  • 场景

    • <header>:页面头部或内容区块的标题。
    • <nav>:导航链接。
    • <main>:页面主内容区。
    • <aside>:侧边栏或附加内容。

3. 行内元素、块级元素、空元素区别?

答案

  • 行内元素:默认不换行,无法设置宽高(如<span><a>)。
  • 块级元素:独占一行,可设置宽高(如<div><p>)。
  • 空元素:无闭合标签(如<br><img><input>)。

4. 前端SEO优化手段?

答案

  • 使用语义化标签。
  • 添加<meta name="keywords"><meta name="description">
  • 图片添加alt属性。
  • 合理使用<h1>~<h6>标题层级。
  • 减少DOM嵌套,提升渲染速度。

二、CSS

1. 盒模型及box-sizing的作用?

答案

  • 标准盒模型width = 内容宽度,实际元素宽度 = width + padding + border

  • IE盒模型width = 内容 + padding + border

  • box-sizing

    • content-box(默认):标准模型。
    • border-box:IE模型,方便布局计算。

2. BFC(块级格式化上下文)原理及应用场景?

答案

  • 触发条件overflow: hiddenfloat: left/rightdisplay: inline-block等。

  • 作用

    • 避免垂直margin重叠。
    • 清除浮动(父元素触发BFC包裹浮动子元素)。
    • 阻止元素被浮动覆盖。

3. Flex/Grid布局常见属性及用法?

答案

  • Flex

    .container {
      display: flex;
      justify-content: center; /* 主轴对齐 */
      align-items: center;     /* 交叉轴对齐 */
      flex-wrap: wrap;         /* 换行 */
    }
    
  • Grid

    .container {
    display: grid;
    grid-template-columns: 1fr 2fr; /* 列宽比例 */
    gap: 10px;                     /* 间距 */
    }
    

三、JavaScript

1. 闭包原理、应用场景及内存泄漏风险?

答案

原理:函数嵌套,内部函数引用外部函数变量,形成闭包。
应用:模块化(私有变量)、防抖节流、柯里化。
内存泄漏:未及时释放闭包引用(如定时器未清除)。

2. 原型链、继承实现方式(ES5/ES6)?

答案

原型链继承:
JavaScript
function Parent() {}
function Child() {}
Child.prototype = new Parent(); // ES5方式
ES6 Class继承:
JavaScript
class Parent {}
class Child extends Parent {}  // 通过extends关键字

3. Event Loop机制(宏任务/微任务执行顺序)?

答案

执行顺序:同步代码 → 微任务(Promise.then)→ 宏任务(setTimeout)。
示例:
JavaScript
setTimeout(() => console.log('宏任务'), 0);
Promise.resolve().then(() => console.log('微任务'));
// 输出顺序:微任务 → 宏任务

4. ES6+新特性?

答案

箭头函数:() => {},无自己的this。
解构赋值:const { a, b } = obj;。
模板字符串:`Hello ${name}`Async/Await:基于Promise的异步语法糖

四、框架相关(React/Vue)

1. React生命周期(类组件/Hooks)?

答案

  • 类组件生命周期

    • 挂载阶段constructor → render → componentDidMount
    • 更新阶段shouldComponentUpdate → render → componentDidUpdate
    • 卸载阶段componentWillUnmount
  • Hooks替代方案

    useEffect(() => { 
      // 相当于 componentDidMount/componentDidUpdate
      return () => { /* 相当于 componentWillUnmount */ };
    }, [dependencies]);
    

2. Vue双向绑定原理(Object.defineProperty vs Proxy)?

答案

Vue2Object.defineProperty):
通过劫持对象属性的getter/setter监听变化,需递归遍历对象,无法直接监听数组下标变化。
Vue3Proxy):
代理整个对象,支持监听动态新增属性和数组索引修改,性能更优。

3. 虚拟DOM Diff算法优化策略?

答案

同级比较:仅同层级节点对比,减少复杂度。
Key优化:通过唯一key标识节点,避免重复渲染。
批量更新:合并多次数据变更,减少DOM操作次数。

4.状态管理工具(Redux/Vuex/Pinia)核心流程?

答案

  Redux:Action → Reducer → Store → View(单向数据流)。
  Vuex:State → Mutations(同步) → Actions(异步) → Components。
  Pinia:去除了Mutations,直接通过Actions修改状态,支持TypeScript。

五、浏览器与网络

1. 从输入URL到页面渲染的完整流程?

答案

DNS解析:将域名转换为IP地址。
TCP连接:三次握手建立连接。
发送HTTP请求:浏览器发送请求报文。
服务器处理并返回响应:返回HTML/CSS/JS等资源。
浏览器解析渲染:构建DOM树 → CSSOM树 → 布局 → 绘制。
关闭TCP连接:四次挥手断开连接。