-
List.of()和Map.of()创建的集合不能add/remove,因为它们返回JVM内置不可变实现类(如ListN、MapN),所有修改操作均直接抛UnsupportedOperationException;不支持null、有参数数量限制(List.of最多10个)、Map.of重复key在Java14+编译期报错;适用于配置项、映射表等只读场景,但不防元素内部可变。
-
应根据List是否可变、是否含null、后续是否需增删来选择:可变且无null用replaceAll;不可变或含null或需增删则用Stream.map配合toCollection(ArrayList::new)。
-
调用window.print()可触发浏览器原生打印对话框,需配合@mediaprintCSS隐藏非关键元素、优化布局适配A4尺寸,并利用onafterprint增强交互体验。
-
分支预测不影响逻辑正确性但显著影响执行速度,因预测失败导致流水线冲刷;有序数组使预测命中率高,随机数组则频繁失败;单向过滤、数据局部性好、避免嵌套条件更易预测;编译器可用cmov等消除分支。
-
StringJoiner原生支持分隔符、前缀和后缀,创建时指定三参数即可自动包裹元素;空集合返回前缀+后缀(如“[]”),无需判空;支持链式调用、merge合并及与Collectors.joining无缝对应。
-
Java要求局部变量在使用前必须明确初始化;若仅用独立if语句而无else覆盖所有可能取值,编译器无法保证变量一定被赋值,从而报错。正确做法是用if-elseif-else结构或直接初始化默认值。
-
DCL单例中必须用volatile,因为它禁止指令重排序(防止初始化与引用赋值乱序)并保证可见性(使新实例对其他线程立即可见),缺一不可,否则可能返回半初始化对象。
-
Arrays.binarySearch用于在已排序数组中高效查找元素,1.调用形式为intindex=Arrays.binarySearch(array,key),返回目标索引或负值;2.未找到时返回-(插入点)-1,表示应插入位置以维持有序;3.可指定搜索范围fromIndex到toIndex(左闭右开),如Arrays.binarySearch(arr,1,4,3)在子区间查找;4.支持基本类型和对象数组,对象比较需实现Comparable或使用Comparator,如String.CASE_INSE
-
String.getBytes()不指定字符集会使用系统默认编码,导致跨平台结果不一致,引发乱码等问题;必须显式指定StandardCharsets.UTF_8等标准字符集,且编解码字符集需严格匹配。
-
LocalDate.plusDays计算订单过期时间完全可靠,前提是业务规则明确且不涉及时区、时间点或跨日营业逻辑;它仅做确定性日历天加法,适合“下单后N日内有效”场景,但需注意计时起点、节假日排除及过期判断时机等业务语义。
-
final是Java中用于限制继承和重写的关键字,提升安全性、可维护性及JVM优化效果;可修饰类(禁止继承)、方法(禁止重写)及变量(保障不可变性),但需基于明确设计意图合理使用,避免滥用。
-
抽象类不能直接实例化,普通类可以;抽象类定义通用结构并强制子类实现抽象方法,普通类封装具体功能;模板方法模式利用该特性将算法骨架放在抽象类中,可变步骤延迟至子类实现。
-
CountDownLatch通过计数器实现线程同步,初始化为1时调用countDown可唤醒所有await线程,常用于模拟高并发场景。
-
ForkJoinPool默认构造常跑不快,因其并行度为CPU核数减1且任务粒度粗时窃取失效;需按子任务耗时调优阈值、避免阻塞、慎用commonPool,并在不可递归拆分或计算过轻时改用其他并发方案。
-
orElse始终执行默认值表达式,而orElseGet仅在Optional为空时延迟执行;应根据默认值创建开销选择:低开销用orElse,高开销用orElseGet以避免性能问题。