前言
关于TCP连接的三次握手和断开的四次挥手,现在已经是三刷了。之前在学习过程中不是非常理解,只是知道了这个过程,但是由于往往解释有些官方或抽象,记不住也不理解。现在在理解后准备将自己的理解发表一下,希望能帮到有相同境遇的人。
TCP的连接
偏官方的描述
- 客户端(Client)向服务端(Server)发送一个SYN报文,序号(
)为随机数 - 服务端收到后,向客户端发送SYN+ACK的应答报文,
,同时发送一个随机序号 - 客户端收到后再向服务端发送Ack报文,
该笔记为学习javaweb时一些小细节的记录,主要为ssm相关内容
学习链接:
https://www.bilibili.com/video/BV1m84y1w7Tb
由于此次复习目的为应对保研面试专业面部分,所以不会涉及计算内容
如何将自己的文件分享给其他人?
把该文件放在自己的服务器当中,其他人去对应网址下载软件。
音乐软件缓存歌曲,小说网站下载小说,应用官网下载软件
不是全都从服务器下载,而是从已下载的人手中获取相对应的文件。
再优化方案,可以每个人都只下载某一部分文件,然后互相交换获取各自所需要的部分。(即p2p)
制作一个种子文件,记录文件信息、分块大小,以及tracker服务器信息(用于获取谁有下载过该文件)。
摆脱了服务器的限制。
让每个人都成为tracker服务器。在寻找“谁有下载过该文件”的信息时,会先进入到一个DHT网络,然后在这个网络里寻找tracker。(类似树上DFS)
迅雷
将使用者限制在一个小圈子中,强制每个人只有上传了资源才能进行下载。上传数据量和下载数据量实现对等。
给定一串字符串,求其中有多少长度>=3子串,且该子串中某个字符只出现一次。
最终答案的求取可以通过遍历以i位置为所要求的只出现一次的字符所对应的子串数量来求取。
然后显然我们不可能直接对于每个字符c,都暴力的去找左边有多少个相邻的连续的连续的字符与c不同,以及右边有多少个相邻的连续的连续的字符与c不同。于是,我们需要通过预处理,来记录每个字符左右两边分别有多少个相邻的、连续的、与此字符不同的字符,最终的答案也可以理解为左边挑
由于还有一个限制是长度>=3,所以对某一边没有符合要求的字符时,需要另一边减去只取一个字符的情况,即:
DFS,即深度优先搜索,经常用于暴力以及图上遍历等。相比于bfs,dfs是纵向的搜索,是一次性找到底的。从根找到底,然后退回来换条路继续走到底,直到走完。
DFS可以理解为是递归+回溯。对于一棵DFS树,其搜索的方式是从根结点开始,沿着一条边一直走到底,层层递归,每次进入一个子节点就可以理解为一个新的以此子节点为根的DFS树,称之为递归。当访问到叶子结点时,又需要将叶子结点的信息返回并总结到该叶子节点的父亲节点,称之为回溯。
DFS大部分分为树上DFS与图上DFS,但其实两者是相通的,图上DFS可以将上下左右四个方向的遍历结果转化为该位置的四个儿子结点,此时还需要一个vis数组用来记录该儿子结点是否在别的分支出现过,尽管从一个点到另一个点会有多条路径,但如果不是要求最短路径的情况下,往往只需要记录一次即可。