java教程技术文章
-
用订单金额计算场景讲清楚 Java 中 double 处理金额为什么容易出错,以及如何用 BigDecimal 的字符串构造、固定小数位和 RoundingMode 做出稳定的金额计算流程。324 收藏 -
Collectors.toMap不支持多字段复合Key,需通过字符串拼接(如"dept|role")或自定义不可变Key类(如recordDeptRoleKey)实现;必须提供merge函数避免重复key异常。323 收藏 -
Duration不能直接计算时间点秒数,需用Duration.between()配合toNanos()/1e9获取纳秒级精确秒数;LocalDateTime因无时区不适用;toSeconds()截断小数,getSeconds()仅返回整秒字段。322 收藏 -
构造器注入的核心价值是确保对象创建时具备完整、不可变的必要依赖。通过final字段+构造器参数锁定必需协作对象,编译期和运行期双重保障完整性;Lombok@RequiredArgsConstructor自动生成构造器,避免手误;可选依赖用setter补充;单元测试只需传入Mock,即时暴露缺失依赖。322 收藏 -
SQLLIKE运算符用于模糊匹配,支持%(任意长度字符)和_(单个字符)通配符;需注意大小写敏感性、特殊字符转义(ESCAPE子句)及前导%导致索引失效的性能问题。321 收藏 -
暴力反射不能用于清理资源或关闭连接池,因其不安全、不可靠且跳过关键清理步骤,易致连接泄漏、线程卡死;正确方式是调用公开close()方法、委托容器管理或封装代理实现Closeable。319 收藏 -
高并发大促下库存扣减失败的补偿必须快、准、可追溯、不扰主链路:采用异步扫描+状态机驱动,三元状态标识(pending/confirmed/done),幂等回滚,超时熔断,分级降级。318 收藏 -
Filter是Servlet规范组件,作用于容器层,用于请求响应拦截;Interceptor是SpringMVC组件,作用于HandlerMapping后,依赖Spring上下文,用于Controller前后处理。318 收藏 -
Map.merge()仅在键已存在时调用remappingFunction;键不存在则直接put,不执行函数;返回null会删除该键;多线程需用ConcurrentHashMap保证原子性。318 收藏 -
应按使用者和使用场景拆分接口:谁在用、为什么用,识别方法调用不重叠、未被调用超40%、测试中大量mock等信号;按业务角色(如UserAuthenticator)而非CRUD命名;用组合代替全能接口继承;老接口迁移需渐进式三步走。318 收藏 -
命令行输入java-version提示“不是内部或外部命令”,根本原因是JAVA_HOME和Path环境变量未正确配置:JAVA_HOME需指向JDK根目录(不含\bin),Path需添加%JAVA_HOME%\bin,且须重启命令行验证。318 收藏 -
shutdown()后已入队未执行的任务仍会运行,正在运行的任务也会完成;它仅停止接收新任务,不中断线程或清空队列。318 收藏 -
文章 · java教程 | 2个月前 | Spring Boot · 生产实践 · Java教程 · Resilience4j · 微服务治理 · java 微服务 spring boot 熔断重试 Resilience4j
从支付网关慢调用复盘 Resilience4j TimeLimiter、Retry、CircuitBreaker、Bulkhead 的顺序、预算和上线检查。318 收藏 -
锁粗化是JVMJIT编译器自动将同一锁、同一线程、连续无干扰的多次加锁解锁合并为一次大范围同步的操作,典型场景是循环内对未逃逸局部对象(如StringBuffer)的反复同步调用。317 收藏 -
Termux无法直接运行JavaGUI程序,因其纯终端环境缺失XServer和DISPLAY变量,Java默认启用headless模式且openjdk-17不含AWT原生库;可行方案是通过proot-distro部署Ubuntu,安装XFCE与TightVNC,配置xstartup并启动vncserver,再在VNC桌面中安装OpenJDK并设置DISPLAY=:1运行Java程序。316 收藏