- 博客(54)
- 收藏
- 关注
原创 【MySQL】常用的MySQL工具
常用的mysql工具,包含mysqlbinlog,mysqlimport/source,mysqldump等
2024-04-24 10:46:55 127 2
原创 【MySQL】SQL优化
MySQL的优化,例如插入优化,主键优化,order by优化,group by优化,limit优化,count优化等。
2024-04-22 21:15:59 1579 9
原创 Zookeeper的集群搭建和ZAB协议详解
Zookeeper的集群搭建和ZAB协议详解,包括Zookeeper集群中的Leader节点的选举,崩溃恢复及数据的主从同步。
2024-04-12 19:07:59 1373
原创 JUC并发编程——对CAS的理解和分析
CAS(CompareAndSet 或 CompareAndSwap)又称 无锁,乐观锁,实现方式是非阻塞同步。CAS指令有三个操作数,分别是内存位置(在Java中可以简单地理解为变量的内存地址,用V表示)、旧的预期值(用A表示)和准备设置的新值(用B表示)。CAS指令执行时,当且仅当V符合A时,处理器才会用B更新V的值,否则它就不执行更新。但是,不管是否更新了V的值,都会返回V的旧值,上述的处理过程是一个操作,执行期间不会被其他线程中断。CAS指令的底层是原子操作,保证了原子性,解决了指令交错问题。
2024-04-02 16:53:03 314
原创 JUC并发编程—— 对volatile的理解及DCL的解决方法
volatile 的底层实现原理是加入 volatile 关键字后,写指令(被 volatile 修饰的变量在对此变量修改时)会加入写屏障,读指令(被 volatile 修饰的变量在对此变量读取时)会加入读屏障。
2024-04-01 19:55:35 278
原创 JUC并发编程——wait / notify原理
Monitor 中有三个部分:Owner,EntrySet 和 WaitSet。Owner 是拥有锁的线程地址,EntrySet 是其他线程想要获取锁的列表,WaitSet 是拥有锁的线程一些条件未满足调用 wait() 方法,进入的WaitSet列表,并且释放锁。在 EntryList 中的线程状态是 BLOCKED,在 WaitSet 中的线程状态是 WAITING。都不占用 CPU 时间片。
2024-03-31 20:42:33 420
原创 JUC并发编程——对于synchronized关键字的理解
两个线程对初始值为 0 的静态变量一个做自增,一个做自减,各做 5000 次,最后输出的counter一定为0 吗?
2024-03-30 14:33:36 903
原创 JUC并发编程——常用方法
异常,但是查询t1的打断状态缺失,显示未打断,说明 sleep 时线程被 interrupt 后,清除了 interrupt 的状态。打断 sleep,wait,join 的线程,这几个方法都会让线程进入阻塞状态。注意 interrupt() 和 isInterrupted() 方法的区别。可以看到t1 sleep 一秒后已经被打断了,且抛出了。打断 sleep 的线程, 会清空打断状态。:等待线程运行结束,最多等待 n 毫秒。打断正常运行的线程,不会清除打断状态。未调用 join 方法。
2024-03-28 18:54:13 304
原创 JVM(六)——内存模型与高效并发
【java 内存模型】是 Java Memory Model(JMM)简单的说,JMM 定义了一套在多线程读写共享数据时(成员变量、数组)时,对数据的可见性、有序性、和原子性的规则和保障。
2024-03-27 22:26:16 1122
原创 JVM(五)——类加载阶段
在自定义类加载器时,使用不同的类加载器对象获取的类不是相同的。Class<?Class<?// 都是 classLoader1 对象// trueClass<?// 创建了 classLoader2// false。
2024-03-27 15:28:13 700
原创 JVM(四)——编译期的处理
如果匿名内部类中引用了外部的变量,那么在通过匿名内部类创建额外的类时,会把引用的变量当作本类的成员变量,且在原类中(使用了匿名内部类),向匿名内部类中传递的变量必须是 final 的。擦除的是字节码上的泛型信息,可以看到 LocalVariableTypeTable 仍然保留了方法参数泛型的信息。和转换的一些代码,主要是为了减轻程序员的负担。创建一个类后,如果没有构造器,编译器会自动为我们添加无参的构造器,且调用父类的无参构造方法。枚举类中的成员,实际上是 枚举类中的实例对象且个数是一定的。
2024-03-26 21:03:12 840
原创 JVM(二)——垃圾回收
在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。但是存在循环引用的问题。
2024-03-25 21:32:59 1106
原创 elasticsearch和mysql数据库的数据同步问题(一)
elasticsearch中的数据来自mysql数据库,因此mysql数据发生改变时,elasticsearch也必须跟着改变,这就是elasticsearch与mysql之间的数据同步。
2024-03-20 22:14:46 479
原创 elasticsearch和mysql数据库的数据同步问题(二)
对 insert, update, delete 请求发送消息。使用 RabbitMq 异步通知的方式,解决数据同步问题。
2024-03-20 22:12:52 537
原创 负载均衡的原理
前情 : 启动了两个 UserService 客户端和一个 OrderService 客户端,且都已经注册到 Eureka 中。服务消费者OrderService,使用注册中心的名字代替 ip 和端口,设置。
2024-03-16 09:53:45 677
原创 【Linux】学习指令前的必要知识
TAT:进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R- 正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等。系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上。ps 命令 是用来查看目前系统中,有哪些正在执行,以及他们执行的状况。这是另一个给主机额外安装软件所安装的目录。VSZ:进程占用的虚拟机内存大小(单位:KB)RSS:进程占用的物理内存大小(单位:KB。:显示后台进程运行的参数。
2024-03-09 17:57:02 828
原创 连接假死和心跳监测
例如: 客户端连接正常,用户只是停顿了一会儿,但是服务器没有接收到客户端的数据,认为是连接假死。客户端向服务器发送数据的时间间隔,小于服务器定义的空闲检测的时间间隔,就能防止服务器的误判。服务器端定时向客户端发送数据,如果客户端没有发送数据,就可以判定为连接假死。为了避免服务器的误判,在客户端中需要定时向服务器发送数据。方法触发特殊事件,以此进行监测。添加 Netty 中的。可以监测读或写事件。
2024-03-05 13:29:43 454
原创 通过Selector组件监控多个Channel事件
在非阻塞模式下,单个线程一直运行,一直占用CPU资源。通过创建selector,管理多个 channel。
2024-01-06 21:08:19 307
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人