- 博客(461)
- 资源 (9)
- 问答 (1)
- 收藏
- 关注
原创 Spring Bean生命周期
注入ApplicationContext(此时Bean还未初始化)。:若Bean实现了Aware接口,容器会回调相关方法注入上下文信息。:通过构造函数或工厂方法创建Bean的实例(此时对象尚未初始化)。),将Bean的定义(如类名、作用域、初始化/销毁方法等)加载到。:在Bean实例化前,允许修改Bean的定义(如属性占位符替换。或XML配置,注入依赖的属性和Bean。:Bean完全初始化,可被应用程序使用。:增强Bean(如生成代理对象)。:JSR-250标准,最先执行。:Spring特定接口。
2025-03-07 08:54:16
300
原创 Spring为什么要用三级缓存解决循环依赖
A、B 、C对象构成了循环依赖的场景,假设先创建A,实例化A,填充属性b,到1级、2级、3级缓存中都没有找到,决定创建B,实例化B,填充属性a。一、Spring的现有流程。
2025-02-20 18:22:58
73
原创 G1垃圾回收器必知
G1(Garbage-First)垃圾收集器将Java堆内存划分为多个大小相等的区域,称为Region。Region的数量和大小可以根据堆的总大小进行配置,但有一些默认值和限制。1、在G1垃圾收集器中,你不能直接设置Region的个数。Region的数量是根据堆的总大小和每个Region的大小自动计算得出的。然而,你可以通过设置参数来间接影响Region的数量。默认情况下,G1会将堆内存划分为大约2048个Region。这个数量是基于经验得出的,目的是在大多数情况下提供良好的性能和可控的垃圾回收行为。
2024-11-28 19:18:12
523
原创 G1垃圾回收器论文
Garbage-First是一种针对多处理器系统和大内存环境设计的服务器风格垃圾收集器,能够在高概率下满足软实时目标的同时保持高吞吐量。全堆操作(如全局标记)与突变并发执行,以防止中断时间与堆或存活数据大小成比例。并发标记不仅提供了“完整性”,还通过压缩疏散识别出适合回收的区域。这种疏散在多处理器上并行执行,以提高吞吐量。
2024-11-27 00:01:52
936
原创 JVM垃圾回收算法和垃圾回收器
JVM的垃圾回收机制随着Java的发展不断进步,从最初的单线程GC到现在的多线程并发GC,每一代GC算法都在努力平衡性能、停顿时间和内存管理的需求。现代的GC算法如ZGC和Shenandoah GC,已经能够实现极低的停顿时间,满足高性能计算和大规模应用的需求。
2024-11-05 14:48:11
648
原创 计算机总线
计算机有多个部件,部件之间需要传输数据,如果在每2个需要通信的部件之间加线连接,那么如果有5个部件,两两之间连线,那么需要4+3+2+1=10个连线,随着部件增多,计算机部件结构就很混乱不堪,这种分散连接方式缺点很明显,连线多,占用空间大,难以扩展(新增一个部件改动大)。使用公共线路连接多个部件,这个线路就是总线,在同一时刻只有一组部件能使用总线。总线多条数据线并行传输,并行传输距离过长容易产生干扰,需要特殊技术方案解决。总线的缺点是同一时刻只能被一组部件使用,如果速度过慢,容易成为性能瓶颈。
2024-10-31 11:09:43
742
原创 理解处理器寻址
每次数据读取或写入操作确实会伴随地址总线和数据总线的使用。地址总线用于传输内存地址,数据总线用于传输实际的数据。然而,通过缓存、预取、DMA和流水线等技术,可以减少对总线的直接使用,从而提高系统的整体性能。这些优化技术使得处理器能够在不频繁访问主内存的情况下高效地处理数据。
2024-10-30 20:00:26
322
原创 JAVA对象在内存中的布局
一、要区分普通对象和数组Java对象在内存中的具体空间大小取决于JVM的实现和配置,但我们可以给出一个大致的概念。以下是基于常见的HotSpot JVM(Oracle/OpenJDK)的一些典型值:对象头(Object Header):其中,Mark Word 和 Klass Pointer 各自占据一部分:实例数据(Instance Data):对齐填充(Padding):举个例子,假设有一个简单的类,只有一个int类型的成员变量,在64位系统上的对象大小可能是这样的:所以总大小就是16字节。请注意,这些
2024-10-29 22:31:00
450
原创 Spring cloud配置中心动态更新的原理
Spring cloud下的微服务为了能动态感知配置中心的变化,多生成了一个ApplicationContext,由于ApplicationContext聚合了Environment,所有同时也多生成了一个Environment。这个新的ApplicationContext专门用于和配置中心交互,contextId为bootstrap。
2024-09-06 09:58:48
339
1
原创 mysql Deadlock found when trying to get lock; try restarting transaction
数据库隔离级别:read-committed表a有唯一索引。
2024-09-05 19:27:06
404
原创 Spring Boot-加载配置文件ConfigDataEnvironmentPostProcessor
org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor是 Spring Boot 中的一个关键组件,它负责处理配置数据(config data),并将其应用于 Spring 应用上下文中。下面我们详细解读这个类的产生背景、作用和工作原理。
2024-08-20 20:19:03
588
原创 为什么ClassLoader里会有getResources方法
实际上,`ClassLoader` 的 `getResource` 方法和类信息的保存没有直接关系。`getResource` 方法的主要目的是定位和获取资源文件,而非类文件。资源文件可以是配置文件、图片、音频或其他任何非代码文件。`getResource` 方法能够定位资源是因为它会根据给定的资源名称在类路径(Classpath)中进行搜索。类路径是指定了类和资源存放位置的一个环境变量或配置选项,它可以包括文件系统的目录、JAR文件等。
2024-07-31 17:35:36
520
原创 spring中设计概念
接口的设计哲学是通过一种灵活、解耦的方式来增强组件的功能,同时保持代码的清晰性和可维护性。接口的回调方法通常在bean初始化阶段调用,确保bean在完全初始化之前就已经获得了必要的上下文信息。bean作为观察者等待Spring容器的通知,而Spring容器作为主题负责通知bean有关的上下文信息。接口允许Spring管理的bean在初始化过程中获得对Spring应用上下文或容器的引用,以及其它相关的信息。的引用,组件可以在运行时被Spring容器动态地填充必要的信息,这使得组件更加灵活和可测试。
2024-07-04 20:06:58
531
原创 Apache HttpClient总览
Apache HttpClient 4.x 系列• HttpClient 4.0(发布于2008年左右):这是一个重要的里程碑,标志着HttpClient从Jakarta Commons项目转移到Apache HttpComponents项目。4.0版进行了大量的重构,引入了新的连接管理模型(基于HttpCore),支持了HTTP/1.1的持久连接、连接池以及更灵活的配置选项。
2024-06-12 19:47:51
1330
原创 Spring RestTemplate高性能配置
这里没有涉及任何连接方面的配置,直接使用,需要看源码才知道RestTemplate是如何进行网络连接的。根据经验,我们知道,发起网络通信,通常是有需要有网络连接工具类的,我们熟知的有:1、JDK自带的java.net.URLConnection3、其他一些http工具类RestTemplate也不例外。这里的createRequest()就调用到父类HttpAccessor了。RestTemplate的有关继承关系如下,上面是父类,下面是子类RestTemplate把发送请求的功能封装到。
2024-03-20 13:47:27
936
原创 PageHelper原理
所以,不要给list重新赋值,否则最后PageInfo无法从Page中拿到分页值。mybatis提供插件功能,PageHelper使用这个插件机制。
2024-02-01 21:15:38
584
原创 Spring原理提前理解
如果一个bean有多个构造方法,Spring默认使用无参构造方法,此时如果没有无参构造方法,就会报错,此时可以使用@Autowired修饰构造方法用以告知Spring使用确定的构造方法。6、cglib通过继承方式生成代理对象,代理对象里会插入一个原生对象target,所以代理对象里会看到原生对象里的属性,且属性值都为Null,d、创建对象时,一定会伴随构造方法的调用,这是JAVA的强制要求,如果创建的是子类对象,一定会有构造方法链式调用的过程。4、Spring在实例化bean时,必须调用构造方法。
2024-01-17 21:05:59
453
原创 一次生产问题:MySQL连接耗尽和死锁
1、线程池要隔离,特别是业务逻辑中异步处理任务较多时,要考虑异步是否需要快速处理完2、表的修改要在需要修改的时候再修改,不要无脑修改,不要怕麻烦多查询一次。
2023-12-29 19:47:57
869
原创 六边形架构
总的来说,Alistair Cockburn是一位备受尊敬的软件工程师和架构师,他的贡献和影响力对软件开发领域的发展产生了深远的影响。Alistair Cockburn是一位软件开发领域的重要人物,他通过自己的研究、著作和实践,推动了敏捷开发方法的发展和普及,对提升软件开发团队的效率和质量产生了积极的影响。除了他的学术和行业成就,Alistair Cockburn还以其独特的幽默感和迷人的演讲风格而闻名于同行。他的经验和见解使他成为了软件开发领域的权威人物,受到了业界的广泛赞誉和尊重。
2023-11-17 20:47:07
912
原创 架构问题自查
识别和理解业务需求,可从业务全局角度,对需求进行建模设计可在指导下阅读和理解需求文档、参与需求评审会并可理解需求内容(参与需求分析/评审的相关邮件,会议纪要等)可阅读和理解需求文档、参与需求评审会并可理解需求内容(参与需求分析/评审的相关邮件,会议纪要等)可阅读和理解需求文档,并结合已有功能评估新需求关联性及影响、参与需求评审会并可提出意见和建议(参需求关件,需求审相关要证明等)需求分析方法论、行业分析报告、竞品分析报告1、业务专业词汇问答了解2、业务专业场景问答了解。
2023-11-12 14:21:38
602
原创 并发工具类库使用的常见问题
由于ThreadLocal是和线程绑定的,如果线程被复用了,也即使用了线程池,那么ThreadLocal中的值是可能被复用的,这个特性如果是开发者没有预料到的,那么会产生很大的问题。例如,在JAVA web应用中,我们通常会使用很多ThreadLocal来保存一次请求的不同上下文信息,其中就包含登录用户,如果一次请求完成后,没有清理掉当前登录用户信息,那么当另外一个用户的请求进来,就会使用上一个用户,如果是涉及到数据写入,将直接导致数据错乱,造成严重生产问题。
2023-10-06 16:14:53
347
原创 领域驱动设计
有意思的是,可能因为成书年代过于久远,大多数人并没有读过 Eric 的书,而是凭直觉本能地接受了领域驱动这一说法,或是在实践中跟随周围的实践者学习使用它。所以从某种意义上说,Eric 倡导的领域驱动设计是一种模型驱动的设计方法:通过领域模型(Domain Model)捕捉领域知识,使用领域模型构造更易维护的软件。把模型作为精粹的知识,以用于传递。我们都知道有一个著名的公式“程序 = 算法 + 数据结构”,实际上这也是一种模型驱动的思路,指的是从数据结构出发构造模型以描述问题,再通过算法解决问题。
2023-10-06 15:03:51
131
原创 集合类中的反常规特性
世界上所有程序只在做一件事情:处理数据。而数据是需要结构来承载,数据结构由此而来,常见的数据结构包括 List、Set、Map、Queue、Tree、Graph、Stack 等,其中 List、Set、Map、Queue 可以从广义上统称为集合类数据结构。高级编程语言一般都会提供各种数据结构的实现,供我们开箱即用。Java 也是一样,比如提供了集合类的各种实现。Java 的集合类包括 Map 和 Collection 两大类。
2023-10-06 10:44:15
131
原创 Spring Boot-3-AbstractApplicationContext
同时,一个名为applicationEventMulticaster的multicaster在context中以bean的形式提供,并提供默认实现SimpleApplicationEventMulticaster。AbstractApplicationContext是application context的第一个实现者,还是被定义为抽象的,之所以定义成抽象的,是因为他不必、不允许被实例化,不能直接被其他类聚合(他的子类可以)。这些都在context里被定义为bean了。始自2001年1月21日。
2023-09-13 00:37:11
276
原创 JAVA项目建模之包目录结构
对于API,分为2种,一是提供API给外部调用,二是调用外部API,我们通常会封装好这2部分内容,针对提供给外部调用的接口,命名为。调用外部接口的内容,命名为。
2023-09-07 23:50:09
197
原创 编程行业专业术语
编程方法论是指软件开发中一系列编程的规则、步骤和技巧,旨在提高软件的可维护性、可复用性、可扩展性和可读性1。此外,编程方法论还包括面向过程、面向对象、面向函数等。
2023-09-06 23:19:28
437
原创 Spring之HandlerInterceptor和RequestBodyAdvice
拦截器的拦截逻辑是在org.springframework.web.servlet.DispatcherServlet中写的,需要注意的是,如果入口拦截顺序是a->b->c的话,那么出口拦截顺序是c->b->a,这个逻辑可以看org.springframework.web.servlet.HandlerExecutionChain里的一段逻辑。这里能很清晰的看到循环使用的次序。
2023-08-30 22:18:04
856
原创 yarn是什么
与npm类似,Yarn也可以用于安装、更新和删除JavaScript软件包。但相比于npm,Yarn在性能和安全性方面有一些优势。它使用并行下载和缓存机制,可以更快地安装依赖项。此外,Yarn还提供了更严格的版本锁定机制,以确保在不同环境中安装的软件包版本一致。它是由Facebook、Google、Exponent和Tilde共同开发的,旨在提供更快、更可靠的软件包安装和依赖关系管理。要使用Yarn,首先需要安装Node.js,然后在命令行中运行。命令来全局安装Yarn。安装完成后,可以使用。
2023-08-10 08:53:02
298
原创 node-sass是什么
是一种CSS预处理器,它扩展了CSS的功能并提供了更强大的样式表语言。Sass允许开发人员使用变量、嵌套规则、混合(Mixins)、继承等高级功能来编写更简洁、可维护的样式代码。Sass有两种语法格式:Sass(使用缩进)和SCSS(使用大括号和分号)。Sass语法更加简洁,没有大括号和分号,而SCSS语法更接近于常规的CSS语法,更容易学习和使用。使用Sass可以提高CSS的开发效率,减少重复的代码,增加代码的可读性和可维护性。Sass还提供了许多内置的函数和混合,可以帮助开发人员更方便地处理样式。
2023-08-09 23:46:34
4874
原创 Jenkins配置流水线
这个任务名称将会是Jenkins的workspace路径下的一个目录,如我建立了一个test任务,那么Jenkins会生成一个/jenkins_home/workspace/test目录,用来拉取代码编译等。所以请谨慎设置任务名称。
2023-08-02 00:11:13
248
原创 Mac plist文件
对于普通用户来说,基本不用管plist文件是什么,因为这个是应用程序开发者使用的。对于资深苹果使用者来说,可能需要修改应用属性或者破解软件时可能会用到。macOS、iOS、iPadOS的应用程序都可能会有plist配置文件,他是苹果系列操作系统特有的配置文件。plist的本质是个xml格式的文本文件,英文全称是property list,文件后缀使用.plist。
2023-07-30 17:55:50
2663
游戏跨三大移动平台运行的实现机制是怎样的
2015-06-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人