1.四次挥手

(1)TCP连接终止过程使用“四次挥手”,主动关闭的一方和被动关闭的一方会经历不同的状态序列。

主动关闭方(Active Closer)的状态流程:

应用层调用close()后,发送FIN段给对方。

进入 FIN_WAIT_1 状态:等待对方的ACK确认。

收到对方对FIN的ACK后,进入 FIN_WAIT_2 状态:等待对方发送自己的FIN段。

收到对方发来的FIN段后,发送ACK进行确认,进入 TIME_WAIT 状态。

经过2MSL(最长报文段寿命)的时间后,最终进入 CLOSED 状态。

(2)被动关闭方(Passive Closer)的状态流程:

收到主动方发来的FIN段后,立即回复ACK确认。

进入 CLOSE_WAIT 状态:等待本地的应用层调用close()来关闭连接。

应用层调用close()后,发送FIN段给主动方。

进入 LAST_ACK 状态:等待主动方对最后一个FIN的ACK确认。

收到ACK后,进入 CLOSED 状态。

2.二叉树

二叉树的公式
总结点数n=n0+n1+n2;
n0=n2+1
比如有个二叉树,总共三个节点,根节点1个(度为2,n2),叶子节点2个(度为0,,0)
所以叶子结点的个数n0=n2+1,即2=1+1.
并且二叉树总的节点数=总边数+1

3.对于关键字序列,二叉排序树的路径

二叉排序树(BST):
二叉排序树(Binary Sort Tree)或者是一颗空树;或者是具有如下性质的二叉树:
(1) 若它的左子树不空,则 左子树 上所有结点的值 均小于 它的根结点的值;

(2) 若它的右子树不空,则 右子树 上所有结点的值 均大于 它的根结点的值;

(3) 它的 左、右子树又分别为二叉排序树 。
这就是一颗二叉排序树(排序说明这个树具有排序的特点)

假设有1个无序序列:8,3,10,1,6,14,4,7,13
经过排序之后,变成1,3,4,6,7,8,10,13, 14

二叉树的详细操作(比如插入,删除)可以参考:二叉树的增删改查

3.根据关键字序列构造大根堆或小根堆

博客参考:
(1)堆的数据结构具有以下特点:完全二叉树、堆中存储的值是偏序
1)小根堆:父节点的值小于等于子节点的值。
2)大根堆:父节点的值大于等于子节点的值。
(2)堆的存储:用数组来表示堆,i结点的父结点下标就为(i–1)/2。它的左右子结点下标分别为2 * i + 1和2 * i + 2。如第0个结点左右子结点下标分别为1和2。
在这里插入图片描述
(3)堆的插入
插入一个元素:新元素被加入到heap的末尾,然后更新树以恢复堆的次序。每次插入都是将新数据放在数组最后。可以发现从这个新数据的父结点到根结点必然为一个有序的数列,现在的任务是将这个新数据插入到这个有序数据中——这就类似于直接插入排序中将一个数据并入到有序区间中。
在这里插入图片描述
(4)堆的删除:删除节点先置于最后一个叶子结点的位置。(两者互换顺序)。
按定义,堆中每次都删除第0个数据。为了便于重建堆,实际的操作是将最后一个数据的值赋给根结点,然后再从根结点开始进行一次从上向下的调整。调整时先在左右儿子结点中找最大的,如果父结点比这个最小的子结点还大说明不需要调整了,反之将父结点和它交换后再考虑后面的结点。相当于从根结点将一个数据的“下沉”过程。
在这里插入图片描述
(5)建堆
对于叶子节点,不用调整次序,根据满二叉树的性质,叶子节点比内部节点的个数多1.所以i=n/2 -1 ,不用从n开始。
在这里插入图片描述

(6)堆排序
堆排序:堆建好之后堆中第0个数据是堆中最大的数据。取出这个数据再执行下堆的删除操作。这样堆中第0个数据又是堆中最大的数据,重复上述步骤直至堆中只有一个数据时就直接取出这个数据。

4.HTTP和HTTPS

HTTPS的端口号是443
HTTP的端口号是80

5.最长公共子序列

最长公共子序列 LCS是一个经典的动态规划

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐