首页/文章/八股文

前端题目

2025-02-10
270210 分钟
...

1. JavaScript 基础与深入


  • 闭包是什么?它有什么作用?

闭包是指一个函数可以“记住”并访问它定义时的作用域,而不是调用时的作用域。简单来说,就是函数与其外部作用域的变量一起形成的一个“封闭”环境。

作用

• 闭包能够保存外部函数的局部变量,即使外部函数已经返回。

• 可以通过闭包来实现数据封装和私有变量


  • 解释 this 在不同情况下的含义,并举例说明。

  • 全局环境this 指向全局对象(浏览器中为 window,Node.js 中为 global)。

  • 函数调用:普通函数中 this 指向全局对象(严格模式下为 undefined)。

  • 方法调用this 指向调用该方法的对象。

  • 构造函数this 指向新创建的实例。

  • 箭头函数this 继承自外层函数的 this


JavaScript 的原型链是什么?它是如何工作的?

JavaScript 的原型链是一种对象间继承的机制。每个对象都有一个内部属性 [[Prototype]](可以通过 proto 或 Object.getPrototypeOf 访问),指向另一个对象。当访问对象的属性或方法时,JavaScript 引擎会沿着原型链查找,如果找不到就会继续查找父对象,直到查找到 null 为止。


事件冒泡与事件捕获的区别是什么?

事件冒泡(Bubbling)和事件捕获(Capturing)是 DOM 事件流中的两种传播模式:

事件捕获:事件从根元素开始向目标元素传递,先触发父元素的事件。

事件冒泡:事件从目标元素开始向根元素传递,先触发目标元素的事件。

==默认情况下,事件是冒泡的==,除非显式指定为捕获。


如何实现一个深拷贝?请给出代码实现。

function deepClone(obj) {
  if (obj === null || typeof obj !== 'object') return obj;
  let clone = Array.isArray(obj) ? [] : {};
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      clone[key] = deepClone(obj[key]);
    }
  }
  return clone;
}

解释 Promise 和 async/await 的区别,并举例说明。

Promise:用于处理异步操作,通过 then 和 catch 链接回调函数来处理异步结果。

async/await:是基于 Promise 的语法糖,使异步代码看起来像同步代码,更加简洁。


bind、call、apply 三者的区别与应用场景。

bind:返回一个新的函数,绑定 this。

call:立即执行函数并绑定 this,可以传入参数。

apply:与 call 类似,唯一的区别是 apply 接收一个数组作为参数。


如何优化 JavaScript 中的性能问题?举例说明。

避免频繁的 DOM 操作:批量修改 DOM 或使用 documentFragment。

事件委托:避免在多个子元素上绑定事件,可以将事件绑定到父元素。

防抖和节流:在频繁触发事件时,使用防抖和节流来减少函数调用次数。

懒加载:仅在需要时加载资源,例如图片和模块。

缓存机制:缓存计算结果或请求数据,减少重复计算或请求。


2. React 与 Vue


React 中的 虚拟 DOM 是什么?它如何提高性能?

虚拟 DOM 是 React 的核心特性,它是对真实 DOM 的一种抽象表示。每当组件的状态或数据变化时,React 会首先在虚拟 DOM 中更新,然后与真实 DOM 进行比对,找出差异并只更新那些变化的部分。这样可以避免直接对真实 DOM 的频繁操作,从而提高性能。


React 中的 setState 是同步的还是异步的?

在react合成事件和声明周期中是表现为异步

在原生事件和setTimeout中表现为同步


在 React 中,如何优化组件的渲染性能?

Vue 中的响应式原理是什么?Vue 是如何检测数据变化的?

如何在 React 中实现父子组件之间的数据传递?

React 中的 Hooks 与传统的类组件相比有什么优势?

Vue 的生命周期函数有哪些,如何使用它们?

你如何理解 React 中的 Context API?何时需要使用它?

React 中的 useEffect 使用场景及常见问题。

3. 前端性能优化

前端性能优化的常见手段有哪些?请简要描述并给出实例。

如何避免页面卡顿?哪些是会引起卡顿的常见原因?

什么是懒加载?如何实现图片和组件的懒加载?

Web 页面如何进行代码拆分?如何通过动态 import 实现按需加载?

什么是浏览器的重排与重绘?如何减少它们的影响?

如何优化 Web 页面的首屏加载速度?

如何利用浏览器缓存来优化前端性能?

4. 前端工程化与构建工具

Webpack 的工作原理是什么?如何优化构建性能?

如何使用 Babel 进行代码转换,Babel 的插件和 preset 有哪些?

前端模块化的实现方式有哪些?分别有什么特点?

你在项目中使用过哪些构建工具(如 Webpack、Vite、Parcel 等),它们的优缺点是什么?

如何使用 PostCSS 来优化 CSS 代码?

请解释一下 tree shaking 是什么?如何实现代码的 tree shaking?

5. CSS

CSS 选择器的优先级是如何计算的?

Flexbox 与 Grid 布局的区别是什么?

如何实现响应式设计?使用哪些 CSS 技巧或工具来实现?

请说出你常用的 CSS 预处理器和框架,以及它们的优缺点。

什么是 BEM 规范?你如何理解并在项目中应用它?

CSS 动画和过渡的区别,以及使用场景。

如何避免 CSS 样式的冲突和层叠问题?

6. 版本控制与团队协作

你在项目中如何使用 Git 进行版本控制?请描述常用的 Git 操作。

如何解决 Git 冲突?如何使用 Git 进行团队协作?

你如何管理和处理 Git 中的分支?解释一下常见的 Git 工作流(如 Git Flow)。

你有没有使用过 CI/CD 流水线?它在前端开发中的作用是什么?

7. 项目管理与架构

如何设计一个大规模的前端项目架构?你会考虑哪些因素?

如何将前端代码模块化和组件化?

在团队协作中,你如何保证代码质量?如何进行代码审查?

你是如何进行单元测试的?使用了哪些工具或框架?

如何处理前端与后端的接口文档和协作?

如何处理跨浏览器兼容性问题?

8. Web 安全

你了解哪些常见的 Web 安全漏洞?例如 XSS 和 CSRF。

如何防止跨站脚本攻击(XSS)?

如何防止跨站请求伪造(CSRF)攻击?

如何处理用户敏感信息的加密与传输安全问题?

如果您觉得这篇文章有帮助,请点个赞吧~

分享文章

相关文章

更多文章 →
八股文2026-08-27
定时器按顺序播放多个音频,切后台音频会乱
本身不会补触发,但 它会被系统级冻结 ——iOS Safari 后台完全停止计时,切回前台后 只补执行一次 (不是不补,而是"缺失的中间状态补不上")。间隔短的不会出大问题, 间隔长的会出现"音频流被压缩" ——切回来后本该播 5 分钟的间隙,实际只过了 3 分钟,结果整段对不上。 核心原则 :定时器只能用来"提醒一次", 真正决定"该不该播"的是绝对时间戳 。 setTimeout 在后台会发生什么(按平台) | 平台 | 后台行为...
面试
八股文2026-08-27
线上项目白屏的原因
白屏的本质是 渲染管线某一环断了 ——可能是资源、JS、接口、路由、样式、兼容性任一环节出问题。排查按"控制台 → 网络 → DOM → 环境"四步定位。 本质(前端类比) 把网页想成一栋楼: 白屏 ≠ 一定是同一种原因——这是面试想听的层次。 六大类原因(按出现频率) | 类别 | 典型表现 | 真实案例 | | : | : | : | | ① 资源加载失败 | DOM 是空的 | 入口 JS 404、CDN 挂了、CSS 阻塞 |...
面试
八股文2026-08-27
背景图就是 1MB 大图,怎么优化
1MB 大背景图优化分 三步 :压缩体积(10 30x)、按需加载(按设备/视口/网速)、渲染期优化(GPU 合成)。背景图跟 不同——它是 CSS,不走浏览器的原生懒加载机制,得手动处理。 背景图 vs 的关键区别(先讲清楚这个) 这是面试官想听的"针对性认知"——背景图不是普通图片,不能套通用方案。 三步优化(按优先级) 第 1 步:压缩体积(最重要,立竿见影) 1MB 的来源一般是这几种 ,对应解决方案: | 原始问题 | 体积来...
面试
八股文2026-08-27
项目里很多图片和视频,怎么优化
图片视频优化分 四层 :网络层(CDN/格式)、加载层(懒加载/预加载)、渲染层(解码/缓存)、业务层(按需/降级)。面试要把这四层都讲到位才算有体系。 四层优化模型 第 1 层:网络层(省钱、省时间) 核心目标:让资源体积小、让用户拿到资源快 | 手段 | 作用 | 关键点 | | : | : | : | | 图片格式 | WebP/AVIF 比 JPEG 小 25 50% | 兼容 fallback | | 视频格式 | H.265...
面试
八股文2026-08-20
Embedding 向量模型:从语义表示到相似度计算
前言 大模型「读懂」文字靠的是 token,但 token 之间只有离散的编号关系,模型并不知道「苹果」和「李子」在语义上很近。要让程序能「理解」两段文字的相似程度,必须先把文本映射成一个 高维向量 ,再用几何方法比较。这一步就是 Embedding。 本篇基于我本地 今天的真实代码,从语义表示讲到余弦相似度,并复盘几个踩过的真实坑。 一、为什么需要 Embedding 传统关键词检索是「字面匹配」: Embedding 做的是「语义匹...
面试
八股文2026-08-19
前端面试100题
前端面试 100 题 适用方向:中高级前端 / React / Vue / Next.js / Nuxt / TypeScript / 工程化 / 实时通信 / Electron / Node.js / AI 应用前端 使用方式:优先掌握“标准回答”,再练“面试官追问”,最后把“结合你的简历怎么答”组织成自己的项目故事。 说明 “结合你的简历怎么答”只使用你简历中已经出现的项目与技术事实。 “标准回答 / 追问”属于通用前端知识总结,用...
面试

评论

请登录后发表评论

去登录
加载评论中...