-
Package.getAnnotations()通常为空,因为package-info.java中的注解默认为SOURCE保留策略,编译后即丢弃,且JDK的Package类不解析package-info.class中的注解。
-
直接下载官方JDK安装包并配置JAVA_HOME和PATH即可使用;优先选EclipseTemurin(adoptium.net)或OracleOpenJDK(jdk.java.net),选用JDK17/21LTS版本;Windows用.msi、macOS用.pkg、Linux用.tar.gz;JAVA_HOME须指向JDK根目录,PATH需含$JAVA_HOME/bin;验证需同时检查java-version与javac-version一致。
-
Java枚举单例的唯一性由JVM类加载与序列化机制保障:枚举实例在类初始化时创建且唯一,序列化仅保存名称,反序列化直接查表返回原实例,反射、克隆、重写序列化等攻击均被语言机制拦截。
-
Collections.singleton用于构建单用户异步通知管道,核心是利用其不可变、线程安全、低开销特性封装用户标识,明确推送上下文,避免null或原始类型歧义,兼容未来批量扩展,配合CompletableFuture安全传递上下文,并作为轻量级“管道头”衔接过滤与分发逻辑。
-
分布式锁用于解决多实例并发访问共享资源的冲突问题,Java中常用Redis和Zookeeper实现。1.Redis通过SET命令的NX和EX选项实现加锁,value使用唯一标识,结合Lua脚本保证解锁原子性,推荐使用Redisson框架,支持可重入和看门狗机制;需注意超时设置、误删锁及主从切换导致的锁失效问题。2.Zookeeper利用临时有序节点实现,客户端创建节点后判断是否最小序号,若是则获锁,否则监听前一节点,Curator的InterProcessMutex简化了实现,具备强一致性和公平性,适合高
-
retainAll()是原地过滤操作而非纯交集函数:调用A.retainAll(B)后A变为A∩B,B不变;返回boolean表示是否删除元素,不能用于判断交集存在;性能上ArrayList版为O(m×n),应将参数转HashSet优化;HashSet版接近O(m),更符合集合交集语义。
-
初始化块用于对象创建时的初始化操作。静态初始化块使用static定义,类加载时执行一次,用于初始化静态变量;实例初始化块在每次创建对象时、构造函数前执行,多个按顺序运行,适合共用初始化逻辑,可用于默认值设置、资源加载等,异常需try-catch处理,虽不常用但有助于统一初始化。
-
newWorkStealingPool()返回ForkJoinPool实例,基于工作窃取算法调度任务,不支持shutdownNow()精确中断,适用于可分割的CPU密集型任务,不适用于阻塞I/O或强依赖场景。
-
双指针法可原地移除数组中目标值元素:left指向结果数组写入位置,right遍历原数组;遇非目标值则复制至left并递增left,时间复杂度O(n),空间复杂度O(1)。
-
final修饰类会阻止继承,编译期直接报错;修饰方法则阻止重写但允许调用;final类中非private方法隐式final;其限制是编译期强制的,与性能优化无关,本质是设计契约。
-
ConcurrentHashMap迭代器非fail-safe而是弱一致性,不抛ConcurrentModificationException但不保证看到所有修改;它用分段锁+CAS+volatile实现线程安全,无modCount机制,设计取舍为高吞吐而非强一致性。
-
可在@RabbitListener方法参数中直接声明MessageProperties,SpringAMQP自动注入;需手动ACK时须配置容器为MANUAL模式,并同时声明Channel和Message参数,用MessageProperties.getDeliveryTag()获取tag调用Channel方法。
-
答案:containsAll方法用于判断一个集合是否包含另一个集合的所有元素,即判断前者是否为后者的超集。通过A.containsAll(B)可检查B是否为A的子集,返回true表示B中所有元素均存在于A中。例如setA包含1、2、3、4,setB包含2、3时,setA.containsAll(setB)返回true。使用时需确保元素的equals和hashCode方法正确重写,空集合被视为任何集合的子集,该方法适用于所有Collection实现类。
-
drainTo能减少上下文切换,因为它批量取出任务避免频繁阻塞/唤醒;正确用法需配合循环与非空判断,并处理部分drain和零长度边界;性能提升取决于队列类型与任务密度。
-
Jackson能自动将带type字段的JSON数组反序列化为子类对象列表,前提是正确配置@JsonTypeInfo与@JsonSubTypes、注册子类、使用TypeReference指定泛型,并确保JSON中类型标识字段名和值严格匹配声明。