前端八股文

861 阅读7分钟

CSS、HTML

垂直居中布局

什么BFC?作用有哪些 怎么实现

BFC的规则
  • 内部的Box会在垂直方向,从顶部一个接一个地放置
  • 垂直方向上的距离由margin决定(防止margin重叠)
  • 计算高度时浮动也参与计算(清除浮动)
  • BFC的区域不会与float的元素区域重叠(防止文字环绕)
如何创建BFC
  1. 根元素
  2. 绝对定位:absolute、fixed
  3. float不为none
  4. overflow不为visible
  5. display为flex、inline-block、table-cell

position有哪些值,是怎么定位的

  • static 默认定位布局
  • relative 相对自身定位
  • fixed 相对于浏览器窗口或当元素祖先的 transformperspective 或 filter 属性非 none 时,容器由视口改为该祖先。
  • absolute 相对于最近非static定位祖先元素偏移
  • sticky 粘性布局 当根据最近滚动的祖先元素进行定位

CSS的权重和优先级算法

  • 权重记忆口诀:优先级关系:!important > 内联样式 > ID 选择器 > 类选择器 = 属性选择器 = 伪类选择器 > 标签选择器 = 伪元素选择器
  • 权重的进制是并不是十进制,CSS 权重进制在 IE6 为 256,后来扩大到了 65536,现代浏览器则采用更大的数量

20个ID选择器累加优先级小于内联样式

盒模型

  • 盒子模型概念
    image.png

盒子由margin、border、padding、content构成

  • 正常盒模型 box-sizing: box-content;

width/height = content

  • IE怪异盒模型 box-sizing: border-box;

width/height = border + padding + content

行内标签和块标签的区别

伪类和伪元素的区别

移动端1px像素问题,如何实现1px像素

  • 伪元素 + transform scaleY(.5)
  • border-image
  • background-image
  • box-shadow

一般来说,在PC端浏览器中,设备像素比(dpr)等于1,1个css像素就代表1个物理像素;但是在retina屏幕中,dpr普遍是2或3,1个css像素不再等于1个物理像素,因此比实际设计稿看起来粗不少

实现隐藏元素有哪些方式?

  • display:none
  • opacity: 0
  • visibility: hidden
  • height: 0width: 0

CSS层叠的顺序

image.png

新增部分中 CSS3对层叠上下文的影响(摘抄自张鑫旭博客)
  1. z-index值不为autoflex项(父元素display:flex|inline-flex).
  2. 元素的opacity值不是1.
  3. 元素的transform值不是none.
  4. 元素mix-blend-mode值不是normal.
  5. 元素的filter值不是none.
  6. 元素的isolation值是isolate.
  7. will-change指定的属性值为上面任意一个。
  8. 元素的-webkit-overflow-scrolling设为touch.

JS

纯函数和柯理化

节流和防抖

闭包

v8垃圾回收的机制

事件循环

宏任务、微任务、requestAnimationFrame

this指向

箭头函数与普通函数的区别

原型和原型链

递归和尾调用优化

require和import的区别

判断数据类型有哪些方式

JavaScript有数据类型

类型转换

内存泄漏

浏览器

事件委托、事件冒泡、事件捕获

事件委托

  • 事件模型

    事件捕获--事件处理--事件冒泡

  • 事件委托

    利用事件冒泡将子元素事件交给祖先元素处理

从输入URL到页面展现 整个过程

重绘和回流(重排)是什么?如何避免?

浏览器的渲染流程

  • 构建 DOM 树构建渲染树布局绘制渲染层合成 image.png
  • 构建 DOM 树:浏览器将 HTML 解析成树形结构的 DOM 树,一般来说,这个过程发生在页面初次加载,或页面 JavaScript 修改了节点结构的时候。
  • 构建渲染树:浏览器将 CSS 解析成树形结构的 CSSOM 树,再和 DOM 树合并成渲染树。
  • 布局(Layout):浏览器根据渲染树所体现的节点、各个节点的CSS定义以及它们的从属关系,计算出每个节点在屏幕中的位置。Web 页面中元素的布局是相对的,在页面元素位置、大小发生变化,往往会导致其他节点联动,需要重新计算布局,这时候的布局过程一般被称为回流(Reflow)。
  • 绘制(Paint):遍历渲染树,调用渲染器的 paint() 方法在屏幕上绘制出节点内容,本质上是一个像素填充的过程。这个过程也出现于回流或一些不影响布局的 CSS 修改引起的屏幕局部重画,这时候它被称为重绘(Repaint)。实际上,绘制过程是在多个层上完成的,这些层我们称为渲染层(RenderLayer)。
  • 渲染层合成(Composite):多个绘制后的渲染层按照恰当的重叠顺序进行合并,而后生成位图,最终通过显卡展示到屏幕上。
  • 基于渲染流程实现的优化方式
  • 动画使用transform
  • 减少隐式合成
  • 减少合成层的尺寸大小

cookie、sessionStorage、localStorage区别

token、session区别

什么是跨域?如何实现跨域?

浏览器打开一个窗口开启多少进程

强缓存和协商缓存

node

Vue

diff算法

computed的实现原理

keep-alive的实现原理

nextTick的原理

vue2.0和vue3.0的区别

React

对虚拟DOM的理解

react-hooks有啥好处

diff算法

setState同异步问题

算法

排序

滑动窗口

手写实现

promise

bind、call、apply实现

new语法实现

instanceof实现

compose实现

发布订阅实现

千分位分隔符

深拷贝

寄生组合继承的实现

webpack

webpack优化手段

babel实现的原理

webpack中loaderplugin的区别

如何实现一个plugin

前端优化方式有哪些

打包优化

cdn加速

http请求

服务端渲染

启用GPU硬件加速渲染

图片懒加载

虚拟列表

其他

Session 、Cookie和Token三者的关系和区别

CSS隔离方案有哪些

TCP和UDP的区别

TCP的三次握手和四次挥手

http和https的区别

https的优缺点以及https的握手过程

对称加密和非对称加密

DNS的工作原理

SSL和TSL

SSL安全套接层(Secure Sockets Layer)
TSL传输安全层(Transport Layer Security)TLS1.0TLS1.1都是不安全的。主流版本TLS2.0 区别

XSS和CSRF

XSS Cross-site scripting
  • 类型
    • 反射型

    将用户输入的数据反射给浏览器。

    • 存储型

    将用户输入的数据存储到服务器。例如输入的评论或者文章。所有访问改评论或文章都会执行恶意js

    • 基于DOM

    通过恶意脚本修改dom结构,仅在客户端完成攻击

  • 防范
    • 输入检查

    检查用户的输入,将用户输入转义

    • 输出检查

    检查渲染到dom上的内容,将输出的内容转义后再显示

    • httpOnly

    防止恶意脚本读取cookie。
    `Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly

    • Content Security Policy(内容安全策略)

    严格的 CSP 在 XSS 的防范中可以起到以下的作用:

    • 禁止加载外域代码,防止复杂的攻击逻辑。
    • 禁止外域提交,网站被攻击后,用户的数据不会泄露到外域。
    • 禁止内联脚本执行(规则较严格,目前发现 GitHub 使用)。
    • 禁止未授权的脚本执行(新特性,Google Map 移动版在使用)。
    • 合理使用上报可以及时发现 XSS,利于尽快修复问题。
CSRF Cross-site request forgery

跨站请求伪造:劫持受信用账户向服务器发送请求的攻击方式。

  • 与xss的区别

    CSRF一般基于xss实现攻击。获取用户cookie,伪装成用户发送请求。

  • 防范
    1. 使用token。
    2. 同源策略
    3. Referer Header

参考链接