-
Collectors.averagingInt()可在一次遍历中计算整型流平均值并返回double,需配合mapToInt()使用,空流返回Double.NaN,内部用long累加防int溢出,比手动两次遍历更高效安全。
-
ThreadLocalRandom能避免CAS自旋,因其种子存于线程私有字段而非全局AtomicLong,各线程独享、零竞争;误用静态引用会退化为共享实例,失去性能优势。
-
volatile修饰的变量在i++场景下线程不安全,因为i++包含读、改、写三步非原子操作,volatile仅保证可见性和禁止部分重排序,无法避免竞态条件。
-
首先下载OracleJDK的.tar.gz文件并解压至/usr/lib/jvm,再通过update-alternatives注册Java命令,设置默认JDK版本,并在~/.bashrc中配置JAVA_HOME和PATH环境变量,最后验证java-version和JAVA_HOME确保安装正确。该方法适用于需要兼容特定商业软件或统一开发环境的场景。
-
transient只在Java默认序列化中生效,对JSON/XML/ORM等无效;它使字段不参与字节流读写,反序列化后为默认值,但无法防止日志、网络传输或自定义序列化中的泄露。
-
NPE堆栈中“because'xxx'isnull”直接指出未初始化的成员变量,需定位业务代码行、检查声明/构造器/注入初始化路径,并验证对象生命周期与调用时机。
-
目标存活率(-XX:TargetSurvivorRatio)默认为50%,决定MinorGC后Survivor区对象累计占比达该比例时触发动态年龄晋升;调高则延缓晋升、调低则加速晋升,需结合Survivor实际容量协同调优。
-
getActiveCount返回的是RUNNABLE且已执行run()的线程数,不包含BLOCKED/WAITING/TIMED_WAITING等阻塞态线程,故不能代表真实活跃任务数,仅反映CPU密集型忙线程的瞬时快照。
-
CGLIB与JDK动态代理在变量处理上本身无性能差异,因二者均不操作变量而专注方法拦截;参数传递开销几乎为零,成员变量访问不受影响,真正差异在于JDK依赖反射调用(Method.invoke)而CGLIB通过MethodProxy.invokeSuper直接调用,后者路径更短、性能更高。
-
MessageFormat.format()不替换占位符主因是花括号不配对或类型不匹配:{0}未替换因单个{被当字面量;{0,date}传入Instant会ClassCastException;中文locale需显式传入避免格式错乱;固定pattern应staticfinal复用以提升性能。
-
启用-Xlog:safepoint是定位非GC类全局停顿最直接有效的方式,它专门记录JVM为执行需线程同步至安全点的操作(如偏置锁撤销、JIT退优化、类重定义等)而引发的停顿,而非垃圾回收本身。
-
应逐项解析JSON数组中的每个对象而非整批解析,先用try-catch解析顶层数组,再对每个元素单独try-catch解析并跳过错误项,从而保留有效数据、避免全盘失败。
-
LocalDate和LocalDateTime是Java8引入的不可变、线程安全的日期时间类,分别表示无时区的日期和日期时间,支持创建、解析、加减、格式化及与其他类型互转操作,结合DateTimeFormatter可处理自定义格式,推荐用于新项目。
-
SpringBoot2.6+必须使用springfox-boot-starter3.0.0+替代springfox-swagger2,因老版本未适配Spring5.3参数解析机制;@EnableSwagger2已废弃,需改用@EnableOpenApi,并确保包扫描、注解位置及泛型处理正确。
-
递归方法需定义基准情况和递归调用,如阶乘中n==0或1时返回1,否则调用factorial(n-1),通过类名直接调用,注意避免无限递归导致栈溢出。