前端再痛恨八股也要知道的八股 !

67 阅读8分钟

从搜索到的资料中,《前端面试江湖》和《前端程序员面试笔试宝典》这两本书籍的目录结构很有参考价值,可以借鉴其分类方式。同时,网易、豆丁网等平台提供的面试题集也包含了大量实用题目。

按照以下结构组织内容:

  1. JavaScript核心知识
  2. HTML5+CSS3
  3. 前端性能优化
  4. 浏览器与网络
  5. 前端框架与工程化
  6. 开放性问题与项目经验

这样既能覆盖技术细节,又能考察综合能力,符合企业面试的实际需求。

前端开发面试题集锦

一、JavaScript核心知识

1. 数据类型与类型判断

题目: ​ JavaScript有哪些数据类型?如何判断数据类型?

参考答案:

JavaScript有7种基本数据类型:Undefined、Null、Boolean、Number、String、Symbol(ES6)、BigInt(ES11),以及引用类型Object。

判断数据类型的方法:

  • typeof:可以判断基本数据类型(除null外),null会被判断为"object"
  • instanceof:判断对象的具体类型
  • Object.prototype.toString.call():最准确的类型判断方法

2. 闭包

题目: ​ 什么是闭包?闭包有什么作用?

参考答案:

闭包是指有权访问另一个函数作用域中变量的函数。创建闭包的常见方式是在一个函数内部创建另一个函数。

闭包的作用:

  • 创建私有变量,实现数据封装
  • 延长局部变量的生命周期
  • 在模块化开发中实现模块模式

3. 原型与原型链

题目: ​ 解释原型链的概念,并说明new操作符的作用

参考答案:

每个对象都有一个原型对象,对象从原型继承方法和属性,这种关系形成原型链。当访问对象的属性时,如果对象本身没有该属性,会沿着原型链向上查找。

new操作符的作用:

  1. 创建一个空对象
  2. 将空对象的原型指向构造函数的prototype属性
  3. 将this指向这个空对象
  4. 执行构造函数
  5. 返回新对象(如果构造函数没有显式返回对象)

4. this指向

题目: ​ 如何确定函数中this的指向?

参考答案:

this 是 JavaScript 中的一个关键字 , 指向当前函数的执行上下文

this的指向取决于函数的调用方式:

  • 普通函数调用:this指向window(严格模式下为undefined)
  • 对象方法调用:this指向调用该方法的对象
  • 构造函数调用:this指向新创建的对象
  • call/apply/bind调用:this指向第一个参数指定的对象
  • 箭头函数:this指向定义时的上下文,无法通过call/apply/bind改变

二、HTML5+CSS3

1. HTML5新特性

题目: ​ HTML5有哪些新特性?

参考答案:

  • 语义化标签:header、footer、nav、article、section等
  • 多媒体支持:audio、video标签
  • 本地存储:localStorage、sessionStorage
  • Canvas绘图
  • Web Workers多线程
  • 表单增强:新的input类型(email、url、date等)
  • 地理位置API
  • WebSocket

2. CSS3新特性

题目: ​ CSS3有哪些新特性?

参考答案:

  • 选择器增强:属性选择器、伪类选择器、伪元素选择器
  • 盒模型:box-sizing属性
  • 背景与边框:border-radius、box-shadow、background-size
  • 渐变:linear-gradient、radial-gradient
  • 过渡与动画:transition、animation
  • 2D/3D变换:transform
  • 弹性布局:Flexbox
  • 网格布局:Grid
  • 媒体查询:响应式设计

3. 响应式设计

题目: ​ 什么是响应式设计?如何实现?

参考答案:

响应式设计是一种网页设计方法,使网页在不同设备上都能提供良好的用户体验。

实现方式:

  • 使用viewport元标签:<meta name="viewport" content="width=device-width, initial-scale=1.0">
  • 使用媒体查询(Media Queries)根据屏幕尺寸应用不同的样式
  • 使用相对单位(rem、em、%)而不是固定单位(px)
  • 使用弹性布局(Flexbox)和网格布局(Grid)
  • 图片响应式:使用max-width: 100%或picture元素

三、前端性能优化

1. 性能优化策略

题目: ​ 前端性能优化可以从哪些方面入手?

参考答案:

网络层面:

  • 减少HTTP请求:合并CSS/JS文件、使用CSS Sprites、使用字体图标
  • 使用CDN加速静态资源
  • 开启Gzip压缩
  • 使用浏览器缓存:设置Expires、Cache-Control、ETag等响应头
  • 使用HTTP/2协议

资源层面:

  • 压缩资源:压缩CSS、JS、图片
  • 按需加载:懒加载图片、代码分割
  • 减少重绘重排:避免频繁操作DOM,使用transform和opacity等属性

代码层面:

  • 避免使用CSS表达式
  • 将CSS放在头部,JS放在底部
  • 使用事件委托减少事件绑定
  • 使用Web Workers处理复杂计算
  • 使用requestAnimationFrame优化动画

更多性能优化 | 具体可以看这个 | 点击空降 🪂🪂🪂

2. 浏览器渲染机制

题目: ​ 从输入URL到页面显示发生了什么?

参考答案:

  1. DNS解析:将域名解析为IP地址

  2. TCP连接:与服务器建立TCP连接(三次握手)

  3. 发送HTTP请求:浏览器发送HTTP请求到服务器

  4. 服务器处理请求:服务器处理请求并返回响应

  5. 浏览器解析渲染

    • 解析HTML构建DOM树
    • 解析CSS构建CSSOM树
    • 将DOM和CSSOM合并成渲染树
    • 计算布局(重排)
    • 绘制页面(重绘)
  6. TCP断开连接:四次挥手

四、浏览器与网络

1. 跨域问题

题目: ​ 什么是跨域?如何解决跨域问题?

参考答案:

跨域是指浏览器出于安全考虑,限制不同源(协议、域名、端口)之间的资源访问。

解决方案:

  • JSONP:利用script标签不受同源策略限制的特性
  • CORS:服务端设置Access-Control-Allow-Origin响应头
  • 代理服务器:通过同源服务器转发请求
  • postMessage:HTML5提供的跨文档通信API
  • WebSocket:不受同源策略限制

2. 浏览器缓存

题目: ​ 浏览器缓存机制有哪些?

参考答案:

  • 强缓存:Expires(HTTP/1.0)和Cache-Control(HTTP/1.1)
  • 协商缓存:Last-Modified/If-Modified-Since和ETag/If-None-Match
  • Service Worker:可以拦截网络请求,实现更灵活的缓存策略

3. 事件循环

题目: ​ 解释JavaScript的事件循环机制

参考答案:

JavaScript是单线程语言,通过事件循环机制实现异步操作。事件循环包括:

  • 调用栈(Call Stack):执行同步代码
  • 任务队列(Task Queue):存放异步任务回调
  • 微任务队列(Microtask Queue):存放Promise、MutationObserver等微任务

执行顺序:同步代码 -> 微任务 -> 宏任务

五、前端框架与工程化

1. React/Vue对比

题目: ​ React和Vue有哪些区别?

参考答案:

  • 数据流:React是单向数据流,Vue是双向数据绑定
  • 模板语法:React使用JSX,Vue使用模板语法
  • 状态管理:React需要配合Redux等库,Vue有Vuex
  • 组件通信:React通过props和回调函数,Vue通过props和事件
  • 性能优化:React使用虚拟DOM,Vue使用响应式系统

2. 前端工程化

题目: ​ 什么是前端工程化?常用的构建工具有哪些?

参考答案:

前端工程化是指将前端开发流程标准化、自动化,提高开发效率和代码质量。

常用工具:

  • 构建工具:Webpack、Vite、Rollup、Parcel
  • 包管理器:npm、yarn、pnpm
  • 代码规范:ESLint、Prettier
  • 测试工具:Jest、Mocha、Cypress
  • 持续集成:GitHub Actions、Jenkins

3. 模块化

题目: ​ 解释CommonJS、AMD、ES6 Module的区别

参考答案:

  • CommonJS:Node.js使用的模块规范,同步加载,使用require和module.exports
  • AMD:异步模块定义,浏览器端使用,使用define和require
  • ES6 Module:ES6标准模块系统,使用import和export,支持静态分析

六、开放性问题

1. 项目经验

题目: ​ 请介绍一个你负责过的项目,你在其中承担什么角色?遇到了什么挑战?如何解决的?

参考答案:

(根据个人实际情况回答,建议准备2-3个有代表性的项目)

2. 职业规划

题目: ​ 你未来3-5年的职业规划是什么?

参考答案:

(建议结合公司发展和个人成长,表达持续学习和提升的意愿)

3. 团队协作

题目: ​ 如何处理团队中的技术分歧?

参考答案:

  • 充分沟通,理解各方观点
  • 基于数据和事实做决策
  • 考虑技术方案的可维护性、扩展性、性能等因素
  • 必要时进行技术预研或原型验证
  • 尊重团队决策,即使与个人意见不同

面试建议:

  1. 准备2-3个有深度的项目,能够清晰描述技术细节
  2. 理解每个知识点的原理,而不仅仅是会使用
  3. 关注行业动态,了解新技术趋势
  4. 练习白板编程,提高代码能力
  5. 准备一些开放性问题,展示思考能力和沟通能力

祝您面试顺利!


一些面试题 🤔

image.png image.png image.png