UDP协议
UDP协议报文结构 只有源端口,目标端口,长度,奇偶检验值,非常精简。 特点 TCP和UDP比较面向连接——无连接 可靠——不可靠 有序——可能无序 速度慢——速度快 重量级——轻量级(体现在报头大小)
TCP的滑动窗口
TCP的滑动窗口RTT和RTO RTT:发送一个数据包到收到对应的ACK,所花费的时间 RTO:重传时间间隔(RetransmitTimeOut),TCP在发送一个数据包后会启动一个重传定时器,即RTO,如果超时没收到ACK就重传。 RTO不是固定写死的数据,而是根据RTT算出来的。 TCP使用滑动窗口做流量控制与乱序重排滑动窗口的作用: 保证TCP的可靠性 提供TCP的流控特性 流量控制:TCP报文头中的Window字段用于接收方通知发送方自己还有多少缓冲区可以接收数据。发送方根据接收方的处理能力来发送数据。不会导致接收方处理不过来 窗口数据的计算过程: 左图是TCP协议的发送方的缓冲区,右图是接收端端缓冲区,下面是字节流,从左往右发送/接收 AdvertisedWindow:接收方返回的还可以接收的缓冲区大小 MaxRcvBuffer:接收方能接收的最大数据量 LastByteRcvd - LastByteRead:已占用的缓存空间 EffectiveWindow:发送方剩余可发送大小 LastByteSent -...
HTTP
...
HTTPS
HTTPSHTTPS简介 SSL(Security Sockets Layer,安全套接层) 为网络通信提供安全及数据完整性的一种安全协议。 是操作系统对外的API,SSL3.0后更名为TLS。 采用身份验证和数据加密保证网络通信的安全和数据的完整性。 HTTPS数据传输流程 浏览器将支持的加密算法信息发送给服务器 服务端把自己的信息以数字证书的形式返回给客户端(证书内容有密钥公钥,网站地址,证书颁发机构,失效日期等)。 证书中有一个公钥来加密信息,私钥由服务器持有。证书中包含发布证书的CA机构,证书的有效期,公钥,证书的所有者,签名等 验证证书的合法性 客户端收到服务器的响应后会先验证证书的合法性(证书中包含的地址与正在访问的地址是否一致,证书是否过期)。 生成随机密码(RSA签名) 如果验证通过,或用户接受了不受信任的证书,浏览器就会生成一个随机的对称密钥(session...
Socket相关
Socket Socket通信流程 Socket相关面试题 TCPLengthCalculator类123456789101112131415161718192021222324252627282930313233public class LengthCalculator extends Thread { //以socket为成员变量 private Socket socket; public LengthCalculator(Socket socket) { this.socket = socket; } @Override public void run() { try { //获取socket的输出流 OutputStream os = socket.getOutputStream(); //获取socket的输入流 InputStream is =...
volatile
Volatilevolatile有三个作用: volatile变量读写时会增加内存屏障 volatile变量读写时会禁用局部指令重排 保证对volatile的操作happens-before另一个操作 读屏障,就是在读取volatile变量之前增加一条将变量内容从内存读入CPU缓存的指令;写屏障就是在volatile变量写入之后,将变量的值从CPU缓存写入内存。 指令重排是一种CPU策略,通过交换指令执行的顺序获得最佳性能。
红黑树
红黑树红黑树,Red-Black Tree 「RBT」是一个自平衡(不是绝对的平衡)的二叉查找树(BST),树上的每个节点都遵循下面的规则: 每个节点都有红色或黑色 树的根始终是黑色的 (黑土地孕育黑树根, ) 没有两个相邻的红色节点(红色节点不能有红色父节点或红色子节点,并没有说不能出现连续的黑色节点) 从节点(包括根)到其任何后代NULL节点(叶子结点下方挂的两个空节点,并且认为他们是黑色的)的每条路径都具有相同数量的黑色节点 2-3树一颗2-3树或为一颗空树,或有以下节点组成: 2-节点,含有一个元素和两个子树(左右子树),左子树所有元素的值均小于它父节点,右子树所有元素的值均大于它父节点; 3-节点,还有两个元素和三个子树(左中右子树),左子树所有元素的值均小于它父节点,中子树所有元素的值都位于父节点两个元素之间,右子树所有元素的值均大于它父节点; 子树也是空树、2-节点或者3-节点; 没有元素相等的节点。 插入时像叶节点插入,如果节点有三个值(变成了4-节点)就拆分,并向上合并
为什么用B+数
为什么使用B+树B+树的优势: 1.单一节点存储更多的元素,使得查询的IO次数更少。 2.所有查询都要查找到叶子节点,查询性能稳定。 3.所有叶子节点形成有序链表,便于范围查询。 B树缺点:1. 索引存值,然而数据库内容和索引分开存储的2. 索引存值,每次查找都要访问数据库,效率低3....
AQS
AQSAQS是Java的一个同步器开发框架,解决的一个最核心问题,就是将高端用户人群和真正意义的底层隔离(JVM的机制和底层的JNI)。一种同步器往往不能解决所有问题,用户经常需要自己实现同步器,这个时候,如果没有AQS,用户就会去用底层的JVM或者映射到JNI的API(例如:LockSupport.park、CAS、Unsafe等等),这种情况会让Java编程变得非常复杂。因此Java提供了AQS,让需要实现同步器的用户在一个同步器框架上编程。 比如下面的程序,就可以让用户轻松的实现一个Mutex(互斥锁)数据结构: 1234567891011121314151617public class Mutex { private final Sync sync = new Sync(); static class Sync extends AbstractQueuedSynchronizer{ protected boolean tryAcquire(int arg) { return...
static关键字
Static关键字