-
Java中二维数组实为“数组的数组”,声明推荐int[][]arr,支持静态初始化如{{1,2},{3}}和动态初始化如newint3或逐行new;未初始化第二维会导致NullPointerException。
-
关系运算符(>、<、==、!=)比较两值返回True或False;数字按大小、字符串按Unicode码点、列表按元素顺序比较;==判等,=赋值;结果可用于条件判断或变量存储。
-
局部变量表不实现内存高效分配,它只是编译期确定大小的固定结构;真正提升内存效率的是减少局部变量数量、复用变量、控制参数规模、避免逃逸,并配合逃逸分析实现栈上分配。
-
bulkRegister(n)适用于初始化阶段一次性注册大量已知节点,比循环调用register()更高效,避免多次CAS开销,且仅在逻辑确定、任务未启动时调用;n≥0,负数抛IllegalArgumentException,注册后仍需各参与者调用arriveAndAwaitAdvance()才完成阶段对齐。
-
先定位高CPU的Java进程及线程,再通过jstack分析线程堆栈,结合jstat、jmap等工具排查GC、内存泄漏等问题,最终优化代码或JVM参数解决。
-
EnumSet.of()不能替代位掩码操作,因其本质是Set,不暴露位值、不支持按位运算,且ordinal()不等于掩码权重,顺序变更会导致手动拼码出错。
-
DeferredImportSelector是ImportSelector的扩展接口,执行时机更晚——在所有@Configuration类解析完成、@Conditional评估结束后才调用selectImports(),可安全访问已加载的Environment、BeanFactory及其它@Bean实例;而ImportSelector在配置类解析初期即执行,无法感知后续定义的Bean。
-
List.of()返回真正不可变列表,所有修改操作均抛UnsupportedOperationException,且禁止null;Arrays.asList()返回数组视图,支持set修改元素但不支持add/remove,允许null。
-
ProcessHandle无法实现优雅回收,仅负责触发信号和观察状态;真正优雅终止须由子进程自行响应SIGTERM等信号完成清理,否则destroy()在Linux/macOS发SIGTERM、Windows等效强杀,不等待清理也不执行shutdownhook。
-
Arthas可无侵入诊断JVM,但需规避权限、网络及配置问题:Linux下需匹配用户或sudo,容器需--cap-add=SYS_PTRACE和完整/proc;临时目录不一致导致socket错误时,用jinfo查并同步JAVA_TMP_DIR;dashboard-i1提升刷新率,thread-b定位阻塞,watch/trace精准监控业务方法并加-e捕获异常;dump分析可用ognl和vmtool辅助。
-
Java事件总线是轻量级解耦异步通信机制,发布者与订阅者通过总线交互,契合高内聚低耦合原则;推荐Guava(轻量)、SpringEvent(深度集成、类型安全)、greenrobotEventBus(高性能);事件对象应不可变、类型明确;监听器需为容器Bean,避免事务与循环发布陷阱。
-
Spring三级缓存不解决构造器注入循环依赖,因其要求实例化时即获得完整依赖对象,无法提前暴露半成品;仅支持单例Bean的字段或setter注入,通过singletonFactories→earlySingletonObjects→singletonObjects严格时序协作实现解耦。
-
NumberFormat.getCurrencyInstance()不支持动态切换货币符号,其显示的货币符号和小数位由Locale默认关联的货币决定;若需按货币代码(如"EUR")动态控制,应使用setCurrency(Currency.getInstance("EUR"))或Java12+的NumberFormatter。
-
Optional.ifPresent仅用于本地空值防护,不能解决微服务迁移中的上下文断裂、分布式容错等问题;它适用于DTO转换、配置读取等轻量场景,需配合契约定义、统一结果封装和降级机制保障变量安全。
-
抽象类的核心价值在于组织可复用、可扩展的代码结构,典型体现为模板方法模式:父类定流程(final模板方法)、子类填细节(抽象方法),辅以钩子方法提供可选扩展点,避免滥用为接口或大杂烩。