-
Java源文件中至多一个public类,其名必须与文件名(不含.java)严格一致且大小写敏感;可含多个非public类;无public类时文件名任意但需合法;main方法所在类无需public修饰。
-
JavaCleaner未触发是因为清理动作中隐式持有了被注册对象的强引用,导致对象无法进入幻象可达状态;本文详解其原理、典型错误、安全实现方案及最佳实践。
-
NullPointerException是Java中继承自RuntimeException的非受检异常,因对null引用执行方法调用、字段访问、数组操作或自动拆箱等操作而触发,反映逻辑缺陷而非外部故障,编译器不强制处理,需通过判空预防。
-
CompletableFuture不降低单次RPC耗时,但通过并行执行与合理编排将总耗时从“Σ各服务耗时”压缩至“≈max(各服务耗时)”,结合自定义线程池、超时熔断、异常统一处理及状态传播控制,方可实现毫秒级稳定聚合。
-
逃逸分析默认开启但效果取决于代码结构和运行时行为;判断对象是否逃逸关键看其引用是否“传出”,需结合-XX:+PrintEscapeAnalysis和-XX:+PrintEliminateAllocations观察C2编译后的实际优化结果。
-
Java中Properties加载配置文件需确保路径正确与键值对解析安全,常用InputStream方式加载,注意ISO-8859-1默认编码导致中文乱码,应转义或指定UTF-8编码,同时规范键值分隔、注释及反斜杠转义。
-
JAVA_HOME必须使用绝对路径,因为Java工具链(如Maven、Gradle、IDE、Tomcat等)直接拼接路径且不解析相对路径、波浪号或shell变量,工作目录变更后相对路径立即失效。
-
正确计算区块哈希需严格按prevHash、data、timestamp、nonce顺序拼接字符串并用SHA-256计算,统一UTF-8编码,禁用toString()或hashCode();PoW中nonce应使用long类型并设最大尝试次数;链式校验须确保prevHash准确传递且hash字段不可变。
-
FileOutputStream的append参数决定写入是否追加到文件末尾而非覆盖,true时以O_APPEND方式打开文件确保每次write自动定位末尾,false则从开头写并覆盖;它仅在构造时生效,不可动态修改。
-
应使用net.sf.ehcache:ehcache:2.10.9并排除SpringBoot自动配置的Ehcache3,将ehcache.xml放入classpath根路径,确保CacheManagerBean名为cacheManager,且@Cacheable用于public方法并经Spring代理调用。
-
使用ScheduledExecutorService可实现任务延时或周期执行,并复用线程池资源。通过newScheduledThreadPool创建,支持schedule、scheduleAtFixedRate和scheduleWithFixedDelay三种调度方式。需调用shutdown()关闭线程池,配合awaitTermination确保优雅停机,紧急时用shutdownNow()。自定义ThreadFactory可提升线程名可读性便于调试。任务内需捕获异常防止调度终止,避免长任务影响调度精度,耗
-
Java中异常是否触发事务回滚取决于异常类型、事务配置及处理方式:默认仅RuntimeException和Error导致回滚;checked异常需显式配置rollbackFor;捕获后未重抛或未设setRollbackOnly则事务不回滚;非public方法上@Transactional无效;传播行为如REQUIRES_NEW使内层异常不影响外层事务。
-
Java不手动释放内存是因为依赖GC自动管理堆和元空间内存,避免循环引用、野指针等问题;GC不处理栈、直接内存等区域,System.gc()仅是建议且通常被忽略。
-
EntrySet遍历略快于KeySet,因前者复用Node实例而后者每次取node.key;若需value,必须用entrySet(),避免keySet()+get()导致O(n×桶长)性能退化。
-
单纯靠module-info.java无法实现服务变量的动态插拔,因其仅支持编译期和启动期的静态模块声明与服务契约定义,而动态启用/停用/替换需依赖运行时机制如服务注册中心、事件驱动或Spring动态Bean注册。