java教程技术文章
-
Java AsynchronousFileChannel 的 write 是异步提交,写入完成前关闭通道会让未完成操作以 AsynchronousCloseException 失败。本文用回调和 Future 两种方式说明正确的关闭时机。385 收藏 -
Java HttpClient 使用 BodyHandlers.ofPublisher() 时,响应体 Publisher 只能订阅一次;本文用 Flow.Subscriber 说明 request、cancel、回调和连接复用边界。385 收藏 -
通过 G1 Region 大小、humongous 阈值和连续 Region 数量,可以保守估算大对象尺寸区间;本文同时解释 Humongous regions 日志为何不能单独定位某个对象。383 收藏 -
Java 21 虚拟线程出现 pinning 时,先用 JFR 或 jdk.tracePinnedThreads 定位持锁阻塞,再把频繁且可能长时间等待的 I/O 移出 synchronized;短时内存临界区不必盲目改写。381 收藏 -
Java record 接收接口 JSON 时,额外字段是否报错不由 record 单独决定,而由 Jackson 的未知属性策略决定。本文用最小示例说明局部注解、全局 ObjectMapper 和 ObjectReader 的边界,并给出上线前的兼容性检查清单。380 收藏 -
Java Stream Gatherer 需要在输入耗尽后输出计数、最后元素或摘要时,应把数据保存在状态对象中,让 integrator 继续消费输入,再由 finisher 向下游推送尾部结果。本文说明 ofSequential 的写法、空流与短路边界,以及何时改用 Gatherers.fold。380 收藏 -
用一个三模块示例说明 Java ServiceLoader 如何通过 uses 与 provides with 在模块路径中注册并发现服务实现,同时给出编译、启动和空结果排查清单。378 收藏 -
介绍 Java 虚拟线程配合 Semaphore 限制数据库或外部接口并发的最小写法,覆盖许可数设计、中断、超时、异常释放和验证方法。376 收藏 -
文章 · java教程 | 20小时前 | 数据校验 · api设计 · Java教程 · 参数校验 Java record API DTO Jakarta Validation 紧凑规范构造器 跨字段校验
Java Record 作为 API DTO 时,不要把所有校验都塞进构造器。本文按字段格式、Record 自身不变量、跨字段业务规则和外部依赖四类边界,说明紧凑规范构造器、Jakarta Validation 与应用服务各自适合承担什么校验。370 收藏 -
ByteBuffer 写入完成后要先 flip 才能按有效数据读取。本文用具体状态值说明 position、limit、capacity 的变化,并区分 flip、rewind、clear 与 compact。368 收藏 -
用 ObjectInputFilter 和 jdk.serialFilter 为 Java 反序列化输入建立类白名单、拒绝规则与资源上限,并说明全局过滤器和单流过滤器的配置边界。367 收藏 -
Java Optional 的 orElse 会先求值备用参数,orElseGet 只在空值时调用 Supplier。本文用调用计数、代码对照和回归检查说明如何定位并修复不必要的备用计算。365 收藏 -
Java 正则中的命名捕获组可以用 Matcher.group(String) 按名称读取,但重复量词只保留最近一次成功捕获;需要全部结果时应改用 find 循环收集。365 收藏 -
Java 25+ 中用 ScopedValue 传递只读请求上下文,重点比较它与 ThreadLocal 的生命周期、可见性、嵌套绑定和结构化子任务继承边界。364 收藏 -
多个 Java ModuleLayer 同时存在时,不要用父层、同名模块或类加载器是否相同来猜 reads 关系。本文用 Module.canRead、addReads、findModule 和 findLoader 建立可观察的判断方法。361 收藏