自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

许苑向上

一个努力学习代码向上的人

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

原创 【全网Spring核心后置处理器:ConfigurationClassPostProcessor 最详细解析】

是一个BeanFactory后置处理器,它实现了接口(同时继承了接口)。其主要功能是参与BeanFactory中BeanDefinition的操作和属性值修改,专门用于解析各种配置注解。ConfigurationClassPostProcessor是Spring框架注解驱动编程的核心组件,它负责处理各种配置注解,并注册相应的Bean定义。更好地理解Spring容器的启动过程:明确配置类是如何被识别和处理的编写更高效的配置类:根据需求选择Lite模式或Full模式避免常见的配置陷阱。

2025-08-22 17:43:03 974

原创 【一篇文章快速讲清楚:BeanFactoryPostProcessor和BeanPostProcessor的区别和联系】

的作用是在 Spring 容器加载了所有 Bean 的定义()之后,但在创建 Bean 实例(即)之前,对 Bean 的定义信息进行修改或干预。为了更直观地理解它的定位和工作时机,可以通过下面的流程图来看它在整个Spring容器启动过程中的关键位置:fill:#333;color:#333;color:#333;fill:none;Spring容器启动加载配置文件/注解解析为BeanDefinition执行所有BeanFactoryPostProcessor修改BeanDefinition。

2025-08-22 17:37:35 525

原创 【BeanDefinitionRegistryPostProcessor 和 BeanFactoryPostProcessor 详细解答】

实际上是的一个特殊化和功能更强的子接口。在 Spring 的 IoC 容器中,Bean 的定义(BeanDefinition) 与 Bean 的实例化 是两个阶段。而 BeanFactoryPostProcessor 和 BeanDefinitionRegistryPostProcessor 正是介入这两个阶段的重要扩展点,开发者可以通过它们对 Spring 的 Bean 定义或 BeanFactory 进行定制化。是“征兵官”,负责招募新士兵(注册新的BeanDefinition)。是“训练官”

2025-08-22 17:24:07 564

原创 【一篇文章快速讲清楚:BeanDefinition和BeanDefinitionRegistry】

区别:它们是截然不同的概念。是数据,而是存储和管理数据的容器。联系是 BeanDefinition的持有者和管理者。没有Registry,BeanDefinition就无处存放;而没有BeanDefinition,Registry就是一个空壳。常见实现最最重要的实现类是 DefaultListableBeanFactory,它是Spring核心中的核心。的常用实现类是等。简单来说,BeanDefinitionRegistry是舞台,是台上的演员,Spring容器()则是导演,它协调整个演出过程。

2025-08-22 13:06:44 560

原创 【元空间(Metaspace)和方法区(Method Area)关系】

方法区 就像是“仓库管理部门”的职责规定(规定要管好库存、记录、档案)。永久代 是旧经理,他在公司总部(JVM内存)划了一块固定大小的区域(PermGen) 来存放档案。元空间 是新上任的经理,他改革了方案,直接把档案室搬到了公司外面一个几乎无限大的仓库(本地内存)里,并且管理方式更智能。所以,当你被问到“元空间和方法区有什么区别”时,可以这样回答:“方法区是JVM规范中定义的一块逻辑区域,用于存储类信息、常量等数据。而元空间是HotSpot虚拟机在JDK 8之后对方法区规范的具体实现。

2025-08-21 12:04:08 931

原创 【如何高效排查Java应用报错日志?快速定位问题的系统性方法】

如何高效排查Java应用报错日志?快速定位问题的系统性方法

2025-08-21 09:39:12 744

原创 AQS(AbstractQueuedSynchronizer)底层源码实现与设计思想

AQS是Java中一个抽象同步器框架,利用一个int类型的状态变量表示同步状态,并通过一个基于FIFO的双向队列来管理因获取同步状态失败而等待的线程。AQS为我们封装了复杂的线程排队和唤醒逻辑,子类只需关注如何修改同步状态,实现自定义同步器。核心点说明state变量用于表示同步资源状态,CAS操作保证原子性FIFO等待队列基于双向链表,维护线程的公平等待和唤醒顺序独占与共享模式支持多种同步策略,扩展性强模板方法设计子类实现具体同步逻辑,AQS负责线程排队和阻塞管理高效的线程挂起与唤醒机制。

2025-08-10 19:22:59 937

原创 【继承之向上转型、向下转型与动态绑定的实践与深入讲解】

在Java面向对象编程中,继承、向上转型、向下转型以及动态绑定是极为重要的核心概念。它们共同构建了多态机制的基石,帮助我们编写灵活、可扩展且易维护的代码。本文将通过示例代码,结合理论,带你系统理解这几个概念的关系与应用。

2025-08-10 14:45:37 395

原创 【Spring IoC 核心实现类详解:DefaultListableBeanFactory】

核心类职责:保存 BeanDefinition、注册 BeanDefinition、创建 Bean、依赖注入、生命周期管理关系只是更高级的外观模式,底层真正管理 Bean 的还是。

2025-08-10 14:29:43 749

原创 【Spring Boot刷新上下文核心流程详解】

在使用 Spring Boot 启动应用时,控制台会打印出一大串日志,其中最核心的启动动作之一就是刷新上下文(refresh)。refresh方法不仅负责 Bean 的创建与初始化,还涉及监听器、国际化、多环境配置等多个模块,是 Spring Boot 启动的核心环节。本文将结合源码,带你从入口到细节剖析刷新上下文的全过程。refresh()就像 Spring Boot 启动的总指挥,控制了从配置准备 → BeanFactory 构建 → Bean 创建 → 事件发布的全流程。

2025-08-10 12:40:00 939

原创 【Spring Boot启动流程底层源码详解】

这个流程确保了Spring Boot应用的完整启动,从注解解析到Bean创建再到应用就绪,每个步骤都有明确的职责和执行时机。执行所有的ApplicationRunner和CommandLineRunner。3、new SpringApplication()对象。5、SpringApplicationshi实例。2、继续调用静态方法。

2025-08-09 00:54:17 1330

原创 深入理解 ReentrantLock和AQS底层源码

特性说明可中断使用可响应中断,避免死锁可超时使用限时获取锁可重入同一线程可以多次获取同一把锁,不会死锁支持公平锁构造函数传入true实现公平加锁条件变量支持可使用实现类似的线程通信机制特性可重入✅✅响应中断❌✅可超时❌✅公平/非公平选择❌✅ 可选条件变量一个支持多个Condition性能较低,受限于 JVM 实现高,适合复杂并发逻辑。

2025-08-07 23:16:41 594

原创 ConcurrentHashMap源码详解

是Java集合框架中提供的线程安全的哈希表实现,与Hashtable和不同,它采用了更细粒度的锁机制,实现了更高的并发性能。的put方法展现了Java并发编程的精妙设计,通过CAS、volatile和细粒度锁的组合,实现了高并发下的线程安全与性能平衡。理解其实现原理,有助于我们编写更高效、更可靠的并发代码。

2025-08-04 20:13:31 793

原创 Seata实战

TM开启全局事务并生成 XID。RM注册分支事务并绑定 XID。TM发起全局提交或回滚请求。TC决定并协调所有分支的最终执行。RM根据指令完成资源的提交或回滚。

2025-08-03 16:53:37 962

原创 RocketMQ入门实战详解

RocketMQ 是一个成熟的分布式消息中间件,适合构建高性能、解耦、可靠的消息系统。通过本文的实战入门,相信你已经能掌握基础使用方式,并可以在实际项目中灵活落地。顺序消息延时消息事务消息多 Broker 集群部署消息追踪与监控。

2025-07-28 18:12:54 324

原创 Spring Boot 自动装配底层源码实现详解

本文深入源码,完整剖析 Spring Boot 自动装配背后的实现逻辑,适合有一定基础的开发者查漏补缺、面试复习。

2025-07-25 12:28:57 907

原创 《高并发优化方案一》:本地锁 + 分布式锁实战详解

本地锁 + 分布式锁是一种性能与安全兼顾的高并发控制策略。正确的锁粒度、锁对象复用和生命周期管理,是该策略能否成功落地的关键。多级锁是构建高可用电商/交易系统的基础能力之一。

2025-07-21 20:54:06 852

原创 分布式缓存击穿以及本地击穿解决方案

缓存的某个热点数据过期,此时大量的用户请求过来,缓存未命中,然后都打到数据库去,导致数据库压力骤增。

2025-07-16 23:05:44 449

原创 JVM调优参数详解及实践指南

Xms(初始堆大小):JVM启动时分配的初始内存-Xms1g-Xmx(最大堆大小):JVM可使用的最大内存-Xmx4g。

2025-07-14 10:28:00 900

原创 Java内存泄漏全面解析与实战指南

配置OOM自动dump建立内存监控基线定期MAT分析堆快照代码审查重点区域:静态集合缓存系统资源未关闭。

2025-07-14 00:44:34 463

原创 JVM 常用工具命令大全

定义:在JVM中主要有命令行工具和对应的图形化工具,命令行工具较为简单直接操作,图形化更容易通过一个可视平台去观看其中JVM信息的情况。二者都有其独特之处。

2025-07-14 00:30:33 434

原创 AOP在哪些场景下可能会失效?

AOP动态代理在Spring中主要通过。

2025-07-14 00:23:36 315

原创 try-catch-finally输出先后顺序的机制

2、如果 finally 没有返回值 只是有一段处理逻辑,在执行到return 语句时候 会先执行finally块里面代码的逻辑,然后才会返回return 之后的逻辑。1、如果try、catch、finally分别都有返回值时候,最终finally的返回值会覆盖他们两个中的其中一个。一但遇到return语句之后就会先执行 finally 代码块里面的逻辑,如果。,反之则是之前的代码块中的 return 作为结果返回。

2025-07-12 15:44:13 155

原创 缓存三剑客解决方案

定义:大量缓存数据在同一时间点集体失效,导致所有请求直接穿透到数据库,引发数据库瞬时高负载甚至崩溃。

2025-07-12 15:12:55 438

原创 Spring事务传播

事务传播(Propagation)定义了一个事务方法被另一个事务方法调用时,事务应该如何传播(合并、挂起、创建新事务等)。**简单来说:**当一个事务方法 A 调用事务方法 B,B 是否要加入 A 的事务?还是自己新建一个事务?或者不使用事务?

2025-05-18 17:48:25 422

原创 Java父类、子类实例初始化顺序详解

可知通过继承时候,当加载子类时候会优先加载父类,等父类全部加载完毕才会进行子类的加载,静态变量特殊,如果。父类实例变量默认值 → 父类实例变量显式赋值 + 父类实例代码块(按代码顺序执行)→ 父类构造函数。子类实例变量默认值 → 子类实例变量显式赋值 + 子类实例代码块(按代码顺序执行)→ 子类构造函数。父类静态变量默认值 → 父类静态变量显式赋值 + 父类静态代码块(按代码顺序执行)。子类静态变量默认值 → 子类静态变量显式赋值 + 子类静态代码块(按代码顺序执行)。3、父类的实例初始化。

2025-04-30 18:59:13 356

原创 Spring中事务失效的原因详细解析

在 Spring Boot 中,通常会自动扫描 @Service、@Repository 等注解标注的类,但如果配置不正确,可能会导致扫描失败。原因:Spring 的事务是基于线程绑定的,每个线程都有自己独立的事务上下文。如果在一个带有事务的方法中开启了新的线程进行数据库操作,新线程中的操作不会参与到原线程的事务中,即使原线程的事务出现异常回滚,新线程中的操作也不会回滚。如果没有正确配置事务管理器,或者在使用 @Transactional 注解时没有指定正确的事务管理器,事务将无法正常工作。

2025-03-04 17:34:16 784

原创 HttpServletRequest、ServerHttpRequest 和 ServerWebRequest作用详解

适用于传统的 Servlet 应用(如 Spring MVC)。适合阻塞式 I/O 的场景。适用于响应式 Web 应用(如 Spring WebFlux)。适合非阻塞式 I/O 的场景。适用于响应式 Web 应用(如 Spring WebFlux)。提供了更高级的 API,封装了 ServerHttpRequest 和 ServerHttpResponse。如果你使用的是传统的 Spring MVC,选择 HttpServletRequest。

2025-03-04 16:54:05 1132

原创 Redisson 分布式锁底层原理实现详解

Redisson 是基于 Redis 实现的分布式锁,其核心思想是利用 Redis 的,同时通过处理加锁、解锁、续期等原子操作,保证分布式环境下的安全性。

2025-02-24 21:37:13 1001

原创 汇总项目总结

⼀个基于微服务的OJ系统,具备能够根据管理员预设的题⽬⽤例对⽤⼾提交的代码进⾏执⾏和评测的能⼒。此外,还⾃主实现了代码沙箱,可作为独⽴服务供其他开发者调⽤。⼀个在线刷题平台,平台⽀持管理员创建题库、批量管理题⽬,⽤⼾可以通过⾼效的搜索引擎进⾏题⽬检索,在线做题。项⽬核⼼围绕性能优化、数据⼀致性和⾼并发场景进⾏设计, 确保⽤⼾的刷题体验流畅且稳定。实现了伙伴交流聊天室、按共同兴趣爱好标签检索伙伴、推荐相似伙伴、组队,聊天,ChatGPT问答等功能。

2025-02-11 23:27:39 2065

原创 如何保证Redis和MySQL数据的一致性刨析

由缓存的调用者在进行更新数据库的同时更新缓存。更新数据:在进行数据库数据修改的时候,一般都是删除缓存,然后缓存为空,等待查询时候判空再进行数据库的查询然后更新缓存,而不是每次去做更新数据都进行更新缓存操作。

2025-02-10 22:44:07 818

原创 Spring MVC 拦截器(Interceptor)与过滤器(Filter)的区别?

拦截器(Interceptor): 只会拦截那些被@Controller 或 @RestController 标注的类中的方法处理的请求,也就是那些由 Spring MVC 调度的请求。过滤器(Filter): 会拦截所有类型的 HTTP 请求,包括静态资源和后台 API。Controller 是 Spring MVC 的核心组件之一,用于处理用户的 HTTP 请求,并返回响应。请求会根据 URL 路径、请求方法(GET/POST) 等信息,映射到 Controller的某个方法上来处理。

2025-02-10 16:24:09 637

原创 CommandLineRunner的作用

CommandLineRunner 是 Spring Boot 提供的一个 应用程序启动时执行代码的接口。它的主要作用是:在 Spring Boot 应用启动后立即执行一段代码(比如初始化数据、执行任务等)。预加载数据检测系统配置连接外部服务任务调度初始化等。

2025-02-10 12:38:03 475

原创 MVCC底层原理实现

了解实现原理之前,先理解下面几个组件的内容。

2025-01-24 23:25:40 882

原创 如何理解json和json字符串

json类型字符串本质是字符串,而json对象是json类型的数据,而且json类型数据分为两部分:json对象和json数组。如何理解网络传输的json到底是什么数据。网络传输的其实是对应的 json。它是一个合法的 JSON 数组。这是一个包含数组表示的字符串。对象,前端接收后会将。

2025-01-23 19:53:46 355

原创 三级缓存机制源码解析

Spring 中的三级缓存主要用于单例 Bean 的生命周期管理,特别是在循环依赖时,它通过不同阶段暴露 Bean 实例来确保依赖注入的顺利完成。。该缓存中存储的是已经完成初始化的 Bean 对象,包括所有的属性注入和生命周期回调方法(如 @PostConstruct)都已完成。。也就是 Bean 已经完成了实例化,并完成了依赖注入(如字段注入),但可能还没有执行初始化方法(如 @PostConstruct)。

2025-01-12 23:28:38 753 1

原创 保护性暂停原理

保护性暂停的超时等待应用于 join()方法中,可用于超时返回结果。保护性暂停的核心:在于等待线程在某个条件不满足时进入等待状态,并通过其他线程的通知机制在条件满足时继续执行。

2025-01-07 13:30:42 646

原创 线程之间的转换以及线程的活跃性

活锁:线程并未被阻塞都在运行,但是却直处于一种伪“忙碌等待”,原因是:一个线程改变了另外一个线程的结束条件。顺序加锁可以解决死锁问题,但是会产生线程饥饿问题,有的线程始终或者很少获得cpu执行。死锁:同时争抢资源,相互等待对方资源释放,最终导致死锁。解决办法:ReentrantLock进行解决。

2025-01-06 13:51:13 377

原创 WebMvcConfigurer详解

WebMvcConfigurer 是 Spring 5 引入的一个接口,它用于定制 Spring MVC 的行为,使得开发者能够更加灵活地修改和扩展 Spring MVC 默认的配置。它提供了多种方法,可以定制拦截器、视图解析器、静态资源处理、消息转换器、CORS 配置等。使用 WebMvcConfigurer 可以让你无需修改 Spring 源代码,就能轻松定制 Spring MVC 的行为。

2024-12-09 22:49:51 962

原创 Java后端面试模板(技术面)

通用java技术面

2024-12-06 23:32:59 1386

空空如也

空空如也

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

TA关注的人

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