-
Java中Thread不生成接口,而是通过实现Runnable或Callable等接口定义任务行为并交由Thread执行,实现行为与线程机制解耦。
-
Java配置中心核心是动态推配与用配联动,含存储层、服务端和客户端SDK三部分;SpringBoot中可用@ConfigurationProperties+@RefreshScope配合/actuator/refresh实现动态加载,需避坑@Value不刷新、类型转换静默失败等问题。
-
异常用于处理可恢复错误和输入校验,如通过IllegalArgumentException检查参数合法性;断言用于验证内部逻辑假设,如私有方法状态检查,默认生产环境关闭;两者结合使用可提升代码健壮性与调试效率。
-
EOFException通常表示数据流正常结束,常见于DataInputStream或ObjectInputStream读取时到达末尾。应通过try-catch捕获并作为循环终止信号,如在readObject()中使用while(true)读取直至抛出EOFException,随后正常退出。虽可捕获该异常,但更优做法是写入端记录数量或长度,读取端据此判断,避免依赖异常控制流程。合理区分“正常结束”与“数据错误”能提升程序健壮性。
-
Optional.or()是按需生成新Optional的方法,接收Supplier<Optional<T>>,仅空时调用;而orElse()返回T类型值,二者类型、语义及使用场景均不同。
-
NumberFormatException在字符串格式非法时抛出,如空串、纯字母、多余空格、Unicode零宽字符或超范围数值;应通过trim()校验、null检查及try-catch或Optional封装安全转换。
-
ClassCastException根本原因是同一类被不同类加载器加载,导致JVM视为不同类型;需通过堆栈分析、运行时打印加载器、检查依赖冲突、JVM参数及Arthas工具定位并统一类加载边界。
-
Java核心概念需通过实践深挖:ArrayList初始容量不等于数组长度,volatile对long/double在现代JVM中主要起内存屏障作用,ClassLoader.loadClass()返回null主因是类名错误或类路径缺失,String.intern()自JDK7起存于堆内字符串常量池。
-
Java程序运行核心是写对源文件名与类名、配好JDK环境变量;需确保javac/java命令可用,文件名与public类名严格一致,编译运行在正确路径下,注意大小写敏感和包声明规则。
-
Unsafe.allocateMemory绕过GC需配对freeMemory,否则内存泄漏或崩溃;putX/getX无边界检查易越界;禁混用DirectByteBuffer地址;新项目应优先使用MemorySegment+VarHandles。
-
Java中用static修饰的方法叫静态方法,它属于类本身,不依赖对象实例就能调用,只能直接访问静态成员,不能使用this或super,也不能调用非静态成员。
-
优先组合,慎用继承。继承体现is-a关系,支持多态但耦合高、破坏封装;组合通过has-a关系提升灵活性与可维护性,符合合成复用原则;涉及行为变体时,组合+接口更优,利于动态替换与独立演化。
-
PriorityBlockingQueue是线程安全的无界阻塞队列,基于堆实现,按元素优先级排序,使用ReentrantLock保证并发安全,不允许null值;元素需实现Comparable接口或提供Comparator比较器以定义优先级,常用于多线程任务调度场景,如后台任务处理和定时任务分发。
-
STS更新Maven项目时因MapStruct依赖卡在75%无响应,通常是本地Maven仓库中MapStruct相关构件损坏所致;删除对应版本缓存后重试即可恢复。
-
Java中应避免使用过时的Stack类,改用ArrayDeque或LinkedList实现Deque接口;Queue接口优先选择ArrayDeque,因其性能最优;Deque可同时支持栈和队列操作,但建议语义统一以避免混淆。