前端面试题

54 阅读2分钟

一、HTML & CSS

  1. 盒模型:标准盒模型 vs IE盒模型,box-sizing的作用?
  2. BFC:什么是BFC?如何创建?解决什么问题?
  3. Flex/Grid布局:常用属性,垂直居中实现方案。
  4. CSS选择器优先级:计算规则,!important的影响。
  5. 重绘与重排:区别,如何减少重排?
  6. 响应式设计:rem/em/vw/vh 区别,移动端适配方案。
  7. CSS3新特性:动画、过渡、阴影、滤镜等。

二、JavaScript

基础

  1. 闭包:定义、应用场景、内存泄漏风险。

  2. 原型与原型链prototype__proto__new的过程。

  3. 作用域与作用域链:变量提升、暂时性死区。

  4. this指向:不同场景下的 this值,如何修改?

  5. 事件循环:宏任务 vs 微任务,Promise/async/await 执行顺序。

  6. ES6+ 新特性

    • let/const、箭头函数
    • Promise、async/await
    • 模块化(import/export)
    • 解构赋值、扩展运算符
    • Proxy/Reflect
  7. 类型判断typeofinstanceofObject.prototype.toString.call()

异步

  1. Promise:手写 Promise、Promise.all/race/allSettled 区别。
  2. 事件机制:事件冒泡与捕获,事件委托。

三、浏览器

  1. 渲染流程:从输入URL到页面展示的过程。
  2. 本地存储:Cookie、LocalStorage、SessionStorage、IndexedDB 区别。
  3. 跨域:原因、解决方案(CORS、JSONP、代理等)。
  4. 安全:XSS、CSRF 的原理与防御。
  5. 缓存机制:强缓存、协商缓存,HTTP 缓存头。

四、框架相关(React/Vue 选一)

React

  1. 生命周期:类组件与函数组件(useEffect)的生命周期对应。
  2. Hooks:useState、useEffect、useCallback、useMemo 的区别与使用场景。
  3. 虚拟DOM与Diff算法:React 的调和过程。
  4. 状态管理:Redux/Mobx 原理,Context API 使用。
  5. 性能优化:React.memo、useMemo、懒加载、代码分割。

Vue

  1. 响应式原理:Vue2(Object.defineProperty)vs Vue3(Proxy)。
  2. 生命周期:各个阶段及其用途。
  3. 组件通信:props/$emit、provide/inject、vuex/pinia、eventBus。
  4. 虚拟DOM与Diff算法:Vue 的更新策略。
  5. Composition API:与 Options API 对比,setup 使用。

五、工程化

  1. 模块化:CommonJS、ES Module、AMD 的区别。
  2. 打包工具:Webpack 核心概念(loader、plugin、HMR、代码分割)。
  3. 版本控制:Git 常用命令,分支管理策略。
  4. CI/CD:流程理解,常用工具(Jenkins、GitHub Actions)。

六、性能优化

  1. 加载优化:懒加载、预加载、分包策略、CDN。
  2. 渲染优化:防抖节流、虚拟列表、SSR/NSR。
  3. 缓存策略:HTTP 缓存、Service Worker、PWA。
  4. 监控指标:FP/FMP/FCP、LCP、CLS 等 Web Vitals。

七、手写代码

  1. 实现 Promise:支持 then/catch/all/race。
  2. 函数柯里化curry(add)(1)(2)(3)()
  3. 数组扁平化flat(arr, depth)
  4. 深拷贝:处理循环引用、特殊类型。
  5. 防抖与节流:场景与实现。
  6. 发布订阅模式:EventEmitter。
  7. 手写 call/apply/bind:改变 this 指向。
  8. DOM Diff 算法:简化版 Virtual DOM 对比更新。