-
EnumSet和EnumMap是Java中专为枚举设计的高效集合类,基于位向量和数组实现,性能优于HashSet和HashMap。1.EnumSet通过allOf、noneOf、of、range等方法管理枚举集合,底层用bit位存储,操作接近O(1)。2.EnumMap以枚举ordinal为索引,内部用数组存储键值对,遍历按声明顺序,内存紧凑且速度快。3.两者均不支持null键,类型安全,适用于状态管理、配置映射等场景。4.建议优先使用它们处理枚举数据,避免转换为普通Map以保持性能优势。
-
项目JDK升级需优先确认框架依赖的最低版本要求,如SpringBoot3.x强制JDK17+,Shiro/Struts2则受限于JDK8;生产环境应选用LTS版本(JDK17/21),避免短期版本(JDK22/23);本地、CI/CD及IDE必须统一JDK版本与编译参数,并验证JVM选项兼容性。
-
方法引用无独立量化价值,其作用是优化代码结构的语法糖;通过减少重复Lambda、增强语义可读性、约束参数契约来降低维护成本,并可通过变更集中度、静态告警减少量、CodeReview耗时等间接指标评估收益。
-
Java枚举天然防反射创建实例,因JVM在native层硬编码限制枚举实例化;其序列化与线程安全由语言机制保障,无需readResolve或synchronized;但不支持延迟加载、依赖注入及继承,适用场景有限。
-
share()本身不触发订阅,需确保上游已连接(如通过autoConnect(n)或显式connect()),否则后续订阅将收不到数据;关键在于连接时机与订阅顺序的协同。`share()`本身不触发订阅,需确保上游已连接(如通过`autoConnect(n)`或显式`connect()`),否则后续订阅将收不到数据;关键在于连接时机与订阅顺序的协同。在Reactor中,share()是一个便捷操作符,用于将普通Flux转换为热流(h
-
在JPACriteria查询中,当需检查关联实体(如Person.employer)为null或其字段满足特定条件时,直接链式调用model.get("employer").get("employeeBenefits")会触发隐式内连接,导致null关联记录被过滤;正确做法是显式声明LEFTJOIN,再分别判断关联对象为空或字段值匹配。在JPACriteria查询中,当需检查关联实体(如Person.employer)为n
-
以 Java 21 虚拟线程和 Spring Boot 灰度上线为主线,拆解适用场景、连接池边界、pinning、ThreadLocal 和上线检查清单。
-
Double.isNaN仅检测结果是否为NaN,不捕获计算异常;典型NaN来源包括0.0/0.0、Math.sqrt(-1.0)等;需配合Double.isInfinite判断无穷大,并注意Double包装类null导致NPE。
-
SpringBoot中注解数组属性(如@RequestMapping.value)仅用于静态路由声明,不接收运行时批量参数;批量参数应通过@RequestBody、@RequestParam等独立接收。
-
不能用System.nanoTime()准确测量invokedynamic生成时滞,因其仅能捕获首次调用总延迟,无法隔离类加载、字节码生成、方法句柄解析等JVM内部开销;应采用预热后测量、显式调用bootstrap方法计时或JVMTI/JFR等语义对齐工具。
-
应避免使用java.util.Stack,改用ArrayDeque或LinkedList实现栈;Queue是接口,需选用合适实现类;优先使用offer()/poll()/peek()而非add()/remove()/element();迭代器不保证LIFO/FIFO顺序。
-
封装是将数据与操作打包为类并私有化成员变量,通过publicgetter/setter方法控制访问;目的是防止非法状态、隔离变化和降低耦合,体现为默认private属性、按需提供带校验的存取方法。
-
SpringAMQP不支持运行时动态修改@RabbitListener的queues属性,需改用SimpleMessageListenerContainer,通过stop()→setQueueNames()→start()三步实现队列切换,注意线程安全与消息可靠性。
-
从 Spring Boot 异步接口长尾事故讲清 CompletableFuture 显式 Executor、线程池隔离、超时、异常收口和上下文传递。
-
匿名线程捕获局部变量实为编译器将其提升为闭包对象字段,问题本质是循环变量复用导致所有线程读取最终值,而非变量“存活”或作用域泄漏。