前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
  • 基础进阶

    • 基础篇
    • 进阶篇
    • 高频篇
      • 1 CSS
        • 盒模型
        • BFC
        • 选择器权重计算方式
        • 清除浮动
        • 垂直居中的方案
        • CSS3的新特性
        • CSS动画和过渡
        • 有哪些方式(CSS)可以隐藏页面元素
        • 说说em/px/rem/vh/vw区别
        • flex布局
        • 如果要做优化,CSS提高性能的方法有哪些?
        • 画一条 0.5px 的线
        • 如何画一个三角形
        • 两栏布局:左边定宽,右边自适应方案
      • 2 JavaScript
        • typeof类型判断
        • 类型转换
        • 闭包
        • 原型与原型链
        • 原型继承和 Class 继承
        • 模块化
        • 事件机制
        • 箭头函数
        • JS内存泄露如何检测?场景有哪些?
        • async/await异步总结
        • Promise异步总结
        • Event Loop执行机制过程
      • 3 浏览器
        • 储存
        • 浏览器缓存机制
        • 从输入URL 到网页显示的完整过程
        • 常见的web前端攻击方式有哪些
        • 跨域方案
        • 移动端H5点击有300ms延迟,该如何解决
        • 如何实现网页多标签tab通讯
        • requestIdleCallback和requestAnimationFrame有什么区别
        • script标签的defer和async有什么区别
      • 4 Vue2
        • 响应式原理
        • vdom和diff算法
        • 模板编译
        • Vue组件渲染过程
        • Vue组件之间通信方式有哪些
        • Vue的生命周期方法有哪些
        • 如何统一监听Vue组件报错
        • 在实际工作中,你对Vue做过哪些优化
      • 5 Vue3
        • vue3 对 vue2 有什么优势
        • vue3 和 vue2 的生命周期有什么区别
        • 如何理解Composition API和Options API
        • ref如何使用
        • toRef和toRefs如何使用和最佳方式
        • 深入理解为什么需要ref、toRef、toRefs
        • vue3升级了哪些重要功能
        • Composition API 如何实现逻辑复用
        • Vue3如何实现响应式
        • Proxy 基本使用
        • vue3用Proxy 实现响应式
        • v-model参数的用法
        • watch和watchEffect的区别
        • setup中如何获取组件实例
        • Vue3为何比Vue2快
        • 什么是PatchFlag
        • 什么是HoistStatic和CacheHandler
        • SSR和Tree-shaking的优化
        • Vite 为什么启动非常快
        • Composition API 和 React Hooks 的对比
      • 6 React
        • JSX本质
        • React合成事件机制
        • setState和batchUpdate机制
        • 根据jsx写出vnode和render函数
        • 虚拟DOM(vdom)真的很快吗
        • react组件渲染过程
        • React setState经典面试题
        • React useEffect闭包陷阱问题
        • Vue React diff 算法有什么区别
        • 如何统一监听React组件报错
        • 在实际工作中,你对React做过哪些优化
        • React真题
        • React和Vue的区别(常考)
      • 7 React Hooks
        • class组件存在哪些问题
        • 用useState实现state和setState功能
        • 用useEffect模拟组件生命周期
        • 用useEffect模拟WillUnMount时的注意事项
        • useRef和useContext
        • useReducer能代替redux吗
        • 使用useMemo做性能优化
        • 使用useCallback做性能优化
        • 什么是自定义Hook
        • 使用Hooks的两条重要规则
        • 为何Hooks要依赖于调用顺序
        • class组件逻辑复用有哪些问题
        • Hooks组件逻辑复用有哪些好处
        • Hooks使用中的几个注意事项
      • 8 Webpack
        • hash、chunkhash、contenthash区别
        • webpack常用插件总结
        • webpack热更新原理
        • webpack原理简述
        • webpack性能优化-构建速度
        • webpack性能优化-产出代码(线上运行)
      • 9 HTTP
        • HTTP基础总结
        • HTTP缓存
        • HTTP协议1.0和1.1和2.0有什么区别
        • WebSocket和HTTP协议有什么区别
        • 请描述TCP三次握手和四次挥手
        • HTTP跨域请求时为什么要发送options请求
        • HTTP请求中token、cookie、session有什么区别
        • 什么是HTTPS中间人攻击,如何预防(HTTPS加密过程、原理)
      • 10 Node
        • 浏览器和nodejs事件循环(Event Loop)有什么区别
        • nodejs如何开启多进程,进程如何通讯
      • 11 综合题目
        • 你们的工作流程是怎么样的
        • 工作中遇到过哪些项目难点,是如何解决的
        • 前端性能优化
        • 前端常用的设计模式和使用场景
        • 如果一个H5很慢,如何排查性能问题
        • 后端一次性返回十万条数据,你该如何渲染
        • H5页面如何进行首屏优化
        • 请描述js-bridge的实现原理
        • 从零搭建开发环境需要考虑什么
        • 如果你是项目前端技术负责人,将如何做技术选型(常考)
        • 高效的字符串前缀匹配如何做
        • 前端路由原理
        • 首屏渲染优化
        • interface和type的区别(常考)
      • 12 手写题
        • 防抖
        • 节流
        • New的过程
        • instanceOf原理
        • 实现call方法
        • 实现apply方法
        • 实现bind方法
        • 发布订阅模式
        • 手写JS深拷贝-考虑各种数据类型和循环引用
        • 用JS实现一个LRU缓存
        • 手写curry函数,实现函数柯里化
        • 手写一个LazyMan,实现sleep机制
        • 手写一个getType函数,获取详细的数据类型
        • 手写一个JS函数,实现数组扁平化Array Flatten
        • 把一个数组转换为树
        • 获取当前页面URL参数
        • 手写Promise加载一张图片
        • 两个数组求交集和并集
        • JS反转字符串
        • 设计实现一个H5图片懒加载
        • 手写Vue3基本响应式原理
        • 实现一个简洁版的promise
      • 13 算法题
        • 时间复杂度与空间复杂度基本概念
        • 实现数字千分位格式化
        • 实现快速排序并说明时间复杂度
        • 将数组中的0移动到末尾
        • 求斐波那契数列的第n值
        • 给一个数组,找出其中和为n的两个元素(两数之和)
        • 实现二分查找并分析时间复杂度
        • 实现队列功能
        • 手写判断一个字符串"{a(b[c]d)e}f"是否括号匹配
      • 14 开放问题
        • 面试结束面试官问你想了解什么
        • 工作中遇到过哪些项目难点,是如何解决的
        • 你未来发展怎么规划的
        • 你期望加入一家什么样的公司
        • 平常除了开发还会做什么?
        • 怎么看待加班
        • 你最大的缺点
        • 你觉得你有哪些不足之处
        • 优雅谈薪的技巧
    • 手写篇
    • 综合题型
    • 其他问题
    • 设计模式
  • 精选模块

完整面试题地址:
作者:程序员poetry
扫码关注作者公众号:「前端进阶之旅」 每天分享技术干货
前端进阶之旅公众号二维码

一天快速复习完高频面试题

# 1 CSS

# 盒模型

  • 有两种, IE 盒子模型、W3C 盒子模型;
  • 盒模型: 内容(content)、填充(padding)、边界(margin)、 边框(border);
  • 区 别: IE的content部分把 border 和 padding计算了进去;

标准盒子模型的模型图

从上图可以看到:

  • 盒子总宽度 = width + padding + border + margin;
  • 盒子总高度 = height + padding + border + margin

也就是,width/height 只是内容高度,不包含 padding 和 border 值

IE 怪异盒子模型

从上图可以看到:

  • 盒子总宽度 = width + margin;
  • 盒子总高度 = height + margin;

也就是,width/height 包含了 padding 和 border值

页面渲染时,dom 元素所采用的 布局模型。可通过box-sizing进行设置

通过 box-sizing 来改变元素的盒模型

CSS 中的 box-sizing 属性定义了引擎应该如何计算一个元素的总宽度和总高度

  • box-sizing: content-box; 默认的标准(W3C)盒模型元素效果,元素的 width/height 不包含padding,border,与标准盒子模型表现一致
  • box-sizing: border-box; 触发怪异(IE)盒模型元素的效果,元素的 width/height 包含 padding,border,与怪异盒子模型表现一致
  • box-sizing: inherit; 继承父元素 box-sizing 属性的值

小结

  • 盒子模型构成:内容(content)、内填充(padding)、 边框(border)、外边距(margin)
  • IE8及其以下版本浏览器,未声明 DOCTYPE,内容宽高会包含内填充和边框,称为怪异盒模型(IE盒模型)
  • 标准(W3C)盒模型:元素宽度 = width + padding + border + margin
  • 怪异(IE)盒模型:元素宽度 = width + margin
  • 标准浏览器通过设置 css3 的 box-sizing: border-box 属性,触发“怪异模式”解析计算宽高

# BFC

块级格式化上下文,是一个独立的渲染区域,让处于 BFC 内部的元素与外部的元素相互隔离,使内外元素的定位不会相互影响。

IE下为 Layout,可通过 zoom:1 触发

触发条件:

  • 根元素,即HTML元素
  • 绝对定位元素 position: absolute/fixed
  • 行内块元素 display的值为inline-block、table、flex、inline-flex、grid、inline-grid
  • 浮动元素:float值为left、right
  • overflow值不为 visible,为 auto、scroll、hidden

规则:

  1. 属于同一个 BFC 的两个相邻 Box 垂直排列
  2. 属于同一个 BFC 的两个相邻 Box 的 margin 会发生重叠
  3. BFC 中子元素的 margin box 的左边, 与包含块 (BFC) border box的左边相接触 (子元素 absolute 除外)

在CSS中,BFC代表"块级格式化上下文"(Block Formatting Context),是一个用于布局元素的概念。一个元素形成了BFC之后,会根据BFC的规则来进行布局和定位。在理解BFC中子元素的margin box与包含块(BFC)的border box相接触的概念时,可以考虑以下要点:

  • 外边距折叠(Margin Collapsing): 在正常情况下,块级元素的外边距会折叠,即相邻元素的外边距会取两者之间的最大值,而不是简单相加。但是,当一个元素形成了BFC时,它的外边距不会和其内部的子元素的外边距折叠。
  • 相邻边界情况: BFC中子元素的margin box的左边会与包含块的border box的左边相接触,这意味着子元素的外边距不会穿过包含块的边界,从而保证布局的合理性。

下面是一个示例代码,帮助你更好地理解这个概念:

<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
  <div class="container"
fe
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
  • 基础进阶

    • 基础篇
    • 进阶篇
    • 高频篇
      • 1 CSS
        • 盒模型
        • BFC
        • 选择器权重计算方式
        • 清除浮动
        • 垂直居中的方案
        • CSS3的新特性
        • CSS动画和过渡
        • 有哪些方式(CSS)可以隐藏页面元素
        • 说说em/px/rem/vh/vw区别
        • flex布局
        • 如果要做优化,CSS提高性能的方法有哪些?
        • 画一条 0.5px 的线
        • 如何画一个三角形
        • 两栏布局:左边定宽,右边自适应方案
      • 2 JavaScript
        • typeof类型判断
        • 类型转换
        • 闭包
        • 原型与原型链
        • 原型继承和 Class 继承
        • 模块化
        • 事件机制
        • 箭头函数
        • JS内存泄露如何检测?场景有哪些?
        • async/await异步总结
        • Promise异步总结
        • Event Loop执行机制过程
      • 3 浏览器
        • 储存
        • 浏览器缓存机制
        • 从输入URL 到网页显示的完整过程
        • 常见的web前端攻击方式有哪些
        • 跨域方案
        • 移动端H5点击有300ms延迟,该如何解决
        • 如何实现网页多标签tab通讯
        • requestIdleCallback和requestAnimationFrame有什么区别
        • script标签的defer和async有什么区别
      • 4 Vue2
        • 响应式原理
        • vdom和diff算法
        • 模板编译
        • Vue组件渲染过程
        • Vue组件之间通信方式有哪些
        • Vue的生命周期方法有哪些
        • 如何统一监听Vue组件报错
        • 在实际工作中,你对Vue做过哪些优化
      • 5 Vue3
        • vue3 对 vue2 有什么优势
        • vue3 和 vue2 的生命周期有什么区别
        • 如何理解Composition API和Options API
        • ref如何使用
        • toRef和toRefs如何使用和最佳方式
        • 深入理解为什么需要ref、toRef、toRefs
        • vue3升级了哪些重要功能
        • Composition API 如何实现逻辑复用
        • Vue3如何实现响应式
        • Proxy 基本使用
        • vue3用Proxy 实现响应式
        • v-model参数的用法
        • watch和watchEffect的区别
        • setup中如何获取组件实例
        • Vue3为何比Vue2快
        • 什么是PatchFlag
        • 什么是HoistStatic和CacheHandler
        • SSR和Tree-shaking的优化
        • Vite 为什么启动非常快
        • Composition API 和 React Hooks 的对比
      • 6 React
        • JSX本质
        • React合成事件机制
        • setState和batchUpdate机制
        • 根据jsx写出vnode和render函数
        • 虚拟DOM(vdom)真的很快吗
        • react组件渲染过程
        • React setState经典面试题
        • React useEffect闭包陷阱问题
        • Vue React diff 算法有什么区别
        • 如何统一监听React组件报错
        • 在实际工作中,你对React做过哪些优化
        • React真题
        • React和Vue的区别(常考)
      • 7 React Hooks
        • class组件存在哪些问题
        • 用useState实现state和setState功能
        • 用useEffect模拟组件生命周期
        • 用useEffect模拟WillUnMount时的注意事项
        • useRef和useContext
        • useReducer能代替redux吗
        • 使用useMemo做性能优化
        • 使用useCallback做性能优化
        • 什么是自定义Hook
        • 使用Hooks的两条重要规则
        • 为何Hooks要依赖于调用顺序
        • class组件逻辑复用有哪些问题
        • Hooks组件逻辑复用有哪些好处
        • Hooks使用中的几个注意事项
      • 8 Webpack
        • hash、chunkhash、contenthash区别
        • webpack常用插件总结
        • webpack热更新原理
        • webpack原理简述
        • webpack性能优化-构建速度
        • webpack性能优化-产出代码(线上运行)
      • 9 HTTP
        • HTTP基础总结
        • HTTP缓存
        • HTTP协议1.0和1.1和2.0有什么区别
        • WebSocket和HTTP协议有什么区别
        • 请描述TCP三次握手和四次挥手
        • HTTP跨域请求时为什么要发送options请求
        • HTTP请求中token、cookie、session有什么区别
        • 什么是HTTPS中间人攻击,如何预防(HTTPS加密过程、原理)
      • 10 Node
        • 浏览器和nodejs事件循环(Event Loop)有什么区别
        • nodejs如何开启多进程,进程如何通讯
      • 11 综合题目
        • 你们的工作流程是怎么样的
        • 工作中遇到过哪些项目难点,是如何解决的
        • 前端性能优化
        • 前端常用的设计模式和使用场景
        • 如果一个H5很慢,如何排查性能问题
        • 后端一次性返回十万条数据,你该如何渲染
        • H5页面如何进行首屏优化
        • 请描述js-bridge的实现原理
        • 从零搭建开发环境需要考虑什么
        • 如果你是项目前端技术负责人,将如何做技术选型(常考)
        • 高效的字符串前缀匹配如何做
        • 前端路由原理
        • 首屏渲染优化
        • interface和type的区别(常考)
      • 12 手写题
        • 防抖
        • 节流
        • New的过程
        • instanceOf原理
        • 实现call方法
        • 实现apply方法
        • 实现bind方法
        • 发布订阅模式
        • 手写JS深拷贝-考虑各种数据类型和循环引用
        • 用JS实现一个LRU缓存
        • 手写curry函数,实现函数柯里化
        • 手写一个LazyMan,实现sleep机制
        • 手写一个getType函数,获取详细的数据类型
        • 手写一个JS函数,实现数组扁平化Array Flatten
        • 把一个数组转换为树
        • 获取当前页面URL参数
        • 手写Promise加载一张图片
        • 两个数组求交集和并集
        • JS反转字符串
        • 设计实现一个H5图片懒加载
        • 手写Vue3基本响应式原理
        • 实现一个简洁版的promise
      • 13 算法题
        • 时间复杂度与空间复杂度基本概念
        • 实现数字千分位格式化
        • 实现快速排序并说明时间复杂度
        • 将数组中的0移动到末尾
        • 求斐波那契数列的第n值
        • 给一个数组,找出其中和为n的两个元素(两数之和)
        • 实现二分查找并分析时间复杂度
        • 实现队列功能
        • 手写判断一个字符串"{a(b[c]d)e}f"是否括号匹配
      • 14 开放问题
        • 面试结束面试官问你想了解什么
        • 工作中遇到过哪些项目难点,是如何解决的
        • 你未来发展怎么规划的
        • 你期望加入一家什么样的公司
        • 平常除了开发还会做什么?
        • 怎么看待加班
        • 你最大的缺点
        • 你觉得你有哪些不足之处
        • 优雅谈薪的技巧
    • 手写篇
    • 综合题型
    • 其他问题
    • 设计模式
  • 精选模块