- 博客(12)
- 收藏
- 关注
原创 TCP为什么是三次握手而不能两次握手?
3 防止旧连接(主要原因),客户端如果在短时间内发送了两次SYN请求,但是实际上只希望开一个tcp连接,那么就可以通过第三次握手的序列号来明确自己要开启的是哪个连接(对第二次握手响应),而又需要废弃掉哪个连接(不对第二次握手响应)2 同步序列号,一个SYN-ACK负责同步一次序列号,第一次握手和第二次握手能够使服务端同步客户端,第二次握手和第三次握手能够使客户端同步服务端。
2024-08-24 15:55:08
105
原创 一个数据包是如何从发送端送至接收端
首先明确什么是数据包在http2.0之后 ,一个完整请求所对应的所有数据叫做数据流,但是在实际发送过程中,一个数据流可能会比较大,无法一次性发送完,因此会将一个数据流分成多个数据包发送。数据包从开始发送到发送结束要经过什么呢?总的来说可以分为以下几个阶段。
2024-08-10 18:52:54
494
原创 HTTPS的安全协议-SSL/TLS
1 接受被公钥加密的第三个随机数 用私钥解密 并且加上密码套件进行加密生产会话密钥2 加密算法开始通知的发送 表明后续开始加密通信了3 服务端握手结束 同时把上面做的请求与回应做个摘要 发送给客户端检验值得一提的是数字证书这块:数字证书是由第三方机构CA(数字证书认证机构),服务器将自己的公钥在CA注册,CA会用自己的私钥给公钥进行数字签名并且颁发数字证书。而客户端拿到数字证书之后,使用事先置入在浏览器or操作系统的CA的公钥来确认数字证书的真实性并且取出公钥,用于对第三个随机数加密。
2024-07-31 22:12:28
310
原创 mysql对order by 的实现
首先,根据解释查询计划,在mysql里对order by的排序可以大致分为两种(explain的extra字段标明),一种是using index,一种是using filesort。
2024-04-01 19:32:07
186
原创 InnoDB引擎的查询过程
在mysql种。一条查询语句的流程如下首先判断是否击中查询缓存,是:走查询缓存对应数据;否:走b+树,看数据页的位置;判断数据页是否在buffer pool中:是:返回数据页数据;否:去数据库磁盘查找数据;查找完数据:LRU算法。
2024-03-31 15:40:45
560
1
原创 进程,线程,协程
进程是系统进行资源分配和调度的一个独立单位,是系统运行程序的基本单位,由于进程之间的创建切换销毁开销都比较大,因此人们创建了一种轻量级的进程,即线程,线程被设计为进程的一个执行路径,线程是CPU调度的基本单位,同一进程内的线程会共享进程的堆和方法区资源,因此在线程切换的成本上要远低于进程。可以将线程成为轻量级的进程。线程共享进程的堆和方法区,但是实际上也有自己的私有资源,即程序计数器,虚拟机栈和本地方法栈。程序计数器主要是用来记录现在读到哪个指令了,方便自身的运行以及线程切换。
2024-03-27 22:02:49
202
原创 spring三级缓存以及为什么不用二级缓存
因此采用三级缓存,在这个过程中如果B需要A注入,而A存在代理的话,那么就会生成一个早期的代理对象给B,用于解决循环依赖,而最终的代理对象还是要在beanA完成了属性填充和初始化后再继续进行,这两个生成的代理对象是存在区别的,因此也不算真正破坏到Spring代理在Bean初始化完成后的原则,因为Spring仍然确保了最终的代理对象是在Bean完全初始化后才生成的。3:B的初始化完成了,A继续属性赋值,顺利从⼀级缓存拿到实例化且初始化完成的B对象,A对象创建也完成,删除⼆级缓存中的A,同时把A放⼊⼀级缓存。
2024-03-27 15:31:47
976
原创 反射的优点和缺点
反射的本质是JVM得到了class对象之后,对class对象进行反编译从而获取到对象的各类信息,当然,这里的反编译并不是真的反编译,因为class对象本身就包含了所有的类信息,不需要反编译,这里是指运行时,通过class对象去动态地获取类相关地信息。反射犹豫需要动态加载类,获取类的各类信息,安全检查等额外开销,并且相对于直接调用中编译器做了很多的优化,反射是没有的,因此导致反射的性能不如直接调用。2、反射的代码可读性下降。我们在运行的时候不必明确指定具体的类,可以让我们在程序运行时再确定,比如动态代理。
2024-03-25 22:22:59
435
1
原创 为什么重写equals就要重写hashcode
但是由于A和B的hashcode计算方式不同(我们没有重写hashcode),那么hashset在计算B的hashcode来放置B时,会发现位置是空的(因此我们向例如hashset这种结构里面存入了A,而A.equals(B)==true的时候,我们希望向hashset里面存入的B是会重复的。这是因为我们在用hash结构去存储数据的时候,是用hashcode去计算这个数据的位置,而不是数据本身的值。),会将B也放进去,导致一个hashset里面出现两个数值重复的值。
2024-03-25 19:22:36
223
原创 redis的底层数据结构
redis性能高的原因很大程度上是由于它的每一种数据结构都经过专门设计来应对不同场景,redis的数据结构本质上可以分为两层,对外暴露的数据结构以及内部底层的数据结构。
2024-03-25 17:18:14
1434
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人