- 博客(14)
- 收藏
- 关注
原创 Kafka篇
还有按照大小log.retention.bytes来删除的,比如设置所有日志最大为8T,此时满了,就会把最早的给删除了。压缩:log.cleanup.policy=compact。压缩方法:对于相同的key,不同的value,保留最新的value。
2024-07-17 16:47:08
387
原创 Netty
没有的话操作系统会去检查自己的DNS缓存(hosts文件),如果也没有,就会去查找本地DNS服务器(浏览器配置的公共DNS服务),通过DNS协议查询(涉及到网络传输,几乎是采用UDP,查询过程通过发送接受DNS数据包实现,数据包依然会通过网络中的路由器、交换机转发),本地也没有,就迭代查询,根域名->顶级域名->权威域名。(网卡有MAC地址,交换机没有,只管转发)如果没有接受方MAC地址,就除了源端口,全部都转发,接收到响应包后,就将它的MAC地址和端口写入。处理任务的时候,可以执行异步任务和定时任务。
2024-07-12 11:39:31
856
原创 MySQL中
MVCC是一种并发控制机制,用于多个并发事务读写数据库时保持数据的一致性和隔离性。通过在每个数据行上维护多个版本的数据来实现。当一个事务对数据库的数据进行修改时,MVCC会为该事务创建一个数据快照,而不是直接修改实际的数据行。MVCC在MySQL中实现依赖的手段是:隐藏字段、read view、undo log隐藏字段、read view:用来判断当前版本数据的可见性undo log: 记录某行数据的多个版本的数据有记录锁、间隙锁、临键锁记录锁Record Lock:单个行记录上的锁。
2024-05-14 15:42:16
684
1
原创 redis深度
redis的实现方式其实就是占坑,一般使用setnx(set if not exists)指令,只允许一个客户端占坑。如果del前有异常,导致del无法调用,就会使得锁得不到释放,就会死锁。所以考虑给锁加时间,例如加5s,哪怕有异常,5s后也释放set和expire不是原子操作,可能执行expire前出问题了,还是会死锁。而且这里不能使用事务来解决,例如线程A先用锁,线程B进来要锁,如果是事务,线程B没抢到锁,是不应该执行expire操作的。为解决这个问题,redis2.8之后加入了set指令扩展。
2024-03-10 12:19:01
697
1
原创 JUC并发编程(深入)
java线程是通过start的方法启动执行的,主要内容在native方法start0中,openjdk的写JNI一般是一一对应的,Thread.java 就对应Thread.c,start0就是JVM_StartThread。在openjdk源码中jvm.h对这个对应关系进行了声明,代码如下,在jvm.cpp中才实现。在jvm.cpp中传入本地native线程,在thread.cpp中 实现了Thread::start方法。在thread.cpp中,最终通过操作系统来启动一个线程。
2024-01-25 18:58:08
887
原创 Spring框架(扩展篇)
Converter能将S类型的对象转换为T类型的对象,比如将String类型的对象转换为Integer类型的对象的实现类:使用: 二、ConverterFactoryConverter<S,T>接口适合一对一的类型转换,如果要将String类型转换为Ineger/Long/Float/Double/Decimal等类型,就要实现一系列的StringToInteger/StringToLongConverter/StringToFloatConverter转换器,非常不优雅。Converter
2023-12-25 09:24:54
33
原创 Spring框架(基础篇)AOP篇
面向切面编程。封装多个类的公共行为,讲与业务无关却被共同调用的逻辑封装起来,减少系统重复代码,降低模块间的耦合度。同时解决一些系统层面的问题,例如日志、事务、权限等。
2023-12-20 10:59:06
21
1
原创 RPC框架(一) API接口
API接口的内容主要有两个,一个是HelloService,其作用是给客户端和服务端提供接口,客户端通过调用HelloService的方式,调用到远程的HelloServiceImpl里面的方法。服务端通过此接口复写该接口的方法。通过lombok不用写构造函数和set、get方法。
2023-12-13 17:25:40
59
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人