-
Java项目资源文件路径配置关键在于类路径(classpath)机制,推荐用ClassLoader.getResourceAsStream()加载src/main/resources下的资源,避免绝对路径;SpringBoot可用@Value或ResourceLoader简化操作。
-
Java中使用MessageDigest实现哈希需先通过getInstance获取实例,update分步输入或digest一步计算,结果byte[]须转为补零十六进制字符串;实例非线程安全,应避免共享,推荐每次新建或用ThreadLocal隔离。
-
Java中计算圆面积需用Math.PI和公式π×半径²,可直接计算、接收用户输入或封装为方法复用。
-
抽象类不必含抽象方法,其核心是限制实例化并允许部分实现;适用场景包括共享状态、构造逻辑及非public成员;设计时应明确扩展点,避免泛型擦除导致的覆写失败。
-
本文介绍如何通过java、javac和javap命令提前获知目标JDK默认生成的class文件主/次版本号(即major.minor),避免因版本不兼容导致UnsupportedClassVersionError。无需实际编译.class文件即可准确判断。
-
javac提示“不是内部或外部命令”是因JAVA_HOME未配置或PATH未包含%JAVA_HOME%\bin;public类名必须与文件名严格一致;运行“找不到主类”多因包路径、类路径或main签名错误;版本不匹配需用-source/-target或--release指定兼容性。
-
Account与Transaction应职责分离:Account管理余额和元信息,Transaction封装单笔收支(含时间、金额、类型、备注);关键约束须写入构造逻辑,如金额校验。
-
HashMap与Hashtable的核心区别在于时代背景与设计哲学:前者是JDK1.2集合框架下的现代标准实现,支持泛型、null键值、非同步及红黑树优化;后者是JDK1.0遗留类,继承Dictionary、拒绝null、全表同步且无后续演进。
-
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输出堆栈。