-
newBigDecimal(0.1)不等于0.1,因为double的二进制浮点表示导致0.1存储为近似值0.10000000000000000555…,BigDecimal(String)或BigDecimal.valueOf()才能精确构造。
-
安全捕获异常关键变量需在异常发生现场提取:优先用自定义异常构造参数传入业务ID;避免反射、toString()等高危操作;集合只记size和前3元素;时间转ISO格式;MDC存简单类型上下文并及时清理。
-
@SneakyThrows是编译期字节码增强,不改变异常模型,仅自动插入try-catch并抛出RuntimeException;调用方仍需处理异常,且IDE不提示throws,易致运行时崩溃与排查困难。
-
设计Java类继承应明确“is-a”关系,优先使用抽象类或接口定义契约,避免过深继承层级,建议不超过三层,多用组合替代继承以提升灵活性;遵循里氏替换原则,确保子类可安全替换父类,不改变程序正确性;合理使用protected和final控制访问与扩展,父类不应被实例化时声明为abstract;核心是围绕领域模型设计,确认子类确实是父类的一种,再使用继承实现多态与接口统一。
-
本文详解SpringBoot中因误用双大括号初始化(DoubleBraceInitialization)创建匿名子类,导致JPA无法识别实体类而抛出InvalidDataAccessApiUsageException:XXXisnotanentity的典型问题及彻底解决方案。
-
浅克隆复制对象但共享引用,适用于简单结构或性能优先场景;深克隆递归复制所有引用对象,适用于需完全隔离的可变复杂结构,选择依据是是否允许引用共享。
-
Spring无法直接注入抽象类,因为抽象类不能实例化;应通过具体实现类(如AServiceImpl)注入,或改用接口定义契约并让实现类注册为Bean。
-
生产环境JVM堆内存参数应设为-Xms与-Xmx相等以避免动态调整引发FullGC;容器化需启用-XX:+UseContainerSupport并用-XX:MaxRAMPercentage替代硬编码-Xmx;元空间须显式设置-XX:MetaspaceSize和-XX:MaxMetaspaceSize。
-
String.join最快最直接但要求List及元素均非null;Collectors.joining更灵活可链式处理但有Stream开销;高频或大数据量时手写循环性能更优。
-
Java数组的length是编译期确定的final字段而非方法,因数组为JVM内置类型,大小固定且存于对象头中;调用length()、对null数组访问或混淆List.size()均会报错。
-
在SpringMVC中,可通过为@RequestParam添加required=false属性,使其变为可选参数;当请求未携带该参数时,其值将为null(或通过defaultValue指定默认值),从而避免400BadRequest错误。
-
ThreadLocalMap.Entry用弱引用是为了避免ThreadLocal实例被长期持有导致内存泄漏,而非自动清理;弱引用仅作用于key,value仍为强引用,需配合remove()或set()/get()触发的探测清理机制防止staleentry泄漏。
-
ConcurrentHashMap的putIfAbsent不是绝对原子,因其仅对key插入做CAS保护,value构造副作用(如new对象)仍会执行;正确做法是用computeIfAbsent延迟构造。
-
模板方法模式核心是“子类只改步骤,不改流程”,即在templateMethod()中锁定稳定执行顺序,将可变环节抽为abstract方法供子类实现;辅以hook方法(可选重写)和final方法(禁止篡改)增强灵活性与安全性。
-
super是编译期确定的直接父类成员访问入口,不触发多态、不绕过访问控制;调用构造器须首行且唯一;访问字段和方法均为静态绑定;内部类中A.super特指外围类方法调用。