-
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;其限制是编译期强制的,与性能优化无关,本质是设计契约。
-
答案: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中类型标识字段名和值严格匹配声明。
-
BitSet是Java中专为位运算优化的高效数据结构,底层用long数组存储,仅支持非负整数,通过and()和or()原地执行CPU级位运算实现交并集,比哈希或Stream快10–100倍。
-
ifelse语句用于根据条件执行不同代码块,基本语法为if(条件){}else{},支持多条件elseif扩展,如判断成绩等级;需注意条件为boolean类型、建议使用大括号、条件顺序影响结果,并建议包含else处理默认情况。
-
Collection必须实现15个核心方法:增删查基础操作(add、remove、contains、size、isEmpty)、批量操作(addAll、removeAll、retainAll、containsAll、clear)、遍历转换(iterator、toArray、toArray(T[])),以及JDK8+默认方法(stream、parallelStream、removeIf)。
-
NMT是定位JVM堆外内存泄漏的核心工具,需启动时配置-XX:NativeMemoryTracking=detail和-XX:+UnlockDiagnosticVMOptions,通过jcmd对比baseline与diff快照,重点监控Internal、Thread、Metaspace、Other四大区域,并辅以pmap、smaps等系统命令交叉验证。
-
装饰器模式核心是“包对象”而非“改对象”,通过包装注入新逻辑而不破坏原有接口契约:JS中可用高阶函数实现函数装饰、Proxy增强对象、Java/C++风格接口链式组合,需规避内存泄漏、顺序错乱等陷阱。
-
Java开发环境无法直接迁移,关键在于分离可变项(如JDK路径、Maven本地仓库)与不可变项(如pom.xml声明的java.version),通过sdkman/jdk-tool管理JDK、mvn-s指定可移植settings、IDE仅消费项目配置来实现跨平台复用。
-
bulkRegister(n)适用于初始化阶段一次性注册大量已知节点,比循环调用register()更高效,避免多次CAS开销,且仅在逻辑确定、任务未启动时调用;n≥0,负数抛IllegalArgumentException,注册后仍需各参与者调用arriveAndAwaitAdvance()才完成阶段对齐。