-
应优先使用NumberFormat.getCurrencyInstance(Locale)获取区域敏感的货币格式器,而非直接使用DecimalFormat;因后者不绑定Locale且无视币种小数规则,易导致符号错误或非法小数位。
-
应先检查list!=null&&!list.isEmpty()再用get(size()-1),或改用ArrayDeque.getLast()等更安全高效的方式,避免空指针、越界及性能问题。
-
必须用localRepository配置本地仓库路径,它位于settings根节点下且不可被profiles或mirrors嵌套;路径推荐绝对英文路径,改后需清理\_remote.repositories文件;容灾依赖缓存和mvn-o离线模式。
-
Java全局参数管理核心是解耦配置与代码,需统一抽象为含key、defaultValue、value(volatile)、desc及监听器的结构,推荐轻量容器+配置加载或SpringBoot的@ConfigurationProperties方案。
-
newLinkedBlockingQueue()线程安全因其内部使用ReentrantLock和两个Condition(notEmpty、notFull)对所有关键操作加锁,无需额外同步;但迭代器弱一致,遍历时修改会抛ConcurrentModificationException。
-
Javarecord与模式匹配结合可简化不可变数据结构的类型判断和字段提取:instanceof支持直接解构、switch支持按类型和字段值分支、替代Visitor模式、构建类型安全解析流水线。
-
String不可变性由private、final引用、无修改方法三重防护协同实现,缺一不可;JDK9改用byte[]是为内存减负,依赖不可变性保证编码稳定;常量池复用、线程安全、hashCode缓存等均为其自然红利。
-
用System.getProperty("os.name")获取系统名,如“Windows10”“Linux”“MacOSX”;判断Windows用startsWith("windows"),Linux用contains("Linux"),Mac用contains("mac")或equals("Darwin")。
-
本文详解如何使用Jackson的@JacksonXmlElementWrapper(useWrapping=false)配合@JacksonXmlProperty,实现POJO转XML时跳过默认集合外层标签(如<childs>),直接将列表元素平铺为同级XML节点。
-
SLF4J本身是日志门面,不提供多输出或基于Marker的日志路由能力;实际功能需由底层绑定实现(如Log4j2、Logback)。本文详解如何通过Log4j2实现控制台+文件双输出、按Logger名称/Marker分流至不同日志文件,并附可运行配置示例与关键注意事项。
-
泛型是编译期类型契约而非语法糖,应在逻辑相同但数据类型不同的场景定义泛型类,优先使用泛型方法;需合理约束T,避免过度约束与擦除陷阱,并正确运用协变/逆变。
-
在JOOQ的UNION(如UNIONALL)查询中,仅首个子查询的ad-hocconverter生效,后续子查询的mapping会被忽略——这是由JDBC结果集无源标识特性决定的设计约束,而非bug。本文详解其原理并提供两种可靠绕过方案。
-
JVM是实现“一次编写,到处运行”的软件抽象层,核心由运行时数据区(方法区、堆、虚拟机栈、本地方法栈、程序计数器)、类加载机制(加载、验证、准备、解析、初始化)和执行引擎(解释器+JIT编译器)组成。
-
ThreadLocal的set()可能引发内存泄漏,根本原因是其ThreadLocalMap的key为弱引用而value为强引用,当ThreadLocal实例被回收后value仍滞留,尤其在线程池中长期存活线程下无法释放。
-
闰年判断必须用“(year%4==0&&year%100!=0)||year%400==0”,单用%4会误判1900、2100等整百年;高频场景用数学表达式,低频可用LocalDate.isLeapYear();测试须覆盖1900、2000、2100。