Spring SpringMVC Springboot

Spring 面试题

  1. 什么是 Spring?它解决了什么问题?
  • Spring 就是一个“超级大管家”,帮你管理项目里所有的对象(叫 Bean)和它们的依赖关系。以前你写代码要自己 new 对象,现在你把对象交给 Spring,需要用的时候找它要就行了。
  • 解决了什么问题?
    • 解耦:不用在代码里到处 new,改一个地方不用改一堆。
    • 简化开发:提供了很多现成的功能(事务、数据访问、Web 等)。
    • 方便测试:因为对象都是独立的,可以轻松替换成模拟对象。
  1. 什么是 IoC(控制反转)?什么是 DI(依赖注入)?
  • IoC(控制反转):以前是你自己主动去创建对象(正转),现在你把控制权交给 Spring 容器,由它来创建和管理对象。就像你以前自己做饭,现在你点外卖,把“做饭的控制权”反转给了外卖平台。
  • DI(依赖注入):是 IoC 的具体实现方式。当一个对象需要另一个对象时(比如 UserService 需要 UserDao),Spring 会自动把 UserDao “注入”给 UserService,你不用自己去 new。注入方式有三种:构造方法注入、setter 注入、字段注入(@Autowired)。
  1. 什么是 AOP(面向切面编程)?有什么用?
  • AOP 就是“在不改原有代码的情况下,给某些方法前后统一加功能”。比如你想给所有 service 方法加日志、加事务、加权限校验,你不需要在每个方法里写重复代码,而是定义一个“切面”,Spring 会在方法执行前后自动插入你的代码。
  • 常用场景:日志、事务、权限、性能监控、缓存。
  1. Spring 中的 Bean 是什么?作用域有哪些?
  • Bean 就是被 Spring 容器管理的 Java 对象。你可以在类上写 @Component@Service@Repository,或者在配置类里用 @Bean 方法,Spring 就会把它们变成 Bean。
  • 作用域(最常考的是前两个):
    • singleton(单例,默认):整个容器只有一个实例,大家共用。
    • prototype(原型):每次获取都创建一个新实例。
    • request(每个 HTTP 请求一个实例,只在 Web 应用有效)
    • session(每个用户会话一个实例)
    • application(整个 ServletContext 一个实例)
  1. Spring 怎么管理事务?@Transactional 原理?
  • Spring 通过 声明式事务 让你用 @Transactional 注解来标记一个方法或类,这个方法执行前会自动开启事务,执行完没异常就提交,有异常就回滚。
  • 原理:AOP!Spring 会生成一个代理对象,在目标方法前后加上事务开启、提交/回滚的逻辑。
  • 注意:同一个类内部调用 @Transactional 方法会失效,因为绕过了代理。

Spring MVC 面试题

  1. 什么是 Spring MVC?它和 Servlet 什么关系?
  • Spring MVC 是 Spring 框架的一个 Web 模块,它把 Servlet 封装得更简单好用。你以前写 Servlet 要自己处理请求参数、转发、重定向,现在 Spring MVC 帮你做了大部分脏活累活。
  • 关系:Spring MVC 底层还是 Servlet(核心是 DispatcherServlet),但提供了更优雅的编程模型:@Controller@RequestMapping@RequestParam 等。
  1. Spring MVC 的工作流程(一个请求从头到尾经历了什么)?

这是必考题,记住下面 9 步(可以简化成 6 步):

  1. 用户发送请求到 DispatcherServlet(前端控制器,它是总指挥)。
  2. DispatcherServletHandlerMapping:“这个请求应该交给哪个 Controller 方法?” HandlerMapping 返回一个执行链(包含拦截器)。
  3. DispatcherServlet 把请求交给 HandlerAdapter(适配器),让它去调用真正的 Controller 方法。
  4. Controller 方法执行完,返回一个 ModelAndView(包含数据名和视图名)。
  5. DispatcherServlet 把 ModelAndView 交给 ViewResolver(视图解析器),让它找到真正的视图页面(如 JSP、Thymeleaf)。
  6. 视图渲染(把数据填进模板),生成 HTML。
  7. 响应返回给用户。

简化记忆:DispatcherServlet → 找 HandlerMapping → 找 HandlerAdapter → 调 Controller → 返回 ModelAndView → 找 ViewResolver → 渲染视图。

3. @RequestMapping 有什么用?和 @GetMapping 啥关系?

  • @RequestMapping 用来把 URL 映射到 Controller 方法上,可以指定请求方法(GET、POST 等)。
  • @GetMapping@PostMapping 是它的简化版,专门对应一种请求方法。比如 @GetMapping 等价于 @RequestMapping(method = RequestMethod.GET)
  1. 如何接收前端传来的参数?
  • 单个参数:@RequestParam("name") String name
  • 路径参数:@PathVariable("id") Long id,对应 URL /user/{id}
  • 对象接收:写一个 JavaBean,属性名和请求参数名一致,Spring 自动封装。
  • JSON 格式:用 @RequestBody,接收 JSON 转成 Java 对象。

5. @ResponseBody 是干嘛的?

  • 它告诉 Spring:不要把返回值当成页面名,而是直接把返回值写到 HTTP 响应体里。通常用来返回 JSON 数据(配合 @RestController,它等于 @Controller + @ResponseBody)。
  1. Spring MVC 的拦截器(Interceptor)和 Filter 有什么区别?

表格 还在加载中,请等待加载完成后再尝试复制


Spring Boot 面试题

  1. 什么是 Spring Boot?它解决了什么痛点?
  • Spring Boot 是一个“脚手架”,让你能 快速创建一个独立运行的 Spring 应用,几乎不用写 XML 配置。
  • 解决了什么痛点?
    • 以前用 Spring 要配一大堆 XML 或 Java 配置,很烦。
    • 要手动管理 jar 包版本,容易冲突。
    • 部署麻烦,要打成 war 包放到 Tomcat 里。
  • Spring Boot 做到了:自动配置 + 起步依赖 + 内嵌服务器,你只要写业务代码就行了。
  1. 什么是“自动配置”?原理是什么?
  • 自动配置:你加了一个 jar 包(比如 spring-boot-starter-web),Spring Boot 就自动帮你配好 Tomcat、Spring MVC、JSON 转换器等,不用你写一行配置。
  • 原理:
    • 启动类上的 @SpringBootApplication 包含了 @EnableAutoConfiguration
    • Spring Boot 会读取 META-INF/spring.factories 文件,里面列出了所有自动配置类(比如 DataSourceAutoConfigurationWebMvcAutoConfiguration)。
    • 然后根据条件(比如 classpath 里有没有某个类、有没有配某个属性)决定要不要启用这个配置。
    • 条件注解有 @ConditionalOnClass@ConditionalOnMissingBean 等。
  1. 什么是“起步依赖”(Starter)?
  • 起步依赖 就是一个 Maven/Gradle 依赖,它把某个功能需要的所有 jar 包打包在一起,你只需要加这一个依赖,不用费心去管版本和传递依赖。
  • 例如:spring-boot-starter-web 包含了 Spring MVC、Tomcat、Jackson 等;mybatis-spring-boot-starter 包含了 MyBatis、数据源自动配置等。
  1. Spring Boot 内嵌服务器是什么?怎么切换?
  • 内嵌服务器就是 Tomcat、Jetty、Undertow 等,被打包到你的应用里,你直接 java -jar 运行,不用单独装服务器。
  • 默认是 Tomcat。想换成 Jetty,就排除 Tomcat 依赖,加入 spring-boot-starter-jetty
  1. Spring Boot 的配置文件有哪些?优先级?
  • 常用 application.propertiesapplication.yml
  • 优先级(从高到低):
    • 当前目录的 /config 子目录
    • 当前目录
    • classpath 下的 /config
    • classpath 根路径
  • 也可以使用多环境配置:application-dev.ymlapplication-prod.yml,通过 spring.profiles.active 激活。

6. @SpringBootApplication 注解包含哪三个注解?

  • @SpringBootConfiguration(其实就是 @Configuration
  • @EnableAutoConfiguration(开启自动配置)
  • @ComponentScan(扫描当前包及其子包的组件)
  1. Spring Boot 如何实现热部署?
  • 添加 spring-boot-devtools 依赖,它会监听 classpath 变化,自动重启应用。注意是重启,不是像 Jrebel 那样的热替换。

常问对比题(三兄弟关系)

  1. Spring 和 Spring Boot 什么关系?

Spring Boot 是 Spring 的“增强版”,它让你用更少的配置,更快的速度创建基于 Spring 的应用。没有 Spring,Spring Boot 就没了灵魂;没有 Spring Boot,Spring 也能用,但配置繁琐。

  1. Spring MVC 和 Spring Boot 什么关系?

Spring MVC 是一个 Web 框架,Spring Boot 是一个快速开发工具。你可以用 Spring Boot 来创建一个 Spring MVC 项目,它帮你自动配好所有东西。你也可以不用 Spring Boot,自己手动配 Spring MVC,但麻烦。

  1. 为什么有了 Spring 还需要 Spring Boot?

因为 Spring 的配置太啰嗦了。比如你要配一个 Web 项目,要配 DispatcherServlet、视图解析器、包扫描、JSON 转换器等。Spring Boot 把这些都自动化了,让你专注于写业务代码。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇