- 博客(49)
- 收藏
- 关注
原创 Class<?> 对象 的作用
Class<?对象是 Java 反射机制的基础,提供了对类元数据的访问以及动态操作类的能力。通过Class<?对象,你可以在运行时获取类的信息、创建类的实例、调用方法和访问字段。这种灵活性使得Class<?对象在许多高级应用场景中非常重要,如插件系统、模块化应用、AOP 和动态代理等。
2025-03-04 11:33:42
441
原创 classLoader.getResource() 的方法说明
绝对路径:以开头的路径表示从类路径的根目录开始查找资源。相对路径:不以开头的路径表示相对于调用该方法的类所在的包。
2025-03-04 10:29:13
366
原创 getClassLoader() 方法
获取类加载器可以帮助进行调试和诊断,了解某个类是如何被加载的,尤其是在复杂的类加载环境中(如 OSGi 或 Java EE 容器)。
2025-03-04 10:24:45
782
原创 isAnnotationPresent 方法作用
方法用于判断一个类、方法、字段等是否应用了特定类型的注解。它对于需要在运行时动态处理注解的应用场景非常有用,如框架开发、AOP编程等。使用该方法前,请确保注解已被保留到运行时(通过声明)。
2025-03-04 10:16:57
322
原创 自定义注解的定义
这样的语法用于在自定义注解中定义一个具有默认值的元素。这意味着,当你在其他地方使用该注解时,如果没有为value提供具体的值,它将自动使用这个默认值(在这个例子中是空字符串""这种机制提供了极大的便利性和灵活性,使得注解更加易于使用和维护。不提供value值的情况: 如果你在应用这个注解时不指定value的值,那么它将自动采用默认值(即空字符串""提供value值的情况: 当你确实想要为value元素指定一个具体的值时,可以直接在注解中提供这个值。")显式命名参数的方式。
2025-03-04 10:15:12
314
原创 Spring创建Bean 生命周期
Spring Bean 生命周期流程图详细说明 加载配置元数据:解析 Bean 定义:实例化 Bean:属性填充(依赖注入):初始化前操作:初始化方法调用:后置处理器后处理:使用 Bean:销毁前操作:销毁 Bean:
2025-03-04 10:10:09
435
原创 Spring核心原理流程简略介绍
Spring 的核心在于其 IoC 容器,它通过配置元数据来管理 Bean 的创建、初始化和销毁。整个过程包括加载配置、解析 Bean 定义、实例化 Bean、属性填充、初始化 Bean 和销毁 Bean 等步骤。理解这些核心机制有助于更好地利用 Spring 框架构建灵活且可维护的应用程序。
2025-03-04 10:06:57
739
原创 JDK17 隐藏类 Hidden Classes 介绍
隐藏类是JDK 17引入的一项重要特性,旨在提高性能并减少内存使用,特别是在处理大量Lambda表达式时。它通过避免创建和加载不必要的类来实现这一目标。对于大多数应用程序来说,隐藏类是透明的,并且会自动启用。如果你需要更细粒度的控制,可以通过JVM参数来配置隐藏类的行为。
2024-08-23 10:07:39
831
原创 java JVM G1垃圾收集器一些主要特性和工作原理
G1 (Garbage-First) 垃圾收集器是Java虚拟机(JVM)中的一个现代化的垃圾回收器,它首次出现在JDK 7 Update 4,并在JDK 9中成为默认的垃圾收集器。G1的主要设计目标是在提供可预测的停顿时间的同时达到高吞吐量,这对于响应时间和延迟敏感的应用程序非常有用。
2024-08-20 14:59:50
568
原创 java JVM ZGC垃圾收集器关键特性和工作原理
ZGC通过上述技术和特性实现了低延迟的垃圾收集,并且能够很好地扩展到大规模的应用场景中。它的设计非常适合那些对延迟敏感的应用程序,比如实时系统或高频率交易系统等。
2024-08-20 14:59:19
578
原创 Java虚拟机 (JVM) 中的三色标记 (Three-Color Marking)
三色标记算法是一种有效的并发标记技术,它被广泛应用于Java虚拟机的垃圾收集器中,特别是在那些追求低暂停时间的垃圾收集器中,如CMS和G1。通过将标记过程分解为多个阶段,并采用并发执行的方式,三色标记算法能够在减少暂停时间的同时保持垃圾收集的有效性。
2024-08-16 14:36:41
505
原创 JVM CMS运行原理
CMS垃圾收集器通过并发执行大部分的垃圾回收工作来减少应用程序的暂停时间,这对于需要低延迟的应用场景非常有用。尽管CMS在减少暂停时间方面表现出色,但由于它不进行内存压缩,可能会导致内存碎片化问题。随着Java版本的更新,新的垃圾收集器如G1 (Garbage First) 和ZGC (Z Garbage Collector) 等提供了更好的解决方案,它们既能够减少暂停时间,又能解决内存碎片问题。
2024-08-16 12:20:56
1130
原创 java JVM 锁消除
锁消除是一种有效的优化手段,它可以帮助减少不必要的锁操作,从而提高程序的并发性能。但是,这种优化取决于逃逸分析的结果,只有在确定对象不会被多个线程访问的情况下才能进行。开发者可以通过编写简洁、清晰的代码来帮助JVM更好地进行这类优化。
2024-08-08 15:40:10
512
原创 java JVM中标量替换
标量替换是一种有效的优化手段,它可以帮助减少对象创建和内存分配的开销,从而提高程序的性能。然而,这种优化并不是自动进行的,它取决于JVM的即时编译器的具体实现和逃逸分析的结果。开发者可以通过编写简洁、清晰的代码来帮助JVM更好地进行这类优化。
2024-08-08 15:39:07
558
原创 Java JVM 热点代码识别方式
热点代码识别和优化是JVM为了提高程序执行效率而采取的重要手段。通过识别和优化热点代码,JVM可以显著减少程序运行时的CPU消耗,从而提高程序的整体性能。对于开发者而言,了解这些机制有助于编写更高效、更易于优化的代码。
2024-08-08 10:01:18
882
原创 Java JVM中GC的组成部分
Java虚拟机 (JVM) 的垃圾收集器 (Garbage Collector, GC) 是负责自动管理堆内存的重要组件。它能够识别不再使用的对象,并释放这些对象所占用的内存空间,以便于新对象的创建。JVM的GC机制由多个不同的部分组成,每个部分负责不同的内存区域和特定类型的垃圾回收任务。
2024-08-06 09:54:05
691
原创 Java JVM中的栈空间怎么释放
在Java虚拟机 (JVM) 中,栈空间主要用于存储方法调用时的信息,例如局部变量、操作数栈、动态链接信息以及返回地址等。当一个方法被调用时,一个新的栈帧会在当前线程的栈中被创建;当该方法执行完毕后,这个栈帧就会被销毁。: 当一个方法执行完毕,它的栈帧会被自动移除,其占用的空间将被释放。这意味着所有在该方法中声明的局部变量和临时变量都将不再可访问,并且相应的内存空间会被回收。: 如果一个方法抛出了一个异常并且没有被捕获,或者异常被捕获后处理异常的方法也抛出了异常,则当前方法的栈帧也会被销毁。
2024-08-06 09:50:07
442
原创 设计模式:策略模式
策略模式(Strategy Pattern)是行为设计模式的一种,它定义了一系列算法,并将每一个算法封装起来,使它们可以互相替换,让算法的变化独立于使用算法的客户。策略模式让程序可以在运行时选择算法,灵活地改变程序的行为。
2024-05-17 10:55:17
616
原创 设计模式:状态模式
状态模式(State Pattern)是一种行为设计模式,属于设计模式中的行为模式类别。该模式主要用于解决对象状态转移及其行为变化的问题,使得对象能够在内部状态改变时,其行为也随之改变,从而让对象看起来像是改变了类型一样。
2024-05-16 15:48:41
408
原创 设计模式:解释器模式
解释器模式(Interpreter Pattern)是一种行为设计模式,它定义了一种方式来解释一个语言中的句子。这里的“语言”可以是任何形式的文法规则或表达式,比如数学公式、编程语言的语法、正则表达式等。解释器模式的关键在于将这些规则或表达式分解成多个小的组成部分(表达式),并为每个部分定义一个解释器。这些解释器类合作来解释整个句子的意义。
2024-05-15 14:55:00
696
原创 设计模式:备忘录模式
备忘录模式(Memento Pattern)是一种行为设计模式,它的主要目的是在不破坏对象的封装性的前提下,捕获并存储一个对象的内部状态,以便在将来需要时恢复该对象到之前的状态。这种模式非常适合需要实现撤销操作或状态恢复的场景,比如文本编辑器的撤销功能、游戏中的存档与读档功能等。
2024-05-14 11:33:46
601
原创 Oracle Exists、 NOT Exists用法
EXISTS提供了一种高效的方式来判断行的存在性,是处理子查询时的一个强大工具,尤其是在需要基于条件判断数据是否存在,而不关心具体值的情况下。NOT EXISTS在Oracle数据库中,NOT EXISTS关键字用于子查询中,用来检查子查询是否有结果。与EXISTS相反,NOT EXISTS用于筛选出那些在子查询中找不到匹配项的记录。当子查询没有返回任何行时,NOT EXISTS子句的条件为真,从而外层查询的行会被包含在结果集中。以下是NOT EXISTSNOT EXISTS。
2024-05-14 11:24:22
4013
原创 设计模式:中介者模式
中介者模式(Mediator Pattern)是一种行为设计模式,它用于减少多个对象和类之间的直接交互复杂性,通过引入一个中介机构(即中介者)来管理这些交互。中介者模式定义了一个中心组件,该组件负责协调各对象之间的通信,使得对象之间不必显式地相互引用,从而降低了系统的耦合性并提高了可维护性和灵活性。
2024-05-13 20:42:46
1553
原创 设计模式:观察者模式
观察者模式(Observer Pattern)是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式通常被用来实现事件处理系统、实时数据更新、状态监控等多种场景。
2024-05-11 17:49:57
619
原创 设计模式:迭代器模式
迭代器模式(Iterator Pattern)是一种行为设计模式,它提供了一种方法来顺序访问集合对象中的元素,而不需要了解集合的底层表示。迭代器模式将集合的遍历操作(即对元素的访问和遍历逻辑)从集合对象本身分离出来,封装到了迭代器对象中。这样做的好处是,集合对象的内部结构可以自由地改变,而遍历集合的代码不需要随之调整,增强了代码的灵活性和模块化。
2024-05-10 17:54:54
746
原创 设计模式:访问者模式
访问者模式(Visitor Pattern)是行为设计模式的一种,它使你能够在不修改对象结构的情况下,给对象结构中的每个元素添加新的功能。访问者模式将数据结构和作用于结构上的操作解耦,使得操作集合可相对自由地演化。
2024-05-09 17:59:23
688
原创 设计模式:命令模式
命令模式(Command Pattern)是一种行为设计模式,它将请求封装成对象,以便参数化对象、延迟执行、记录请求日志、支持可撤销操作等。此模式基于“行动请求者”与“行动执行者”之间解耦的设计思想,使得请求的发送者和接收者之间没有直接的联系,通过命令对象作为中介,这样两者可以独立变化,提高系统的灵活性和可扩展性。
2024-05-08 11:44:56
961
原创 模板方法模式
模板方法模式(Template Method Pattern)是行为设计模式的一种,它定义了一个操作中的算法骨架,而将某些步骤延迟到子类中实现。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤,从而使得代码复用和扩展性得到提升。
2024-05-07 14:24:13
624
原创 设计模式:代理模式
代理模式(Proxy Pattern)是软件设计模式中的一种结构型模式,它提供了一种代理或占位符来控制对其他对象(称为真实主题或目标对象)的访问
2024-05-06 14:36:08
722
原创 设计模式:享元模式
内部状态是存储在享元对象内部并且可以共享的状态,这部分状态对于所有享元对象是相同的,不会随着环境改变而改变。在这个例子中,我们将模拟一个字符渲染系统,其中字符可以有不同的颜色,但大多数字符都是重复的,例如,一个文档中可能多次出现字母'a',且这些字母可能有多种颜色。客户端通过工厂获取享元对象,并传递外部状态(颜色)来渲染字符,实现了内部状态的共享和外部状态的分离。当客户端请求享元对象时,享元工厂会提供已存在的享元对象或创建新的享元对象(如果不存在符合条件的共享对象)。接口定义了享元对象的行为,
2024-04-28 16:02:45
436
原创 设计模式:外观模式
外观模式通过定义一个新的接口(即外观类),封装原有系统中的一组接口,使得外部用户只需与这个外观接口交互,无需了解内部组件的细节。总之,外观模式通过引入一个外观类,为复杂的子系统提供了一个更易于使用的接口,简化了客户端与子系统的交互,降低了系统的耦合度,提高了系统的可维护性和可扩展性。外观模式提供了一个简化的接口,它将一组复杂的子系统接口或类的功能封装在一起,使客户端只需要与这个单一、简洁的接口打交道,而无需直接访问各个子系统。这有利于系统的维护和演化。交互,无需了解子系统的具体实现细节,简化了系统的使用。
2024-04-26 15:14:01
365
原创 设计模式:组合模式
组合模式(Composite Pattern)是一种结构型设计模式,它的主要目的是将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。在组合模式中,组合对象和叶子对象都有相同的接口,用户可以以相同的方式处理它们,无需了解对象是单个实体还是由多个对象组成的集合。这里我们创建一个图形库应用程序,其中图形既可以是简单图形(叶子对象),如矩形和圆形,也可以是复杂图形(组合对象),如组合图形,它包含多个图形。:是组合对象中的最底层对象,没有子节点。
2024-04-25 14:25:22
268
原创 装饰者模式
装饰者模式的核心在于“装饰”这一概念,它通过创建一个装饰对象来包裹(或“装饰”)原始对象,并通过在装饰对象中扩展或替换原有对象的部分行为,实现对原始对象功能的增强或修改,同时保持原始对象的接口不变。以下是一个使用Java实现装饰者模式的简单示例。我们将创建一个饮料(Beverage)类作为抽象构件,具体饮料(如Espresso、HouseBlend)作为具体构件,以及一个装饰者(CondimentDecorator)类和几个具体的装饰者(如Milk、WhippedCream、Chocolate)。
2024-04-24 00:13:19
705
原创 桥接模式介绍
桥接模式的核心思想是将抽象层和实现层解耦,使得抽象层可以独立地进行扩展而无需修改其实现层的代码,反之亦然。通过桥接模式,可以构建出更灵活、更容易扩展的系统,其中抽象部分与实现部分之间松散耦合,各自独立演化,从而增强了系统的灵活性和可维护性。:定义抽象类的基本操作,存储一个实现化对象,通过调用实现化对象的方法来完成具体的操作。:继承自抽象接口,可以覆盖并扩展抽象接口中的一些方法,同时调用实现化对象的相关方法。:实现实现化接口,提供具体的实现化角色功能,这些功能会被抽象接口调用。
2024-04-22 11:47:14
271
原创 适配器模式
适配器模式(Adapter Pattern)是一种结构型设计模式,它的主要作用是将一个类的接口(API)转换成客户端期望的另一个接口,使得原本由于接口不兼容而无法在一起工作的类能够协同工作。适配器模式实现了两个接口之间的对接,从而帮助系统中的现有类和其他类能够无缝集成。: 这是客户端期望使用的接口,定义了客户端需要的方法集合。: 这是需要被适配的类,拥有自己的一组方法,但与目标接口不兼容。: 这是适配器类,它实现了目标接口,并持有被适配者的一个实例。
2024-04-20 15:54:12
611
原创 建造者模式
下面是一个简单的Java实现建造者模式的例子,我们将会创建一个披萨(Pizza)的产品类,并定义一个抽象建造者(Builder)来构建披萨的不同部分,然后创建一个具体的建造者实现来制作不同口味的披萨,最后通过导演(Director)类来指导建造过程。它不用知道具体建造者的内部细节,只知道如何通过调用建造者的接口方法来一步步指导产品的创建过程。: 提供了一个抽象接口,规定了创建产品对象的各个步骤,具体包括定义了一系列的方法,用于创建产品的各个部分。则是导演类,它通过调用建造者的方法来完成披萨的创建。
2024-04-12 14:47:44
569
原创 原型设计模式
当原始对象的属性发生变化时,克隆对象的属性保持不变,表明它们是独立的实体。需要注意的是,对于包含引用类型的成员变量,必须确保它们也被正确地克隆,以实现真正的深克隆。在Java中实现原型模式,首先需要一个实现了Cloneable接口的实体类,然后重写Object类的clone()方法。如果涉及到复杂的数据结构或包含非基本类型的成员变量,则需要特别注意深克隆的实现,以免出现引用复制而非值复制的问题。: 使用原型接口来请求克隆对象,而不需要关心具体的实现细节。方法,它是所有具体原型类都需要实现的接口。
2024-04-12 14:30:40
773
原创 工厂设计模式
提供一个接口,用于创建相关或依赖对象家族的一系列相关或相互依赖的对象,而不指定具体的产品类。适合于一个产品族内的多个产品对象都需要一起创建的情况。以下是抽象工厂模式的一个简单示例,我们继续沿用披萨店的例子,这次不仅要生产不同口味的披萨,还要区分纽约风格和芝加哥风格的披萨原料:
2024-04-09 13:15:35
1802
原创 程序员如何搞副业?
根据个人的兴趣、特长及时间安排,程序员可以选择最适合自己的一种或几种副业形式。同时,重要的是要平衡好副业与主业的关系,确保副业不会过度影响到本职工作的质量和效率。程序员由于其专业技能和互联网行业的紧密联系,拥有开展多种副业的优势。
2024-04-08 16:16:53
277
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人