
Java
文章平均质量分 86
goTsHgo
这个作者很懒,什么都没留下…
展开
-
JVM中的运行时常量池详解
保存编译时确定的常量(数字、字符串、方法引用等)。在程序运行时,把这些符号解析成实际的内存地址或数据。确保代码里的每一部分都能找到它需要的东西,正确执行。原创 2025-03-21 16:35:07 · 857 阅读 · 0 评论 -
可扩展性设计架构模式——开闭原则
在架构设计中,遵循开闭原则(Open/ClosedPrinciple,OCP)是实现可扩展性的关键。这个原则指导我们设计系统时,应使其对新增功能开放,而对现有代码的修改封闭。这样,当系统需求变化或需要添加新功能时,我们可以通过添加新的代码模块而不是修改现有代码来实现,从而减少了对现有系统稳定性和已有功能的风险。开闭原则基于抽象构建架构。系统中稳定的部分(例如数据模型、核心逻辑)应该通过抽象接口或者抽象类来定义,而变化的部分(例如具体实现、附加功能)则通过具体的实现类来扩展。这种方式使得核心架构保持稳定,原创 2025-01-22 11:00:26 · 491 阅读 · 0 评论 -
架构师需要具备的能力
一个优秀的软件开发者或架构师,需要具备扎实的技术能力系统性思维良好的沟通能力和持续学习的态度。可维护性、可扩展性、可重用性等这些具体指标,是在这些品质的基础上实现的结果。通过不断实践、反思和学习,开发者和架构师才能在快速变化的技术领域中脱颖而出。原创 2024-12-20 15:53:50 · 940 阅读 · 0 评论 -
系统设计:微服务架构的可扩展性系统 详解
微服务是一种分布式架构模式,将系统分解为多个小型、独立的服务,每个服务都实现一个特定的业务功能,并通过轻量级协议(如HTTP或gRPC)进行通信。核心思想:每个服务是独立的,围绕具体的业务能力(如订单、用户、支付)设计。原创 2024-12-20 15:46:37 · 926 阅读 · 0 评论 -
完整微服务设计 功能实现
在微服务架构中,服务是分布式的,每个服务都可能运行在不同的主机或容器中。为了让服务之间能够。原创 2024-12-20 15:44:44 · 972 阅读 · 0 评论 -
设计可维护的系统——测试设计 详解
单元测试验证每个方法的正确性。集成测试验证模块间的协作。Mock技术隔离外部依赖。JaCoCo监控覆盖率,发现未测试的代码。这种设计让系统的每个模块都独立、清晰,方便维护与扩展。原创 2024-12-20 12:16:09 · 638 阅读 · 0 评论 -
测试覆盖率高的系统:单元测试和集成测试确保代码质量
测试覆盖率是衡量代码测试程度的一种指标,表示代码中有多少部分被测试所覆盖,通常以百分比表示。单元测试:测试代码中的最小单元(如一个方法或一个类)。集成测试:测试不同模块或单元之间的交互是否符合预期。代码可靠性高:可以确保大部分逻辑已经经过验证,减少生产环境的错误。便于维护:开发人员在修改代码时可以依赖测试来验证改动是否破坏了现有功能。回归测试方便:当系统发生变更时,可以快速运行测试用例,验证代码没有引入新问题。订单管理模块:负责订单创建和查询。订单支付模块:负责订单支付。订单日志模块。原创 2024-12-19 15:06:17 · 1041 阅读 · 0 评论 -
开发系统设计原则——单一职责原则(SRP) 详解
单一职责原则一个类应该只有一个导致其变更的原因。换句话说,每个类、模块或方法都应该有且只有一个职责(功能)。如果一个类有多个职责,那么这些职责可能会相互影响,使得系统更难维护和扩展。原创 2024-12-19 12:31:32 · 1027 阅读 · 0 评论 -
RoaringBitmap 使用详解
的key: 用于标识 RoaringBitmap 中的不同块,表示整数的高 16 位。的value: 指向对应的Container,存储块内所有的整数,表示整数的低 16 位。Container实现: 不同的Container实现(ArrayContainer、BitmapContainer、RunContainer)使得 RoaringBitmap 可以根据块内数据密度选择最合适的存储结构,从而实现高效存储和快速操作。原创 2024-11-04 11:45:01 · 1062 阅读 · 0 评论 -
hashmap 线程不安全 的原因
HashMap的线程不安全主要原因在于没有对共享数据的访问进行同步控制,多线程环境下可能引发数据竞争、扩容时数据丢失、链表断裂或死循环等问题。如果需要在多线程环境下使用类似HashMap的数据结构,应该使用线程安全的实现,例如。原创 2024-10-23 10:23:33 · 612 阅读 · 0 评论 -
Java Native Interface (JNI) 简介
是 Java 提供的一种接口,用于允许 Java 应用程序与本地(Native)代码进行交互。通过 JNI,Java 代码可以调用 C/C++ 等其他语言编写的库,反之亦然。JNI 的主要用途包括:与底层系统库交互、调用高性能本地代码、或使用 Java 不能直接访问的硬件设备。问题:JNI 的常见问题与挑战内存管理问题:问题:Java 使用自动垃圾回收,而 C/C++ 代码需要手动管理内存。这可能会导致内存泄漏、指针错误或空指针访问等问题。共性规律:涉及不同语言的互操作时,内存管理往往是最大的挑战。原创 2024-09-09 15:14:19 · 1038 阅读 · 0 评论 -
Java 远程调用接口(RMI)
Java 的是一种允许 Java 程序调用远程对象的方法。这种方法类似于本地调用,但目标对象实际位于远程 JVM(Java 虚拟机)中。RMI 实现了分布式计算,允许对象跨网络进行交互,核心目的是简化跨网络的对象通信。问题:Java RMI 常见问题与挑战网络通信复杂性:问题:RMI 依赖网络连接,如果网络不稳定或者服务器不可用,会导致远程调用失败。共性规律:任何涉及远程通信的技术都会面临类似的问题,如延迟、连接超时、网络中断等。对象序列化问题:问题:RMI 传递的对象必须实现接口。原创 2024-09-09 15:08:21 · 1125 阅读 · 0 评论 -
Java 中处理 XML 文件
DOM 解析适合小型 XML 文件,支持随机访问和修改操作,但内存消耗大。SAX 解析适合大型 XML 文件,内存占用小,但只支持顺序读取,无法修改或随机访问。根据实际场景选择解析方式,优化内存和性能。可以结合 DOM 和 SAX 的优点,或考虑使用 StAX 来处理复杂的 XML 文档解析需求。原创 2024-09-09 13:39:48 · 1579 阅读 · 0 评论 -
Java 8 时间日期处理
Java 8 的日期和时间 API 通过不可变性、类型安全性、线程安全性以及直观的 API 设计,解决了旧 API 中的许多问题。使用这个 API 时,需要特别注意时区的处理、日期时间的精度、格式化与解析的正确性,以及与旧版日期时间类的兼容性。在实际应用中,灵活运用PeriodDuration和等类,可以有效简化复杂的日期时间计算逻辑。原创 2024-09-09 12:21:05 · 1013 阅读 · 0 评论 -
元编程(Metaprogramming)
元编程通过宏、模板元编程、反射和注解等技术,提供了强大的能力来生成和操作代码。这些技术使得程序能够更加灵活和动态地适应复杂需求,但同时也增加了代码的复杂性和维护成本。在使用这些技术时,开发者应权衡它们带来的灵活性与复杂性之间的平衡,确保代码的可读性和性能。元编程通过动态代码生成、代码自省和行为修改等能力,解决了许多编程中的复杂性问题。它使代码更具灵活性和通用性,减少了重复劳动,并提高了代码的表达能力和可扩展性。因此,元编程在构建复杂系统、通用框架以及动态可扩展软件时,发挥了至关重要的作用。原创 2024-09-02 11:53:04 · 1716 阅读 · 0 评论 -
Java 多线程详解
多线程(Multithreading)是指在一个程序中同时执行多个线程的能力。线程是进程中的一个执行路径,多线程允许程序在同一时间内执行多个操作。Java 中的多线程可以通过并发处理来提高程序的性能和响应速度,尤其在处理复杂计算、大量 I/O 操作或并发任务时非常有用。多线程使得程序可以同时执行多个任务,充分利用CPU资源,提升程序性能,增强响应性,并简化程序的复杂度。尽管多线程编程带来了一些挑战,如线程安全和死锁问题,但合理设计和使用多线程可以显著改善程序的整体表现。原创 2024-08-30 16:02:13 · 1440 阅读 · 0 评论 -
Maven 项目的 `pom.xml` 文件 标签全解析
之前开发用Maven都是大佬们配置好的,无需自己操心,但是到了自己来搭建的时候发现自己并不是特别明白各个标签的作用,只知道dependencies里面的内容,所以痛定思痛,一定要全部搞懂所有的标签及其所起到的作用 ,未来不管用什么,做什么都要做到“知其然还要知其所以然”。每个依赖项由 `groupId`、`artifactId` 和 `version` 组成,表示依赖的库、模块和版本号。- `packaging`:定义项目的打包类型,这里是 "pom",表示这是一个聚合项目,不会生成实际的可执行文件。原创 2023-06-07 17:14:42 · 883 阅读 · 0 评论 -
JavaWeb解析:`HttpServlet` 类的属性和方法的解析
它根据请求的类型(GET、POST、PUT、DELETE 等)调用适当的方法(如 `doGet()`、`doPost()`、`doPut()`、`doDelete()`)来处理请求。10. `protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException`: 这是 `service()` 方法的实现,它根据请求方法调用相应的处理方法。原创 2023-06-20 19:08:56 · 135 阅读 · 0 评论 -
Tomcat 运行报错-java.lang.IllegalArgumentException: servlet映射中的<url pattern>[mySerlvet.do]无效
25-Jun-2023 14:25:08.076 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Dcatalina.base=C:\Users\LYYYKTSHCS\AppData\Local\JetBrains\IntelliJIdea2020.3\tomcat\881509a1-4ac6-4f38-8a6e-bf2f92bb0db4。原创 2023-06-25 14:51:26 · 1139 阅读 · 0 评论 -
元注解及其示例
例如,如果一个注解被指定为@Target({ElementType.FIELD, ElementType.METHOD}),则该注解只能应用于字段和方法上,而不能应用于类或其他类型的元素上。如果一个注解被@Inherited注解,则表示注解可以被子类继承,并且子类也被标注了相同的注解。自定义注解是Java语言提供的一种元编程工具,它允许开发者在代码中添加自定义的元数据标记,用于描述类、方法、属性等元素的特性和行为。如果存在,则通过`getAnnotation`方法获取注解的实例,并可以访问注解的成员变量。原创 2023-07-24 10:29:18 · 186 阅读 · 0 评论 -
Java SPI机制详解
SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制,旨在实现程序的可插拔性和扩展性。它允许开发者定义接口,并提供多个不同的实现供应用程序选择和使用。SPI是一种动态替换发现的机制, 比如有个接口,想运行时动态的给它添加实现,你只需要添加一个实现。我们经常遇到的就是java.sql.Driver接口,其他不同厂商可以针对同一接口做出不同的实现,mysql和postgresql都有不同的实现提供给用户,而Java的SPI机制可以为某个接口寻找服务实现。原创 2023-07-24 10:39:23 · 219 阅读 · 0 评论 -
Java详解之I/O[BIO、NIO、AIO使用方法和示范代码]
小弟能力不足,认知有限,难免考虑不全面,希望大佬能给出更好的建议,指出存在的问题和不足,在此跪谢。在Java中,BIO(Blocking I/O)指的是阻塞式I/O,是一种基本的I/O模型。它的实现原理相对简单,但在高并发场景下性能较差。下面我将详细介绍BIO的实现原理。阻塞式I/O在BIO中,当一个线程在进行I/O操作时,如果数据没有准备好,该线程会被阻塞,直到数据准备好并被读取或写入。这意味着一个线程只能处理一个连接,如果有大量连接同时到来,就需要大量线程来处理,这会导致资源消耗过大。实现原理。原创 2023-11-21 10:17:59 · 510 阅读 · 0 评论 -
JVM 内存介绍
养老区中也会进行GC,一旦养老代gc速度赶不上对象的产生速度了,就会OOM,出现jvm挂机。java 堆是所有线程所共享的一块内存,在虚拟机启动时创建,几乎所有的对象实。5. 每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用,持有这个引。该常量池具有动态性,也就是说常量并不一定是编译时确定,运行时生成的常量也。的时候都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接和方法出口。指令的地址)和对象引用,这个对象引用有可能是指向对象起始地址的一个指针,局部变量所需的内存空间在。原创 2024-07-15 12:23:31 · 974 阅读 · 0 评论