-
动态绑定指运行时根据对象实际类型而非引用类型决定调用哪个方法,仅适用于可被重写(非static、非private、非final)的实例方法,通过invokevirtual指令实现;字段访问则始终依据引用类型,不参与动态绑定。
-
Arrays.asList返回的列表是原数组的视图,非独立副本,不支持增删操作,修改会同步到原数组。
-
Maven需配置镜像源加速依赖下载,应修改用户级~/.m2/settings.xml(推荐)或全局conf/settings.xml,镜像配置须置于<mirrors>标签内,使用<mirrorOf>*</mirrorOf>拦截全部请求,推荐阿里云https://maven.aliyun.com/repository/public,并验证URL可用性及IDE设置。
-
报错处理不压榨硬件,压榨硬件的是主干计算路径;需通过指令布局优化流水线、数据对齐避免伪共享、主动引导编译器生成高效代码来逼近性能上限。
-
自定义异常能提升Java代码可读性和维护性,通过命名明确异常语义,如UserAlreadyExistsException;继承Exception或RuntimeException并封装错误信息;统一组织在exception包中,建立BaseBusinessException基类;结合枚举管理错误码;合理控制异常数量,在业务层主动抛出并包装底层异常,使错误处理更清晰可控。
-
责任链模式通过将校验、转换等逻辑封装为独立处理器,使变量按序流经各环节;每个处理器专注单一职责,通过next引用串联,支持动态组装、无副作用加工与语义化中断。
-
构造方法与初始化块共同决定对象初始状态,其执行顺序为:父类静态成员→子类静态成员→父类实例成员→父类构造方法→子类实例成员→子类构造方法,且构造方法可重载并用this()调用其他构造方法。
-
@Override不参与泛型擦除,仅作编译校验;重写是否成立取决于擦除后方法签名是否一致:参数擦除为上界(无界则Object),返回类型需满足协变规则,否则编译报错。
-
BigDecimal.divide抛ArithmeticException的常见原因有四:一是除零;二是未指定精度和舍入模式导致无限小数;三是指定了UNNECESSARY舍入但结果无法精确表示;四是divideToIntegralValue在无法整除时部分JDK版本异常。
-
MinIO连接失败主因是服务未启动或监听地址错误;默认仅监听localhost:9000,需用--address显式绑定IP;客户端endpoint须为完整无路径URL;bucket需显式创建且命名合规;SpringBoot需统一OkHttp版本。
-
Java中用int[]inDegree记录各节点入度,初始化为0后遍历边递增对应下标;配合队列实现Kahn算法:入度为0者入队,出队后对其后继入度减1并入队新零入度节点,最终序列长度等于n则成功。
-
默认情况下核心线程长期闲置也不回收,这是由源码硬性保障的设计红线:1.核心线程用workQueue.take()无限阻塞,非核心线程才用poll(timeout);2.processWorkerExit()中allowCoreThreadTimeOut=false时,线程数≥corePoolSize即直接返回,不销毁;3.只要线程池处于RUNNING状态,ctl机制就绑定核心线程与池生命周期。
-
Metaspace泄露本质是类加载器未被回收导致元数据堆积;需通过JVM参数监控、jcmd/MAT定位异常类加载器,并修复ThreadLocal、静态缓存、监听器注册等常见泄露点。
-
DocumentBuilder不是线程安全的,多线程共享会导致状态错乱、解析失败甚至JVM崩溃;应使用ThreadLocal隔离实例,或改用JAXB、StAX等线程安全替代方案。
-
Instrumentation.retransformClasses支持在线热更新方法体逻辑,但不能增删或修改字段类型、继承关系及方法签名;可通过改写getter/setter、初始化逻辑、Unsafe/反射、可变引用等方式间接“热更变量”行为。