java Arrays.asList 返回什么与普通 ArrayList 区别介绍
目录核心结论详细区别与解释代码示例为什么会这样设计?如何得到一个真正可变的ArrayList?核心结论
它返回什么? Arrays.asList() 返回一个由指定数组支持的、固定大小的 List 视图。有区别吗? 有巨大区别。它返回的不是我们常用的 java.util.ArrayList,而是一个内部自定义的、行为受限的类。
详细区别与解释
我们可以通 ...
Java标准库中Thread类的基本用法总结大全
目录前言Thread 类的基本用法有:一、线程创建方式1:继承Thread类,重写run方法!方式2:实现 Runnable, 重写 run方法方式3: 继承Thread, 重写run, 使用匿名内部类方式4: 实现Runnable, 重写run, 使用匿名内部类方式5: 使用lambda表达式二、线程中断 - interrupt()三、线程等待 - join()四、线程休眠 - sleep()五、获取线程 ...
Java CAS原理和用法总结
目录一、CAS 原理1. 核心思想2. 操作模型3. 工作流程4. 优点与缺点二、Java 中的 CAS 用法1. 主要的原子类2. 核心方法3. 代码示例总结一、CAS 原理
1. 核心思想
CAS 是一种无锁的原子操作机制。它的核心思想是:我认为值应该是A,如果是,那我就把它改成B;如果不是A(说明被别人改过了),那我就不修改,然后可以选择重试 ...
浅析Spring Validation参数校验的实现原理与进阶用法
目录1、简单使用引入依赖requestBody参数校验requestParam/PathVariable参数校验统一异常处理2、进阶使用分组校验嵌套校验集合校验自定义校验编程式校验快速失败(Fail Fast)@Valid和@Validated区别3、实现原理requestBody参数校验实现原理方法级别的参数校验实现原理摘要:本文首先阐述了JSR303规范与Hibernate Validator的 ...
springboot devtools 热重启配置方法
加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 仅在开发环境生效 -->
</dependency>
加build配置:
<!-- 确保 Maven 插件开启 fork 模式(已存在可忽略) -->
<build>
<plugins>
...
Java Thread.join()方法使用详细解析
目录前言一、核心定位二、重载方法关键说明三、工作原理1. 核心逻辑2. 与Thread.sleep()的核心区别四、实战示例示例 1:无参join()- 主线程等待子线程完全执行运行结果(顺序固定)示例 2:带超时join(long millis)- 主线程等待超时后继续执行运行结果(主线程超时后提前执行)示例 3:多个线程join()- 串行等待 vs 并行等 ...
SPI机制:服务扩展的核心技术
为什么需要SPI机制
SPI和API的区别是什么
SPI是一种跟API相对应的反向设计思想:API由实现方确定标准规范和功能,调用方无权做任何干预; 而SPI是由调用方确定标准规范,也就是接口,然后调用方依赖此接口,第三方实现此接口,这样做就可以方便的进行扩展,类似于插件机制,这是SPI出现的需求背景。
SPI : “接口”位于“ ...
Java利用Spire.PDF高效实现将PDF转换为PPT的完整指南
目录准备工作单文件转换:将 PDF 转换为 PPT代码示例代码解析批量转换:将多个 PDF 文件批量转换为 PPT代码示例代码解析注意事项总结在日常工作中,我们常常需要将 PDF 文件转换为 PPT 文件,尤其是在需要展示报告、项目文件、文档或其他重要信息时。PDF 格式通常用于文档存档,但在需要制作演示文稿时,PPT 格式更为灵活。 ...
解决Java中线程安全问题
目录线程安全问题的核心原因线程安全问题的解决方案方案1:避免共享可变资源(优先推荐)方案2:同步/加锁(控制并发访问)互斥同步(阻塞同步):这是最常见的方案,通过加锁来保证同一时刻只有一个线程操作资源。ReentrantLock(显式锁):比synchronized灵活(可中断、可超时、公平锁),需手动释放锁(必须在finally中) ...
SpringBoot实现网络限速的方法详解
目录概述为什么需要带宽限速核心原理:令牌桶算法技术设计整体流程为什么选择 HandlerInterceptor核心组件职责多维度限速实现全局限速(GLOBAL)API 维度限速(API)用户维度限速(USER)IP 维度限速(IP)关键代码实现1. 令牌桶核心算法2. 响应包装器3. 拦截器获取包装响应4. Controller 获取限速响应参数调优指南桶容量选 ...
zxing解析二维码抛出com.google.zxing.NotFoundException的解决过程
目录1.二维码所有bit都是02.乱码3.优化精度4.开启PURE_BARCODE模式。总结1.二维码所有bit都是0
分析了一下,发现我在生成二维码的时候白色像素填充使用的是透明色,这样在显示的时候因为背景是白色,所以看上去和用手机扫都没有问题,但是自己代码识别的时候就会把透明色识别为黑色,这样就导致整个二维码图片全是黑色像素 ...
MyBatis-Plus中@TableField和@TableId说明
目录一、@TableField(value = “表字段”)二、@TableField(select = false)三、@TableField(exist = false)四、@TableId(type = IdType.AUTO)补充总结一、@TableField(value = “表字段”)
如果表的字段与pojo类的属性值对应不上,就像表字段为user_name,但是属性的为uName时,在查询所有中就会报错, ...
MyBatis-Plus指定字段的查询和排除过程
目录单个字段查询多个字段查询单个字段排除多个字段排除实体类使用注解排除总结单个字段查询
testService.list(Wrappers.<Test>lambdaQuery().select(Test::getId));
多个字段查询
testService.list(Wrappers.<Test>lambdaQuery().select(Test::getId, Test::getAge));
单个字段排除
// 对应实体类字段
testServi ...
Java开发中StepBuilder模式详解
目录一、什么是Step Builder模式1.1 传统Builder模式的局限性1.2 Step Builder模式的优势二、Step Builder基础实现2.1 简单示例:用户注册2.2 工作原理分析三、实战案例:HTTP请求构建器3.1 场景分析3.2 完整实现四、开源框架中的Step Builder应用4.1 OkHttp Request Builder分析4.2 Spring RestTemplate增强五、高级技巧与 ...
Java中判断一个数是否为素数(质数)的方法实例
目录素数的定义素数的例子素数的性质判断素数的方法方法优化进一步优化:跳过偶数总结素数的定义
素数是指大于1的自然数,除了1和它本身外,没有其他正因数。换句话说,素数只能被1和它自身整除。
素数的例子
常见的素数包括2、3、5、7、11、13等。2是唯一的偶数素数,其他偶数(如4、6、8等)均不是素数,因为它们可以被2 ...
一文详解Java中三大异常处理方式(try-catch、throw、throws)
目录前言1. try-catch:自己处理(捕获与解决)语法详解2. throw:主动制造(抛出异常)语法详解3. throws:声明推卸(声明异常)语法详解总结串联:它们是如何配合工作的?总结对比前言
这三种方式(try-catch、throw、throws)是 Java 异常处理的三大基石。要搞懂它们,最重要的是明白它们分别处于异常处理流程中的哪个环 ...
一文详解为什么越来越多项目开始从JDK 8升级到JDK 21
目录从 JDK 8 升级到 JDK 21:哪些新特性真的好用?一篇写给 Java 工程师的实战指南一、为什么越来越多项目开始放弃 JDK 8?二、从 JDK 8 到 JDK 21:真正值得用的能力清单1.var:降低样板代码,而不是降低可读性(JDK 10)传统写法(JDK 8)2. Stream API 增强:更自然的数据流表达(JDK 9–16)3. record:DTO / VO ...
Java中synchronized关键字锁的力度与位置示例详解
目录一、引言二、主流程环节与设计思想1. 方法级锁(对象锁/类锁)2. 代码块级锁(细粒度锁)3. 锁对象选择与锁力度三、源码解析与速记口诀Java synchronized底层原理四、实际业务场景举例五、调试与优化技巧六、与其他技术栈集成方案七、底层实现、高级算法与架构演进1. JVM Monitor锁机制2. 架构演进八、权威资料与参考文 ...
java线上问题排查之内存占用大解决步骤
目录一、快速排查流程二、详细排查步骤与命令步骤1:快速定位问题进程步骤2:分析JVM内存分布步骤3:生成和分析堆转储步骤4:分析堆转储文件使用Eclipse MAT分析使用命令行快速分析步骤5:检查非堆内存三、具体场景排查命令场景1:堆内存泄漏排查场景2:元空间溢出排查场景3:线程内存泄漏排查场景4:直接内存泄漏排查四、 ...
一文彻底搞懂Java BIO、NIO、AIO的核心区别
目录前言一、BIO:传统阻塞式IO1. 核心原理2. 适用场景二、NIO:非阻塞式IO与多路复用1. 核心组件2. 核心原理3. 适用场景三、AIO:异步非阻塞式IO1. 核心原理2. 适用场景四、BIO、NIO、AIO 核心区别对比五、总结前言
在 Java 网络编程和 IO 操作的领域中,BIO、NIO、AIO 是三种核心的 IO 模型。它们分别对应不同的设计理念 ...