知识点归纳

191 阅读9分钟

水平垂直居中

juejin.cn/post/684490…

总结:分为定宽高和不定宽高

**1、定宽高:**

绝对定位 + margin

绝对定位 + transform

绝对定位 + leftrighttopbottom

flex

grid

table-cell + vertical-align + inline-block/margin: auto

**2、不定宽高**

绝对定位 + transform

table-cell

flex

flex变异布局(flex + margin:auto)

ES6新特性

juejin.cn/post/684490…

如何终止一个请求

XMLHTTPRequest:XMLHTTPRequest.abort()

axios:CancelToken.source();

前端常见单位

juejin.cn/post/690488…

vue自定义指令

juejin.cn/post/684490…

Promise原理

juejin.cn/post/704375…

nextTick实现原理

juejin.cn/post/696641…

juejin.cn/post/684490…

VUEX相关问题

juejin.cn/post/684490…

vuex mutation为什么不能使用异步

blog.csdn.net/lovemyself1…

async await怎么捕获异常?

zhuanlan.zhihu.com/p/114487312

变量提升 函数提升

juejin.cn/post/698370…

apply、call、bind

juejin.cn/post/684490…

VUE 30题

www.mybj123.com/15235.html

发布订阅模式、观察者模式

Vue 主要通过以下 4 个步骤(发布订阅 )来实现数据双向绑定的:

juejin.cn/post/705544…

实现双向绑定Proxy比defineproperty优劣如何

Proxy 的优势如下:

Proxy 可以直接监听对象而非属性; Proxy 可以直接监听数组的变化; Proxy 有多达 13 种拦截方法,不限于 apply、ownKeys、deleteProperty、has 等等是 Object.defineProperty 不具备的; Proxy 返回的是一个新对象,我们可以只操作新的对象达到目的,而 Object.defineProperty 只能遍历对象属性直接修改; Proxy 作为新标准将受到浏览器厂商重点持续的性能优化,也就是传说中的新标准的性能红利;

Object.defineProperty 的优势如下:

兼容性好,支持 IE9,而 Proxy 的存在浏览器兼容性问题,而且无法用 polyfill 磨平,因此 Vue 的作者才声明需要等到下个大版本( 3.0 )才能用 Proxy 重写。

juejin.cn/post/684490…

vue编译过程

编译模块分为三个阶段

  1. parse:使⽤用正则解析template中的vue的指令(v-xxx) 、template、slot变量量等等形成抽象语法树AST

2. optimize:标记⼀一些静态节点,⽤用作后⾯面的性能优化,在diff的时候直接略略过

3. generate:把第⼀一部⽣生成的AST 转化为渲染函数 render function

juejin.cn/post/686324…

mixin生命周期

async script标签

浏览器输入url后发生了什么

juejin.cn/post/684490…

强缓存协商缓存

合理的使用缓存,能有效提升资源加载速度,并且可以节约带宽、减轻服务器压力。

例如,缓存在内存中的文件读取几乎不耗时,缓存在硬盘中的文件一般要几毫秒,而未缓存的文件,加载时间一般要几十毫秒甚至上千毫秒。 如果强制缓存和协商缓存的字段同时存在,强制缓存优先

  • 强制缓存

    强制缓存会给资源设置一个有效期,如果资源在有效期内则不向远程服务器发起请求,直接读取浏览器缓存,速度最快。

    哪些静态资源适用该缓存策略?

  • 协商缓存

    请求会被发送到服务端,由服务端决定该静态资源是否有修改,如果未改动则告知客户端从浏览器缓存读取,节约了资源从服务端下载到本地的时间。但由于请求已经被发送给了服务端,且由服务端处理并给出响应,因此效率不及强制缓存。

    哪些静态资源适用该策略?

vue.extend

juejin.cn/post/691497…

可枚举和不和枚举属性

可枚举的属性通过Object.keys(target)以及for in/of获取,可枚举和不可枚举的都可以通过Object.getOwnPropertyNames(target)获取)

对象私有属性

juejin.cn/post/702106…

计时器不准怎么办

js 为什么是单线程

因为js会用于操作dom,这就决定了js只能是单线程,就比如两个线程的js对同一个dom进行操作,一个删除,一个修改,就会带来复杂的同步问题,避免这种复杂性,js就被设计成了单线程。


js运行环境

  1. EC(Exucution Context):执行上下文
  2. EC(G):全局执行上下文
  3. VO (Variable object):变量对象,当前上下文中,存放创建的变量和值的地方 (每一个执行上下文都会有一个自己的变量对象,函数私有的上下文叫做AO(ACTIVE OBJECT):活动变量对象)

打开一个网页后浏览器会开辟一块内存,用来供代码执行的=》(ECStack) 执行环境栈,同时浏览器会生产一个全局对象GO,浏览器把内置的一些方法放到单独的内存中,堆内存(heap)返回的16位内存地址给window

全局执行上下文,进入栈内存当中。


函数执行

开辟堆内存空间,将函数以字符串的形式存在内存空间中,返回内存地址给当前函数,方便下次寻找执行。

构造函数执行

形成私有的作用域(栈内存)形参赋值=》变量提升=》在js代码自上而下执行之前,当前栈内存中开辟一个堆内存,并且让函数的执行主体THIS指向这个堆内存。代码执行完毕之后,返回之前创建的内存地址(浏览器默认返回)。如果写了return,如果是基本值则依然是实例,如果返回的是引用值,则覆盖默认返回的实例。new Fnnew Fn()没有区别,同样都为创建实例。

hasOwnProperty : 检测私有属性

js变量提升

js执行顺序

垃圾回收机制

数组去重

v-for 如果数据改变 是如何进行对比

vue中循环数组对象不建议用index作为v-for的key

当我们修改了数据,数据的变动会触发订阅该数据变化的dom对象的更新,这个过程大致可分为三个阶段:

  1. 首选是会重新构建虚拟dom树
  2. 然后对比新旧虚拟dom树的节点,这里使用的就是大名鼎鼎的 differ 算法,也是这里要展开讲述的核心
  3. 根据对比结果,删除、添加、更新真实的dom节点。而非全部更新替换,这也就是虚拟dom的优势所在。

v-for v-if优先级在vue2、vue3区别

2.x 语法

2.x 版本中在一个元素上同时使用 v-ifv-for 时,v-for 会优先作用。

# 3.x 语法

3.x 版本中 v-if 总是优先于 v-for 生效

304状态码

301 redirect: 301 代表永久性转移(Permanently Moved)

302 redirect: 302 代表暂时性转移(Temporarily Moved )

304 Not Modified: 当协商缓存命中时会返回这个状态码(如果是强制缓存命中呢)

html,xhtml区别

  1. 用途不同 html用于显示数据,xhtml用于数据传输和存储
  2. XHTML 元素必须被关闭,非空标签必须使用结束标签:
  3. XHTML 元素必须小写:

juejin.cn/post/684490…

tcp,udp区别 断开连接了该怎么知道(心跳检测)

CP向上层提供面向连接的可靠服务 ,UDP向上层提供无连接不可靠服务。 虽然 UDP 并没有 TCP 传输来的准确,但是也能在很多实时性要求高的地方有所作为 对数据准确性要求高,速度可以相对较慢的,可以选用TCP

ajax同步和异步

juejin.cn/post/684490…

在mounted中this.xxx = xxx 这样的做法的好处是什么

xxx可以不是响应式的变量 同时又能在模板template中使用 适合一般不会改变的数据

css盒模型

浮动的元素怎么居中

css如何选择一个列表中的奇数行或者偶数行

li:nth-of-type(odd) {......} /*--这是奇数行--*/

li:nth-of-type(even) {......} /*--这是偶数行--*/

xss攻击

juejin.cn/post/684490…

排好序的数组如何打乱顺序

leetcode-cn.com/problems/sh…

浏览器请求的并发量

不同浏览器对并发限制也不尽相同:

http1.0和2.0

HTTP2.0和HTTP1.X相比的新特性

新的二进制格式(Binary Format) ,HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。

多路复用(MultiPlexing) ,即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。

header压缩,如上文中所言,对前面提到过HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。

服务端推送(server push) ,同SPDY一样,HTTP2.0也具有server push功能。

css如何选择带有某个属性的元素

CSS [attribute] 选择器,[attribute] 选择器用于选取带有指定属性的元素。

下例选择所有带有 target 属性的 元素;

a[target] {
  background-color: yellow;
}

计算属性缓存 vs 方法

v3.cn.vuejs.org/guide/compu…

composition API

juejin.cn/post/689054…

用reduce实现map方法

Array.prototype._map = function(callback){
  if(typeof callback === 'function') {
    return this.reduce((prev,item,index,arr) => {
      prev.push(callback(item,index,arr))
      return prev
    },[])
  } else {
    console.log(new Error('callback is not function'))
  }
}

TS比JS的优势

虚拟列表

juejin.cn/post/684490…

如果有一百个接口需要请求,如何在最短时间内请求完毕(同一时间内请求数量不能超过五个)

blog.csdn.net/weixin_4345…

typeof、instanceof的缺陷及解决办法

如何遍历对象中不可枚举属性

blog.csdn.net/weixin_3963…

如何判断是数组?

let arr = []

  1. arr isntanceof Array
  2. arr.proto === Array.prototype
  3. arr.constructor === Array
  4. Object.prototype.toString.call(arr) === '[object Array]'
  5. Array.isArray(arr)

其中方法1,2,3 主要是通过原型去判断的, 4是通过object类型的副属性class去判断的,其中函数的class是Function,结果是[object Function], 普通的对象是Object,结果是[object Object],5是es6新增的方法

如何实现a == 1 && a== 2

juejin.cn/post/707680…

在页面中渲染一万条数据的最优解

juejin.cn/post/684490…

如何防止重复发送请求?

juejin.cn/post/707214…

vue页面中某个表格中的数据修改了,怎么让数据局部刷新,不影响整体?

key

vuex刷新数据会初始化原理?怎么解决?

LS