自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 详解CountDownLatch底层源码

总结一下,CountDownLatch 本身就是通过 AQS 的 state 公共变量维护一个计数器。调用 await() 方法,就是把当前线程加入到阻塞队列,直到 state 变量为 0。调用 countdown() 方法,就是对 state 变量减一,如果减到0了,那么就唤醒阻塞队列的所有线程。它只能一次性使用,无法重置计数。如果需要多次使用 CountDownLatch,必须新建实例,不如 CyclicBarrier 可以复用。今天的分享就到这里了。关注我吧,我是此林,带你看不一样的世界!

2025-03-29 23:06:10 696

原创 Redisson 实现分布式锁源码浅析

发现锁已经被占有,返回剩余ttl(过期时间)。

2025-03-14 16:28:10 858

原创 从 JVM 源码(HotSpot)看 synchronized 原理

大家好,我是此林。不知道大家有没有这样一种感觉,网上对于一些 Java 框架和类的原理实现众说纷纭,看了总是不明白、不透彻。今天我们就从 HotSpot 源码级别去看 synchronized 的实现原理。全文以的模式来展开讲述,方便大家理解。

2025-03-03 17:08:28 1149

原创 浅析 Redis 分片集群 Cluster 原理、手动搭建、动态伸缩集群、故障转移

可以发现,分片集群有以下特征:1. 集群中有多个master,每个master保存不同数据2. 每个master都可以有多个slave节点3. master之间通过心跳机制监测彼此健康状态4. 客户端请求可以访问集群任意节点,最终都会被路由转发到正确节点可以发现,Cluster 集群里面没有了哨兵机制,而是不同 master 之间通过心跳机制互相检测彼此的健康状态,如果发现有 master 宕机,会和哨兵一样重新选 master ,进行故障转移。

2025-02-26 15:21:45 1116

原创 浅谈 Redis 主从复制原理(二)

大家好,我是此林。上一篇文章中,说到了 Redis 主从复制的全量同步和增量同步,repl_baklog 复制缓冲区,以及 slave 挂掉之后数据同步的措施。下面介绍的上一篇遗留问题,主节点 master 宕机了,怎么办?

2025-02-21 15:12:00 828

原创 浅谈 Redis 主从集群原理(一)

大家好,我是此林。在生产环境上,Redis 一般都不会单节点部署,是 Redis 集群部署的一种方案。下面是 Redis 主从集群的一种最简单的方式。

2025-02-21 15:05:18 700

原创 详解单例模式、模板方法及项目和源码应用

大家好,我是此林。设计模式为解决特定问题提供了标准化的方法。在项目中合理应用设计模式,可以避免重复解决相同类型的问题,使我们能够更加专注于具体的业务逻辑,减少重复劳动。设计模式在定义系统结构时通常考虑到未来的扩展。例如,工厂模式、策略模式等能让系统在增加新功能时无需改动现有代码,只需扩展新模块即可,减少了修改现有代码的风险。今天分享的是单例模式和模板模式,这两种设计模式在项目和源码中的使用。

2025-02-19 13:02:12 1080

原创 时间轮:XXL-JOB 高效、精准定时任务调度实现思路分析

大家好,我是此林。定时任务是我们项目中经常会遇到的一个场景。那么如果让我们手动来实现一个定时任务框架,我们会怎么做呢?

2025-01-29 17:12:08 934

原创 JWT身份认证详解

大家好,我是此林。尽管JWT是大家再熟悉不过的东西了,但是温故而知新,还是有必要详解下。

2025-01-10 15:22:15 567

原创 RocketMQ学习笔记

这里采用broker双主双从(同步模式),NameServer、Producer、Producer集群由于无状态性,搭建简单。RocketMQ默认的虚拟机内存较大,启动Broker如果因为内存不足失败,需要编辑如下两个配置文件,修改JVM内存大小。1. 先从rocketmq官网下载二进制包,ftp上传至linux服务器,unzip命令解压。负载均衡模式消费:多个消费者共同处理broker消息队列的消息。广播模式消费:每个消费者都会收到订阅的Topic的消息。服务器:192.168.183.132。

2024-12-31 21:19:36 702

原创 MYSQL慢查询日志(开启慢查询配置、explain执行计划SQL优化、各个字段详解、索引失效)

慢查询日志记录了所有执行时间超过了long_query_time的SQL语句。默认情况下MYSQL未开启慢查询日志。

2024-12-23 22:42:47 1118

原创 浅析InnoDB引擎架构(已完结)

大家好,我是此林。今天来介绍下InnoDB底层架构。

2024-12-19 21:59:42 1261

原创 SpringBoot 手动实现动态切换数据源 DynamicSource (中)

dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器。其支持。JPA用户不建议使用,JPA自带事务,无法连续切库。

2024-12-12 16:38:45 1733 1

原创 SpringBoot 手动实现动态切换数据源 DynamicSource (上)

大家好,我是此林。在实际开发中,经常可能遇到在一个SpringBoot Web应用中需要访问多个数据源的情况。下面来介绍一下多数据源的使用场景、底层原理和手动实现。

2024-12-11 10:34:19 1319 1

原创 ShardingSphere5:Mysql主从集群搭建、读写分离

大家好,我是此林。docker 国内镜像配置:2024年12月7日 实测有效。

2024-12-08 21:37:39 723

原创 Spring事务失效的场景(经典三个场景)

1. 编程式事务(代码不优雅但灵活)2. 注解式事务(不规范使用,可能会失效)

2024-12-07 22:32:47 456

原创 深入浅出学习ThreadLocal原理(ThreadLocal登录优化、底层源码、内存泄漏问题)、InheritableThreadLocal、TransmittableThreadLocal 解读

大家好,我是此林。今天我们来分享下ThreadLocal的底层原理。ThreadLocal 是Java中的一个类,主要用途是保证。即:每个线程都有自己独立的变量副本,多个线程之间互不影响。

2024-11-28 07:45:25 1237

原创 基于Redis实现原生的消息队列

虽然Redis 的Stream看似完美,但是它还有不足。1. 消息持久化依赖Redis持久化机制,知道Redis持久化的可以知道无法保证万无一失。2. 消息确认机制只支持消费者确认,不支持生产者确认。3. 不支持消息的事务机制4. 多消费者下的消息有序性问题。所以如果对于消息队列,有更严格的要求,建议使用专业的消息队列,比如RabbitMQ、RocketMQ、Kafka等。

2024-11-14 22:52:46 986

原创 一文看懂:JVM垃圾回收算法、CMS垃圾回收器、G1垃圾回收器

Hello,大家好,我是此林。今天我们来聊一聊 JVM 垃圾回收机制。在C/C++这类没有自动垃圾回收机制的语言中,一个对象如果不再使用,需要手动释放,否则就会出现内存泄漏。内存泄漏指的是不再使用的对象在系统中未被回收,内存泄漏的积累可能会导致内存溢出。手动回收的方式相对来说回收比较及时,删除代码执行之后对象就被回收了,可以快速释放内存。缺点是对程序员要求比较高,很容易出现创建完对象之后,程序员忘记释放对象。

2024-11-06 23:06:30 1537

原创 JVM Java虚拟机学习笔记

当一个类加载器去加载某个类的时候,会自底向上查找是否加载过,如果加载过就直接返回,如果一直到最顶层的类加载器都没有加载,再由顶向下进行加载。

2024-11-01 22:58:47 1374

原创 深入浅出:SpringBoot启动流程源码分析 (包含Spring IOC容器创建、自动配置时机、内置tomcat启动原理)

的值,这个值是一个全类名数组,这些类实现了 ApplicationContextInitializer 接口,用于在 ApplicationContext 初始化之前进行一些自定义的初始化操作。的值,这个值也是一个全类名数组,这些类实现了 ApplicationListener 接口,用于监听 Spring 应用上下文中的事件。它们也是需要自动装配的类。今天来深入底层讲一讲SpringBoot是如何启动的,也就是我们单击运行SpringBoot启动类,它底层发生了什么?Hello,大家好,我是此林。

2024-10-29 12:08:04 1043

原创 SpringBoot自动配置原理:底层源码分析

而SpringBoot 则使用默认的配置帮我们自动装配类,减少了大量繁琐重复的细节,这也就是为什么SpringBoot “约定大于配置”的原因了。mybatis-spring-boot-starter 和 pagehelper-spring-boot-starter,并且在yml文件里手动配置了Bean,而这几个配置类是默认没有的。这使得自动配置类的加载时机在手动配置类被解析之后、Bean 定义被加载之前。这样做的目的是优先解析手动配置类,因为有时候我们可能并不想使用默认的自动配置类,所以手动配置重写。

2024-10-26 22:56:06 1167

原创 进阶版:深入浅出 Spring AOP底层原理分析(附自定义注解案例)(二)更新已完结

以上就是Spring AOP源码第一部分的内容,总结一下,AnnotationAwareAspectJAutoProxyCreator这个类负责扫描你的项目,找到所有带有 @Aspect 注解的类,根据目标对象是否实现了接口选择用JDK Proxy还是CGLIB生成代理对象。3. 检查 earlyProxyReferences 中是否已经存在该 bean 的早期引用,如果存在且不等于当前 bean,则调用 wrapIfNecessary 方法来包装 bean,然后返回代理后的Bean。

2024-10-24 22:11:55 1451

原创 小白版:深入浅出 Spring AOP底层原理分析(附自定义注解案例)

Spring 的通知类型包括:@Before前置通知,@After后置通知,@AfterReturning返回通知, @Around环绕通知,@AfterThrowing异常通知。可以看出,Spring AOP 的底层实现非常优雅,依赖于动态代理和责任链模式,使用代理类拦截方法调用,再通过 ReflectiveMethodInvocation 来管理增强逻辑的执行顺序。JDK 动态代理是基于接口的,它会创建一个实现目标接口的代理类,所有方法调用都会委托给代理类的 invoke 方法。

2024-10-22 22:52:55 1130 1

空空如也

空空如也

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

TA关注的人

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