- 博客(19)
- 收藏
- 关注
原创 什么是聚集索引和非聚集索引?
简单来说,聚集索引就是基于主键创建的索引,除了主键索引以外的其他索引,称为非聚集索引,也叫做二级索引。由于在InnoDB引擎里面,一张表的数据对应的物理文件本身就是按照B+树来组织的一种索引结构,而聚集索引就是按照每张表的主键来构建一颗B+树,然后叶子节点里面存储了这个表的每一行数据记录。所以基于InnoDB这样的特性,聚集索引并不仅仅是一种索引类型,还代表着一种数据的存储方式。同时也意味着每个表里面必须要有一个主键,如果没有主键,InnoDB会默认选择或者添加一个隐藏列作为主键索引来存储这个表的数
2024-10-24 19:05:12
233
原创 ”wait”和“notify”为什么要在Synchronized代码块里面?
wait和notify用来实现多线程之间的协调,wait表示让线程进入到阻塞状态,notify表示让阻塞的线程唤醒。
2024-09-05 08:59:00
793
原创 分布式事务的实现方式之XA协议
XA协议是一种基于两阶段提交(Two-Phase Commit)的分布式事务协议,用于实现跨多个资源管理器(如数据库、消息队列等)的分布式事务一致性。
2024-09-02 18:37:57
592
原创 深度解读并发安全集合的原理及源码
本节主要介绍J.U.C包中的几种并发安全集合:ConcurrentHashMap,ConcurrentLinkedQueue,和ConcurrentLinkedDeque。所谓并发安全集合,相对于普通集合来说,能够保证在多线程环境下向集合中添加数据时的线程安全性。主要讲ConcurrentHashMap在实现线程安全性方面对性能和安全性的合理平衡。
2024-09-01 09:27:40
2560
原创 深度剖析阻塞队列的设计原理及实现
队列是一种基本的数据结构,它是一个只允许在一端进行移除操作,在另一边进行插入操作的线性表,允许插入的一端叫队尾,允许移除的一端成为队头。其实阻塞队列在队列的基础上增加了两个操作。支持阻塞插入:在队列满的情况下,会阻塞继续往队列中添加数据的线程,直到队列中有元素被释放。支持阻塞移除:在队列为空的情况下,会阻塞从队列中获取元素的线程,直到队列中添加了新的元素。
2024-08-31 10:49:59
1055
原创 J.U.C并发工具集实战及原理分析
在J.U.C里提供了很多的并发控制工具类,这些工具类可以使得线程按照业务的某种约束来执行。本节包含CountDownLatch、Semaphore、CyclicBarrier等工具类。目的是了解他们基本使用、原理及实际应用。
2024-08-31 10:46:58
853
原创 并发安全性之Lock锁及原理分析
ReentrantReadWriteLock锁有一个问题,如果当前有现成在调用get()方法,那么所有调用add()方法的线程必须等待调用get()方法的线程释放锁之后才能写,也就是说在读的过程中不允许写。而如果get的方法的线程比较多时,会导致写线程一直类阻塞。为解决ReentrantReadWriteLock中的这个潜在的问题,在java8中引入了StampedLock机制,即优化了读写锁的访问,简单的说就是提供了一种乐观锁策略,当有现成调用get方法读取数据时,不会阻塞准备执行写操作的线程。
2024-08-29 12:42:44
1128
原创 Java线程的实践及原理揭秘
由于单个程序无法让CPU和I/O设备始终处于忙碌状态,所以操作系统允许同时加载多个程序到内存,也就是说可以同时启动多个进程,系统给这些进程分配独立的地址空间,以保证每个进程的地址不会相互干扰。即横向增加服务器,利用多个计算机组成分布式计算机,当然,整个系统的复杂性增加,比如涉及服务治理,服务监控,服务的高可用。线程是操作系统能够运算和调度的最小单元,一个进程可以创建多个线程,每个线程可以并行执行多个任务,并行执行的线程的数量是由CPU的核心数量来决定的。硬件的组成CPU,网卡,带宽,磁盘,内存。
2024-08-27 08:59:07
957
原创 MybatisPlusGenerator自定义模板生成文件
本文章按照MybatisPlusGenerator规范,并自定义模版生成对应的Controller,IService,ServiceImpl,Entity,Mapper,Mapper.xml。
2024-08-27 08:50:29
1377
Eclipse 工作流 activiti-designer离线安装包
2024-08-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人