自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(64)
  • 收藏
  • 关注

原创 CompletableFuture 的统一异常处理及超时处理

项目中需要调用多个服务,如果使用 open-Feign 串行化调用,响应时间可能会比较长,后续使用了 CompletableFuture 和线程池进行异步调用,但是在调用时,可能存在调用的服务报错,导致整个查询方法直接抛出异常,无法继续后面的操作,抽象了工具类 AsyncUtil 集中处理调用信息和异常信息,可以看到即使调用服务发生了异常,也能继续执行,发生异常后记录了报错信息且返回给前端状态信息。现在我想捕获调用时的异常,且不影响后续的执行。正常情况下执行也没有问题。

2025-03-17 21:11:38 218

原创 Redis 底层数据结构源码剖析

Redis底层数据结构源码分析

2025-03-16 19:51:24 711

原创 为什么不在 ForkJoinPool 中使用虚拟线程?

为什么不在ForkJoinPool中使用虚拟线程?

2025-01-20 11:18:37 358

原创 【需求变更】使用 Redis 和 Lua 脚本实现变更后方案编号的生成

使用 Redis 和 Lua 实现项目中特定方案编号的生成。

2024-11-06 21:49:33 506

原创 【BUG】声明式事务失效导致日志记录失败

项目中有关事务 bug 的发现和处理过程。

2024-10-18 13:03:50 1240

原创 SPI机制详解【JDK vs Dubbo 】

JDK和Dubbo中SPI的区别和分析

2024-07-17 09:25:29 921

原创 【Linux】解决由于 network和 NetworkManager不兼容,导致的网络服务错误

解决由于network和NetworkManager 服务不兼容问题导致的网络服务错误。例如无法获取ip,无法连接网络等。

2024-06-11 16:35:56 4080

原创 ReentrantLock底层原理

ReentrantLock的底层实现原理

2024-06-10 21:49:07 569

原创 AQS实现原理

AQS的实现原理

2024-06-10 21:48:17 394

原创 【设计模式】设计模式的分类

设计模式的分类主要有创建型、行为型和结构型

2024-05-21 10:47:30 353

原创 【Spring5.x】解决在注入时scope属性失效

解决Spring在注入时scope属性失效的问题。

2024-05-13 09:05:32 269

原创 fastjson的漏洞分析和解决方案

fastjson的漏洞分析和解决方案

2024-05-12 21:38:50 714

原创 AOP底层实现原理

JDK和Cglib的底层实现,及Spring底层对AOP的实现。

2024-05-09 10:29:50 363

原创 Maven常见的打包指令——package、install、deploy的区别

Maven中常用的打包命令有三种,package、install和deploy。

2024-05-06 15:04:55 1051

原创 【MySQL】常用的MySQL工具

常用的mysql工具,包含mysqlbinlog,mysqlimport/source,mysqldump等

2024-04-24 10:46:55 279 2

原创 【MySQL】InnoDB存储引擎实现事务的原理及MVCC-实现原理

InnoDB存储引擎实现事务的原理和MVCC的实现原理详解。

2024-04-23 21:28:44 1021 5

原创 【MySQL】SQL优化

MySQL的优化,例如插入优化,主键优化,order by优化,group by优化,limit优化,count优化等。

2024-04-22 21:15:59 2420 8

原创 【MySQL】InnoDB与MyISAM存储引擎的区别与选择

MySQL中的存储引擎,如InnoDB和MyISAM,以及存储引擎的区别与选择

2024-04-22 13:07:19 442

原创 Java中的反射机制详解

Java中的反射机制详解

2024-04-18 16:31:22 753

原创 cpu中常见的寄存器

常见的包含累加寄存器、标志寄存器、程序计数器、基址寄存器、变址寄存器、通用寄存器、指令寄存器、栈寄存器等

2024-04-16 19:01:27 480

原创 CAP定理和BASE定理

CAP定理,一致性、可用性、分区容错性。BASE定理,基本可用、软状态、最终一致性。

2024-04-12 21:22:29 349

原创 Zookeeper的集群搭建和ZAB协议详解

Zookeeper的集群搭建和ZAB协议详解,包括Zookeeper集群中的Leader节点的选举,崩溃恢复及数据的主从同步。

2024-04-12 19:07:59 2328

原创 Zookeeper实现分布式锁的分析和理解

Zookeeper实现分布式锁,读写锁的获取,羊群效应,和Watch机制的理解。

2024-04-12 13:38:09 706

原创 Zookeeper中的节点类型和实现持久化的两种方式

Zookeeper内部的数据模型,节点类型和实现数据持久化的两种方式

2024-04-12 13:33:11 672

原创 Redis实现持久化和集群的搭建

Redis实现持久化的几种方式及Redis集群的搭建

2024-04-11 20:35:45 533

原创 项目中使用消息队列改进——基于RabbitMQ

项目中使用 RabbitMQ 实现消息队列

2024-04-09 21:28:31 555

原创 Redis分布式锁的实现和分析

Redis实现分布式锁的解决方案和存在的问题分析。

2024-04-08 17:18:09 1026

原创 JUC并发编程——对CAS的理解和分析

CAS(CompareAndSet 或 CompareAndSwap)又称 无锁,乐观锁,实现方式是非阻塞同步。CAS指令有三个操作数,分别是内存位置(在Java中可以简单地理解为变量的内存地址,用V表示)、旧的预期值(用A表示)和准备设置的新值(用B表示)。CAS指令执行时,当且仅当V符合A时,处理器才会用B更新V的值,否则它就不执行更新。但是,不管是否更新了V的值,都会返回V的旧值,上述的处理过程是一个操作,执行期间不会被其他线程中断。CAS指令的底层是原子操作,保证了原子性,解决了指令交错问题。

2024-04-02 16:53:03 365

原创 JUC并发编程—— 对volatile的理解及DCL的解决方法

volatile 的底层实现原理是加入 volatile 关键字后,写指令(被 volatile 修饰的变量在对此变量修改时)会加入写屏障,读指令(被 volatile 修饰的变量在对此变量读取时)会加入读屏障。

2024-04-01 19:55:35 332

原创 JUC并发编程——wait / notify原理

Monitor 中有三个部分:Owner,EntrySet 和 WaitSet。Owner 是拥有锁的线程地址,EntrySet 是其他线程想要获取锁的列表,WaitSet 是拥有锁的线程一些条件未满足调用 wait() 方法,进入的WaitSet列表,并且释放锁。在 EntryList 中的线程状态是 BLOCKED,在 WaitSet 中的线程状态是 WAITING。都不占用 CPU 时间片。

2024-03-31 20:42:33 519

原创 JUC并发编程——对于synchronized关键字的理解

两个线程对初始值为 0 的静态变量一个做自增,一个做自减,各做 5000 次,最后输出的counter一定为0 吗?

2024-03-30 14:33:36 976

原创 JUC并发编程——常用方法

异常,但是查询t1的打断状态缺失,显示未打断,说明 sleep 时线程被 interrupt 后,清除了 interrupt 的状态。打断 sleep,wait,join 的线程,这几个方法都会让线程进入阻塞状态。注意 interrupt() 和 isInterrupted() 方法的区别。可以看到t1 sleep 一秒后已经被打断了,且抛出了。打断 sleep 的线程, 会清空打断状态。:等待线程运行结束,最多等待 n 毫秒。打断正常运行的线程,不会清除打断状态。未调用 join 方法。

2024-03-28 18:54:13 344

原创 JVM(六)——内存模型与高效并发

【java 内存模型】是 Java Memory Model(JMM)简单的说,JMM 定义了一套在多线程读写共享数据时(成员变量、数组)时,对数据的可见性、有序性、和原子性的规则和保障。

2024-03-27 22:26:16 1194

原创 JVM(五)——类加载阶段

在自定义类加载器时,使用不同的类加载器对象获取的类不是相同的。Class<?Class<?// 都是 classLoader1 对象// trueClass<?// 创建了 classLoader2// false。

2024-03-27 15:28:13 820

原创 JVM(四)——编译期的处理

如果匿名内部类中引用了外部的变量,那么在通过匿名内部类创建额外的类时,会把引用的变量当作本类的成员变量,且在原类中(使用了匿名内部类),向匿名内部类中传递的变量必须是 final 的。擦除的是字节码上的泛型信息,可以看到 LocalVariableTypeTable 仍然保留了方法参数泛型的信息。和转换的一些代码,主要是为了减轻程序员的负担。创建一个类后,如果没有构造器,编译器会自动为我们添加无参的构造器,且调用父类的无参构造方法。枚举类中的成员,实际上是 枚举类中的实例对象且个数是一定的。

2024-03-26 21:03:12 880

原创 JVM(三)——字节码技术

一个简单的 HelloWorld.java执行根据 JVM 规范,类文件结构如下。

2024-03-26 18:58:30 878

原创 JVM(二)——垃圾回收

在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。但是存在循环引用的问题。

2024-03-25 21:32:59 1205

原创 JVM(一)——内存结构

Java Virtual Machine - java 程序的运行环境(java 二进制字节码的运行环境)

2024-03-25 08:33:13 2369

原创 Redis中的缓存雪崩

是指在同一时段大量的缓存key同时失效或者缓存服务(Redis等)宕机,导致大量请求到达数据库,带来巨大压力。

2024-03-22 22:33:27 454

原创 Redis中的缓存击穿

也叫热点key问题,就是一个被并且的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大压力。

2024-03-22 22:17:40 673

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除