# 1. DataBuffer 使用引用计数时,丢弃、聚合或异常路径为何需要显式释放,泄漏日志如何定位 A 未释放的 buffer 只会浪费少量内存,无影响 B 引用计数无需管理,框架自动处理所有情况 C 引用计数归零时缓冲区才被回收到内存池,丢弃/异常路径需显式 release ✓ 正确答案 D 泄漏检测日志无法定位泄漏点
# 2. R2DBC 事务只能覆盖同一响应式连接上的操作,跨消息或远程服务时应怎样保证一致性 A 跨服务一致性需采用 Saga、Outbox 等分布式事务方案(如最终一致性) ✓ 正确答案 B 单个 R2DBC 事务可覆盖多个远程服务 C R2DBC 事务天然支持跨连接操作 D 跨服务无需事务保证
# 3. Spring Boot 使用虚拟线程后,WebFlux 是否自动转为每请求一线程,二者混用应依据什么 A 虚拟线程开关只影响 Servlet 容器,WebFlux 的 Netty 模型不受影响 ✓ 正确答案 B 开启虚拟线程后 WebFlux 自动转为每请求一线程 C 两者完全等价,可互换 D WebFlux 也基于虚拟线程模型
# 4. Spring WebFlux 6.1+ 在 Spring Boot 4.0 中是否已默认开启虚拟线程兼容模式 A WebFlux 默认自动切换到虚拟线程模型 B 框架提供虚拟线程兼容支持,但 WebFlux 默认仍用 Netty 事件循环,需显式配置才用虚拟线程 ✓ 正确答案 C 虚拟线程无法与 WebFlux 共存 D Spring Framework 6.1 不支持虚拟线程
# 5. Spring WebFlux 6.1+ 的 WebClient 与 JDK 21 HttpClient 在 Spring Boot 4.0 中的性能对比 A WebClient 是同步阻塞客户端 B WebClient 基于 Reactor + Netty,适合响应式流式请求;JDK HttpClient 支持虚拟线程,适合偏好同步写法的场景 ✓ 正确答案 C JDK HttpClient 不支持异步 D 两者性能完全一致,无差异
# 6. Spring WebFlux 6.x 中 onErrorContinue 与 onErrorResume 在微服务降级链中的取舍 A onErrorContinue B onErrorMap C onErrorResume ✓ 正确答案 D doOnError
# 7. Spring WebFlux 6.x 在 Spring Boot Actuator 中暴露响应式指标(/actuator/metrics) A WebFlux 基于 Micrometer 注册 http.server.requests 等响应式指标,可通过 Actuator 暴露 ✓ 正确答案 B WebFlux 无法通过 /actuator/metrics 暴露指标 C 响应式指标与 MVC 指标完全一致 D 指标暴露无需额外配置
# 8. Spring WebFlux 与 R2DBC 在 Spring Boot 4.0 中实现全栈响应式的数据库连接池选择建议 A 应使用 HikariCP(阻塞式 JDBC 连接池) B 响应式应用不需要连接池 C 连接池大小无所谓,越大越好 D 应使用 r2dbc-pool 响应式连接池,避免阻塞事件循环 ✓ 正确答案
# 9. Spring WebFlux 的 RouterFunction 与传统 @RequestMapping 在 Spring Boot 4.0 中的混合使用策略 A 两者不能共存于同一应用 B WebFlux 的 @RequestMapping 返回同步类型 C 两者可共存,RouterFunction 适合动态路由,注解式适合静态声明 ✓ 正确答案 D RouterFunction 只能用于 MVC
# 10. WebFlux + R2DBC 在 Spring Boot 4.0 中处理事务边界(@Transactional) A 使用 DataSourceTransactionManager 管理响应式事务 B 使用 ReactiveTransactionManager,事务连接通过 Reactor Context 在当前响应式链传播 ✓ 正确答案 C 事务操作可在方法内任意切换线程 D 响应式事务可跨多个远程连接
# 11. WebFlux 单元测试在 Spring Boot 4.0 中使用 WebTestClient 与 MockServer 的最佳实践 A WebTestClient 只能测同步 MVC 接口 B MockServer 用于测数据库 C 响应式测试无需设置超时 D 用 WebTestClient 绑定应用做响应式断言,用 MockServer 隔离外部依赖,配合 StepVerifier 验证流式结果 ✓ 正确答案
# 12. WebFlux 在 Spring Cloud Gateway 中的 Netty EventLoop 与 Spring 异步任务调度的边界 A 阻塞操作可直接放到 Netty EventLoop 上执行 B Netty EventLoop 必须保持非阻塞,阻塞任务需通过调度器迁到工作线程 ✓ 正确答案 C 网关过滤器可任意阻塞 D EventLoop 与异步任务调度无边界
# 13. WebFlux 在 Spring Cloud Sleuth + OpenTelemetry 链路追踪中的上下文传播与同步阻塞差异 A 响应式通过 ThreadLocal 传递 traceId,与同步一致 B 响应式通过 Reactor Context 传递链路上下文,跨线程切换不丢失 ✓ 正确答案 C 响应式无法传递 traceId D 跨线程切换时 ThreadLocal 仍有效
# 14. WebTestClient 如何验证流式响应的背压、取消和超时,测试中怎样避免无限流悬挂 A 用 StepVerifier 可验证背压、取消与超时,配合 take/超时避免无限流悬挂 ✓ 正确答案 B WebTestClient 无法验证取消 C 测试无限流时无需限制 D WebTestClient 不支持 Flow 断言
# 15. boundedElastic 调度器有线程与队列上限,把所有阻塞任务迁入其中为何仍可能形成排队雪崩 A 把所有阻塞任务迁入 boundedElastic 就能彻底解决阻塞问题 B boundedElastic 的队列无限大,不会溢出 C boundedElastic 有线程与队列上限,阻塞任务积压会排队并最终拒绝,形成雪崩 ✓ 正确答案 D 阻塞任务不会占线程
# 16. retryWhen 对非幂等 HTTP 请求有什么风险,重试条件、退避和总截止时间应如何共同限制 A 非幂等请求可任意重试,无副作用风险 B 4xx 业务错误也应无脑重试 C retryWhen 只重试一次,无风险 D 需通过重试条件过滤可重试错误、指数退避+抖动分散、总截止时间兜底,必要时配合幂等键 ✓ 正确答案
# 17. @RestController 返回 Mono/Flux 的工作机制 A 框架非阻塞订阅 Mono/Flux,数据就绪后异步写入响应 ✓ 正确答案 B 框架会阻塞等待 Mono/Flux 的结果 C Mono 对应流式多值响应 D 返回 Flux 时不能流式输出
# 18. AnnotatedController 与函数式端点的对比 A 函数式端点更易让团队上手 B 注解式声明式、团队友好;函数式灵活、适合动态路由与组合 ✓ 正确答案 C 两者不能混合使用 D 函数式端点无法动态构建路由
# 19. BlockHound 能发现哪些阻塞调用,生产环境启用前为何要评估探针开销与合法白名单 A BlockHound 通过字节码注入拦截响应式线程中的阻塞调用,生产启用前需评估探针开销与白名单配置 ✓ 正确答案 B BlockHound 无法检测阻塞调用 C BlockHound 可以检测所有正常阻塞 D 生产启用无需评估开销
# 20. RouterFunction 与函数式路由 A 通过 route(...).handle(...) 定义匹配条件与处理逻辑,支持嵌套与过滤 ✓ 正确答案 B 无法嵌套或过滤路由 C 只能用于 MVC D 函数式路由不能与注解式共存
# 21. SSE 客户端断开后 Flux 如何感知取消并清理心跳、订阅和租户资源,怎样验证无泄漏 A 客户端断开不会触发任何取消信号 B 租户上下文无需清理 C 心跳定时器无需停止 D 通过 doFinally/doOnCancel 在取消时清理心跳、订阅与租户资源,并用指标与测试验证无泄漏 ✓ 正确答案
# 22. ServerSentEvents(SSE)与 text/event-stream A SSE 是双向通信协议 B SSE 不支持自动重连 C SSE 使用 text/event-stream,服务端单向推送,WebFlux 用 Flux + ServerSentEvent 实现 ✓ 正确答案 D SSE 基于二进制帧
# 23. Spring WebFlux 6.x 中 ServerHttpSecurity 与 Spring Security 6.4 的反应式安全配置变化 A 使用 ServerHttpSecurity 构建 SecurityWebFilterChain,采用 lambda DSL 配置 ✓ 正确答案 B 响应式安全上下文通过 ThreadLocal 传播 C WebFlux 无法配置 OAuth2 D 安全配置必须使用旧式 XML
# 24. Spring WebFlux 与 Spring AI 2.0 流式响应(Streaming Response) A Spring AI 只能同步返回完整结果 B WebFlux 无法与 Spring AI 集成 C Spring AI 流式 API 返回 Flux,WebFlux 按流式媒体类型逐 token 推送实现打字机效果 ✓ 正确答案 D 流式输出不支持取消
# 25. Spring WebFlux 与 Spring MVC 的取舍 A MVC 基于响应式模型,WebFlux 基于阻塞模型 B WebFlux 一定比 MVC 快 C 有阻塞式依赖(JDBC)且需求常规时 MVC 更合适;高并发 IO 密集或需要全栈响应式时考虑 WebFlux ✓ 正确答案 D 两者编程模型完全相同
# 26. Spring WebFlux 的背压(Backpressure) A WebFlux 没有背压机制 B R2DBC 查询无法应用背压 C 背压只影响性能,不影响内存 D WebFlux 基于 Reactor 的 request(n) 信用机制,沿请求处理链传播背压 ✓ 正确答案
# 27. WebClient 与 RestTemplate 的差异 A RestTemplate 是响应式客户端,返回 Mono/Flux B 两者完全等价 C WebClient 是非阻塞响应式客户端,支持背压与组合操作符;RestTemplate 是阻塞式 ✓ 正确答案 D WebClient 无法用于 HTTP 调用
# 28. WebClient 的 retrieve()/exchangeToMono()/exchangeToFlux() A retrieve 暴露原始 ClientResponse B 两者无区别 C exchange 系列响应体可无限次消费 D retrieve 自动处理状态码并解码响应体,exchangeToMono 提供底层 ClientResponse 访问 ✓ 正确答案
# 29. WebClient.exchangeToMono 自定义分支时如何确保未消费响应体被释放,遗漏会耗尽什么资源 A 不消费响应体不会有问题 B 未消费响应体必须显式释放(releaseBody),否则导致连接与内存泄漏 ✓ 正确答案 C 响应体可无限次消费,无需释放 D 连接池不会受响应体影响
# 30. WebExceptionHandler、@ControllerAdvice 与操作符 onErrorResume 各适合在哪一层转换错误 A WebExceptionHandler 负责业务异常映射,@ControllerAdvice 负责框架兜底 B 三层完全相同 C @ControllerAdvice 适合控制器/业务错误映射,onErrorResume 适合操作符内降级,WebExceptionHandler 做框架层兜底 ✓ 正确答案 D onErrorResume 用于覆盖全局错误处理
# 31. WebFlux 与 R2DBC 的整合 A WebFlux 只能配合 JDBC 使用 B 全栈响应式仍需阻塞数据库 C R2DBC 是阻塞式驱动 D R2DBC 提供响应式数据库访问,DatabaseClient/R2dbcRepository 返回 Mono/Flux,与 WebFlux 实现全栈响应式 ✓ 正确答案
# 32. WebFlux 与 Spring Cloud OpenFeign(阻塞式) A OpenFeign 是阻塞客户端,在 WebFlux 中需用 subscribeOn 隔离到弹性线程,或改用响应式客户端 ✓ 正确答案 B 可直接在 Netty EventLoop 上调用 OpenFeign C OpenFeign 是响应式客户端 D 阻塞客户端不会影响事件循环
# 33. WebFlux 与 Spring Modulith 模块化架构结合时的反应式跨模块事件传播机制 A 模块间不能通过事件通信 B 事件只能同步处理 C 使用 ReactiveApplicationEventPublisher 发布响应式事件,监听器返回 Mono/Flux 实现响应式跨模块解耦 ✓ 正确答案 D Modulith 不支持响应式
# 34. WebFlux 应用优雅停机时,如何停止接收新请求并等待活动流结束,同时限制最长排空时间 A 停机时不等待活动请求 B 优雅停机无需超时限制 C 配置 server.shutdown=graceful 停止接收新请求并排空活动流,用 timeout-per-shutdown-phase 限制最长排空时间 ✓ 正确答案 D 长连接不受停机影响
# 35. WebFlux 测试(WebTestClient) A WebTestClient 是 MVC 同步测试工具 B WebTestClient 支持 bindToServer/Controller/RouterFunction/ApplicationContext 绑定,做响应式断言 ✓ 正确答案 C WebTestClient 无法测试流式响应 D WebTestClient 只能测试静态接口
# 36. WebFlux 的 Flux<Long> 与 delayElements A delayElements 给流中每个元素附加延迟,interval 周期性生成 Flux<Long> ✓ 正确答案 B interval 给元素加延迟,delayElements 生成周期序列 C 两者作用相同 D delayElements 不能用于限速
# 37. WebFlux 的 MediaType 与协商 A WebFlux 根据 Accept 头与控制器 produces 及返回类型协商媒体类型,Flux 配合流式媒体类型实现流式输出 ✓ 正确答案 B 协商只由返回类型决定,与 Accept 无关 C 协商失败返回 500 D 流式输出无需媒体类型
# 38. WebFlux 的过滤器(WebFilter) A WebFilter 是同步过滤器,会阻塞 B WebFilter 只能用于 MVC C WebFilter 无法处理请求头 D WebFilter 返回 Mono<Void>,用于认证、日志等横切逻辑,通过 @Order 排序、@Component 注册 ✓ 正确答案
# 39. WebFlux 的错误处理(@ControllerAdvice + ResponseEntityExceptionHandler) A @ExceptionHandler 方法返回同步响应 B 异常处理只能返回 JSON C WebFlux 不支持 @ControllerAdvice D @ControllerAdvice + @ExceptionHandler 映射业务异常为响应式错误响应,配合全局异常处理器做兜底 ✓ 正确答案
# 40. retrieve 的 onStatus 与全局 ExchangeFilterFunction 如何分工,错误响应体只能消费一次意味着什么 A onStatus 处理特定状态码的错误映射,ExchangeFilterFunction 做全局横切,且响应体只能消费一次 ✓ 正确答案 B onStatus 是全局过滤器,ExchangeFilterFunction 是局部状态码处理 C 响应体可多次消费 D 两者无分工
# 41. 使用 Spring WebFlux 实现 SSE(Server-Sent Events) A SSE 是双向通信 B SSE 必须使用 WebSocket C SSE 不支持心跳 D 返回 Flux 并设置 text/event-stream 即可实现 SSE,可用 ServerSentEvent 包装事件 ✓ 正确答案
# 42. 使用 application/x-ndjson 返回流式 JSON 时,每条记录的编码失败应终止全流还是发送错误事件 A 一律终止全流 B 一律静默忽略 C 取决于业务语义:可容忍则跳过该条继续(onErrorContinue),不可容忍则终止,且需考虑已部分输出的不一致性 ✓ 正确答案 D 编码失败不影响流
# 43. 连接、响应、读取和业务总截止时间应如何组合,只有 responseTimeout 会漏掉哪些阶段 A 只配置 responseTimeout 就能覆盖所有阶段 B 需组合 connectTimeout、responseTimeout、readTimeout 与业务 timeout,覆盖连接、响应、读取停顿与整体截止时间 ✓ 正确答案 C 超时只影响连接 D 读取停滞无需超时