Kotlin面试题更新 2026-08-05

请解释 Kotlin Flow 的概念,并对比它与 RxJava 在核心设计和使用上的主要差异。

技术原理技术选型方案权衡Kotlin

考察说明

考察对 Kotlin 协程响应式流模型的理解及其与 RxJava 的对比能力。

回答思路

  1. 【回答框架 1】Flow 是 Kotlin 协程中用于处理异步数据流的冷流,基于挂起函数和协程上下文,支持背压(通过挂起实现),由 collect 触发执行。
  2. 【回答框架 2】RxJava 是基于 Reactive Streams 规范的库,核心是 Observable/Single 等类型,通过操作符链式处理异步事件,支持线程调度和背压策略(如 BUFFER、DROP)。
  3. 【回答框架 3】区别:Flow 天然集成协程,使用挂起函数实现异步,取消协作式,操作符如 map/filter 是挂起安全的;RxJava 有自己的调度器 Schedulers 和背压策略,学习成本高。
  4. 【回答框架 4】适用场景:Flow 适合协程为主的 Kotlin 项目,RxJava 适合已有 Rx 生态或需要复杂操作符和背压控制的场景。
  5. 【关键点 1】Flow 是冷流,collect 时执行,支持协程取消。
  6. 【关键点 2】RxJava 类型丰富,背压策略明确,Flow 用挂起处理背压。
  7. 【关键点 3】Flow 操作符是挂起友好的,RxJava 需要调度器。
  8. 【关键点 4】选型取决于项目技术栈。
  9. 【易错点 1】不要认为 Flow 不支持背压,它通过挂起自然实现。
  10. 【易错点 2】不要忽略 Flow 是冷流,多次 collect 会重新执行。