基础
基础算法,http,hash算法
加密算法
对称加密
-
k 对数据加密,同时也可以使用key进行解密
- // 对数据data加密得到数据y
- // 对数据y进行解密得到数据data
非对称加密
-
私钥加密,公钥解密
-
公钥加密,私钥解密
HTTP
TCP链接 的几种状态
三次握手
客户端与服务端三次握手从解决
网络信道不可靠的问题,同时保证服务端与客户端链接的一致性
sequenceDiagram
title: 三次握手
Note over client: init状态
Note over server: Listen状态
Note left of client: 发起第一次握手请求
client ->> server: 发起SYN数据包
Note over client: syn-send状态
Note right of server: 第一次握手成功
server ->> client: 发送 SYN+ACK包 确认建立
Note over server: syn-rcvd状态
Note left of client: 第二次握手成功
client ->> server : ACK数据包
Note right of server: 第三次握手成功
Note over client,server: 握手成功进行 established 状态
为什么是三次握手不是两次握手?SYN+ACK 发送完成后就建立链接?
数据传输
创建发送缓存区
发送报文: 序列号+长度+数据内容
回复确认: ACK=序列号+长度 = 下一包的起始序列号
四次挥手
sequenceDiagram
title: 四次挥手
note over client,server: 链接确信状态
client ->> server: FIN指令
note over client: 第一次挥手
server ->> client: ACK指令
note over server: 第二次挥手
note over client,server: 此时通道进入即将关闭状态,<br/>不再接收新的请求将未处理完的请求处理完成
server -->> client: 未完成的请求持续发送
server -->> client: 未完成的请求持续发送
server ->> client: FIN指令
note over server: 第三次挥手
client ->> server: ACK指令
note over client: 第四次挥手
note over server: 断开链接
note over client: 进入等待超时状态
note over client: 断开链接
Http缓存
缓存状态码:
304: 未修改,自从上次请求之后,请求的网页未修改过,但是请求者应继续使用原有的位置来进行以后的请求。
301: 官方示意永久性移动,表示请求的网页永久移动到了新的位置
强制缓存
Cache-control: max-age: 1000
Cache-control: no-cache
协商缓存
- 浏览器发起请求
- 服务器返回协商标识
- 浏览器记录协商标识
- 再次发起请求,协带协商标识
- 服务端验证协商标识,
- 如果没有发生变化则返回304,
- 否则返回200 并返回响应体
1. Modify-cache
If-Modified-Since : Tue, 28 Sep 2021 08:18:21 GMT
Last-Modified: Tue, 28 Sep 2021 08:18:21 GMT
sequenceDiagram
title: 协商缓存
client->>server: 发起资源请求
Note over server: Last-Modified: Tue, 28 Sep 2021 08:18:21 GMT
server ->> client: 响应资源请求
Note left of server: responseHeader
Note over client: 缓存Modified信息
Note over client,server: 协带Modified协商标识再次发起请求
loop 再次发起请求
client -->> server: 发起资源请求
Note over client,server: 判断Last-Modified与If-Modified-Since是否一致?
rect rgba(255, 0, 255, 0.1)
alt 一致
server -->> client: 响应304状态码
Note over client: 从浏览器获取缓存信息
else 不一致
server -->> client: 响应200状态码
Note over server: 服务端返回响应数据
end
end
end
2. Etag-cache
- If-None-Match: "6152cfcd-13dff"
- ETag: W/"6152cfcd-13dff"
flowchart LR;
subgraph client [浏览器]
i1-->f1
f1-->f2
end
subgraph server [服务端]
i3-->f3
end
client --> server
A[Hard edge] -->|Link text| B(Round edge)
B --> C{Decision}
C -->|One| D[Result one]
C -->|Two| E[Result two]
算法及数据结构
抽象数据类型定义的三要素
- 类型名称
- 数据对象集
- 操作集
排序算法
- 冒泡排序
- 插入排序
- 希尔排序
- 先进行5间隔的排序,3间隔排序,间隔数不应该有相同的最大公约数 1,3,5,7,13
- 选择排序
- 堆排序
线性表
什么是队列?
队列:具有一定操作约束的线性表
- 插入和删除操作:只能在一端插入,而在别一端删除
- 循环线性表:首尾相链,size = n-1 ,
单向链表队列?
队首:front
队尾:rear
flowchart LR
A(A,队首) --> B(B)
B(B) --> C(C)
C(C) --> D(D,队尾)
Hash算法
有限的空间内对数据进行存放,Hash碰撞后的处理方式
什么是栈
栈的特性:选进后出
处理具有相关关系的数据,如javascript 函数执行也是使用栈的结构,进行先进后出处理
什么是推
放在一起且有优先级的数据,使用《完全二叉树》进行描述
从上到下,按照一定顺序排列(从上到下,从大到小)
graph TB;
10((10))
9((9))
8((8))
7((7))
6((6))
5((5))
4((4))
10 --- 8;
10 --- 9;
9 --- 7;
9 --- 6;
8 --- 5;
8 --- 4;
110{{这就是一个堆及它的应用}}