优先级从高到低排列,高优先级覆盖低优先级的同名属性。 一、运行时参数(最高) 1. 命令行参数 java -jar app.jar --server.port=9090 2. JVM 系统属性 java -Dserver.port=9090 -jar app.jar 3. OS 环境变量 export SERVER_P […]
优先级从高到低排列,高优先级覆盖低优先级的同名属性。 一、运行时参数(最高) 1. 命令行参数 java -jar app.jar --server.port=9090 2. JVM 系统属性 java -Dserver.port=9090 -jar app.jar 3. OS 环境变量 export SERVER_P […]
这个算是比较常用的一个Java工具了,记录一下。 一、最常用:jmap -histo(JDK 自带) # 查看所有对象的实例数和内存占用(按大小排序) jmap -histo <pid> # 只看存活对象(先触发一次 Full GC,再统计) jmap -histo:live <pid> 输出示 […]
背景 自己封装了一个Apollo的客户端,在官方支持@Value注解自动刷新的基础上,额外封装了@RefreshScope和@ConfigurationProperties注解的自动刷新,代码如下: import com.ctrip.framework.apollo.model.ConfigChangeEvent; i […]
1. 概述 jasypt-spring-boot 是 Jasypt(Java Simplified Encryption)加密框架与 Spring Boot 的集成组件,用于对 Spring Boot 应用配置文件中的敏感信息(如数据库密码、API 密钥、Token 等)进行加密保护,防止敏感信息以明文形式出现在配置文 […]
要让Jackson直接使用类的字段(Field) 进行序列化和反序列化,而非默认的getter/setter方法,核心是修改Jackson的属性访问策略:关闭对getter/isGetter/setter的自动检测,开启对所有字段(无论访问修饰符)的检测。 下面分通用Java项目、Spring Boot项目、局部类注解 […]
在Java开发的日常场景中,导入语句似乎是绕不开的“小麻烦”。新手会困惑为何String无需导入而List必须手动引入,资深开发者也常会在切换业务场景时,为查找Stream类的包路径、处理Date类的同名冲突而卡顿。传统导入方式的臃肿与繁琐,让不少开发者羡慕Python“开箱即用”的模块机制。而JDK 25正式落地的J […]
一、乐观锁核心原理 乐观锁的核心是“假设不会发生并发冲突,只在提交更新时检查数据是否被修改过”,而非像悲观锁(如SELECT ... FOR UPDATE)那样提前锁定数据。 核心逻辑:更新数据时,先验证数据的“版本/时间戳”是否和自己读取时一致——一致则更新,不一致则说明数据已被其他线程修改,放弃更新(或重试)。 适 […]
在Java开发圈,“try...catch影响性能”的说法流传已久——有人在代码评审时强制要求移除循环内的try块,有人为了“性能”放弃异常处理的规范性,甚至有人将异常视为“洪水猛兽”。但在JVM经过十余年的迭代优化后,这种说法是否还成立? 本文将从历史渊源、JVM底层机制、多场景性能测试、JVM优化技术、实战最佳实践 […]
在高并发I/O密集型场景中,传统Spring MVC的同步阻塞模型逐渐暴露出资源利用率低、线程开销大的瓶颈。而Spring WebFlux作为Spring生态下的响应式编程框架,凭借异步非阻塞特性与响应式流设计,成为解决高并发问题的优选方案。本文将从底层原理、核心组件、编程模型、性能对比、落地实践五个维度,全方位拆解W […]
Java作为一门生命力旺盛的编程语言,从Java 8到最新的Java 25,持续迭代出大量实用特性。但很多开发者仍停留在传统写法,重复编写样板代码、被空指针困扰、手动切换JDK环境……其实,用好Java的隐藏技巧与新特性,不仅能让代码更简洁、安全,还能大幅提升开发效率。本文将分享10个实战性极强的Java进阶技巧,涵盖 […]
在 Spring Boot 开发中,Controller 作为请求入口,本应是“轻量的交通指挥官”——接收请求、参数校验、路由到 Service、返回响应。但现实中,很多 Controller 逐渐沦为“万能容器”:业务逻辑堆砌、参数验证混乱、异常处理零散、依赖耦合严重,最终变成维护噩梦。 本文基于 SOLID 设计原 […]
在后端开发中,树形结构是高频场景——商品分类树、菜单权限树、组织架构树、地区层级树等,几乎贯穿了电商、ERP、权限管理等各类系统。但随着业务扩张,节点数量从几千增长到几万、几十万时,传统实现往往会陷入“响应超时、数据库雪崩”的困境。 某电商项目曾遭遇典型性能灾难:首页分类树加载耗时3-5秒,高峰期数据库连接池耗尽导致系 […]
在业务开发中,排行榜是一个高频需求——游戏中的战力榜、电商的销量榜、内容平台的点赞榜、社交产品的热度榜……看似简单的“排序展示”,背后却藏着数据量与实时性的博弈。很多团队初期用“数据库排序”快速上线,却在用户量突破10万、100万后遭遇性能雪崩;也有团队盲目上分布式方案,导致架构复杂度过高,运维成本激增。 本文将基于业 […]
每个Java开发者都有过这样的时刻:面对一段复杂业务逻辑,写了几十行嵌套if-else后陷入迷茫;或是调试NullPointerException到深夜,怀疑人生。但当我们第一次看到JDK源码里的Stream流水线、Optional链式判空、CompletableFuture异步组合时,总会忍不住惊叹——"原 […]
在Java开发中,金额处理是一个看似简单却暗藏风险的领域。无论是电商订单结算、金融交易计算,还是企业财务报表生成,哪怕是0.01元的精度偏差,都可能引发对账不平、用户投诉甚至财务合规问题。本文将从「为什么浮点数不能用」的底层原理切入,详细拆解各类金额数据类型的适用场景、实操规范和性能对比,结合生产环境常见问题给出解决方 […]
你可以迷茫,但不要虚度。
COPYRIGHT © 2026 lifengdi.com. ALL RIGHTS RESERVED.