10.18

115 阅读7分钟

1.前端前沿技术

Rust、Web Assembly 或者是 Kotlin

2.js基本数据类型

3.map set区别

Set:

  • 成员唯一、无序且不重复。
  • [value, value],键值与键名是一致的(或者说只有键值,没有键名)。
  • 可以遍历,方法有:add、delete、has。

WeakSet:

  • 成员都是对象。
  • 成员都是弱引用,可以被垃圾回收机制回收,可以用来保存DOM节点,不容易造成内存泄漏。
  • 不能遍历,方法有add、delete、has。

Map:

  • 本质上是键值对的集合,类似集合。
  • 可以遍历,方法很多可以跟各种数据格式转换。

WeakMap:

  • 只接受对象作为键名(null除外),不接受其他类型的值作为键名。
  • 键名是弱引用,键值可以是任意的,键名所指向的对象可以被垃圾回收,此时键名是无效的。
  • 不能遍历,方法有get、set、has、delete。

4.es6 generate函数

5.generate ,promise,async await区别

6.闭包应用场景,以及函数柯里化是怎么实现

1)通过循环给页面上多个dom节点绑定事件。==>可以用let代替

2)防抖节流

防抖:

高频率触发的事件,在指定的单位时间内,只响应最后一次,如果在指定的时间在触发,则重新计算时间(后面触发的事件执行,替代了前面的事件)

节流:

高频率触发的事件,在指定的单位时间内,只响应第一次(前面触发的执行前,忽略后面的事件)

3)函数柯里化

是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

柯里化:把接收多个参数的函数变换成接收一个单一参数的函数(单一参数为多个参数中的第一个)

函数柯里化思想:一个JS预处理的思想,降低通用性,提高适用性。

function curryingAdd(x) {
    return function (y) {
        return x + y
    }
}
curryingAdd(1)(2)//3

特点:

参数复用 需要输入多个参数,最终只需输入一个,其余通过arguments来获取 提前返回 避免重复去判断某一条件是否符合,不符合则return 不再继续执行下面的操作 延迟执行 避免重复的去执行程序,等真正需要结果的时候再执行

7.事件循环

JS是单线程的,也就是说它只有一个主线程,主线程执行完执行栈的任务后去检查异步的任务队列,如果异步事件触发,就将其加到主线程的执行栈。

事件循环流程

  1. 执行宏任务队列中第一个任务,执行完后移除它
  2. 执行所有的微任务,执行完后移除它们
  3. 执行下一轮宏任务(重复步骤2)

宏任务 > 所有微任务 > 宏任务 如此循环就形成了event loop,其中,每轮执行 一个宏任务 和所有的微任务

主线程从"任务队列"中读取事件,不断循环的过程,就形成了Event Loop(事件循环)

8.定时器延时零秒,实际上延时多少秒

HTML5标准规定

setTimeout的最短时间间隔是4毫秒;

setInterval的最短间隔时间是10毫秒, 也就是说,小于10毫秒的时间间隔会被调整到10毫秒

这和浏览器及操作系统有关

9.深拷贝需要考虑哪些情况,正则和date如何处理的

深浅拷贝区别和实现方法

浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。

深拷贝会另外创造一个一模一样的对象,新对象跟元对象不共享内存,修改新对象不会改变原对象。

如何实现深拷贝?

JSON.parse(JSON.stringify(obj))

deepclone

if(typeof arr[item]==="object"){obj[item]=deepClone(arr[item]); }

else{obj[item]=arr[item];

通过JSON.parse( )JSON.stringify( ) JSON.parse(JSON.stringify(obj))

以递归方式使用for in 方法来实现深拷贝

第三方库lodash的_.cloneDeep方法

如何实现浅拷贝

通过Object.assign( ) 简单实现

.通过 for in方法

通过 扩展运算符 ... 方法

10.快速排序、冒泡排序

1.冒泡排序

冒泡排序的原理是对临近的两个数字进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或者最小的数字就被交换到了最后一位了。然后再从头开始进行这种比较和交换,一直到完成排序。 2.快速排序

找基准点、把比基准点小的数放到它的左边,大的放在右边、递归下去即可

11.tcp三次握手

1)客户端向服务端发送连接请求报文段,

2)服务端收到连接请求报文段后,同意连接发送应答,

3)客户端收到连接同意的应答,向服务端发送一个确认报文段,表示:服务端发来的连接同意应答已经成功收到。

建立tcp过程,三次握手

过程:

一、域名解析   一般我们访问的url都是域名,例如:www.baidu.com,需要将其解析为服务器IP才能进行访问。搜索浏览器自身的DNS缓存;搜索操作系统自身的DNS缓存;读取hosts文件;如果以上都没有查找到要访问的url,就向DNS服务器发起一个DNS解析请求; 二、建立连接:TCP三次握手建立连接。

三、发起HTTP请求 四、服务器响应请求返回结果 五、浏览器得到HTML标签 六、浏览器解析HTML中的js/css等资源 七、浏览器对页面进行渲染 八、断开连接   四次挥手断开连接。

why3次握手?

客户端向服务器发送请求报文(sequence),告诉服务器,想要建立连接;** 服务器听到连接请求报文后,如果同意建立连接,则向客户端发送确认(发送确认acknowledge和sequence); 客户端接收到之后,发送确认(向服务器发送确认acknowledge);   此时,客户端与服务器确认可以互相传送消息。**

三次是保证双方互相明确对方能收能发的最低值。当客户端收到连接同意的应答后,还要向服务端发送一个确认报文段,表示服务端发来的连接同意应答已经成功收到。

为什么连接建立需要三次握手,而不是两次握手? 防止失效的连接请求报文段被服务端接收,从而产生错误。

why4次挥手 ?

TCP连接是全双工通信的,而断开时双方都需要确定两个问题:自己是否还有数据要发送,对端是否还有数据要发送,而四次挥手正好在双方同步了这两个问题。

第一次挥手:client告诉server自己的数据已全部发送,client可以回收发送缓冲区,server可以回收接收缓冲区 第二次挥手:server告诉client自己收到了关闭信息 第三次挥手:server告诉client自己的数据已全部发送,server可以回收发送缓冲区,client可以回收接收缓冲区 第四次挥手:client告诉server自己收到了关闭信息 可以发现,四次挥手同样一次都不能少,如果少了其中任何一次,总有一方不能可靠的通知对方自己的数据已发送完毕,因此,连接不可能可靠的断开,TCP也就成了不可靠的协议。

一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成

请求行分为三个部分:请求方法、请求地址和协议版本

HTTP响应报文主要由状态行、响应头部、空行以及响应数据组成。

状态行由3部分组成,分别为:协议版本,状态码,状态码描述。

12.vue数据双向绑定原理

Vue数据双向绑定原理是通过数据劫持结合“发布者-订阅者”模式的方式来实现的,首先是对数据进行监听,然后当监听的属性发生变化时则告诉订阅者是否要更新,若更新就会执行对应的更新函数从而更新视图。

13.1像素问题

为什么不同设备下一个像素表现的不同?

中后台 单页面 vue-cli vue-router 局部更新

前台 多页面 SEO 提供网站曝光率,访问量 服务端渲染

nust .js

Bejson