# 1. Collector 标记为 CONCURRENT 时还需要满足哪些线程安全条件,UNORDERED 特征有何作用 A CONCURRENT 要求累加器与容器线程安全,UNORDERED 允许无序处理提升并行度 ✓ 正确答案 B UNORDERED 要求有序 C CONCURRENT 与线程安全无关 D CONCURRENT 无需线程安全
# 2. Collector.CONCURRENT 与 UNORDERED 特征在并行流中的线程安全要求与性能影响 A CONCURRENT 省合并但需容器线程安全,UNORDERED 省顺序同步,均提升并行性能 ✓ 正确答案 B 两者都会降低性能,应避免使用 C CONCURRENT 对容器无线程安全要求 D UNORDERED 要求结果必须保持有序
# 3. Gatherers.mapConcurrent 如何限制并发度和保持遇见顺序,映射函数阻塞时有什么边界 A 用固定并发度映射并保持遇见顺序,映射函数阻塞时受并发度限制(有序输出使阻塞元素卡住后续) ✓ 正确答案 B 它不保持顺序 C 并发度无限 D 输出乱序
# 4. Lambda 捕获的局部变量为何必须有效 final,捕获可变对象引用后又有哪些并发风险 A 捕获的局部变量必须有效 final(值稳定),捕获可变对象引用时对象可变仍有并发风险需线程安全 ✓ 正确答案 B 引用可变对象无风险 C 局部变量可随意修改 D 捕获变量可被修改
# 5. Spliterator 在并行流(Parallel Stream)中的拆分策略与工作线程调度 A Spliterator.trySplit 递归拆分数据源,ForkJoinPool.commonPool 用 work-stealing 调度子任务 ✓ 正确答案 B 拆分与调度无关 C 并行流不用 Spliterator D 并行流用单线程
# 6. Stream 与集合转换(toList/toUnmodifiableList)的演进 A Stream.toList()(JDK 16)返回不可变 List 更简洁,toUnmodifiableList 不可变,Collectors.toList 可变 ✓ 正确答案 B toList() 返回可变 List C toList() 不能用于 Stream D 所有转换都返回可变
# 7. Stream 并行流(parallelStream)的线程模型与坑点 A 并行流用独立线程池 B 并行流用共享 commonPool,阻塞 I/O 占线程、共享可变状态竞态、有状态操作屏障是主要坑点 ✓ 正确答案 C 并行流无共享状态问题 D 阻塞 I/O 不影响并行流
# 8. 即使使用线程安全集合仍有何风险 A 线程安全集合使并行流完全安全 B 线程安全集合消除竞态但副作用反模式、性能、顺序不保证仍存在,应避免副作用用纯函数/collect ✓ 正确答案 C 副作用收集是推荐做法 D 线程安全集合保证顺序
# 9. 序列化 Lambda 为什么依赖 SerializedLambda 与实现细节,持久化任务定义时应采用什么替代方案 A Lambda 序列化为普通对象 B 序列化 Lambda 稳定 C Lambda 序列化走 SerializedLambda(记录捕获参数与实现方法),脆弱不稳定,持久化任务用显式任务描述替代 ✓ 正确答案 D 可直接持久化 Lambda
# 10. @FunctionalInterface 的真实价值 A 它无作用 B 它是必需的 C 它提供编译期强制单抽象方法约束与文档契约,防止接口被破坏保护 Lambda 兼容性 ✓ 正确答案 D 它允许多个抽象方法
# 11. @FunctionalInterface 的语义化命名 A 命名无需语义 B 命名任意即可 C 标准接口覆盖所有场景 D 命名应语义化体现用途(Function/Consumer/Supplier/Predicate),优先复用标准接口,自定义体现功能 ✓ 正确答案
# 12. BiFunction/BiPredicate 的限制与替代方案 A BiFunction/BiPredicate 最多两参,多参需自定义函数式接口、参数对象或柯里化 ✓ 正确答案 B 有 TriFunction 标准接口 C 标准接口支持任意参数 D 两参是无限制的
# 13. BinaryOperator/UnaryOperator 与 Function 的关系及 IntBinaryOperator 等特化类型的性能价值 A BinaryOperator 是 Function 特化 B IntBinaryOperator 会装箱 C 原始类型特化无价值 D BinaryOperator/UnaryOperator 是 BiFunction/Function 的同类型特化,原始类型特化(IntBinaryOperator)避免装箱提升性能 ✓ 正确答案
# 14. Collectors.teeing 如何在一次遍历中组合两个下游结果,两个收集器的状态是否共享 A 只能一个下游 B 两个下游共享状态 C 需两次遍历 D teeing 一次遍历喂两个下游收集器,各自状态独立,最终 merger 合并,避免多次遍历 ✓ 正确答案
# 15. Comparator 的函数式构造(comparing/thenComparing) A comparing 按键生成比较器,thenComparing 链式添加次级条件,reversed/nullsFirst 组合排序 ✓ 正确答案 B comparing 只能比较一个字段 C thenComparing 不能链式 D 排序需手写
# 16. Function.compose/andThen 的执行顺序 A compose 先执行参数函数再自身(f(g(x))),andThen 先自身再参数函数(g(f(x))),顺序相反 ✓ 正确答案 B compose 先自身 C 两者顺序相同 D andThen 先参数函数
# 17. Gatherer 的 Integrator 如何发出多个、一个或零个元素,并通过返回值请求上游短路 A 只能发出一个元素 B 不能短路 C Integrator 通过 downstream.push 发出 0/1/多个元素,返回 false 请求上游短路停止 ✓ 正确答案 D 返回 void
# 18. Gatherers.scan 与 fold 都能维护状态,它们输出中间结果和最终结果的语义有何差异 A scan 输出最终结果 B scan 输出每个元素的中间累加结果(前缀扫描,长度同输入),fold 只输出最终归约结果 ✓ 正确答案 C 两者输出相同 D fold 输出中间结果
# 19. IntStream 等原始类型流如何减少装箱,转换为 boxed 后在哪些操作中会重新产生对象 A 原始流也会装箱 B 原始类型流避免装箱提升性能,boxed() 转回对象流重新装箱,需对象的操作才 boxed ✓ 正确答案 C boxed() 不产生对象 D 原始流无法提高性能
# 20. JEP 485 与现有 Stream 操作(map/filter) A JEP 485 替代 map/filter B JEP 485 与 map/filter 无关 C JEP 485 引入 Gatherers(自定义中间操作),补充 map/filter 等内置操作无法表达的状态化/窗口化操作 ✓ 正确答案 D Gatherers 是内置操作
# 21. IntStream.range/rangeClosed 的边界差异 A 两者都含 end B range 左闭右开(不含 end),rangeClosed 闭区间(含 end),按是否包含上界选择 ✓ 正确答案 C rangeClosed 不含 end D range 含 end
# 22. IntStream/LongStream/DoubleStream 特化的性能价值 A 原始流会增加装箱 B 原始类型流避免装箱、内存紧凑、提升数值性能,用于数值密集场景 ✓ 正确答案 C 原始流性能更差 D 原始流只能用于小数据
# 23. JDK 21+ Optional.or 与 ifPresentOrElse 的工程价值 A or 只在有值时返回 B or 提供空值回退(可选链),ifPresentOrElse 提供有值/无值两分支函数式处理 ✓ 正确答案 C ifPresentOrElse 只能处理有值 D or 不支持链式
# 24. Java 9 Optional.stream() 与 Optional.or 的工程价值 A stream() 只能用于单 Optional B or 只能返回同值 C stream() 把 Optional 转 Stream 展平可选值,or 提供空值回退,提升函数式管道协作 ✓ 正确答案 D 两者互斥
# 25. Java 9 Stream.takeWhile/dropWhile 的应用 A takeWhile 丢弃满足前缀 B dropWhile 取前缀 C takeWhile 取满足条件的前缀(到第一个不满足停止),dropWhile 丢弃满足条件的前缀 ✓ 正确答案 D 两者语义相同
# 26. Java 函数式编程的核心思想(纯函数、引用透明、柯里化) A 纯函数可有副作用 B 纯函数无副作用、引用透明可替换、柯里化把多参数转单参数,Java 用 Lambda 支持但非纯函数式 ✓ 正确答案 C 引用透明无意义 D 柯里化是 Java 内建
# 27. Lambda 中的 this 与外部作用域 A Lambda 的 this 指向自身 B Lambda 有自身 this C Lambda 不能访问外层字段 D Lambda 的 this 指向外层类实例(无自身 this),与匿名类(this 是自身)相反 ✓ 正确答案
# 28. Lambda 序列化的局限 A 所有 Lambda 可序列化 B 序列化稳定 C 无需 cast D 只有 Serializable 函数式接口可序列化,且依赖 SerializedLambda 跨版本不稳定,不用于持久化 ✓ 正确答案
# 29. Lambda 表达式的实现原理(invokedynamic + LambdaMetafactory) A Lambda 用 invokedynamic + LambdaMetafactory 动态生成函数式接口实例,惰性、可内联、比匿名类高效 ✓ 正确答案 B Lambda 编译期生成类文件 C Lambda 用反射调用 D Lambda 编译为匿名类
# 30. Optional 与 Stream 协作(stream()/filter) A Optional.stream() 转 Stream 展平可选值、filter 条件过滤,配合 Stream 管道实现函数式处理 ✓ 正确答案 B Optional.stream() 无法展平 C Optional 不能与 Stream 用 D filter 只放行空值
# 31. Optional 与 Stream 在链式调用中空值处理的协作模式 A 两者不能协作 B flatMap 无法展平 C 空值需手动 if D Optional 处理单值空、Stream 处理集合,用 flatMap(Optional::stream)/Optional.flatMap 衔接避免嵌套空值检查 ✓ 正确答案
# 32. Optional 与 null 在序列化上的差异 A Optional 序列化为 null B Optional 是容器对象(序列化含容器结构),null 是"无值",JSON 序列化 Optional 需特殊处理 ✓ 正确答案 C 两者序列化相同 D Optional 适合作字段
# 33. Optional 作为方法参数/字段的反模式 A Optional 适合作字段 B Optional 作参数是推荐 C Optional 适合返回值(提示可空),作参数强制构造、作字段浪费容器且可变,都是反模式 ✓ 正确答案 D Optional 只能作字段
# 34. Optional 的本质(容器对象)及其使用边界 A Optional 适合作字段 B Optional 是容器对象,适合返回值表示可空,不适合字段/参数/集合/有业务含义的空值 ✓ 正确答案 C Optional 适合集合元素 D Optional 用于表达空值有效
# 35. Optional 的正确使用与反模式(isPresent/get) A isPresent+get 是推荐 B 正确用 map/orElse/orElseGet 链式处理,isPresent+get 是反模式(get 空抛异常),orElse 总是求值应 orElseGet ✓ 正确答案 C orElse 与 orElseGet 相同 D get 空时返回 null
# 36. Optional.map/flatMap 与 stream 链的语义差异 A map 转换不展平(f 返回普通值),flatMap 展平(f 返回 Optional/Stream),Optional 处理单值、Stream 处理多元素 ✓ 正确答案 B flatMap 不展平 C map 展平 D Optional 与 Stream 的 map 语义不同
# 37. Optional.of/ofNullable/empty 的合法参数 A of 接受 null B ofNullable 要求非空 C of 要求非空(null 抛 NPE)、ofNullable 接受 null(返回 empty)、empty 无参数 ✓ 正确答案 D empty 接受参数
# 38. Optional.orElse/orElseGet/orElseThrow 的差异 A orElse 总是求值(适合常量)、orElseGet 惰性(适合昂贵默认)、orElseThrow 空时抛异常 ✓ 正确答案 B orElse 惰性求值 C orElseGet 总是求值 D orElseThrow 空时返回 null
# 39. OptionalInt/OptionalLong/OptionalDouble 的价值 A 它们会装箱 B 原始类型 Optional 避免装箱,用于原始流聚合结果(min/max/reduce),性能好 ✓ 正确答案 C 与 Optional<Integer> 相同 D 无价值
# 40. groupingBy 默认返回的 Map 实现与迭代顺序,如何用 LinkedHashMap 或自定义 Map 工厂保持遇见顺序 A 默认保持顺序 B 无法保持顺序 C 默认 TreeMap D groupingBy 默认 HashMap 无序,用 LinkedHashMap::new 作 mapFactory 可保持分组键的遇见顺序 ✓ 正确答案
# 41. Predicate 的复合(and/or/negate) A Predicate 的 and/or/negate 默认方法组合谓词(与/或/非),声明式组合多个过滤条件 ✓ 正确答案 B 不能组合谓词 C negate 要手写 D and/or 是静态方法
# 42. Spliterator 的特征(SIZED/DISTINCT/SORTED)对并行的影响 A SIZED/DISTINCT/SORTED 让 Stream 优化拆分/去重/排序,错误声明特征会导致并行结果错误 ✓ 正确答案 B 特征无影响 C 特征只影响顺序 D 错误声明无害
# 43. Stream 与 ForkJoinPool 的关系(默认 commonPool) A 并行流默认用共享 commonPool,阻塞会互相影响,需控制并发时可提交到自定义 ForkJoinPool ✓ 正确答案 B 每个并行流用自己的池 C commonPool 无共享 D 并行流不用池
# 44. Stream 中副作用(side effect)的反模式 A 副作用是推荐 B 在流中修改外部可变状态违背纯函数与惰性,结果不确定、并行竞态,应改用 collect/纯函数 ✓ 正确答案 C forEach 副作用安全 D 副作用可并行
# 45. Stream 中状态(stateful)与无状态操作的顺序敏感性 A 有状态操作并行高效 B 无状态操作(map/filter)元素独立可并行,有状态操作(distinct/sorted/limit)依赖整体或顺序需屏障 ✓ 正确答案 C 有状态操作无顺序依赖 D 无状态操作需屏障
# 46. Stream 中间操作与终止操作的惰性求值机制 A 中间操作惰性登记不执行,终止操作触发整个管道执行,支持短路与无限流 ✓ 正确答案 B 中间操作立即执行 C 终止操作不执行 D 中间操作产生中间结果
# 47. Stream 的 lazy evaluation 与短路操作(Short-circuit)在内存占用上的边界 A 短路增加内存 B 有状态操作不占内存 C 无状态操作低内存、短路提前停止降内存,但有状态操作(sorted)缓冲元素可能 OOM ✓ 正确答案 D 无限流+limit 会 OOM
# 48. Stream 的 null 元素处理(Objects::nonNull) A Stream 不含 null B toList() 允许 null C Stream 可能含 null,用 Objects::nonNull 过滤避免 NPE,toList() 禁 null 需过滤 ✓ 正确答案 D null 元素无需处理
# 49. Stream 的 peek 调试用途与生产禁用 A peek 用于调试观察中间元素,副作用在生产不可依赖(惰性/短路/违背纯函数),生产禁用 ✓ 正确答案 B peek 保证执行 C peek 是纯函数 D peek 用于生产副作用
# 50. Stream 的 short-circuit 操作(findAny/anyMatch)的性能意义 A 短路操作(findAny/anyMatch)提前终止减少处理,findAny 并行最优(不保序),findFirst 需保序 ✓ 正确答案 B 短路要处理全量 C findAny 保序 D 短路无性能优势
# 51. Stream 管道中抛出受检异常时,包装成运行时异常、返回结果类型与提前校验应如何取舍 A 可预期失败用 Result/提前校验,意外异常包装运行时异常并保留 cause,避免吞异常 ✓ 正确答案 B 直接抛受检异常 C 管道内吞异常 D 只能包装
# 52. Stream 顺序与并行的选择准则在 CPU 密集型与 I/O 密集型下的取舍 A CPU 密集大数组用并行提升吞吐,I/O 密集避免并行流(阻塞占线程),小数据顺序即可 ✓ 正确答案 B 并行总是更好 C I/O 密集用并行流 D 小数据用并行
# 53. Stream.iterate 与 generate 的有状态行为差异 A iterate 依赖前值生成(有状态可预测),generate 每次调 Supplier(无前值依赖,状态需自行维护) ✓ 正确答案 B iterate 无状态 C 两者相同 D generate 依赖前值
# 54. Stream.onClose 的处理器何时执行,为什么仅调用终止操作并不会自动关闭普通 Stream A 普通 Stream 自动关闭 B 终止操作自动关闭 C 终止操作执行 onClose D onClose 处理器仅在显式 close/try-with-resources 时执行,普通终止操作不关闭 Stream,资源型需关闭 ✓ 正确答案
# 55. Supplier 与懒求值的工程应用 A Supplier 把计算延迟到消费时(懒求值),用于 Optional.orElseGet、Stream.generate、惰性初始化 ✓ 正确答案 B Supplier 立即求值 C Supplier 不能懒加载 D Supplier 有参数
# 56. collect、Collectors 与归约(reduce)的取舍 A reduce 归约标量(求和/最大,需可结合),collect/Collectors 收集到集合/映射,按目标选择 ✓ 正确答案 B collect 用于标量 C reduce 用于收集到集合 D 两者相同
# 57. distinct、sorted 和 limit 等有状态操作如何影响并行管道的缓冲、屏障和内存占用 A 有状态操作并行高效 B distinct/sorted/limit 在并行下缓冲元素、引入会合屏障、占用内存,破坏流水线降低并行度 ✓ 正确答案 C 有状态操作提高并行度 D 有状态操作无缓冲
# 58. findFirst 与 findAny 在并行流中的确定性和短路成本有何差异,何时可选择后者 A findAny 保序 B findFirst 保序确定(并行有顺序成本),findAny 任意元素(并行性能好),不关心顺序用 findAny ✓ 正确答案 C findFirst 并行最优 D 两者相同
# 59. flatMap 创建的子流在消费后如何关闭,子流绑定文件资源时应怎样注册清理动作 A 资源型子流会自动关闭 B 关闭无法注册 C 子流不需要关闭 D flatMap 消费子流通常自动关闭,但资源型子流需 onClose/try-with-resources 注册清理,避免句柄泄漏 ✓ 正确答案
# 60. flatMap、mapMulti(JDK 16+)的差异与一对一/多对多场景 A mapMulti 创建临时 Stream B 两者相同 C flatMap 每元素返回 Stream(临时对象),mapMulti 用回调避免临时 Stream 更高效,适合少量展开 ✓ 正确答案 D flatMap 更高效
# 61. groupingBy 与 partitioningBy 的差异与下游收集器 A groupingBy 任意键分组、partitioningBy 布尔二分,都支持下游收集器对每组进一步收集 ✓ 正确答案 B partitioningBy 任意键分组 C 两者无下游收集器 D groupingBy 是布尔二分
# 62. groupingByConcurrent 在有序并行流中是否一定更快,热点分组键会造成怎样的竞争 A 它不用 ConcurrentHashMap B 它总比 groupingBy 快 C 热点键无竞争 D 有序流需保持顺序不一定更快,热点分组键(分布不均)造成 ConcurrentHashMap 桶竞争 ✓ 正确答案
# 63. mapMulti 与 flatMap 在少量展开元素时如何减少临时 Stream 分配,回调使用有什么限制 A mapMulti 用回调直接产出避免临时 Stream(适合少量展开),回调须同步使用不能延迟调用 ✓ 正确答案 B mapMulti 创建临时 Stream C 回调可延迟调用 D mapMulti 适合大量展开
# 64. peek 受惰性求值和操作优化影响为何不适合作为业务副作用,调试时应如何使用 A peek 因惰性求值与操作优化不保证执行,副作用不可依赖,只用于调试观察中间元素 ✓ 正确答案 B peek 适合业务副作用 C peek 保证执行 D peek 总是执行
# 65. takeWhile 在无序并行流上的语义为什么较弱,保留遇见顺序会带来什么性能代价 A 无序并行语义明确 B takeWhile 依赖前缀有序语义,无序并行语义弱;有序并行取前缀需顺序合并屏障降低并行度 ✓ 正确答案 C takeWhile 不依赖顺序 D 并行无代价
# 66. 使用减法或浮点累加执行并行归约为何可能得到不同结果,应该怎样设计可结合的归约 A 浮点累加结果确定 B 减法可结合 C 减法不可结合、浮点累加舍入误差致结果随顺序变化,并行归约需可结合+恒等 ✓ 正确答案 D 并行归约无需结合
# 67. 分析 Stream 性能时如何区分数据源拆分、Lambda 分配、装箱和终止收集各自的成本 A 只测整体即可 B 用 JMH 控制变量分别测拆分/Lambda/装箱/收集,用分配器定位对象分配瓶颈 ✓ 正确答案 C 无法区分成本 D 装箱无成本
# 68. 四大核心函数式接口(Function/Consumer/Supplier/Predicate)的典型签名与选择依据 A Function 无输出 B Function 输入→输出、Consumer 消费、Supplier 供给、Predicate 断言,按输入输出形态选择 ✓ 正确答案 C Supplier 有输入 D Predicate 输出对象
# 69. 复用已经执行终止操作的 Stream 为什么抛 IllegalStateException,管道应如何重新创建 A Stream 可重复终端 B Stream 一次性,终止操作后再次操作抛 IllegalStateException,需从数据源重新创建管道 ✓ 正确答案 C 终止操作不关闭流 D 可复用已终端 Stream
# 70. 方法引用在实例方法与未绑定接收者形式下,函数式接口第一个参数分别如何参与调用 A 已绑定接收者作为第一个参数 B 已绑定 obj::method 接收者固定,未绑定 Type::method 接收者作为函数式接口第一个参数 ✓ 正确答案 C 未绑定接收者固定 D 两者相同
# 71. 方法引用(Class::method)的四种形式与可读性 A 未绑定实例接收者固定 B 只有两种形式 C 构造器引用接收者 D 四种形式:静态、已绑定实例、未绑定实例、构造器,Lambda 只调用方法时用方法引用更可读 ✓ 正确答案
# 72. 方法引用(Method Reference)与 Lambda 在字节码 invokedynamic 调用点的差异 A 两者都编译为 invokedynamic + LambdaMetafactory,方法引用直接绑定目标方法,Lambda 包装私有方法 ✓ 正确答案 B Lambda 不用 LambdaMetafactory C 方法引用不用 invokedynamic D 两者字节码相同
# 73. 无限 Stream 使用 limit 能否保证终止,若前面放置有状态过滤或排序会发生什么 A 无限流+limit 总有状态 B limit 无法终止无限流 C sorted 在无限流可终止 D 无限流+limit 短路可终止,但 limit 前有状态操作(sorted/distinct)需缓冲无限增长无法终止 ✓ 正确答案
# 74. 柯里化(Currying)与部分应用在 Java 中的实现 A 柯里化用 Function 嵌套转单参链,部分应用用闭包固定部分参数,Java 手动嵌套实现 ✓ 正确答案 B 柯里化用闭包固定参数 C 部分应用是单参转多参 D Java 内建柯里化
# 75. 流式管道复用(多次 terminal)的失败原因 A Stream 一次性,terminal 后已消费再次操作抛 IllegalStateException,需封装为重建函数 ✓ 正确答案 B Stream 可多次 terminal C 可复用已终端流 D terminal 不消费流
# 76. distinct 的底层实现(HashSet/LinkedHashSet)在顺序流与并行流中的内存与性能特征 A distinct 无缓冲 B distinct 用哈希去重(顺序保序、并行并发去重+合并),内存与不同元素数成正比,并行有合并开销 ✓ 正确答案 C distinct 并行无合并 D distinct 不占内存
# 77. flatMap 实现嵌套循环与笛卡尔积时的中间 Stream 数量与资源开销控制 A 笛卡尔积无开销 B 中间 Stream 数量少 C flatMap 嵌套笛卡尔积每外层元素产生中间 Stream,元素数随维度爆炸,用 mapMulti 或控制规模 ✓ 正确答案 D 笛卡尔积线性增长
# 78. 自定义 Collector 的五要素(supplier/accumulator/combiner/finisher/characteristics)与 toList 实现 A combiner 建容器 B supplier 合并容器 C finisher 建容器 D 五要素:supplier 建容器、accumulator 累加、combiner 合并、finisher 转换、characteristics 特征,toList 用 ArrayList+add+addAll ✓ 正确答案
# 79. 自定义 Gatherer 支持并行执行时,合并器必须满足哪些约束,状态不可合并时应如何声明 A 合并器无需可结合 B 并行 Gatherer 合并器需可结合、与初始状态一致、无副作用,状态不可合并时退化为顺序执行 ✓ 正确答案 C 状态不可合并也并行 D 合并器无约束
# 80. 自定义 Spliterator 错误声明 SIZED、SORTED 或 DISTINCT 特征,会使 Stream 得出哪些错误假设 A 错误声明无影响 B 特征可任意声明 C 错误声明 SIZED/SORTED/DISTINCT 让 Stream 产生错误假设(跳过排序/去重、拆分错误),导致结果错误 ✓ 正确答案 D 错误声明只影响性能
# 81. 虚拟线程适合大量阻塞任务,而并行 Stream 适合数据并行,两者的选型依据是什么 A 阻塞任务用并行 Stream B 并行 Stream 适合阻塞 C 虚拟线程适合大量阻塞任务(I/O 密集、任务并发),并行 Stream 适合数据并行(CPU 密集、数据分块) ✓ 正确答案 D 两者相同
# 82. Stream reduce 的 identity、accumulator 与 combiner 需要满足哪些代数性质才能保证确定结果 A 性质与结果无关 B identity 无需恒等 C accumulator 无需可结合 D reduce 需 identity 恒等、accumulator/combiner 可结合且与 identity 兼容,才能保证并行归约确定 ✓ 正确答案
# 83. 并行流默认使用 ForkJoinPool.commonPool 时,阻塞 I/O 会怎样影响其他业务的并行任务 A 阻塞只影响本任务 B 阻塞无害 C commonPool 线程无限 D 并行流用共享 commonPool,阻塞 I/O 占有限线程导致其他并行任务饥饿/并行度下降,应避免阻塞或隔离池 ✓ 正确答案
# 84. Gatherers.windowFixed 与 windowSliding 对尾部不足窗口的处理有何不同,内存开销如何估算 A windowFixed 尾部也输出 B windowFixed 固定非重叠窗口(尾部不足丢弃),windowSliding 滑动重叠窗口(尾部不足也输出),内存 O(n) ✓ 正确答案 C 两者都尾部丢弃 D 内存 O(n²)
# 85. JDK 25 Stream Gatherers 在 ETL 场景下的窗口化与状态化处理优势 A Gatherers 只支持 map B Gatherers 支持窗口批处理(windowFixed)、状态化累积、组合与并发,适合 ETL 清洗/批量加载 ✓ 正确答案 C Gatherers 无状态 D Gatherers 无窗口
# 86. JDK 24 定稿的 JEP 485 Stream Gatherers 自定义中间操作的 API 设计要点是什么 A Gatherer 含 initializer/integrator/combiner/finisher,支持状态化、并行、短路、组合,是自定义中间操作扩展点 ✓ 正确答案 B Gatherer 只有 integrator C Gatherer 不支持并行 D Gatherer 是操作符
# 87. JEP 485 将 Stream Gatherers 定稿后,Gatherer 的初始化器、集成器、合并器和完成器各负责什么 A initializer 建状态、integrator 逐元素处理(可发元素/短路)、combiner 合并、finisher 收尾 ✓ 正确答案 B integrator 建状态 C finisher 逐元素 D combiner 收尾
# 88. 嵌套 parallelStream 为什么可能争用同一个公共池,如何通过基准确认过度并行问题 A 嵌套用独立池 B 嵌套无争用 C 嵌套 parallelStream 共用 commonPool,产生线程争用、过度并行、可能死锁,用 JMH/线程监控基准确认 ✓ 正确答案 D 嵌套提高并行度
# 89. 如何将并行流提交到自定义 ForkJoinPool 而非 commonPool,及由此带来的收益与风险 A 并行流只能用 commonPool B 用 ForkJoinPool.submit 包裹并行流使其用自定义池,收益是隔离与并发度可控,风险是资源管理与 join 处理 ✓ 正确答案 C 无风险 D 无法用自定义池