java项目中的坑
文章平均质量分 71
devilnumber
专注 Java 技术深耕,拒绝浅尝辄止,沉淀后端开发实战经验,记录学习点滴,奔赴技术长远之路,稳步进阶架构师。
代码写初心,技术赴远方,一名持续进阶的 Java 开发者,分享工作干货、面试经验、技术进阶心得。
闲时挥拍乒乓,技术运动两不忘
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
避坑_IDEA 提取方法(Extract Method)工具
IDEA的Extract Method(Ctrl+Alt+M)功能在多数场景下安全高效,能自动处理变量、返回值与作用域。但存在八大“坑”:选中不全、多输出变量、匿名类/lambda捕获变化、break/continue跨层失效、synchronized锁范围改变、return退出层级错误、泛型推断出错及格式问题。尤其控制流跳转与并发逻辑易出错,语法无误却行为异常。建议提取前编译通过,提取后手动核对逻辑并运行单元测试,切勿盲目提交。本质:语法安全 ≠ 语义正确。原创 2026-10-16 10:40:45 · 150 阅读 · 0 评论 -
Oracle → MySQL 迁移【静默错误坑】汇总
摘要要突出不报语法错误但结果数据错误,适合ERP/财务迁移场景。内容涵盖substr下标、空串与NULL、隐式转换、排序、分组、函数等静默坑。但要求不超过150字。需要简洁概括。</think>Oracle迁移MySQL的静默数据错误风险极高:substr起始位0、空字符串与NULL语义、日期/数字隐式转换、NULL排序等均不报错但结果跑偏;关闭only_full_group_by后分组随机取值、in子查询含NULL行为不一致原创 2026-09-02 10:58:07 · 244 阅读 · 0 评论 -
Oracle 与 MySQL substr 函数差异总结
内容核心是Oracle和MySQL的substr起始下标差异及兼容写法。摘要要点:Oracle从0开始但0等价1,MySQL从1开始且0返回空;负数一致;建议用substr(col,1,3)统一;case when兼容。注意字数。</think>摘要:Oracle与MySQL的substr起始下标不同:Oracle的0等价于1,而MySQL从1开始且传0返回空串,易致静默错误。负数索引两边一致。建议统一使用substr(col原创 2026-09-02 10:54:09 · 355 阅读 · 0 评论 -
类中内部类一定是静态的吗
Java内部类分为四种:成员内部类(非静态)、静态内部类(加static)、局部内部类(方法内定义)和匿名内部类。静态内部类不依赖外部实例,只能访问外部类的静态成员;普通成员内部类需通过外部实例创建,可访问外部类所有成员。局部和匿名内部类都不能用static修饰。关键区别在于是否使用static关键字,静态内部类可包含静态成员,而普通成员内部类不能。接口中的内部类默认是public static的。原创 2026-08-20 09:37:03 · 276 阅读 · 0 评论 -
旧逻辑兼容整改之其他方案(分二)
摘要:针对VO层设计避免无脑继承或复制字段的问题,提供了多种解决方案:组合(聚合)模式、接口抽取公共字段、MapStruct映射、动态JSON视图等。其中,组合模式通过持有父VO对象实现字段透传,结合@JsonUnwrapped可平铺输出但存在反序列化问题;接口抽取统一方法签名但需复制字段;最推荐业务项目使用MapStruct,实现实体与VO解耦,灵活映射字段;动态视图(@JsonView)适合简单接口复用VO,复杂场景维护困难。核心原则是分离实体继承与VO契约,优先选择MapStruct确保工程稳健性。原创 2026-08-13 15:22:45 · 199 阅读 · 0 评论 -
旧逻辑兼容整改之继承还是全字段(分一)
【摘要】本文探讨了VO(值对象)继承设计的两种方案及最佳实践。方案1(继承VO)优点在于复用父类字段、自动同步修改,但会暴露不必要字段;方案2(字段拷贝)可精确控制输出字段但存在重复代码。核心建议:根据接口需求选择继承或手写VO,当需剔除父类字段时应采用全字段拷贝。特别强调VO继承不等于业务类继承,需警惕因继承导致敏感字段泄露,必要时可通过DTO转换层实现字段过滤。工程实践上,数据库实体可大胆继承,而VO设计应以接口契约为主导。原创 2026-08-13 14:59:31 · 193 阅读 · 0 评论 -
Java代码重构两万字超全总结(实战案例+易错点+核心原则)
本文是一篇系统性的Java代码重构指南,重点讲解了重构的核心理论、设计原则和十大经典重构手法。文章首先阐述了重构的必要性,指出劣质代码会导致维护成本上升、扩展性差等问题,而重构能提升代码质量。重构必须遵守行为不变性、渐进式优化和结构优先性三大铁律,并在合适的时机进行。文中详细介绍了十大重构手法,包括提取方法、提取变量、替换魔法数字等基础重构,以及多态替代分支、拆分长方法等进阶技巧,每个手法配有正反案例和易错点分析。此外,文章还提供了企业级重构的标准化流程和避坑指南,强调重构应遵循团队规范,避免过度重构和业务原创 2026-07-02 14:21:13 · 387 阅读 · 0 评论 -
Java 最新 50 个代码梗
这篇文章总结了Java开发中常见的高频梗点,主要涉及JDK8到JDK21的特性使用误区,分为六大类: Lambda&Stream相关:如Stream一次性使用、peek误用、并行流问题等 空指针&Optional:包括Optional滥用、空指针防护缺失等 并发编程:线程池配置、ThreadLocal内存泄漏等陷阱 集合与内存:大数据OOM、集合视图误解等问题 异常处理:日志打印不当、异常吞没等不良实践 版本特性:包括语法糖误解、版本特性误用等 文章通过短小精悍的"梗"形原创 2026-06-18 10:16:36 · 182 阅读 · 0 评论 -
java面试场景题中指令重排的解决方案
文章摘要:本文分析了多线程环境下对象初始化重排导致的数据错乱问题,并提出四种解决方案。核心风险在于CPU/编译器指令重排可能导致半初始化对象被其他线程访问。最优方案是使用局部变量中转(无性能损耗)或给静态引用加volatile(代码简洁);次优方案包括同步锁(性能较差)和构造器全量初始化(适用场景有限)。特别强调仅对字段加volatile无效,必须正确处理引用发布顺序。方案选型需结合具体场景,优先推荐局部变量中转方案。原创 2026-06-17 17:45:47 · 484 阅读 · 0 评论 -
超大集合流式收集不做分片的解决方案
Java大数据处理内存溢出(OOM)解决方案 问题分析:一次性加载百万级数据到内存,使用Stream全量收集为Map会导致堆内存暴涨,引发OOM。并行流(parallelStream)会进一步加剧内存压力。 核心风险: 全量数据驻留内存,GC无法及时回收; 接口超时、服务卡顿甚至连锁故障。 解决方案(优先级排序): 数据库分页/分片查询:分批加载处理(如单页2000条),源头控制数据量; 集合手动分片切割:全量数据分批次处理,降低瞬时内存峰值; SQL精简字段:仅查询必要字段,减少单条数据内存占用; 海量数原创 2026-06-17 17:30:58 · 398 阅读 · 0 评论 -
Java Lambda 表达式 200 条常见问题、坑点、易错点、规范清单
摘要:本文系统梳理Java 8+ Lambda/Stream相关200个核心问题,覆盖语法、编译、运行、性能等全场景,适用于面试、排错及编码规范参考。 核心要点: 语法与编译:Lambda需函数式接口,类型推断、变量作用域、方法引用规则严格,常见编译错误包括目标类型歧义、final变量冲突等(30条)。 Stream操作:中间/终止操作区分,收集器(toMap/groupingBy)易错点(如键重复NPE),并行流线程安全、顺序不可控问题(60条)。 性能与异常:闭包内存泄漏、装箱开销、并行流阻塞风险;La原创 2026-06-15 19:31:15 · 203 阅读 · 0 评论 -
java问题之`Map.of` does not allow null values
摘要:Java中Map.of()方法创建不可变Map时不允许null值,会抛出NullPointerException。解决方案是改用可变Map实现如HashMap,它允许null值。关键区别在于不可变Map通过requireNonNull严格校验,而可变Map更灵活但需手动管理数据完整性。其他方案包括使用Guava的不可变集合或Collections.unmodifiableMap包装。设计时需要权衡不可变性、灵活性和线程安全等因素,对于复杂场景建议采用Optional类型或自定义验证逻辑。原创 2026-05-24 14:42:41 · 234 阅读 · 0 评论 -
Maven的打包的两种方式
Maven打包的两种方式:1)直接使用命令行"mvn clean package"进行全局配置打包,但无法使用IDEA的Maven插件;2)在IDEA中配置Maven主目录为"Use Maven wrapper",即可使用右侧的Maven插件打包。关键在于正确配置Maven的位置,选择对应方式实现打包需求。两种方法各有利弊,可根据实际开发场景灵活选用。原创 2026-05-07 19:14:25 · 49 阅读 · 0 评论 -
java开发中判空问题的思考
Java开发中,合理处理空指针异常(NPE)需要平衡安全性和代码简洁性。推荐使用Optional、工具类(ObjectUtils/StringUtils)和提前返回策略替代冗余的if判空,同时通过初始化非空对象、@NotNull注解等方式从源头减少null值。判空应聚焦于不可控数据(外部输入、框架注入等),并注意分层处理(边界数据必须判空)和兜底策略。最终目标是让判空逻辑隐形化,使代码既安全又聚焦业务逻辑。核心原则是"谁产生谁不保证非空,谁使用谁判空"。原创 2025-12-18 17:54:06 · 793 阅读 · 0 评论 -
java的异步任务优化
本文介绍了一种基于Java8的CompletableFuture实现异步任务超时和异常处理的优化方案。通过封装wrapTask方法,为每个异步任务添加10秒超时控制和全局异常捕获功能。方案采用双线程池隔离设计(全局调度线程池和业务执行线程池),避免资源抢占,并通过supplyAsync替代runAsync实现任务结果统一收集。优化后的方案解决了任务执行超时或异常导致整体业务失败的问题,同时提供了更精准的监控和调优能力。在Spring项目中建议使用ThreadPoolTaskExecutor替代原生线程池,以原创 2025-12-10 17:32:28 · 192 阅读 · 0 评论 -
Springboot之联调对接字符串的坑
本文提出一种基于AOP的后端解决方案,用于处理前后端分离项目中字符串"null"转换为null的需求。通过自定义注解@NullStringToNull和切面类NullStringToNullAspect,实现对标注参数自动转换。该方法相比手动添加判断代码更简洁高效,只需在需要处理的参数上添加注解即可完成转换。文章还列举了其他替代方案,如工具类封装和Optional处理,但指出AOP方案最具优势。最后建议最佳实践是从前端源头处理"null"转换问题,但为保持前端代码不变原创 2025-07-15 18:52:52 · 367 阅读 · 0 评论
分享