![](https://img-blog.csdnimg.cn/549eda3c94ef4043ab01b5dac357059c.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
文章平均质量分 83
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 [2] 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等
孟德爱吃香菜
这个世界能轻而易举毫不费劲做到的,只有贫穷和衰老,其他的都需要努力。
展开
-
Spring boot 单元测试类
这是一个非常强大的工具,可以帮助我们模拟Spring环境,进行各种测试,如集成测试、容器测试等。在这个例子中,我们使用@WebMvcTest注解来启动Spring MVC的上下文,并只扫描和加载SampleController.class相关的beans。在这个例子中,我们使用@SpringBootTest注解来启动完整的Spring上下文,并使用MockMvc来模拟Web请求。在这个例子中,我们使用@DataJpaTest注解来启动Spring Data JPA的上下文,并模拟JPA的操作。原创 2024-06-21 09:28:51 · 525 阅读 · 0 评论 -
Java8新特性Optional类以及应用场景
可以向调用者明确表明结果可能是空的,促使他们正确地处理这种情况。方法可以安全地进行链式调用,即使中间某个步骤可能返回null。,代码可以变得更加健壮和易于维护,同时减少了空指针异常的风险。可以避免立即检查null,而是将处理逻辑延迟到需要的地方。类作为容器对象,主要用于可能不存在的值的情况。:当从数据库中查询数据时,结果可能为空。:读取配置文件时,某些配置项可能不存在,使用。可以清晰地表达方法可能不返回任何结果。:在处理复杂的数据结构时,使用。可以避免不必要的null检查。类的基本使用和应用场景。原创 2024-06-14 16:01:51 · 882 阅读 · 0 评论 -
RocketMQ安装
【代码】RocketMQ安装。原创 2024-03-02 10:03:11 · 354 阅读 · 0 评论 -
调用@PostConstruct 时 ApplicationContext 还没有初始化
这样,Spring容器在初始化UserServiceImpl类之前,会先初始化userDaoImpl类。出现空指针异常,排查发现是调用的时候还未初始化。原创 2024-01-25 16:08:19 · 602 阅读 · 0 评论 -
Java http 响应式请求和非响应式请求有什么区别
HTTP协议本身并不直接支持响应式请求,因为HTTP是基于请求-响应模型的。然而,可以通过使用其他技术和协议来实现响应式请求。响应方式:响应式请求是指使用响应式编程模型处理请求和响应。通过使用响应式库(如Spring WebFlux、Reactor等、RxJava等),可以创建流式的数据流,并使用异步和事件驱动的方式处理数据。非响应式请求是指使用传统的同步方式发送请求,并等待整个响应数据完整返回。并发性能:响应式请求能够利用异步和非阻塞的特性,以流式的方式处理数据,提供更好的并发性能。原创 2024-01-16 16:08:53 · 672 阅读 · 0 评论 -
注入多个实现类【JAVA】(设计模式之策略模式)项目实际场景【Spring boot】
}在上述示例中,Message是策略接口,PicMessage和TxtMessage是具体的策略类。是上下文类,在这里可以选择不同的策略来加密数据。这样,如果日后需要添加更多的消息类型,只需创建新的策略类即可,而不需要修改现有的代码。优点:1 可以自由切换对应处理逻辑2 避免了大量的if判断,代码更加优雅了3 扩展性更好,有新的消息类型只需增加对应的新消息类,需要修改外围逻辑缺点类增多,代码复杂度提升。原创 2023-06-29 14:58:47 · 630 阅读 · 1 评论 -
maven POM文件总体配置说明
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd "> <!-- 父项目的坐标。如果项目中没有规定某个元素的值,那么父项目中的对原创 2023-11-09 14:05:45 · 507 阅读 · 0 评论 -
Java AtomicInteger
AtomicInteger 类的方法都是原子操作,即它们在执行时不会被其他线程干扰,从而保证了操作的原子性。需要注意的是,AtomicInteger 类主要用于处理整数类型的原子操作。如果需要处理其他类型的原子操作,可以考虑使用 AtomicLong、AtomicReference 等其他原子类。AtomicInteger 是 Java 中的一个类,用于实现原子操作的整数。它提供了一系列方法,可以在多线程环境中安全地进行原子操作,避免了竞态条件和数据不一致的问题。原创 2023-10-30 11:40:28 · 230 阅读 · 0 评论 -
如何实现Nacos配置文件动态刷新【四种方式】
在Nacos中,动态刷新配置文件的实现方式可以总结如下:使用Spring Cloud Config + Nacos:结合Spring Cloud Config和Nacos作为配置中心,在应用程序中添加注解,并使用@Value注解绑定配置属性。通过发送POST请求到端点来触发配置的刷新。使用Nacos的ConfigListener接口:实现ConfigListener接口,并注册为Nacos的监听器。当配置发生变化时,回调相应方法进行处理。原创 2023-08-21 10:56:06 · 12768 阅读 · 14 评论 -
Thread.currentThread().interrupt() 用法详解
如果不使用方法来设置线程的中断状态为 “中断”,则线程的中断状态将保持不变。在这种情况下,线程可能会继续执行而不响应中断请求,导致无法正确停止或退出循环,或者无法在阻塞状态下及时响应中断请求。因此,应根据需要在适当的时候检查线程的中断状态,并进行相应的处理。原创 2023-08-08 11:41:13 · 5130 阅读 · 0 评论 -
【Mybatis-puls】使用Map作为返回对象下划线自动转成驼峰
📝问题描述1️⃣yml配置解决方案✏️错误分析✏️解决方案(转换器代码)🏷️@ConfigurationPropertiesBinding的作用2️⃣通过Java配置bean解决 (觉得第一种麻烦的直接用第二种)原创 2023-07-05 17:49:15 · 4063 阅读 · 9 评论 -
关于老项目从JDK8升级到JDK17所需要注意的细节
🌸1.1.更新JDK🌸1.2.修改Idea中的JDK版本🌸1.3.关于修改过程中遇到的异常🌸1.4.IDEA工具栏操作Maven正常,但使用mvn命令运行就报错原创 2023-09-16 18:05:15 · 2066 阅读 · 0 评论 -
【JAVA】延迟定时任务
Timer 和 ScheduledExecutorService 都是 Java 中用于执行定时任务的工具,但它们在实现方式和功能方面有一些区别。下面是 Timer 和 ScheduledExecutorService 的对比:是单线程的,所有的任务都由同一个线程来执行。如果一个任务执行时间过长,会影响其他任务的执行。是基于线程池的,可以支持多个并发任务执行,并且能够处理长时间运行的任务,不会相互影响。Timer:如果一个任务抛出异常,会导致整个 Timer 停止工作,后续的任务也无法执行。原创 2023-08-25 16:33:38 · 685 阅读 · 0 评论 -
【JAVA8】 新特性 (结合示例)
是只包含一个抽象方法的接口。它解决了旧的Date和Calendar类在设计上的一些问题,并且增加了新的特性。方法来创建一个包含非空值的Optional对象,如果传入的值为null,则会抛出NullPointerException。Java 8引入了函数式接口和默认方法的概念,它们在一起为Java语言添加了更强大的函数式编程能力。方法来处理Optional对象中的值,只有在Optional对象非空时才会执行相应的操作。方法来获取Optional对象中的值,如果Optional对象为空,则返回指定的默认值。原创 2023-08-07 14:55:55 · 321 阅读 · 0 评论 -
【JAVA 11】的新特性 (结合示例)
这只是Java 11的一些新特性的示例,还有其他特性如垃圾回收器改进、动态类文件常量、新的标准化HTTP/2客户端和服务器API等,它们也都提供了相应的示例和详细解释。:Java 11引入了一个新的垃圾回收器(Epsilon GC),它是一种无操作(No-Op)的垃圾回收器,用于在测试和性能调优场景下进行使用。以上是一些Java 11中的语法糖示例。要注意的是,语法糖并不会改变Java的底层语义,只是提供了更方便的写法。Java 11还包含了其他一些小的改进和优化,以提高开发人员的生产力和应用程序的性能。原创 2023-08-07 14:33:28 · 1831 阅读 · 2 评论 -
Dockerfile自定义镜像
常见的镜像在DockerHub就能找到,但是我们自己写的项目就必须自己构建镜像了。而要自定义镜像,就必须先了解镜像的结构才行。原创 2023-08-14 18:15:58 · 483 阅读 · 0 评论 -
【MongoDB】高性能非关系型数据库
MongoDB是一个开源的、面向文档的NoSQL数据库管理系统。它采用了类似JSON的BSON(二进制JSON)数据模型,具有高度灵活性和可扩展性,被广泛应用于大规模数据存储和实时分析等场景。以下是关于MongoDB的详细解释:文档导向:MongoDB是一种文档数据库,数据以文档的形式存储在集合(Collection)中。文档是一种类似于JSON格式的结构化数据表示,可以嵌套包含其他文档或数组。高度灵活:与传统的关系型数据库不同,MongoDB没有固定的表结构。原创 2023-08-09 17:49:48 · 630 阅读 · 1 评论 -
什么是ConcurrentHashMap?
采用了分段锁的机制来实现高度的并发性。通过将数据分散到不同的段中,不同段的操作可以并发进行,从而减少了竞争和锁冲突。它使用一种变体的取模算法,通过位运算使得不同的键能够均匀地分布到不同的段中,减少了锁竞争。是线程安全的哈希表实现,适用于需要在多线程环境下进行安全的键值存储和访问的场景。它保证了对数据的操作是原子的、有序的,避免了数据不一致的问题。使用分段锁机制,不同线程可以同时获取不同段的锁,允许并发访问不同的段。对于线程安全的并发访问,读操作可以同时进行,而写操作需要获取对应段的锁,以保证数据的正确性。原创 2023-08-07 14:26:04 · 471 阅读 · 0 评论 -
【JVM】是如何管理内存的
JVM通过自动的垃圾回收器对堆中的对象进行内存回收和整理。:合理设计和使用对象,以及及时释放不再使用的对象的引用,是避免内存泄漏和减少垃圾回收开销的关键。需要注意的是,长时间保持对对象的引用可能导致内存泄漏,因此应该仔细管理对象的生命周期,并在不再需要时手动释放引用。当没有任何其他引用指向该对象时,JVM的垃圾回收器会识别到这个对象成为垃圾,随后将其自动回收,并释放所占用的堆内存空间。通过合理地配置和优化JVM的内存参数,如堆大小、新生代和老年代的比例、垃圾回收算法等,可以提高应用程序的性能和可伸缩性。原创 2023-08-07 11:52:31 · 676 阅读 · 0 评论 -
JAVA 中的 synchronized 和 ReentrantLock锁
在Java中,锁是一种同步机制,用于控制对共享资源的访问。它可以确保在并发环境下的线程安全性。原创 2023-08-07 10:55:15 · 268 阅读 · 0 评论 -
Java线程池的用法(并发编程)
Java 线程池是一种管理和复用线程的机制,可以提高程序的效率和性能。它通过预先创建一组线程,并使用这些线程来执行任务,而不是为每个任务都创建一个新的线程。原创 2023-08-03 11:38:20 · 149 阅读 · 0 评论 -
乐观锁和悲观锁(结合实例)
乐观锁适用于读多写少、冲突发生较少的情况,避免了不必要的加锁开销。但是在冲突频繁的情况下可能需要多次重试。悲观锁适用于写多读少、冲突发生较多的情况,可以通过加锁保证数据一致性。但是过多的加锁会导致线程阻塞和性能降低。选择使用乐观锁还是悲观锁取决于实际的业务场景和需求,并且在实现时需要考虑并发性能和数据一致性的权衡。原创 2023-08-01 09:41:19 · 278 阅读 · 0 评论 -
Spring boot 如何使用及使用场景@Scheduled
通过合理配置调度规则,结合业务逻辑,可以满足大部分定时任务的需求。启动Spring Boot应用程序:运行Spring Boot应用程序,定时任务将会按照设定的调度规则自动执行。注解在Spring Boot中的使用场景非常广泛,可以满足各种定时任务的需求。注解为Spring Boot中的定时任务提供了简单而强大的功能,使得定时任务的开发和管理变得更加便捷。注解定时执行任务,将批量操作分散在不同的时间段进行,避免一次性处理大量任务造成系统负载过高。注解可以定时触发缓存刷新任务,使缓存中的数据保持有效和一致。原创 2023-07-19 09:03:02 · 183 阅读 · 0 评论 -
BigDecimal 用法
BigDecimal适合以下场景:精确计算:BigDecimal类提供了高精度的数值计算,可以用来处理对精度要求较高的计算需求。与基本数据类型(如double和float)相比,BigDecimal可以避免由于浮点数运算带来的精度损失。金融和货币计算:在金融领域和货币计算中,精确的小数运算是至关重要的。由于BigDecimal支持任意精度的小数计算,并且能够控制舍入模式,因此它常被用于处理货币金额、利率计算等场景。科学和工程计算。原创 2023-07-18 14:50:45 · 321 阅读 · 0 评论 -
java Future & netty Future & Promise 实际代码演示(如何获取子线程的返回结果)
java Future & netty Future & Promise 的区别(如何获取子线程的返回结果)原创 2023-06-21 11:12:51 · 337 阅读 · 3 评论 -
@SuppressWarnings 参数详解
是 Java 提供的一个注解(annotation),用于告诉编译器忽略指定的警告信息。请注意,不同的编译器版本和配置可能会支持不同的警告类型,因此建议查阅特定编译器版本的文档以获取最准确的信息。注解在 Java 中用于抑制特定类型的编译器警告。注解可能会隐藏潜在的问题,因此应谨慎使用,并尽量在代码中进行适当的修复或改进。注解,告诉编译器忽略该类中所有未使用的成员变量或方法引起的警告。注解,告诉编译器忽略该字段未使用引起的警告。注解,告诉编译器忽略该方法未使用引起的警告。在上面的例子中,使用了。原创 2023-07-15 14:33:23 · 3453 阅读 · 0 评论 -
Java的反射机制
Java的反射机制可以在以下场景中发挥作用:运行时动态加载类:通过反射,可以在运行时动态加载并实例化类。这对于某些需要根据条件或配置来确定使用哪个类的情况非常有用。例如,在插件系统中,可以通过反射来加载和实例化插件类。访问私有成员和方法:反射使得可以绕过访问控制权限,直接访问和修改类的私有成员变量和私有方法。这在某些特殊场景下(如测试框架、序列化/反序列化)可能会有用。编写通用代码:通过反射可以编写更通用和灵活的代码,因为它能够在运行时获取和操作类的信息。原创 2023-07-18 10:22:02 · 62 阅读 · 0 评论 -
【JAVA】递归与迭代:选择正确的方法来解决问题
在Java中,递归是一种方法调用自身的技术。它可以在解决问题时提供一种简洁和直观的方式。以下是一些适合使用递归的情况:数学计算:递归在数学计算中广泛应用,例如计算阶乘、斐波那契数列等。这些问题通常可以通过将大问题分解为更小的同样结构的子问题来解决。数据结构操作:递归在处理和遍历树、图和链表等数据结构时非常有用。例如,使用递归可以实现二叉树的前序、中序和后序遍历等操作。文件和目录操作:递归可用于遍历文件系统中的目录结构,查找特定类型的文件或执行某些操作。原创 2023-07-18 10:13:10 · 168 阅读 · 0 评论