-
Redisson默认使用Kryo实现JCache的序列化/反序列化,而非Java原生序列化;对象无需实现Serializable,但需满足Kryo兼容性要求(如提供无参构造器、避免非静态内部类等),且支持java.time等现代JDK类型。
-
Vector性能差因同步锁粗粒度:单线程浪费开销,多线程争抢同一锁,复合操作仍不安全;Stack同理且API陈旧、不兼容Deque,LIFO场景应改用ArrayDeque。
-
Java线程池饱和时,1.AbortPolicy抛异常暴露问题但可能中断服务;2.CallerRunsPolicy让调用方执行任务实现优雅降级,确保任务不丢但可能阻塞调用线程;3.DiscardPolicy静默丢弃任务适用于非关键数据但存在丢失风险;4.DiscardOldestPolicy丢弃最老任务优先处理最新数据,适合时效性强的场景但可能导致任务饿死;选择策略需综合任务重要性、容忍度、时效性和系统负载,核心业务宜选CallerRunsPolicy保障完整性,非关键数据可考虑丢弃策略并辅以监控。
-
ScheduledExecutorService优于Timer因其线程池机制可隔离异常、支持并行,且提供scheduleAtFixedRate(固定周期)与scheduleWithFixedDelay(执行完再延迟)两种调度策略,任务类型支持Runnable和Callable,关闭时需合理调用shutdown()与awaitTermination()等方法。
-
接口多态通过抽象行为提升代码扩展性,1.定义清晰契约如Payment接口;2.用多态替代条件判断;3.结合工厂模式解耦创建过程;4.优先使用接口类型引用,实现灵活替换与维护。
-
CLASSPATH是JVM加载类和资源的核心路径,需通过-cp显式指定;手动设系统级CLASSPATH易引发冲突且不可靠,推荐用构建工具或IDE自动管理。
-
应记录可预期但不可控的外部异常(如IOException、SQLException),而非NullPointerException等逻辑错误;RuntimeException除非可恢复,否则应抛出并保留异常链;日志仅在全局处理器中记录一次,级别依业务影响而定,且需配置%ex输出堆栈。
-
src/test/resources配置不生效最常见原因是IDE未将该目录加入测试类路径,导致ClassLoader找不到资源;需标记为TestResourcesRoot并手动验证路径。
-
Java不直接用于现代主流移动端开发,但Android平台Java开发需配置JDK17+、AndroidStudio及配套SDK,并在Gradle中声明Java17编译版本,确保构建链路通畅。
-
当使用Scanner的nextDouble()等方法读取非匹配类型输入时,会抛出InputMismatchException而非NumberFormatException,若catch块未正确声明该异常类型,则异常将未被捕获而直接终止程序。
-
代码块控制变量作用域,{}内声明的变量仅在该块内可见;普通块限局部作用域,实例块随对象创建执行,静态块类加载时执行一次,同步块只影响锁粒度。
-
Java开发中最易忽略的是运行时隐性异常:空指针(链式调用、自动拆箱等)、资源泄漏(未正确关闭IO/连接)、并发幽灵异常(ConcurrentModificationException等)及日期时区错误(SimpleDateFormat非线程安全、LocalDateTime误用)。
-
组合优于继承的关键在于按生命周期、复用性、可测试性拆分;避免接口宽泛、抽象类滥用、字段可变失控,聚焦小接口和不可变设计。
-
Ant无需安装,只需JDK8+并配置PATH;build.xml必须位于项目根目录或用-f指定;javac失败多因路径、classpath或JDK版本问题;ant-p无输出说明缺少defaulttarget或依赖链不完整。
-
Java后台接口异常排查核心思路是“先定位范围、再缩小原因、最后验证修复”,优先通过日志(异常类型、堆栈、上下文)、监控(QPS、错误率、JVM指标)、依赖(DB/Redis/HTTP/消息队列)逐层分析,再针对性审代码。