1.防抖和节流的实现
防抖:在多次频繁触发后,延时器以他不断延时,只是在最后一次事件后才触发函数
function debounce(fn) {
let timeout = null; //创建一个标记用来存放定时器的返回值
return function () {
clearTimeout(timeout); // 每次用户输入的时候把前一个 setTimeout clear掉
timeout = setTimeout(() => { // 然后创建一个新的setTimeout,保证如果在interval内持续触发,就不会执行fn函数
fn.apply(this, argument)
}, 500)
}
}
节流: 不管多频繁都会在规定的时间内一定会执行一次真正的事件处理函数
function throttle() {
let canRun = true; //通过一个闭包保存一个标记
return function() {
if(!canRun) return;
canRun = false;
setTimeout(() => {
//settimeout执行完毕之后在把canRun设置为true,表示可以进行下一次循环
fn.apply(this, arguments)
}, 500)
}
}
2.数字证书,公钥和私钥这三者之间的关系:
2.1 非对称密码学原理: 每个证书持有人都有一对公钥和私钥,这两把秘钥可以互为加解密;
2.2 对称加密: 加密和解密的秘钥使用的是同一个;
对称加密算法: 密钥较短,破译困难,除了数据加密标准(DES),另一个对称密钥加密系统是国际数据加密算法(IDEA),它比DES的加密性好,且对计算机性能要求也没有那么高.
优点:
算法公开、计算量小、加密速度快、加密效率高
缺点:
在数据传送前,发送方和接收方必须商定好秘钥,然后 使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。
常见的对称加密算法有: DES、3DES、Blowfish、IDEA、RC4、RC5、RC6 和 AES
非对称加密算法: 公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。
优点:
安全
缺点:
速度较慢
常见的非对称加密算法有: RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)
2.3 SSL由两个共同工作的协议组成: SSL握手协议和SSL记录协议
a.HTTPS工作在443端口,而HTTP默认工作在80端口
b. SSL记录协议:它建立在可靠的传输(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能。
c. SSL握手协议:它建立在SSL记录协议之上,用于在实际的数据传输开始之前,通讯双方进行身份认证、协商加密算法、交换加密密钥等(包含两个阶段,第一个阶段用于建立私密性通信信道, 第二阶段用于客户认证)。
d. SSL建立需要四层连接
SSL建立第一阶段:
客户端首先发送ClientHello消息到服务端,服务端收到ClientHello消息后,再发送ServerHello消息回应客户端。
SSL建立第二阶段:
服务器向客户端发送消息。
SSL建立第三阶段:
客户端收到服务器发送的一系列消息并解析后,将本端相应的消息发送给服务器。
SSL建立第四阶段:
完成握手协议,建立SSL连接。