Spring MVC 与 Web

共 19 题
#

1. Spring MVC 的线程模型(TaskExecutor)

A Spring MVC 采用 event-loop 单线程模型
B 每个请求无限创建线程,无需配置
C TaskExecutor 与线程池无关,只是接口占位
D 传统 MVC 基于 Servlet 容器线程池 thread-per-request,异步场景用 TaskExecutor 解耦业务线程 ✓ 正确答案
#

2. Spring MVC 与虚拟线程的协作(JDK 21+)

A spring.threads.virtual.enabled=true 开启后容器用虚拟线程处理请求,保持同步编程模型并获得高并发 ✓ 正确答案
B 开启虚拟线程后编程模型必须改为响应式
C 虚拟线程仍占用完整平台线程
D 虚拟线程只对 WebFlux 生效
#

3. DispatcherServlet 的请求处理流程,HandlerMapping、HandlerAdapter、HandlerInterceptor、ViewResolver 在责任链中的分工

A HandlerMapping 负责映射 URL 到处理器,HandlerAdapter 负责调用处理器,ViewResolver 负责解析视图 ✓ 正确答案
B HandlerAdapter 负责找到 URL 对应的处理器方法
C HandlerInterceptor 在响应渲染之后再执行
D DispatcherServlet 不参与请求分发
#

4. @Controller 与 @RestController 的差异

A @Controller 默认返回 JSON,@RestController 返回视图
B @RestController 是 @Controller 与 @ResponseBody 的组合,返回值直接序列化为数据 ✓ 正确答案
C 两者完全等价
D @RestController 不能用于 REST API
#

5. @ControllerAdvice 的多模块拆分

A 可按模块拆分多个 @ControllerAdvice,用 basePackages 限定范围、@Order 控制优先级 ✓ 正确答案
B 只能有一个 @ControllerAdvice,否则冲突
C @ControllerAdvice 只能处理异常,不能做数据绑定
D @ControllerAdvice 与模块无关,无法限定包范围
#

6. @ControllerAdvice/@ExceptionHandler 的全局异常处理在 Spring 7 中的优先级与作用范围

A 全局 @ExceptionHandler 优先于局部 @ExceptionHandler
B @ControllerAdvice 只能处理运行时异常
C 异常处理器之间无优先级,随机生效
D 局部 @ExceptionHandler 优先于全局,同一异常按最精确类型匹配 ✓ 正确答案
#

7. @RequestMapping 与新版 @GetMapping/@PostMapping 在 Spring 7 中的注解元数据差异

A @GetMapping 是 @RequestMapping(method=GET) 的组合注解,语义更明确 ✓ 正确答案
B @GetMapping 支持所有 HTTP 方法
C 两者元数据完全不同
D @GetMapping 不能用于 Rest 接口
#

8. @RestControllerAdvice/@ControllerAdvice 与全局异常处理

A 它是 @ControllerAdvice 与 @ResponseBody 的组合,异常处理直接返回数据 ✓ 正确答案
B 它只能处理视图异常
C 它与 @ControllerAdvice 完全相同
D 它不能用于全局异常处理
#

9. Spring MVC 与 R2DBC 的反应式支持

A Spring MVC 中推荐大量使用 R2DBC 的 block() 阻塞等待
B R2DBC 面向阻塞 JDBC,与 WebFlux 无关
C R2DBC 是非阻塞关系数据库驱动,主要与 WebFlux 反应式栈配套使用 ✓ 正确答案
D R2DBC 不支持 Repository 抽象
#

10. Spring MVC 与 WebFlux 的选型边界

A 两者选型与业务无关
B WebFlux 必须用于所有高并发场景
C MVC 无法处理高并发
D 高并发 IO 密集、流式场景选 WebFlux;传统业务与生态成熟场景选 MVC,虚拟线程缩小了 WebFlux 优势 ✓ 正确答案
#

11. Spring MVC 中 WebSocket(@ServerEndpoint/TextWebSocketHandler)与 STOMP 消息代理的集成方式与边界

A WebSocket 是长连接传输层,STOMP 是上层消息协议,Spring 通过 WebSocketMessageBroker 桥接二者 ✓ 正确答案
B STOMP 是传输层,WebSocket 是消息协议
C @ServerEndpoint 与 TextWebSocketHandler 必须同时使用
D STOMP 与消息代理无关
#

12. Spring MVC 内容协商在 produces/consumes 与 HttpMessageConverter 链中的协作

A produces/consumes 决定请求响应媒体类型,HttpMessageConverter 完成实际序列化/反序列化 ✓ 正确答案
B HttpMessageConverter 决定媒体类型,produces 完成序列化
C 内容协商与 Accept 头无关
D 只有一种 HttpMessageConverter
#

13. Spring MVC 如何处理 MultipartFile 文件上传,大文件上传为何应改用流式(StreamingHttpOutputMessage)而非全量加载到内存

A MultipartFile.getBytes() 全量加载对所有文件都安全
B 文件上传与内存使用无关
C 大文件应通过 getInputStream() 流式逐块读写,避免全量加载到内存导致 OOM ✓ 正确答案
D MultipartResolver 不负责解析上传请求
#

14. Spring MVC 的 CORS 配置(@CrossOrigin/CorsConfigurationSource)

A @CrossOrigin 注解级与 CorsConfigurationSource 全局配置均可,通过 CORS 头控制跨域 ✓ 正确答案
B 只能通过 @CrossOrigin 注解配置,无全局方式
C CORS 与浏览器无关,纯服务端配置
D CORS 配置无法限定路径
#

15. Spring MVC 的参数绑定与类型转换,ConversionService、Converter/Formatter 如何介入 @RequestParam/@PathVariable 绑定

A 参数绑定只做名称匹配,不进行类型转换
B Formatter 不能用于类型转换
C ConversionService 与 Converter 无关
D @RequestParam/@PathVariable 绑定经 ConversionService 完成类型转换,Converter/Formatter 可扩展 ✓ 正确答案
#

16. Servlet Filter 与 HandlerInterceptor 的执行顺序差异,以及它们分别适合做什么(字符集/鉴权/日志)

A Interceptor 先于 Filter 执行
B 两者完全等价,作用相同
C Filter 属于 Servlet 容器层、先于 DispatcherServlet 执行,Interceptor 属于 Spring MVC 层、能访问 Handler 信息 ✓ 正确答案
D Filter 无法处理字符集编码
#

17. Spring MVC 在 Spring Boot 3.5+/4.x 对 Jakarta EE 10/11 API(Servlet 6.0/6.1)的兼容演进

A Spring 6 仍使用 javax.* 命名空间
B Spring 6 起使用 jakarta.* 命名空间,Boot 3.x 基于 Jakarta EE 10/Servlet 6.0,Boot 4.x 支持 Jakarta EE 11/Servlet 6.1 ✓ 正确答案
C Servlet 版本与 Spring Boot 无关
D Jakarta EE 11 与 Servlet 6.1 无关
#

18. Spring MVC 异步请求(DeferredResult/Callable)在 JDK 25 虚拟线程下的简化实现

A 虚拟线程阻塞代价低,同步阻塞调用即可获得高并发,简化了异步编程需求 ✓ 正确答案
B 虚拟线程下无法使用 DeferredResult
C 异步请求必须用 Callable,不能用同步代码
D 虚拟线程不支持 Spring MVC
#

19. Spring MVC 静态资源处理(ResourceHttpRequestHandler)与 ETag/Last-Modified 缓存协商

A 静态资源不参与缓存协商
B ResourceHttpRequestHandler 处理静态资源,通过 ETag/Last-Modified 实现 304 缓存协商 ✓ 正确答案
C ETag 基于资源大小生成,与内容无关
D 静态资源只能由前端处理