-
用 Java 25 的 StructuredTaskScope 组织 fork、join、close,明确并发子任务的共同完成、失败、超时和取消边界。
-
Java record 和 Lombok @Data 都能减少数据类样板代码,但它们表达的对象契约不同。本文从不可变语义、访问器、继承、框架绑定和迁移成本比较两种方案,并给出 DTO、配置对象与领域实体的选择规则。
-
Java ByteBuffer 默认按大端序读取多字节值。本文从字节序、position、remaining 和视图缓冲区四个排查点说明如何按协议切换大小端并正确读取整数。
-
Java NIO 可以在 Files.newDirectoryStream 中直接传入 glob,只筛选当前目录中匹配文件名的目录项。本文说明常见通配符、资源关闭、异常处理,以及 glob 与递归遍历和自定义过滤器的边界。
-
Java 24+ 的 Class-File API 把 LineNumberTable 映射为 CodeModel 中的 LineNumber 元素。本文用 CodeTransform 只重写指定方法的行号,说明保留字节码、筛选方法和处理调试信息时的边界。
-
本文用 JFR RecordingStream 按事件名消费延迟事件,将回调中的 Duration 转成固定分桶的 count、sum、error、P95 与 P99 窗口快照。示例重点处理阈值、字段兼容、回调阻塞、事件对象生命周期、异常与关闭边界。
-
Java CompletableFuture 的 cancel() 只能表达取消状态,无法携带业务原因。本文比较 cancel、带原因的异常完成和显式结果对象,给出跨 thenCompose 阶段传递取消码的写法。
-
Java Apache Commons IO 的 Tailer 用 end 参数或 Builder 的 setTailFromEnd 控制起始位置:false 会从文件开头读取,true 会跳到当前末尾等待新增内容。本文结合日志补读、实时监听和文件轮转说明两者区别。
-
Java 堆稳定而进程 RSS 持续上涨时,可用 NMT 建立基线并读取 summary.diff,按 committed 分类增量判断 Class、Thread、Code、GC/Internal 等来源;若 NMT 总量稳定而 RSS 继续增长,则应转向 JNI、第三方库和系统级内存证据。
-
Java 模块化插件不应只把多个 JAR 扔进同一个类路径。本文把共享 SPI 放在父 ModuleLayer,为每个插件目录建立独立 Configuration 与 ClassLoader,再用 ServiceLoader 按层发现实现,并补齐失败回滚、资源释放和卸载边界。
-
Java 21 可根据 sealed 类型的允许子类型检查 switch 是否穷尽。本文用订单结果模型说明覆盖规则、为何省略 default,以及 null、守卫、泛型与版本演进边界。
-
把 stream() 改成 parallelStream() 之前,先判断数据规模与单元素成本、Spliterator 拆分质量、状态型操作、顺序约束、共享副作用和归约契约。本文给出六道筛选、代码改造方法和同输入对照清单,避免并行后更慢或结果不稳定。
-
Java Stream 中直接修改外部 List、Map 或计数器,会让并行执行出现数据竞争、结果不稳定或锁竞争。本文说明如何识别共享可变状态,并用 toList、groupingBy、reduce 和 Collector 改写。
-
Java 虚拟线程的阻塞等待不等于长期占用载体。结合 JDK 版本区分卸载、固定限制与资源池竞争,并用同负载下的线程、连接等待、延迟和错误率判断改动,避免把承载优化当成容量扩张。
-
Java ResourceBundle 按 Locale 查找资源时,应显式传入目标 Locale,区分请求候选链、JVM 默认 Locale 和基础资源,并用 getLocale 判断实际命中的 bundle。文章还说明如何在需要时禁止默认 Locale 参与回退。