速来!字节出品2025版前端架构师面试指南,涵盖前端所有核心技能

130 阅读6分钟

在前端面试中,面试官经常会考察一些基础知识和常见问题,这些问题虽然看似简单,但却是衡量候选人基本功的重要标准。以下是一些常见的“八股文”问题及其解答,供大家参考。

图片

添加图片注释,不超过 140 字(可选)

如果需要面经八股文的话可以小伙伴可以直接github.com/encode-stud…

1. HTML 相关

1.1 HTML5 新特性有哪些?

  • 语义化标签:如 、、、 等。
  • 表单增强:新增了 email、url、date 等输入类型,以及 placeholder、required 等属性。
  • 多媒体支持: 和  标签。
  • 本地存储:localStorage 和 sessionStorage。
  • Canvas 和 SVG:用于绘制图形和动画。
  • Web Workers:允许在后台运行 JavaScript,不阻塞主线程。
  • Geolocation API:获取用户地理位置。

1.2 什么是语义化标签?为什么要使用语义化标签?

  • 语义化标签:指使用具有明确含义的 HTML 标签来描述页面结构,如 、、 等。
  • 优点:
  • 提高代码可读性,便于维护。
  • 有利于 SEO,搜索引擎更容易理解页面内容。
  • 提升无障碍访问体验,屏幕阅读器可以更好地解析页面。

2. CSS 相关

2.1 盒模型是什么?标准盒模型和 IE 盒模型的区别?

  • 盒模型:每个 HTML 元素都可以看作一个盒子,包括内容(content)、内边距(padding)、边框(border)、外边距(margin)。
  • 标准盒模型:width 和 height 只包括内容区域。
  • IE 盒模型:width 和 height 包括内容、内边距和边框。
  • 可以通过 box-sizing 属性切换:
  • box-sizing: content-box;(标准盒模型)
  • box-sizing: border-box;(IE 盒模型)

2.2 BFC 是什么?如何触发 BFC?

  • BFC(块级格式化上下文):是页面上的一个独立渲染区域,内部元素的布局不会影响外部元素。
  • 触发条件:
  • float 不为 none。
  • position 为 absolute 或 fixed。
  • display 为 inline-block、table-cell、flex 等。
  • overflow 不为 visible。
  • 作用:
  • 防止外边距重叠。
  • 清除浮动。
  • 阻止元素被浮动元素覆盖。

2.3 Flexbox 布局有哪些常用属性?

  • 容器属性:
  • display: flex;:定义 Flex 容器。
  • flex-direction:主轴方向(row、column 等)。
  • justify-content:主轴对齐方式(flex-start、center、space-between 等)。
  • align-items:交叉轴对齐方式(flex-start、center、stretch 等)。
  • flex-wrap:是否换行(nowrap、wrap 等)。
  • 子项属性:
  • flex-grow:定义子项的放大比例。
  • flex-shrink:定义子项的缩小比例。
  • flex-basis:定义子项的基础大小。
  • align-self:单独设置子项的对齐方式。

图片

添加图片注释,不超过 140 字(可选)

如果需要面经八股文的话可以小伙伴可以直接github.com/encode-stud…

3. JavaScript 相关

3.1 什么是闭包?闭包有什么作用?

  • 闭包:函数和其词法环境的组合,内部函数可以访问外部函数的变量。
  • 作用:
  • 创建私有变量,避免全局污染。
  • 实现函数柯里化。
  • 延迟执行(如定时器、事件监听器)。
  • 缺点:可能导致内存泄漏,因为闭包会保留对外部函数变量的引用。

3.2 什么是原型链?如何实现继承?

  • 原型链:每个对象都有一个 proto 属性,指向其构造函数的 prototype 对象,通过原型链可以实现属性和方法的继承。
  • 实现继承的方式:
  • 原型链继承:Child.prototype = new Parent();
  • 构造函数继承:在子类构造函数中调用父类构造函数 Parent.call(this);
  • 组合继承:结合原型链和构造函数继承。
  • ES6 类继承:使用 class 和 extends 关键字。

3.3 什么是事件循环(Event Loop)?

  • 事件循环:JavaScript 是单线程的,事件循环机制用于处理异步任务。
  • 过程:
  • 同步任务在主线程中执行。
  • 异步任务(如 setTimeout、Promise)会被放入任务队列。
  • 主线程执行完毕后,事件循环会从任务队列中取出任务执行。
  • 宏任务和微任务:
  • 宏任务:setTimeout、setInterval、I/O 操作等。
  • 微任务:Promise.then、MutationObserver 等。
  • 微任务优先于宏任务执行。

4. 浏览器相关

4.1 浏览器渲染页面的过程是什么?

  • 步骤:
  1. 解析 HTML:生成 DOM 树。
  2. 解析 CSS:生成 CSSOM 树。
  3. 合并 DOM 和 CSSOM:生成渲染树(Render Tree)。
  4. 布局(Layout):计算每个节点的位置和大小。
  5. 绘制(Paint):将渲染树绘制到屏幕上。
  6. 合成(Composite):将多个图层合并显示。
  • 重排(Reflow)和重绘(Repaint):
  • 重排:布局改变,需要重新计算。
  • 重绘:样式改变,不需要重新计算布局。

4.2 如何优化页面性能?

  • 减少 HTTP 请求:合并文件、使用雪碧图。
  • 使用 CDN:加速静态资源加载。
  • 压缩资源:如 CSS、JavaScript、图片。
  • 懒加载:延迟加载非首屏资源。
  • 减少重排和重绘:避免频繁操作 DOM。
  • 使用 Web Workers:将耗时任务放到后台线程。
  • 启用缓存:合理使用 localStorage、sessionStorage 和 HTTP 缓存。

5. 框架相关

5.1 React 和 Vue 的区别?

  • React:
  • 使用 JSX 语法,更灵活。
  • 单向数据流,状态管理依赖外部库(如 Redux)。
  • 函数式编程思想,强调不可变数据。
  • Vue:
  • 使用模板语法,更易上手。
  • 双向数据绑定,内置状态管理(Vuex)。
  • 响应式数据,基于 Object.defineProperty 或 Proxy。

5.2 Vue 的响应式原理是什么?

  • Vue 2.x:使用 Object.defineProperty 劫持对象的属性,通过 getter 和 setter 实现数据的响应式。
  • Vue 3.x:使用 Proxy 代理对象,可以监听整个对象的变化,性能更好。

5.3 React 的生命周期有哪些?

  • 挂载阶段:
  • constructor
  • static getDerivedStateFromProps
  • render
  • componentDidMount
  • 更新阶段:
  • static getDerivedStateFromProps
  • shouldComponentUpdate
  • render
  • getSnapshotBeforeUpdate
  • componentDidUpdate
  • 卸载阶段:
  • componentWillUnmount

6. 网络相关

6.1 HTTP 和 HTTPS 的区别?

  • HTTP:明文传输,不安全。
  • HTTPS:通过 SSL/TLS 加密传输,安全性更高。
  • 区别:
  • HTTPS 需要申请证书。
  • HTTPS 默认端口是 443,HTTP 是 80。
  • HTTPS 可以防止数据被篡改和窃听。

6.2 常见的 HTTP 状态码有哪些?

  • 1xx:信息性状态码(如 100 Continue)。
  • 2xx:成功状态码(如 200 OK、204 No Content)。
  • 3xx:重定向状态码(如 301 Moved Permanently、302 Found)。
  • 4xx:客户端错误状态码(如 400 Bad Request、404 Not Found)。
  • 5xx:服务器错误状态码(如 500 Internal Server Error、502 Bad Gateway)。

7. 其他

7.1 什么是跨域?如何解决跨域问题?

  • 跨域:浏览器同源策略限制了不同源之间的资源访问。
  • 解决方案:
  • JSONP:通过 
  • CORS:服务器设置 Access-Control-Allow-Origin 响应头。
  • 代理服务器:通过服务器转发请求。
  • WebSocket:全双工通信,不受同源策略限制。

7.2 什么是 Webpack?它的作用是什么?

  • Webpack:是一个模块打包工具,用于将多个模块打包成一个或多个文件。
  • 作用:
  • 支持多种模块化规范(CommonJS、ES Module 等)。
  • 支持代码分割、懒加载。
  • 支持加载器(Loader)和插件(Plugin)扩展功能。
  • 支持开发环境和生产环境的配置。

图片

添加图片注释,不超过 140 字(可选)

如果需要面经八股文的话可以小伙伴可以直接github.com/encode-stud…

总结

以上是前端面试中常见的“八股文”问题,涵盖了 HTML、CSS、JavaScript、浏览器、框架和网络等方面的基础知识。掌握这些内容可以帮助你在面试中更加自信地应对各种问题。当然,实际开发中还需要结合项目经验,深入理解这些知识的应用场景。