- 博客(44)
- 资源 (1)
- 收藏
- 关注
原创 十二、MySQL 8 新特性底层原理
写入数据时,先向双写缓冲区快速地写入页数据,之后再慢慢写到磁盘的正确位置,避免了数据页在写入磁盘的时候出现问题导致缺页。在索引的B+树上的数据页上,每加一列,那么每一个数据行都要加一列,并且列还要挨个往后换位置。5.7中双写缓冲区是系统表空间的两个区(1区和2区),一共128个数据页,共2M。快速加列时一般给新列设置默认值,新的行数据用其他值。8 中底层索引的 B+ 树节点都是降序排列的。8 中将双写缓冲区放到了两个单独的文件中。5.7中底层的 B+ 树是升序的。不改变原有行数据的结构;
2025-06-09 14:11:08
476
原创 十一、MySQL 事务底层与高可用原理
delete不会直接将记录加入垃圾链表,而是设置为一个【中间状态 detele_mask = 1,但是未加入垃圾链表】,commit之后才加入垃圾链表;比如读已提交,如果直接加入垃圾链表,那么就读不到这个还没提交的删除记录;服务器不挂的时候,redo log没用,还会拉低性能,只有MySQL挂了的时候才有用。事务在commit之后,要将操作结果刷到磁盘,同时抹去redo log;被删除的记录会放入垃圾链表(page_free)的尾部;提交操作,是一个物理日志,不是逻辑日志。先删除旧记录,再插入新记录。
2025-06-09 13:51:14
935
原创 设计模式-3 行为型模式
在操作中定义业务逻辑的模板,将一些逻辑代码放到子类中实现。模板方法模式让子类在不改变业务逻辑结构的情况下重新定义业务的某些步骤。举例:就诊挂号、取号、排队、就诊。是一种基于继承的代码复用技术,是类行为模式。结构中只存在父类与子类之间的继承关系,主要作用是提高代码的复用性和扩展性。定义一系列算法,将每个算法封装起来,并且使它们可以相互替换。策略模式让算法可以独立于使用它的客户端而变化。举例:出行选择不同的交通工具。模型:审批流程。
2025-06-09 08:46:08
1118
原创 三、kafka消费的全流程
使用多线程访问一个,这个始终都能表现出正确的行为。不被运行的环境影响、多线程可以交替访问、不需要任何额外的同步和协同。
2025-06-03 20:57:34
1510
原创 RocketMQ 使用手册
下单后向队列中写入一条延时消息,消费者拿到消息后先判断是否已支付,已支付就忽略,没支付就取消。在一个消费者组内,多个消费者协同消费同一个topic中的消息,每个消费者负责一部分消息。为了提高发送消息的性能,可以将多条消息打包成一份批量发送,操作的位置在发送端。进行消息生产的时候,设置一些标签或属性,在消费时使用这些标签和属性实现过滤。消息的生产、消费在仅在一个消息队列内有序,可以有多个消息队列。在一个消费者群组内,每一条消息都被每一个消费者消费一遍。消息的生产、消费全局有序,只有一个消息队列。
2025-03-26 18:17:44
1582
原创 Java中的锁
AQS就是AbstractQueuedSynchronizer类,是JUC包下的一个基类。JUC包下的很多工具都是基于AQS实现了部分功能。比如ReentrantLock、ThreadPoolExecutor、BlockingQueue、CountDownLatch、Semaphore、CyClicBarrier等。AQS提供了一个由volatile修饰,并且使用CAS方式修改的int类型state变量。AQS中维护了一个双向链表,由head、tail,每个节点都是Node对象。AQS的核心属性。
2025-03-25 20:35:47
1091
原创 并发编程的三大特性
一个操作是不可分割、不可中断的,一个线程执行时,另一个线程不会影响到它。比较和替换,是一条CPU的并发原语。数据可见性问题出现在CPU级别。由于CPU执行速度非常快,所以对于CPU而言,每次操作数据都从内存中取出数据太慢了。所以CPU为了提高执行效率,在CPU的内部内存中设置了三级缓存,每次写数据都写到CPU内部的缓存中。但是随着CPU的内核数量增多,数据在CPU内部互相不可见,就导致临界资源操作混乱。CPU 的三级缓存// 无法读取flag的最新的值,进入无限循环。
2024-12-19 09:34:46
946
原创 分布式-事务
X/Open DTP定义的:事务协调者与数据库之间的接口规范(即接口函数),事务协调者用它通知数据库事务的开始、结束、提交、回滚等。XA接口函数由数据库厂商提供。类似于JDBC,大家都遵守这个规则。在2PC的执行逻辑中,如果服务A在执行的时候异常了,还需要事务协调者主持回滚,整体做了一次无用功,造成性能的浪费。3PC在此基础上做了一个优化,只有服务判断自己可以执行业务时才开始做业务逻辑,减少了出错的步骤。can commit:检查是否可执行,只有所有服务都返回yes才能开始做业务逻辑。
2024-11-12 07:50:46
906
原创 三、Kafka集群
高并发、高可用、动态扩展。主备数据架构、双活节点、灾备数据中心。如果是服务的地理范围过大也可以使不同的集群节点服务不同的区域,降低网络延迟。
2024-11-03 17:37:31
1881
2
原创 二、kafka生产与消费全流程
在上面的demo中,由于消息的key和value都是String类型的,就可以使用kafka.client提供的String序列化器,如果想要发送其他自定义类型的对象,可以手动编写一个序列化器和反序列化器,实现Serializer接口,将对象和byte数组互相转换即可。提交最后一次消费消息的偏移量,下一次消费就从上次提交的偏移量开始,如果一个新的消费者群组消费一个主题的消息,可以根据不同的配置来指定起始的偏移量。群组之间的消费是互不干扰的,比如群组A的消费者和群组B的消费者可以同时消费同一个分区的消息。
2024-09-26 18:00:52
2176
1
原创 一、Kafka入门
双十一秒杀、春节12306场景有流量洪峰,但是后端服务器短时间内无法处理大量请求,使用消息中间件可以缓存涌入进来的大量请求,后端服务慢慢消费这些请求,尽最大努力处理请求。在群组消费者群组场景下,每个分区的消息只能由一个消费者消费,但是一个消费者可以消费多个分区的消息。由于消费消息相对于生产消息很慢,可以增加分区去提高消费的并发度,从而平衡生产和消费的速度。进入kafka的bin目录,编写两个启动脚本,一个启动zookeeper,一个启动kafka。:比较依赖网络,网络的吞吐量对kafka集群的影响很大。
2024-09-24 16:51:03
1055
原创 分布式框架 - ZooKeeper
是一个分布式程序的协调服务,是Hadoop和Hbase的重要组件。提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
2024-09-20 10:18:40
2158
原创 九、Redis 的实际使用与Redis的设计
在线上系统中,一定不会单纯的只部署一个Redis集群,而是使用Redis结合其他的多级缓存应用进行架构。使用多级缓存架构的优点就是可以使不同类型的数据分布在不同的应用中,比如redis的热点key可以存储到nginx本地缓存、服务集群的本地缓存,进而分散单应用的服务压力。
2024-09-13 18:59:26
1071
原创 JavaSE 集合
调用空构造器时初始化 Object[] elementData 数组,长度为10;初始化 size 属性,值为0;当elementData 数组中的10个位置都有元素后,添加第11个元素时数组扩容;扩容长度为原数组的1.5倍;扩容逻辑是创建一个长度为 15 的数组,将旧数组的数据拷贝到新数组中。
2024-08-20 21:02:43
763
原创 JavaSE 反射
在java字节码文件(.class文件)中,存放了一个Class类的实例,通过这个实例,可以拿到字节码文件里面的信息:包括构造器、字段、方法等。
2024-08-20 09:29:33
314
原创 JavaSE 线程
如果未来的另一个线程调用了相同对象的notify()、notifyAll()方法,等待池中的线程就会被唤醒,可以重新进入锁池争抢该对象的锁;①、wait()和notify()方法,必须放在同步代码块/同步方法中才能生效(因为在同步的基础上进行线程的通信才是有效的)②、sleep()和wait()方法的区别是:sleep()不会放弃对锁的占有权,wait()会放弃对锁的占有权;-- 伴随线程:皇上 --> 驾崩 --> 妃子陪葬;-- 底层逻辑:相当于调度这个线程的时候,给他的时间是整块的,不是分片的;
2024-08-20 09:20:17
598
原创 七、Redis的高并发 & 高可用(集群)
由于Redis集群的性能消耗不低,难以维护,使用限制太多。所以一般情况下在生产环境单台Redis或者主从 + 哨兵可以应对数据缓存,就不会搭建Redis集群。原理都讲清楚了,接下来我们搭建一个Redis集群玩一玩吧。
2024-07-27 21:02:40
1856
原创 三、Redis高级特性和应用
RTT:往返时间,数据花在网络上的时间;将所有的指令组装成pipeline,减少RTT;节约网络开销做批量处理;都执行或者都不执行Redis的事务是弱事务不推荐使用Redis做事务只有语法错误的时候才会做回滚,非法操作不会做回滚本质是一个脚本语言,类似存储过程。
2024-07-22 17:50:06
1156
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅