-
使用Collectors.toMap()时若键重复会抛IllegalStateException,需提供合并函数处理冲突;常见策略包括取后者、取前者、累加、拼接或构建集合,且合并函数不可返回null。
-
BridgeMethod是编译器为解决泛型擦除导致的多态断裂而生成的桥接方法,它用擦除后签名(如Objectget())转发调用子类具体类型方法(如Stringget()),确保JVM多态正确性。
-
微服务网关虽非传统防火墙,但可通过“自动关闭”(动态熔断、静默、限流)与“多重捕获”(L3/L4至业务层分层检测)结合“强弱联合”规则,在网关层构建符合等保、GDPR等要求的轻量级合规防护面。
-
Float.isFinite返回true当且仅当float值既不是无穷大也不是NaN,即普通浮点数、零值(±0.0f)和次正规数;返回false仅当为Float.POSITIVE_INFINITY、Float.NEGATIVE_INFINITY或Float.NaN。
-
yield()与JIT标量替换无关,失效主因是逃逸分析失败;标量替换要求对象严格局部、可推断且不逃逸至堆——yield将数组存入生成器状态机即构成逃逸。
-
thenCompose()用于扁平化嵌套CompletableFuture,要求函数直接返回CompletableFuture以避免类型嵌套;而thenApply()会生成CompletableFuture<CompletableFuture<T>>,导致类型错误和运行时异常。
-
异常嵌套分析是定位主从不一致根因的诊断思路,通过逐层捕获写入、传输、回放、读取各阶段异常上下文,识别如“写成功→日志丢失→从库跳过”或“缓存未清→读从库→延迟放大”等复合型异常链路,并结合可观测性锚点与pt-table-checksum等工具闭环验证。
-
应使用Callable接口结合Future和ExecutorService获取线程返回结果。1.Callable的call()方法可返回值并抛出异常;2.通过ExecutorService提交Callable任务获得Future对象,调用future.get()阻塞获取结果;3.可设置future.get(超时时间)避免无限等待,超时抛TimeoutException,任务异常封装为ExecutionException;4.可批量提交多个Callable任务,用List保存Future,遍历获取结果并汇总
-
Thread.setPriority()仅提供跨平台不一致的调度建议,不保证OS级权重,Linux/macOS基本无效,Windows略有效;应改用线程池、信号量等可控机制。
-
应避免Optional在高频路径、参数/字段/私有方法中滥用及三层以上嵌套;需用JVM工具定位分配热点,静态扫描嵌套深度,重构反模式调用,并通过Arthas验证优化效果。
-
对象必须8字节对齐,是因为64位CPU以8字节为单位读取数据,未对齐会导致跨缓存行访问,降低性能甚至引发硬件异常;同时保障long、double、volatile字段的原子性及指针压缩(CompressedOops)正确工作。
-
局部变量必须显式初始化,因Java不设默认值,编译器直接报错“variablemightnothavebeeninitialized”;作用域以最近的右大括号为准。
-
模板方法模式通过抽象类定义算法骨架,将可变步骤声明为抽象方法由子类实现,封装固定流程于final模板方法中,并提供可选钩子方法增强灵活性。
-
MetaspaceOOM前必先频繁扩容并触发FullGC,关键看GC日志中Metaspace使用量回落极少(如10240K→10240K)且Classesunloaded长期为0,结合-XX:+PrintClassLoaderStatistics确认类加载器与类数量持续增长,表明动态代理或类加载器泄漏导致卸载失效。
-
堆与非堆内存占用比例需基于MemoryUsage的used/comitted计算:堆使用率=heap.used/heap.committed,非堆使用率≈(metaspace+codeCache+compressedClassSpace).used之和/(对应).committed之和,直接内存需单独通过BufferPoolMXBean获取。