
java
文章平均质量分 87
黑风风
这个作者很懒,什么都没留下…
展开
-
Java代码,为什么随机生成大范围数时会重复?
将范围分成多个区间,分别生成随机数。这种方法通过分段减小计算的数值范围,从而减少精度丢失的可能性。这段代码生成了 100 个随机数,但如果将幂次从 8 提高到 12,比如。,你会发现结果中出现了大量重复的随机数。更高的精度,从而避免因精度丢失导致的随机数重复问题。当随机数生成范围 ( 61^n ) 的指数过大时,为了解决随机数重复的问题,我们可以采用以下方法。类型的有效精度限制会导致随机数重复。类可以替换为更高级的随机数生成器,例如。精度不足,实际计算结果会被舍入到。支持任意大小的整数运算,可以避免。原创 2025-03-07 15:03:10 · 726 阅读 · 0 评论 -
Gradle 配置 Lombok 项目并发布到私有 Maven 仓库的完整指南
在 Java 项目开发中,使用 Lombok 可以极大地减少样板代码(如 `getter/setter` 方法、构造器等),提高开发效率。然而,当使用 Gradle 构建工具并将项目发布到私有 Maven 仓库时,常常会遇到 Lombok 注解未正确发布或生成代码缺失的问题。本文将详细讲解如何正确配置 Gradle 项目,确保 Lombok 在开发和发布过程中正常工作。原创 2025-03-05 15:58:54 · 808 阅读 · 0 评论 -
Apache Calcite:数据管理的幕后英雄
在大数据和分布式计算的世界里,Apache Calcite 是一个低调但功能强大的工具。虽然它不像 Hadoop 或 Spark 那样频繁出现在头条新闻中,但它在数据管理和查询优化领域扮演着不可或缺的角色。本篇文章将带你深入了解 Apache Calcite,探讨它的核心功能、适用场景以及为何它被称为“数据库的数据库”。原创 2025-01-07 08:00:00 · 1000 阅读 · 0 评论 -
如何使用Java的`assert`语句
`assert`语句在Java中主要用于测试和调试。它是一个很方便的工具,可以帮助开发者检查代码中的假设是否成立,当假设不成立时,`assert`会触发错误,方便开发人员发现潜在的问题。不过,`assert`并不是常规的错误处理方式,也不应该替代Java的异常机制。这篇文章将深入讲解`assert`的语法、适用场景,以及常见的使用误区,帮助你更有效地使用`assert`来提升代码的可靠性和可读性。原创 2025-01-02 09:00:00 · 1102 阅读 · 0 评论 -
常用的JVM参数介绍
Java虚拟机(JVM)参数在调优和配置Java应用程序的运行环境中起着至关重要的作用。合理配置JVM参数可以提高应用程序的性能和稳定性。本文将介绍一些常用的JVM参数及其作用。原创 2024-08-08 08:00:00 · 818 阅读 · 0 评论 -
SpringBoot 过滤器和拦截器的区别
Spring拦截器(Interceptor)和过滤器(Filter)是Spring框架中用于处理请求的两种机制,虽然它们都可以在请求处理的不同阶段进行拦截和处理,但它们的工作原理和应用场景有所不同。以下是它们的主要区别:原创 2024-06-23 08:15:00 · 902 阅读 · 0 评论 -
什么是循环依赖?
循环依赖(Circular Dependency),也称为循环引用,是指两个或多个Bean之间相互依赖,形成一个环状依赖链。例如,Bean A依赖于Bean B,而Bean B又依赖于Bean A,这就形成了一个简单的循环依赖。原创 2024-06-23 08:00:00 · 1055 阅读 · 0 评论 -
了解Spring的BeanPostProcessor
Spring框架提供了一种机制,允许在Spring容器实例化Bean之前和之后进行自定义的修改。这个机制就是`BeanPostProcessor`接口。`BeanPostProcessor`是Spring的核心接口之一,用于在Spring容器创建和初始化Bean的过程中进行干预和自定义处理。原创 2024-06-22 08:15:00 · 1002 阅读 · 0 评论 -
Spring Bean 生命周期详解
在 Spring 框架中,Bean 的生命周期由 Spring 容器全权管理。了解和掌握 Bean 的生命周期对于使用 Spring 开发稳定且高效的应用程序至关重要。本文将详细介绍 Spring Bean 生命周期的五个主要阶段:实例化、属性注入、初始化、使用和销毁,并涵盖各个阶段的关键步骤和扩展点。原创 2024-06-22 08:00:00 · 1881 阅读 · 0 评论 -
理解Spring Bean的作用域
在Spring框架中,Bean的作用域决定了Bean的生命周期及其可见性。Spring提供了几种不同的Bean作用域,以便开发人员根据特定的应用程序需求来管理Bean的创建和使用。本文将详细介绍Spring Bean的各种作用域,包括它们的特点和适用场景。原创 2024-06-21 08:15:00 · 1379 阅读 · 0 评论 -
synchronized(this) 写法的利弊分析
`synchronized` 关键字用于同步代码块,以确保在同一时间只有一个线程可以执行该代码块。`synchronized(this)` 是一种特殊的用法,它使用当前对象实例 (`this`) 作为锁。原创 2024-06-21 08:00:00 · 466 阅读 · 0 评论 -
了解Java并发同步框架:AQS(AbstractQueuedSynchronizer)
AQS(AbstractQueuedSynchronizer)是Java并发编程中一个重要的同步框架,提供了一个实现锁和其他同步器的基础。它通过FIFO队列来管理线程的争用,为开发者提供了便捷且高效的工具来实现自己的同步器,如ReentrantLock, CountDownLatch等。原创 2024-06-20 08:15:00 · 844 阅读 · 0 评论 -
了解ForkJoin框架
Fork/Join框架是Java 7引入的一种并行处理框架,用于有效地利用多处理器系统的计算资源。该框架通过将大任务拆分成多个子任务,并行处理这些子任务,最终将子任务的结果合并,以提高程序的执行效率。本文将介绍Fork/Join框架的基本概念、工作原理及其应用场景。原创 2024-06-20 08:00:00 · 533 阅读 · 0 评论 -
了解Java的CAS操作
CAS(Compare-And-Swap)是一种原子操作,用于实现无锁(lock-free)并发编程。它的主要作用是在多线程环境下保证数据的一致性。CAS操作比较某个内存位置的当前值是否与预期值相等,如果相等,则更新为新值,否则不做任何操作。原创 2024-06-19 08:15:00 · 585 阅读 · 0 评论 -
深入了解Java的CopyOnWriteArrayList类
在Java的并发编程中,`CopyOnWriteArrayList`类是一个特殊的列表实现,旨在提供一种线程安全的读操作无锁并发访问。这种实现的基础理念是在写操作时创建一个新的数组副本,从而使得读操作不会被写操作阻塞或影响。本文将详细探讨`CopyOnWriteArrayList`的工作原理、使用场景以及其优缺点。原创 2024-06-18 09:24:26 · 529 阅读 · 0 评论 -
Java阻塞队列:DelayQueue
在Java的并发编程中,阻塞队列是一种非常有用的数据结构,它不仅提供了线程安全的队列操作,还在必要时会自动阻塞获取操作,直到队列变得不为空。本文将重点介绍一种特殊的阻塞队列——`DelayQueue`,它在处理带有延迟时间的元素方面非常有用。原创 2024-06-18 09:22:49 · 375 阅读 · 0 评论 -
Java阻塞队列:PriorityBlockingQueue
在Java的并发编程中,阻塞队列是一种非常重要的数据结构。它不仅能在多线程环境下安全地进行数据交换,还能在需要时自动阻塞或唤醒线程。本文将详细介绍阻塞队列中的一种重要实现——`PriorityBlockingQueue`。原创 2024-06-17 09:13:52 · 680 阅读 · 0 评论 -
了解Java的LinkedBlockingQueue
`LinkedBlockingQueue`是一个基于链接节点的有界阻塞队列。它实现了`BlockingQueue`接口,可以在多线程环境中安全地进行插入、移除和检查操作。`LinkedBlockingQueue`的容量可以在创建时指定,如果未指定,则默认容量为Integer的最大值。原创 2024-06-17 09:13:08 · 1246 阅读 · 0 评论 -
Java阻塞队列:ArrayBlockingQueue
`ArrayBlockingQueue`是Java中的一个阻塞队列(Blocking Queue)实现,它是线程安全的,并且基于数组实现。`ArrayBlockingQueue`常用于生产者-消费者模型,在这种模型中,生产者线程负责将元素放入队列,而消费者线程负责从队列中取出元素。原创 2024-06-16 11:49:48 · 483 阅读 · 0 评论 -
Java线程池的抛弃策略
Java线程池是Java并发编程中非常重要的一个组件。它通过重用已创建的线程来减少线程创建和销毁的开销,从而提高应用程序的性能和响应速度。然而,当线程池中的任务数量超过其处理能力时,就需要一种机制来处理新提交的任务,这就是线程池的抛弃策略。原创 2024-06-16 11:14:37 · 810 阅读 · 0 评论 -
深入理解ReentrantLock
在Java并发编程中,锁(Lock)是控制多个线程对共享资源访问的重要工具。虽然`Synchronized`关键字是实现锁的常用方式,但它在功能上比较有限。`ReentrantLock`是`java.util.concurrent.locks`包中提供的一个更加灵活和强大的锁实现,它是一个可重入的互斥锁,它允许线程在获取锁之后再次获取该锁而不被阻塞。简单来说,如果一个线程已经持有了一个锁,再次请求获取该锁时,它可以成功获取而不会被阻塞。原创 2024-06-15 12:03:21 · 458 阅读 · 0 评论 -
深入学习Java `synchronized` 关键字
`synchronized`关键字通过确保在同一时间只有一个线程可以执行某个代码块,从而防止多个线程同时访问共享资源时发生数据不一致的问题。原创 2024-06-15 12:02:40 · 432 阅读 · 0 评论 -
学习Java中的Future类
在Java中,异步编程是一种常见且强大的编程模式,它允许程序在等待一个任务完成的同时继续执行其他任务。`Future`类是Java中的一种机制,用于表示异步计算的结果。在这篇文章中,我们将深入探讨Java中的`Future`类,了解它的使用方法及其在并发编程中的重要性。原创 2024-06-14 08:00:00 · 450 阅读 · 0 评论 -
学习理解 CompletableFuture
`CompletableFuture` 是 Java 8 引入的一个强大的工具,它使得编写异步和并行代码变得更加容易。`CompletableFuture` 是 `java.util.concurrent` 包的一部分,是 `Future` 的扩展,它不仅允许你手动完成计算,还提供了一套丰富的 API 来支持异步编程。与传统的 `Future` 不同,`CompletableFuture` 提供了非阻塞的方式来获取结果,并且可以链式调用和组合多个异步任务。原创 2024-06-14 08:30:00 · 1914 阅读 · 0 评论 -
JVM性能优化案例:减少对象频繁创建
某金融应用系统在处理大量并发交易时,响应时间过长,并且有时出现内存溢出(OutOfMemoryError)的问题。经过分析,发现问题主要出在频繁的对象创建和较差的内存管理上。原创 2024-06-13 10:17:59 · 1016 阅读 · 0 评论 -
JVM性能优化案例:优化垃圾回收器的年轻代和老年代占比
从GC日志中可以看到,年轻代GC的频率较高,而老年代GC的频率较低。这表明当前配置下年轻代内存空间可能较小,导致频繁的年轻代GC。这种频繁的GC会影响系统的吞吐量和响应时间。我们有一款在线交易系统,要求低延迟和高吞吐量。系统运行在Ubuntu服务器上,使用OpenJDK 11,并启用了G1垃圾回收器。通过增加年轻代内存空间,可以减少年轻代GC的频率,从而提升系统性能。合理设置GC暂停时间目标,确保系统在低延迟和高吞吐量之间取得平衡。利用多核CPU资源,增加GC并发线程数,加快GC过程。原创 2024-06-13 10:17:16 · 797 阅读 · 0 评论 -
JVM产生FullGC的原因有哪些?
在Java虚拟机(JVM)中,垃圾回收(Garbage Collection,简称GC)是一个非常重要的机制。GC的目的是自动管理内存,回收不再使用的对象,防止内存泄漏。在JVM中,Full GC是一种比较昂贵的操作,它会暂停应用程序的执行(Stop-the-World),对所有的堆内存进行垃圾回收。因此,了解产生Full GC的原因,对于优化Java应用的性能至关重要。本文将详细探讨JVM产生Full GC的几种主要原因。原创 2024-06-12 12:43:17 · 1198 阅读 · 0 评论 -
双亲委派模型是什么,为什么要使用双亲委派模型
在Java中,类加载器(ClassLoader)是负责将类文件加载到JVM中的关键组件。为了确保类加载过程的安全性和稳定性,Java引入了一种叫做双亲委派模型(Parent Delegation Model)的机制。这篇文章将介绍什么是双亲委派模型,以及为什么要使用这种模型。原创 2024-06-12 12:42:07 · 1835 阅读 · 0 评论 -
JVM 类加载器的工作原理
Java 虚拟机(JVM)的类加载器是 JVM 体系结构中的一个重要组件,它负责动态加载 Java 类到内存中。类加载器的工作原理涉及几个关键步骤和概念。本文将详细介绍 JVM 类加载器的工作原理。原创 2024-06-11 15:09:40 · 1205 阅读 · 0 评论 -
介绍JVM的JIT编译器
Java虚拟机(JVM)是Java编程语言的基础,它使Java程序能够在各种平台上运行。为了实现这一目标,JVM将Java字节码转换为机器代码。JIT编译器(Just-In-Time Compiler,即时编译器)是JVM中的一个重要组件,它在程序运行时将字节码动态编译为本地机器代码,从而提高程序的执行效率。原创 2024-06-11 10:35:26 · 517 阅读 · 0 评论 -
理解 Java 中的 `final` 关键字
`final` 关键字是 Java 编程语言中一个重要的修饰符,它可以应用于类、方法和变量。理解 `final` 的用法和作用对于编写稳健和高效的 Java 代码至关重要。在本文中,我们将深入探讨 `final` 关键字的各种用法及其意义。原创 2024-06-10 10:41:38 · 540 阅读 · 0 评论 -
理解JVM内存模型与Java内存模型(JMM)
在Java程序的运行过程中,内存管理和线程的同步是两个重要的概念。本文将深入探讨JVM内存模型(Java Virtual Machine Memory Model)和JMM(Java Memory Model),以及它们之间的联系和区别。原创 2024-06-08 13:32:41 · 967 阅读 · 0 评论 -
了解Java内存模型(Java Memory Model, JMM)
Java内存模型(Java Memory Model, JMM)是Java语言规范中规定的一组规则,定义了多线程程序中变量(包括实例字段、静态字段和数组元素)的访问方式。JMM的设计目标是保证线程之间的内存可见性和操作的有序性,从而帮助开发者编写并发安全的程序。本文将详细介绍Java内存模型的各个方面。原创 2024-06-08 11:28:37 · 919 阅读 · 0 评论 -
了解JVM中的Server和Client参数
Java虚拟机(Java Virtual Machine,JVM)作为Java程序运行的核心,提供了多种参数来优化和调整程序的性能和行为。其中,`-server`和`-client`是两个重要的参数,分别用于配置JVM在服务器模式和客户端模式下的运行。原创 2024-06-08 11:11:45 · 1248 阅读 · 0 评论 -
Java中的接口与抽象类:区别与联系
在Java中,`interface`(接口)和`abstract class`(抽象类)是两种重要的抽象类型,用于定义对象的抽象行为和结构。虽然Java 8之后接口引入了默认方法和静态方法,使得接口功能更加强大,但它们之间仍然存在显著的区别。本文将详细探讨两者的区别及其各自的用途。原创 2024-06-05 09:04:33 · 1602 阅读 · 0 评论 -
Java的自动装箱和自动拆箱
在Java开发中,自动装箱(Autoboxing)和自动拆箱(Unboxing)是指基本数据类型与其对应的包装类之间的自动转换。这些特性可以使代码更加简洁和易读,但在实际项目中也带来了某些潜在的问题。本文将详细介绍自动装箱和拆箱的概念,并探讨在Spring Boot项目开发和Bean转换中的应用与注意事项。原创 2024-06-04 12:48:27 · 2172 阅读 · 0 评论 -
详解Java可重入锁ReentrantLock
Java的`ReentrantLock`是一个高级的线程同步工具,提供了比传统的`synchronized`方法和语句更灵活、更丰富的线程同步机制。这个锁属于可重入锁(也称为递归锁),意味着同一个线程可以多次获取同一个锁而不会产生死锁。下面详细解释和说明`ReentrantLock`的特性和用法原创 2023-12-28 15:23:12 · 1439 阅读 · 0 评论 -
volatile关键字详解
Java中的volatile关键字是一个用于确保变量在多线程环境下的可见性和部分有序性的修饰符。当一个字段被声明为volatile时,它具有以下特性:可见性:在多线程环境中,一个线程修改了一个volatile变量的值,这个新值对其他线程来说是立即可见的。这意味着当一个线程更新了一个volatile变量,其他线程读取这个变量时会看到最新的值。有序性:volatile关键字可以防止指令重排序优化。在多线程环境中,为了提高性能,编译器和处理器常常会对指令顺序进行重排序。原创 2023-12-27 16:58:55 · 860 阅读 · 0 评论 -
Spring对于循环依赖是如何解决的
随着项目的不断扩大,依赖关系的复杂度也在不断增加。在这种情况下,循环依赖问题就显得尤为突出。Spring框架作为一种广泛使用的Java企业级应用开发框架,为开发者提供了一套优雅的解决方案来应对循环依赖。在本篇文章中,我们将探讨Spring是如何解决循环依赖的。原创 2023-04-06 11:35:24 · 357 阅读 · 0 评论 -
JVM对synchronized做了哪些优化
学习总结学习了JVM对synchronized的优化有哪些了解了frp的其他用法明日安排继续阅读《JAVA并发编程的艺术》这本书笔记内容偏向锁、轻量级锁、重量级锁Java SE 1.6为了减少获得锁和释放锁带来的性能消耗,引入了“偏向锁”和“轻量级锁”。锁一共有4种状态,级别从低到高依次是:无锁状态,偏向锁状态,轻量级锁和重量级锁状态。HotSpot的作者经过研究发现,大多数情况下,锁不仅不存在多线程竞争,而且总是由同一线程多次获得,为了让线程获得锁的代价更低而引入了偏向锁。偏原创 2021-04-28 18:08:39 · 378 阅读 · 0 评论