-
静态代码块在类加载的初始化阶段执行且仅一次,用于驱动注册、配置加载等一次性初始化;按声明顺序执行,早于构造器,线程安全,但抛异常会导致类初始化失败。
-
控制大型复杂类的属性个数本质是减少类加载准备阶段的静态内存分配总量,从而降低初始化延迟;需聚焦静态字段必要性、拆分模块、优化类型及验证效果。
-
默认情况下核心线程长期闲置也不回收,这是由源码硬性保障的设计红线:1.核心线程用workQueue.take()无限阻塞,非核心线程才用poll(timeout);2.processWorkerExit()中allowCoreThreadTimeOut=false时,线程数≥corePoolSize即直接返回,不销毁;3.只要线程池处于RUNNING状态,ctl机制就绑定核心线程与池生命周期。
-
Files.createTempFile()用于创建唯一安全的临时文件,支持默认或自定义目录、指定前缀/后缀及POSIX权限;需手动清理,不可依赖随机性保障安全。
-
类型强转不能用于分片引擎设计,因其导致信息丢失、行为不可控、不满足确定性要求;正确做法是用显式位运算配合固定长度哈希实现可控位级切分。
-
使用Collectors.summingInt可对流中对象的int字段求和,需传入返回int的ToIntFunction;字段为Integer等类型时须显式处理null;空流返回0,但对象为null会抛NPE,应提前过滤或判空。
-
Java数组长度不可变是JVM内存模型与运行时安全机制决定的底层约束,length为publicfinalint字段,创建后固化,内存布局要求连续定长空间,边界检查依赖其绝对稳定。
-
-XX:MaxDirectMemorySize不能精准约束Netty堆外内存,因多ClassLoader会创建多个PooledByteBufAllocator实例,各自按该参数值独立配额,导致总量远超限制;需统一ClassLoader、显式构造单例allocator并配合-Dio.netty.maxDirectMemory等措施对齐控制。
-
构造器注入的核心价值是确保对象创建时具备完整、不可变的必要依赖。通过final字段+构造器参数锁定必需协作对象,编译期和运行期双重保障完整性;Lombok@RequiredArgsConstructor自动生成构造器,避免手误;可选依赖用setter补充;单元测试只需传入Mock,即时暴露缺失依赖。
-
Double.isNaN仅检测结果是否为NaN,不捕获计算异常;典型NaN来源包括0.0/0.0、Math.sqrt(-1.0)等;需配合Double.isInfinite判断无穷大,并注意Double包装类null导致NPE。
-
必须在任何I/O操作前设置Header与超时:先setConnectTimeout/setReadTimeout(单位毫秒),再setRequestProperty/addRequestProperty(中文值需URLEncoder编码),最后调用getInputStream等;顺序错乱将导致配置失效或抛异常。
-
局部变量表中数组变量仅占1个Slot存储引用,实际元素存于堆;Slot可复用以降低栈压力,但编译期已固定总大小,作用域控制比分支位置更影响空间效率。
-
SpringAMQP不支持运行时动态修改@RabbitListener的queues属性,需改用SimpleMessageListenerContainer,通过stop()→setQueueNames()→start()三步实现队列切换,注意线程安全与消息可靠性。
-
异常上下文指抛出异常瞬间可追溯的关键变量与状态,如user_id、order_id、api_path、db_query等现场快照;缺失则导致排查困难。应通过带cause构造异常、显式拼接业务字段、避免依赖MDC或无意义wrap来保障上下文完整性。
-
本文详解Java中数组反转失败的根本原因——循环次数过多导致元素被重复交换回原位,并提供修正代码、原理分析及最佳实践。