java教程技术文章
-
Spring Framework 7.0.8 与 6.2.19 修复多项 WebFlux、MVC、WebSocket 会话和资源处理安全问题。本文按依赖盘点、版本选择、回归测试和灰度回滚给出一套不涉及漏洞利用的升级方法。251 收藏 -
文章 · java教程 | 1个月前 | Stream · Java教程 · 性能边界 · mapMulti · flatMap · Java mapMulti Stream flatMap Java Stream 条件展开 Java 16
Java Stream 的 mapMulti 适合把一个元素展开为零个或少量结果,尤其适用于带条件分支的解析和提取。本文用订单标签解析示例说明它与 flatMap 的选择、泛型推断、Consumer 生命周期和验收边界。250 收藏 -
文章 · java教程 | 2星期前 | 故障排查 · Java教程 · 进程管理 · ProcessHandle · 系统编程 · java 子进程 退出码 ProcessHandle 进程生命周期
Java 管理外部子进程时,isAlive、onExit 和 exitValue 解决的是不同问题。本文用一个可复现的小任务拆解退出状态、异步等待、异常处理与句柄回收边界。249 收藏 -
文章 · java教程 | 1个月前 | Record · Java教程 · 防御式拷贝 · List.copyOf · Arrays.copyOf · 不可变性 · arrays.copyof 可变集合 Java record List.copyOf 防御式拷贝 数组克隆
Java record 没有 setter,并不表示放进 record 的 List、数组或可变对象不会在别处被改动。订单入参一旦把调用方集合或签名数组的引用直接保存,接口进入服务层后仍可能出现内容漂移。用 List.copyOf 固定集合结构、对数组在构造器和访问器两端复制,再用一段小检查覆盖输入侧与输出侧,就能把 record 的边界写得更可靠。247 收藏 -
Java java.time.Duration.dividedBy 可以把耗时切成固定时间片,但整数除法、零值除数和超大纳秒数都可能改变结果。本文用限流窗口和任务分片示例说明返回值、异常边界与测试验收。245 收藏 -
文章 · java教程 | 1星期前 | Java · 人工智能 · 工具调用 · Spring AI · java 工具调用 会话隔离 Spring AI ToolSearchToolCallingAdvisor
Spring AI 2.0 的 ToolSearchToolCallingAdvisor 会按会话索引工具。本文从工具全量暴露的排查现场出发,说明 session ID、工具索引和 ChatClient 之间的边界,并给出 Java 配置示例与核对清单。244 收藏 -
Java Files.walk 返回的是惰性 Stream,遍历大目录时要同时处理流关闭、符号链接深度和中途异常。本文用一个目录清理场景说明 Files.walk 与 walkFileTree 的选择边界,并给出可验证的安全写法。243 收藏 -
支付渠道类型一多,enum 加 switch 容易把新增渠道遗漏在多个分支里。本文用 Java sealed interface 建模支付路由,和 enum + switch 做边界对比,给出兼容扩展、测试覆盖和上线选择建议。242 收藏 -
文章 · java教程 | 2星期前 | 网络编程 · 并发 · Java · httpclient · 会话管理 · 并发请求 HTTPCookie Java HttpClient CookieHandler 会话隔离
Java HttpClient 的 CookieHandler 既能复用会话,也可能让不同账号的请求串 Cookie。本文从共享客户端、并发访问和任务结束三个边界,给出隔离、清理与验证方法。241 收藏 -
Java HttpClient 的 sendAsync 返回可取消的 CompletableFuture。本文区分请求级超时与业务主动取消,给出保留原始 future、定时 cancel、异常分类和响应体收尾的完整写法。240 收藏 -
文章 · java教程 | 1个月前 | 数据库 · 性能优化 · Java教程 · Optional · orElseGet · java 数据库查询 懒加载 optional supplier orElse orElseGet
Java Optional 的 orElse 会先计算兜底参数,即使主值已存在也可能触发数据库或远程调用。用订单展示接口复现这个问题,说明 orElseGet、Supplier、异常处理与测试边界。238 收藏 -
Java 22 通过 JEP 456 正式支持未命名变量与未命名模式,用下划线忽略不需要的值。本文从 switch、record 模式和异常参数三个场景说明作用域边界,并给出 javac 编译验收方法。237 收藏 -
文章 · java教程 | 2个月前 | map · 并发安全 · 缓存设计 · Java教程 · java optional concurrenthashmap computeIfAbsent Map缓存
本文用一个用户资料缓存场景,完整拆解 Java Map computeIfAbsent 的使用边界、缺失加载、空值包装、并发 Map 选择和上线前检查,帮助你写出更简洁且行为可控的缓存初始化代码。236 收藏 -
Java 25 的一次性值容器是预览 API,适合表达只设置一次的懒加载结果。本文用并发配置缓存示例拆解 supplier 的至多一次成功计算、异常重试、预览开关和内存驻留边界,帮助你判断它何时比手写双重检查更合适。236 收藏 -
Java 24 的 Gatherers.fold 适合没有合并器、且结果依赖输入顺序的聚合。本文用分段账单摘要拆解状态边界、空流结果与并行流验收,避免把 fold 当成可随意并行的 reduce。233 收藏