52 | 总结篇Java 踩坑的 10 条黄金法则摘要52 篇文章、8 个辑、覆盖 Java 基础到生产实战。本文把最核心的 10 条法则提炼出来方便你记忆和团队分享。一、黄金法则背诵版法则 1对象比较一律用equals基本类型int、long...→ 用 引用类型比较值相等 → 用 equals String 比较 → 永远 equals别用 包装类型Integer、Long...→ equals 或先拆箱相关文章第 01 篇法则 2浪费BigDecimal禁止用double构造#new BigDecimal(0.1) → ❌ 精度已丢失 new BigDecimal(0.1) → ✅ 正确 BigDecimal.valueOf(0.1) → ✅ 正确内部先转 String相关文章第 03 篇法则 3synchronized锁定的是对象不是代码块#String、Integer、Boolean 不要做锁对象可能共享 锁对象必须是 private final 的 缩小锁范围只包住需要互斥的代码相关文章第 16 篇法则 4i不是原子操作高并发用Atomic类#i → 读 → 改 → 写三步不是原子 低并发 → AtomicInteger 高并发 → LongAdderJava 8相关文章第 18 篇法则 5Transactional自调用不生效必须拆 Service#同一个类里调用 Transactional 方法 → ❌ 不生效 拆到另一个 Service → ✅ 经过代理 Exception 类型 → 必须指定 rollbackFor Exception.class相关文章第 32 篇法则 6集合框架先想清楚再选#List 查多改少 → ArrayList List 头插/头删多 → LinkedList Map 高频查找 → HashMap Map 需要排序 → TreeMap 并发 Map → ConcurrentHashMap相关文章第 09 ~ 15 篇法则 7线程池禁止用Executors创建#✅ 用 ThreadPoolExecutor 手动创建 ✅ 队列必须有界防止 OOM ✅ IO 任务用独立线程池别占满 commonPool ✅ 提交任务必须处理异常submit 后必须 get相关文章第 19、20、24 篇法则 8JVM 参数不只设-Xmx#-Xmx 只限制堆 Metaspace → -XX:MaxMetaspaceSize DirectBuffer → -XX:MaxDirectMemorySize 容器化 → -XX:UseContainerSupportJDK 8u191相关文章第 29 篇法则 9MyBatis 能用#{}就不用${}##{} → ? 占位符预编译安全 ✅ ${} → 字符串替换有注入风险 ❌ 动态表名用 ${} 时必须白名单校验相关文章第 41 篇法则 10生产问题保留现场优先于重启#OOM → -XX:HeapDumpOnOutOfMemoryError自动 dump 死锁 → jstack pid dump.txt保留线程堆栈 慢查询 → 开慢查询日志slow_query_log 重启前 → 一定先 dump 现场相关文章第 50、51 篇二、记忆卡片速查#第一辑基础语法篇8 篇#核心记忆点一句话 vs equals 比地址equals 比值自动拆箱包装类型运算前必须判空BigDecimal禁止用 double 构造String 循环内拼接必须用 StringBuilderequals hashCode必须同时重写否则 HashMap 失效try-finallyfinally 里别写 return泛型擦除运行期拿不到泛型类型枚举 ordinal别用用自定义 code 字段第三辑并发编程篇10 篇#核心记忆点一句话synchronized锁定对象不是代码块volatile保证可见性不保证原子性i不是原子操作线程池 submit异常被吞必须 get()线程池队列必须有界防止 OOMCountDownLatchcountDown() 必须放 finallyThreadLocal用完必须 remove()防止泄漏DCL 单例必须加 volatileCompletableFuture生产环境必须指定自定义线程池锁选型简单用 synchronized高级用 ReentrantLock三、团队落地建议#3.1 代码评审 Checklist#把这份 Checklist 加入团队的 PR 模板Java 代码评审 Checklist踩坑预防版 □ 1. 字符串比较是否用了 equals禁止 □ 2. BigDecimal 是否用了 String 构造禁止 double 构造 □ 3. 包装类型参与运算前是否判空防止 NPE □ 4. 重写 equals 是否同时重写了 hashCode □ 5. ArrayList 循环删除是否用了 removeIf禁止 foreach 里 remove □ 6. 线程安全类是否选对了ConcurrentHashMap vs HashMap □ 7. 锁对象是否是 private final 的禁止 String/Boolean 做锁 □ 8. i 在并发场景下是否用了 AtomicInteger □ 9. Transactional 方法是否是 public 的是否避免了自调用 □ 10. 线程池是否用 ThreadPoolExecutor 手动创建禁止 Executors □ 11. 提交到线程池的任务内部是否有 try-catch □ 12. ThreadLocal 是否在 finally 里 remove() 了 □ 13. Async 方法是否加了 EnableAsync是否避免了自调用 □ 14. MyBatis 的 SQL 是否用了 #{}禁止用 ${} 拼 WHERE 条件 □ 15. 分页查询偏移量是否超过了 10000超过了要用延迟关联优化 □ 16. 生产环境 -Xmx 是否同时配了 MaxMetaspaceSize 和 MaxDirectMemorySize □ 17. 日志打印对象时toString() 是否可能递归 □ 18. 用 SimpleDateFormat 的地方是否线程安全建议迁移到 DateTimeFormatter □ 19. 实现 Serializable 的类是否写了 serialVersionUID □ 20. OOM 参数是否加了 -XX:HeapDumpOnOutOfMemoryError3.2 IDEA 必装插件#插件作用Alibaba Java Coding Guidelines扫描阿里开发手册规约SonarLint静态代码分析提前发现 bugMyBatisXMyBatis XML 和 Mapper 互跳警告 ${} 风险Lombok减少样板代码自动生成 *ArgsConstructor3.3 新人入职培训#把前 8 篇基础语法篇作为新人必读要求通读 8 篇文章每篇文章后面附 3 道选择题自测排入新人入职第一周的培训计划四、专栏使用建议#4.1 作为团队知识库#建议存放位置 - 腾讯文档方便协作、搜索 - 公司内网 WikiConfluence / 飞书文档 - 个人博客Hexo / HugoSEO 友好4.2 持续更新#Java 在演进坑也在变化。建议每遇到一个新坑写一篇新文章Java 新版本每 6 个月一个 LTS发布后检查是否有新的踩坑场景读者留言里的高频问题补充到对应文章里4.3 配套练习#建议为每篇文章写一个「课后练习」JUnit 测试让读者运行测试时直观感受 bug// 第 01 篇配套练习TestpublicvoidtestStringComparison(){Strings1newString(hello);Strings2hello;assertFalse(s1s2);// 预期 比较失败assertTrue(s1.equals(s2));// 预期equals 成功}五、结语#踩坑不可怕可怕的是在同一个坑里跌倒两次。这份专栏的目标是让你把「不知道有这个坑」变成「我知道这里有坑绕过去」。Java 还在演进新的坑会不断出现。保持好奇心保持对底层原理的追问你就能在大部分坑出现之前就识别它们。祝编码愉快生产环境 0 Bug。全专栏完。52 篇文章8 个辑祝你踩坑越来越少。附录文章索引快速查阅#辑文章范围核心主题第一辑基础语法篇01 ~ 08 vs equals、BigDecimal、String、枚举 ordinal第二辑集合框架篇09 ~ 15CME、HashMap 扩容、HashSet 可变对象、Stream 并行流第三辑并发编程篇16 ~ 25synchronized、volatile、i、线程池、ThreadLocal、DCL、CompletableFuture第四辑JVM 与性能篇26 ~ 31toString 递归、反射性能、finalize、OOM、Soft/Weak Reference、Lambda this第五辑Spring/Spring Boot 篇32 ~ 39Transactional、Field 注入、Async、Value、循环依赖、AOP、配置加载第六辑数据库与 MyBatis 篇40 ~ 44PreparedStatement null、#{} vs ${}、连接池、LIMIT 优化、保留字第七辑日常开发技巧篇45 ~ 49日志 toString、switch 穿透、SimpleDateFormat、Optional、serialVersionUID第八辑综合实战篇50 ~ 52OOM 排查、死锁定位、总结篇
2026年江西第三方电梯检测企业哪家强 选规范机构实用参考攻略 - 热点品牌推荐 第三方电梯检测是电梯**运维的核心环节,本文梳理了正规机构的服务标准、选购指标与适用场景,为江西及周边区域有相关需求的用户提供客观选型参考。 一、什么是第三方电梯检测 第三方电梯检测是指于电梯使用方、生产方…
2026年7月工厂专用扫地机Top3品牌测评推荐 - 工业清洁测评社 倘若你正为工厂清洁方面的棘手难题而苦恼, 渴望拥有一台实实在在耐用、成效显著且能让人省心的扫地机, 然而却不清楚怎样去挑选倘若你正为工厂清洁方面的棘手难题而苦恼, 渴望拥有一台实实在在耐用、成效显著且能让人省…
亨得利官方钟表服务中心|官方地址与售后服务电话权威信息公示(2026年7月最新) - 亨得利官方 亨得利官方钟表服务中心在2026年7月正式完成服务体系的全面更新。全国统一售后服务热线为400-878-6612,客服在线时间为每日8:00至22:00。官方售后地址同步完成变更,覆盖全国主要城市,用户可通过到店或邮寄方式获得服…
如何在5分钟内通过开源工具提升WeMod游戏体验?完整配置教程 如何在5分钟内通过开源工具提升WeMod游戏体验?完整配置教程 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 还在寻找提升游戏体验的解决…
写歌作词一体化平台怎么选:8款AI作词工具的使用思路 写歌词最难的,往往不是完全没想法,而是脑子里明明有一个主题,写出来却总觉得不顺。主歌铺了半天,副歌还是没有一句能记住;前两段很克制,写到后面突然像换了个人;为了押韵硬塞几个词,…
如何快速掌握iOS虚拟定位:3步操作完整指南 如何快速掌握iOS虚拟定位:3步操作完整指南 【免费下载链接】iFakeLocation Simulate locations on iOS devices on Windows, Mac and Ubuntu. 项目地址: https://gitcode.com/gh_mirrors/if/iFakeLocation 想在iOS设备上模拟全球任意位置,却担心越…
2025跨平台开发技术选型与性能优化指南 1. 跨平台开发地图:2025年的技术格局2025年的跨平台开发领域已经形成了明显的技术分层。从底层到上层,我们可以清晰地看到几个关键的技术栈:原生层:Kotlin Multiplatform(KMP)和SwiftUI继续巩固其在各自平台…
STM32与MPU6050的I2C通信与运动数据处理实战 1. STM32与MPU6050通讯基础解析 MPU6050作为一款集成了三轴加速度计和三轴陀螺仪的六轴运动处理传感器,在嵌入式系统中有着广泛应用。它通过I2C接口与主控芯片通信,而STM32系列单片机内置硬件I2C外设,两者结合可以构建高效的运动数据采集系统…
结构化时间标记法在GTD与敏捷开发中的应用 1. 项目背景解析"June 06th 2017 Week 23rd Tuesday"这个看似简单的时间标记,实际上蕴含着丰富的时间管理方法论。作为一位长期实践GTD(Getting Things Done)时间管理系统的资深用户,我发现这种精确到星期数的日期记录方式,在个人效…
2026年7月最新太原百达翡丽官方售后客服电话及服务网点地址查询 - 百达翡丽官方售后中心 2026年7月,百达翡丽在太原的官方售后服务体系完成更新,客户可通过全国统一客服热线与服务网点获得直接、合规的腕表养护与维修支持。所有售后服务均遵循品牌直营标准,覆盖全国范围,客户可选择到店或邮寄方式,但需…
【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC 可视化利器:JConsole、VisualVM、JMC 实战 本文是《JVM调优实战》专栏第 16 讲。 引言 上一讲我们介绍了 JDK 命令行工具箱,它们轻量、快速,但有一个明显的短板:不直观。面对 jstat -gcutil 输出的一行行数字,你能感知 GC 频率,却难以一眼看出内存泄漏的趋势;你能用 js…
什么是PCTFE?医药高端包装的“防潮王牌“材料 ——日氟荣高分子材料(上海)有限公司 专业深耕氟材料领域很多人好奇,高端药品包装为什么比普通包装更防潮、更稳定、保质期更长?核心秘密,就藏在一种特种氟材料——PCTFE聚三氟氯乙烯里!作为国内领先的氟材…
2026年7月最新太原百达翡丽官方售后客服电话及服务网点地址查询 - 百达翡丽官方售后中心 2026年7月,百达翡丽在太原的官方售后服务体系完成更新,客户可通过全国统一客服热线与服务网点获得直接、合规的腕表养护与维修支持。所有售后服务均遵循品牌直营标准,覆盖全国范围,客户可选择到店或邮寄方式,但需…
【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC 可视化利器:JConsole、VisualVM、JMC 实战 本文是《JVM调优实战》专栏第 16 讲。 引言 上一讲我们介绍了 JDK 命令行工具箱,它们轻量、快速,但有一个明显的短板:不直观。面对 jstat -gcutil 输出的一行行数字,你能感知 GC 频率,却难以一眼看出内存泄漏的趋势;你能用 js…
什么是PCTFE?医药高端包装的“防潮王牌“材料 ——日氟荣高分子材料(上海)有限公司 专业深耕氟材料领域很多人好奇,高端药品包装为什么比普通包装更防潮、更稳定、保质期更长?核心秘密,就藏在一种特种氟材料——PCTFE聚三氟氯乙烯里!作为国内领先的氟材…
[C++]内存管理:串顺序存储的内存回收 在串(字符串)的顺序存储中,内存回收的方式取决于字符串的存储方式以及所使用的编程语言和相关库。以下以 C 为例进行说明,因为 C 对内存管理有较为直接的控制。 1. 基于 char 数组的串顺序存储 如果使用普通的 char 数组来存储字…
移动端游戏功耗测试实战:电流、功率、亮度和场景对比 移动端游戏功耗测试:先控制变量,再比较优化是否真的省电 摘要:功耗测试最容易犯的错误,是拿两次不同温度、不同亮度、不同场景的平均功率直接比较。本文给出一套可复现的游戏功耗测试方法,覆盖引擎特性验证、版本回归和黑盒体验测试,并说明如何把功耗与帧率、温控、CPU/G…
足球口袋教练 HarmonyOS 离线应用实战(03/20):ArkUI 首页仪表盘搭建 本文是“足球口袋教练 HarmonyOS 离线应用实战”系列第 3 篇。示例项目是一个 HarmonyOS / ArkTS / ArkUI 编写的离线足球训练助手,围绕真实页面、真实截图和可复现操作展开。 本篇要解决的问题 训练 App 的首页不能只展示欢迎语,它要解决“我现在该点哪…