
Java
文章平均质量分 76
李少兄
此人不懒,但还是什么东西都没写
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Spring Boot 项目瘦身实战
📌 Spring Boot项目瘦身指南:精准排除无用组件 核心问题:企业级Java项目中引入的common共享模块常导致启动慢、内存高和依赖冲突等问题。 解决方案: 物理层面:通过pom.xml的<exclusions>彻底移除无用依赖 逻辑层面:使用@ComponentScan(excludeFilters=...)实现精准排除,保留必要JAR但阻止扫描 五种排除策略: ANNOTATION:按注解排除 ASSIGNABLE_TYPE:按类型/接口排除 REGEX:按类名正则匹配排除 CUS原创 2025-09-14 22:20:28 · 1118 阅读 · 0 评论 -
记一次事务中更新与查询数据不一致的问题分析
在软件开发过程中,事务(Transaction)的使用是保障数据一致性的核心机制。事务的ACID特性(原子性、一致性、隔离性、持久性)确保了数据库操作的可靠性。原创 2025-07-02 23:15:56 · 839 阅读 · 0 评论 -
解决OSS存储桶未创建导致的XML错误
在Java开发中,调用OSS服务时出现"XML无样式信息"错误,常因存储桶未创建或配置错误导致。本文通过分析问题现象,定位根因在于存储桶未初始化,并提供了手动创建存储桶的方法和Java代码验证方案。同时建议采用统一异常处理、配置隔离等健壮性设计,推荐使用工厂模式和策略模式优化代码结构,支持多云存储切换。最后强调通过单元测试和集成测试确保功能可靠性。原创 2025-06-22 18:20:18 · 2647 阅读 · 0 评论 -
深入解析 HikariCP:Java 世界中最快的 JDBC 连接池
本文深入剖析HikariCP这一高性能JDBC连接池的核心设计与实现原理。通过与传统连接池的性能对比,揭示HikariCP凭借零锁设计、轻量架构等特性实现10万+ TPS的奥秘。详细解读默认配置参数,并提供生产环境调优建议,包括高并发场景的参数调整策略和监控方法。结合电商秒杀案例,展示如何将P99延迟优化至200ms以内。文章还涵盖动态数据源集成和常见问题排查,帮助开发者充分发挥HikariCP的性能优势。原创 2025-06-16 22:41:14 · 1897 阅读 · 0 评论 -
解决Java项目NoProviderFoundException报错
本文系统解析Java项目中NoProviderFoundException错误的根源,提供依赖配置优化、版本兼容性校验及代码规范实践的全流程解决方案,帮助开发者高效修复校验框架缺失问题并规避潜在冲突。原创 2025-06-04 22:36:09 · 1433 阅读 · 0 评论 -
解决 Java 项目中 “zip END header not found“ 错误
zip END header not found 错误的本质是 ZIP 文件结构异常,其根源可能涉及网络、存储、编码、依赖管理等多个层面。通过 清理本地仓库、更换镜像源、手动替换文件、修复 ZIP 格式、排除依赖冲突 等手段,可以系统性地解决这一问题。同时,遵循依赖管理最佳实践和编码规范,可有效预防此类错误的发生。原创 2025-06-04 22:00:19 · 2303 阅读 · 0 评论 -
Java集合初始化:Lists.newArrayList vs new ArrayList()
Java集合初始化选择:Guava的Lists.newArrayList与原生new ArrayList<>()对比分析。核心区别在于依赖要求、代码简洁性和功能扩展性。Guava提供可变参数、自动泛型推导和容量优化(如newArrayListWithExpectedSize),适合复杂集合操作和Guava生态项目;而原生方式更轻量,适用于通用场景。性能基准测试显示两者接近,但Guava在初始化优化和高级功能(集合转换、分片等)上更胜一筹。选择应基于项目需求:已有Guava依赖或需要高级功能时推荐原创 2025-06-02 20:19:11 · 1381 阅读 · 0 评论 -
解决Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field ‘c‘报错
在Java开发中,我们常常会遇到一个令人困惑的异常:Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'c'。这个看似简单的字段访问错误,背后却隐藏着JDK内部API的使用风险、版本兼容性的陷阱,以及Java模块化演进的深层逻辑原创 2025-05-24 16:04:50 · 2374 阅读 · 0 评论 -
解决 @NotBlank 校验 Integer 类型时的 UnexpectedTypeException 异常
在 Java 企业级开发中,数据校验是确保业务逻辑正确性和系统健壮性的关键。Bean Validation(JSR 380)通过注解驱动的校验机制,提供了统一的数据合法性校验能力。然而,随着业务复杂化,开发者常因对注解适用范围的误解而陷入陷阱。例如,对 Integer 类型字段使用 @NotBlank 注解会抛出 UnexpectedTypeException,因为 @NotBlank 仅适用于 String 类型。正确的做法是使用 @NotNull 注解,并结合其他注解如 @Min 和 @Max 进行扩展原创 2025-05-16 09:30:00 · 513 阅读 · 0 评论 -
解决MyBatis-Plus 乐观锁失效问题
在高并发场景下,MyBatis-Plus 通过 @Version 注解和 OptimisticLockerInnerInterceptor 插件提供了乐观锁机制,确保数据一致性。然而,开发者常遇到乐观锁失效的问题,主要原因包括插件未正确配置、实体类未标注 @Version、数据库字段未初始化、更新操作未基于查询后的数据、自定义 SQL 未包含版本号条件、事务未正确开启、并发测试未触发冲突、版本字段类型不匹配以及 MyBatis-Plus 版本过低等。为解决这些问题,开发者需确保正确配置插件、标注版本号字段、原创 2025-05-09 09:00:00 · 1276 阅读 · 0 评论 -
解决“Required request body is missing”错误
是开发者常遇到的典型错误。该问题通常表明客户端未正确发送请求体(request body),或服务器端未能正确解析请求体数据。在前后端联调过程中,“原创 2025-05-08 09:15:00 · 2768 阅读 · 0 评论 -
解决Java 中 `NoClassDefFoundError` 异常
在 Java 开发中,是运行时异常中最常见的问题之一。它通常出现在程序编译成功后,却在运行时因JVM 无法找到某个类的定义而抛出。这种错误的核心特征是“编译时存在,运行时缺失”,背后可能涉及依赖管理、类路径配置、构建工具链或 JVM 类加载机制的复杂交互。什么是?当 JVM 在运行时尝试加载某个类,但无法找到其定义时抛出此错误。区别于,后者是显式加载类时(如)触发的异常,而前者是隐式调用(如访问静态字段或方法)导致的。覆盖loadClass。原创 2025-05-01 05:00:00 · 2246 阅读 · 0 评论 -
Spring事件驱动机制
在现代企业级应用开发中,组件之间的解耦与协作是系统设计的核心目标之一。Spring框架提供的事件驱动机制(Event-Driven Mechanism)完美契合这一需求,通过观察者模式实现组件间通信,提升系统的可维护性和扩展性。Spring的事件驱动机制基于观察者模式事件(Event):继承自的类,封装事件数据。监听器(Listener):通过接口或注解定义,响应特定事件。发布者(Publisher):通过接口发布事件,通常由实现。事件类需继承。原创 2025-04-22 09:30:00 · 1071 阅读 · 0 评论 -
Spring中的 MultipartFile
MulitpartFile 接口时Spring框架提供的一个用于处理文件上传的工具, 在SpringMVC和SpringBoot中, 它允许用户将文件作为请求的一部分上传原创 2025-04-21 09:30:00 · 1065 阅读 · 0 评论 -
JAR包与WAR包的区别
全称:Java Archive(Java归档文件)。本质:一种基于ZIP格式的压缩文件,用于打包Java类文件(.class)、资源文件(如图片、配置文件)、元数据(如)等。历史背景:由Sun Microsystems(现Oracle)提出,最初用于简化Java类文件的分发和管理。全称:Web Application Archive(Web应用归档文件)。本质:基于JAR的扩展格式,专为Web应用设计,包含Servlet、JSP、HTML、CSS、JavaScript等资源。规范。原创 2025-04-15 09:30:00 · 2020 阅读 · 0 评论 -
Hutool工具包中`copyProperties`和`toBean`的区别
Hutool是一个Java工具包,它封装了许多常用的工具类和方法,旨在简化Java开发过程中的常见操作。其中,BeanUtil工具类提供了一系列用于对象转换和属性复制的方法,和toBean就是其中的两个重要方法。方法的主要功能是将一个对象的属性值复制到另一个对象中。它会遍历源对象的所有属性,并将其值赋给目标对象中具有相同名称的属性。toBean方法用于将一个Map或者其他类型的对象转换为Java Bean对象。它会根据Map中的键值对,将其映射到Java Bean对象的属性上。原创 2025-04-14 22:11:42 · 1130 阅读 · 0 评论 -
记一次MyBatis-Plus 配置未生效的解决方案
配置类未生效的两大核心原因:缺失@Configuration注解和未通过AutoConfiguration.imports声明。掌握这些原理和技巧后,可避免因配置类未加载导致的MyBatis-Plus插件失效、Mapper未扫描等问题,并提升Spring Boot项目的健壮性和可维护性原创 2025-04-04 17:00:00 · 1702 阅读 · 0 评论 -
Apache Commons Lang3 中的 `isNotEmpty` 与 `isNotBlank`的区别
在 Java 开发中,字符串的空值(null)、空字符串(“”)和空白字符串(如 " ")的判断是高频需求。Apache Commons Lang3 的isNotEmpty和isNotBlank,它们在功能上看似相似,但实际使用场景和逻辑存在显著差异。isNotBlank是更安全的选择在 90% 的业务场景(如用户输入验证)中,推荐使用isNotBlank,因为它能彻底排除空白输入。isNotEmpty的适用场景有限仅当需要保留空白字符(如特殊格式输入)时使用。原创 2025-04-04 10:00:00 · 1838 阅读 · 0 评论 -
Unirest:优雅的Java HTTP客户端库
Unirest 是一个轻量级、简洁的 Java HTTP 客户端库,旨在简化 HTTP 请求的编写和处理。它通过直观的 API 设计,让开发者可以像操作本地方法一样发送 HTTP 请求,无需处理复杂的底层细节。原创 2025-04-03 19:11:28 · 1364 阅读 · 0 评论 -
Java项目中`localhost`与`127.0.0.1`的区别
尽管它们常被等同使用,但二者在底层机制、协议支持、可靠性等方面存在关键差异。在Java项目开发中,配置数据库、Redis等本地服务时,:定期检查服务监听地址与防火墙规则,避免不必要的网络暴露。:适合生产环境,确保可靠性、安全性和性能,无外部依赖。:适合开发/测试环境,提供灵活性和可读性,但依赖。,通过配置文件隔离环境参数,确保无配置依赖。文件实现环境切换,YAML配置提升可读性。继续使用localhost。使用localhost。使用127.0.0.1。使用127.0.0.1。是否需要快速切换环境。原创 2025-03-31 09:30:00 · 1026 阅读 · 0 评论 -
Java开发必知:`@SuppressWarnings`注解
在Java开发中,编译器的警告(Warning)是帮助开发者发现潜在问题的重要工具。然而,某些场景下,警告可能源于代码兼容性、遗留系统或第三方库的限制,此时开发者需要一种可控的方式来抑制这些警告,避免被无关提示干扰。注解正是为此而生,它通过标注代码段,让编译器“静音”特定警告,从而提升代码的可维护性与开发效率。通过自定义检查工具(如SpotBugs、SonarQube),可扩展自定义警告类型并抑制。补充组合使用。原创 2025-03-31 10:00:00 · 2263 阅读 · 0 评论 -
Spring Boot 2.x 到 3.x 迁移实战:Redis 配置篇
的深化,Redis 配置与集成方式发生了显著变化。今天简单讲下redis的变化。Spring Boot 3.x 的配置调整并非简单的语法变化,而是。随着 Spring Boot 3.x 的发布,其对。原创 2025-03-28 20:49:38 · 1676 阅读 · 0 评论 -
【java笔记】泛型、包装类、自动装箱拆箱与缓存机制
泛型使用优先使用泛型类/方法,避免原始类型。类型参数命名遵循TE等约定,提高可读性。包装类与缓存小整数(-128~127)直接赋值(利用缓存)。比较包装类时始终用equals(),避免==陷阱。自动装箱拆箱避免在循环中高频使用,优先基本类型。集合操作透明处理,无需显式转换。字符串转换明确需求:基本类型用parseInt,对象用valueOf。处理异常:包裹try-catch处理非数字字符串。原创 2025-03-27 23:01:20 · 1183 阅读 · 0 评论 -
Java 基本数据类型 vs 包装类(引用数据类型)
优先使用基本类型当数据不可为空时(如计数器、索引)性能关键路径(如循环内高频运算)方法内部临时变量(减少对象创建)必须使用包装类字段允许 null(表示业务状态)泛型集合存储(反射、序列化等框架要求需要调用对象方法(如自动装箱的陷阱避免无意识拆装箱:// 反模式:频繁拆装箱(性能隐患)// 拆箱为 int 再运算缓存值注意范围:Integer x = 127;// 缓存对象(-128~127)// true(缓存命中)// 新对象// false(无缓存)原创 2025-03-27 23:00:22 · 1268 阅读 · 0 评论 -
Java 字符串创建双引号和构造器有什么区别?
在 Java 生态中,字符串是使用最频繁的对象之一。与看似等价,实则蕴含着 JVM 内存管理的精妙设计。场景特征双引号创建(推荐)构造器创建(谨慎使用)固定常量(如配置项)✅ 内存复用❌ 内存浪费动态生成字符串❌ 编译期限制✅ 运行时构建内存敏感场景(如嵌入式)✅ 常量池共享❌ 堆内存开销需要独立对象实例❌ 共享引用✅ 独立内存地址高性能计算(如算法)✅ 无构造开销❌ 方法调用开销终极建议:优先使用双引号创建字符串,利用常量池的天然优化。原创 2025-03-30 09:30:00 · 669 阅读 · 0 评论 -
Java字符集问题:常见坑点与解决方案
字符集(Charset)是计算机系统中将字符与二进制数据映射的规则。UTF-8:支持全球所有字符,兼容ASCII。GBK:支持中文简体,占用2字节。ISO-8859-1:支持拉丁字母,不支持中文。:Windows系统常见编码。字符集问题的本质是编码标准的不一致。统一编码标准:全项目使用UTF-8。显式指定编码:在所有I/O操作中明确编码。配置工具链:IDE、构建工具、服务器均设置UTF-8。异常处理与日志:捕获异常并记录编码信息。附录:常见字符集对照表字符集用途备注UTF-8。原创 2025-03-28 09:30:00 · 1159 阅读 · 0 评论 -
跨域问题深度解析与六大解决方案
浏览器的安全机制,要求请求的协议、域名、端口必须完全一致,否则视为跨域。请求→同源请求→跨域(端口不同)请求→跨域(协议不同)跨域问题的解决需要结合项目架构、安全需求与开发效率综合考量。CORS作为标准方案应优先采用,而Nginx、API网关等则适用于复杂场景。原创 2025-03-30 06:00:00 · 1509 阅读 · 0 评论 -
快速创建 Java 8 兼容的 Spring Boot 项目(阿里云脚手架)
即可快速创建支持 Java 8 的 Spring Boot 项目,无需复杂操作!阿里云的脚手架既解决了 Java 8 兼容性问题,又集成了丰富的生态组件,适合企业级开发。原创 2025-03-23 16:56:01 · 1579 阅读 · 0 评论 -
Java 的 AutoCloseable 接口
在 Java 开发中,资源管理(如文件流、数据库连接、网络连接等)一直是一个核心问题。手动关闭资源不仅繁琐,还容易因代码复杂度导致资源泄漏。接口与语句的结合,为这一问题提供了优雅的解决方案。是 Java 核心库中定义的一个接口(位于java.lang所有实现的类(或其子接口Closeable)必须提供一个close()方法,用于释放资源。if (!isOpen) throw new IllegalStateException("资源已关闭");// 使用资源的逻辑。原创 2025-03-23 16:22:54 · 1521 阅读 · 0 评论 -
Java 中的 `instanceof` 解构
在 Java 的类型系统中,类型检查和类型转换一直是开发者需要频繁处理的任务。传统上,我们通过instanceof判断对象类型,再通过强制类型转换访问其成员。然而,这种模式不仅代码冗余,还容易引发类型安全问题。随着 Java 14 引入的模式匹配(Pattern Matching)特性,这一痛点得到了革命性改进:instanceof可以直接解构对象,在类型检查的同时自动完成类型转换,使代码更简洁、更安全、更优雅。Java 的instanceof解构语法通过模式匹配。原创 2025-03-20 09:30:00 · 995 阅读 · 0 评论 -
Spring Boot 静态访问配置属性的解决方案
在Spring Boot开发中,静态访问配置信息是一个常见需求,尤其是在工具类、常量类或非Bean类中直接获取配置值。,并在工具类、静态方法或非Bean类中直接访问该值。传统依赖注入方式(如。自动绑定机制,将配置值通过setter方法直接赋值给静态变量。静态引用直接获取配置Bean,并通过静态方法封装访问。对象直接获取配置值,并通过工具类静态方法封装访问。静态访问配置的解决方案本质是。假设我们的应用需要从。:利用Spring的。:利用Spring的。:利用Spring的。原创 2025-03-18 20:03:38 · 1643 阅读 · 0 评论 -
OSHI Java库:跨平台系统与硬件信息采集神器
在Java生态中,获取系统硬件和软件信息的传统方案往往依赖复杂的本地库或平台特定的API,这使得跨平台开发变得困难。应运而生,它以零本地依赖跨平台兼容性和高扩展性为核心优势,成为Java开发者进行系统监控、资源管理的首选工具。OSHI凭借其零依赖、跨平台、高扩展性的特性,成为Java开发者构建系统监控工具的基石。无论是基础的资源统计,还是深度的硬件分析,OSHI都能以优雅的API和简洁的代码实现复杂功能。随着版本迭代(如6.x系列新增传感器支持),其应用边界将持续扩展。原创 2025-03-14 19:20:52 · 1906 阅读 · 0 评论 -
Java 中 `File`、`Path`、`Paths` 和 `Files` 类
类是 Java 早期用于表示文件和目录路径名的抽象类,位于java.io包中,自 JDK 1.0 版本就已存在。它主要用于文件和目录的基本操作,如创建、删除、重命名等,以及获取文件和目录的属性信息。虽然File类在功能上有一定的局限性,但在简单的文件操作场景中仍然非常实用。接口是 Java 7 引入的NIO.2包中的一部分,位于包。它表示文件系统中的路径,提供了比File类更强大和灵活的路径操作功能。Path对象可以用于定位文件或目录,并且支持路径的合并、规范化、相对化等操作。类是一个工具类,位于。原创 2025-03-14 09:30:00 · 1146 阅读 · 0 评论 -
JWT解密Token报错:SignatureException
该异常本质是JWT令牌的签名与服务端使用密钥重新计算的签名不一致,表明令牌可能被篡改或密钥配置错误。US-ASCII编码。原创 2025-03-12 10:30:00 · 3048 阅读 · 0 评论 -
Jackson、FastJSON 与 Gson简单对比
在现代软件开发中,JSON(JavaScript Object Notation)已成为数据交换的事实标准。Java 生态中诞生了多个高性能 JSON 处理库,其中 Jackson、FastJSON 和 Gson 是最具代表性的三个。维度JacksonFastJSONGson性能稳定高效速度极快性能中等功能全面强大轻量灵活简洁实用注解丰富灵活简洁直接基础支持社区成熟完善活跃更新官方维护安全较高需谨慎配置较高推荐场景企业级应用:Jackson高性能服务:FastJSON。原创 2025-03-12 09:30:00 · 1181 阅读 · 0 评论 -
FastJSON常用注解
在当今的 Java 开发领域,JSON 作为一种轻量级的数据交换格式,被广泛应用于前后端数据交互、配置文件存储等场景。FastJSON 作为阿里巴巴开源的高性能 JSON 处理库,以其简洁的 API 和出色的性能受到众多开发者的青睐。FastJSON 是阿里巴巴开源的一个高性能的 JSON 处理库,它能够快速地将 Java 对象序列化为 JSON 字符串,也能高效地将 JSON 字符串反序列化为 Java 对象。其特点包括解析速度快、使用简单、支持丰富的特性等。原创 2025-03-11 20:52:39 · 1365 阅读 · 0 评论 -
解决PDMan提示未检测到jdk、jvm所需内存不足
解决PDMan提示未检测到jdk、jvm所需内存不足。原创 2025-03-11 09:30:00 · 820 阅读 · 0 评论 -
Spring Boot项目打包第三方Jar包
选择策略长期维护项目 → system scope + 版本控制临时验证 → 资源目录打包复杂场景 → 依赖复制插件最佳实践建立本地Jar仓库管理机制使用版本号规范命名(如在CI/CD流程中加入Jar完整性校验。原创 2025-03-10 20:02:27 · 1240 阅读 · 0 评论 -
使用 OkHttp 与 FastJSON 发送 POST 请求
在现代 Java 开发中,与外部服务进行数据交互是极为常见的需求。其中,发送 HTTP POST 请求以提交数据更是屡见不鲜。OkHttp 作为一款高效且功能强大的 HTTP 客户端库,以及 FastJSON 作为阿里巴巴开源的高性能 JSON 处理库,二者的结合能为我们提供便捷、高效的数据交互解决方案。为提高代码的可维护性,将一些常量单独定义在一个类中。// 定义 API 的 URL,方便后续修改和维护// 定义 JSON 数据的媒体类型,指定字符编码为 UTF - 8定义Student。原创 2025-03-10 10:30:00 · 1648 阅读 · 0 评论 -
Java 中 System.load 和 System.loadLibrary 方法
在 Java 开发中,有时候我们需要调用本地代码(如 C、C++ 编写的代码)来实现一些特定的功能,比如提高性能、访问底层硬件等。Java 提供了 Java Native Interface(JNI)来实现 Java 代码与本地代码的交互。而和这两个方法在加载本地库时起着关键作用。本地库是使用本地编程语言(如 C、C++)编写并编译生成的二进制文件。Windows:通常为.dll(Dynamic Link Library)文件。Linux:通常为.so(Shared Object)文件。Mac OS。原创 2025-03-10 09:30:00 · 1621 阅读 · 0 评论