- 博客(12)
- 收藏
- 关注
原创 MySQL中
MVCC是一种并发控制机制,用于多个并发事务读写数据库时保持数据的一致性和隔离性。通过在每个数据行上维护多个版本的数据来实现。当一个事务对数据库的数据进行修改时,MVCC会为该事务创建一个数据快照,而不是直接修改实际的数据行。MVCC在MySQL中实现依赖的手段是:隐藏字段、read view、undo log隐藏字段、read view:用来判断当前版本数据的可见性undo log: 记录某行数据的多个版本的数据有记录锁、间隙锁、临键锁记录锁Record Lock:单个行记录上的锁。
2024-05-14 15:42:16 680 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 693 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 885
原创 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 32
原创 Spring框架(基础篇)AOP篇
面向切面编程。封装多个类的公共行为,讲与业务无关却被共同调用的逻辑封装起来,减少系统重复代码,降低模块间的耦合度。同时解决一些系统层面的问题,例如日志、事务、权限等。
2023-12-20 10:59:06 20 1
原创 RPC框架(一) API接口
API接口的内容主要有两个,一个是HelloService,其作用是给客户端和服务端提供接口,客户端通过调用HelloService的方式,调用到远程的HelloServiceImpl里面的方法。服务端通过此接口复写该接口的方法。通过lombok不用写构造函数和set、get方法。
2023-12-13 17:25:40 51
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人