每日速记10道java面试题23-Spring篇+Springboot篇

其他资料

每日速记10道java面试题01-优快云博客

每日速记10道java面试题02-优快云博客

每日速记10道java面试题03-优快云博客

每日速记10道java面试题04-优快云博客

每日速记10道java面试题05-优快云博客

每日速记10道java面试题06-优快云博客

每日速记10道java面试题07-优快云博客

每日速记10道java面试题08-优快云博客

每日速记10道java面试题09-优快云博客

每日速记10道java面试题10-优快云博客

每日速记10道java面试题11-优快云博客

每日速记10道java面试题12-优快云博客

每日速记10道java面试题13-优快云博客

每日速记10道java面试题14-优快云博客

每日速记10道java面试题15-优快云博客

每日速记10道java面试题16-优快云博客

每日速记10道java面试题17-优快云博客

每日速记10道java面试题18-优快云博客

每日速记10道java面试题19-优快云博客

每日速记10道java面试题20-优快云博客

每日速记10道java面试题21-优快云博客

每日速记10道java面试题22-优快云博客

目录

1.Spring和Spring MVC的区别是什么?

2.Spring WebFlux 是什么?它与 Spring MVC 有何不同?

3.介绍一下Spring MVC的核心组件?

4.说一说Springboot的启动流程

5.为什么使用springboot

 6.SpringBoot是如何实现自动装配的?

7.Spring Boot 打成的 jar 和普通的 jar 有什么区别 ?

8.在 Spring Boot 中你是怎么使用拦截器的?

9.SpringBoot(Spring)中为什么不推荐使用 @Autowired ?

 10.怎么理解SpringBoot中的约定大于配置?


1.Spring和Spring MVC的区别是什么?

Spring 是基础,Spring MVC 构建于 Spring 核心之上,利用其提供的容器管理、依赖注入、AOP 等功能来实现 Web 层的处理。

Spring MVC 通过前端控制器(DispatcherServlet)拦截所有的请求,并将请求分发给合适的控制器进行处理:
1.DispatcherServlet 拦截请求。
2. HandlerMapping 根据请求 URL 查找对应的控制器。
3.Controller 处理业务逻辑,并返回数据。
4.ViewResolver 决定渲染哪个视图模板。
5.将响应返回给客户端。
 

2.Spring WebFlux 是什么?它与 Spring MVC 有何不同?

Spring WebFlux:

  • 异步非阻塞框架:Spring WebFlux 是 Spring5引入的响应式 Web 框架,旨在支持异步非阻塞编程模型。
  • 基于 Reactor: Webflux基于 Reactor 库,支持响应式流(Reactive Streams)规范,使用 Mono 和 Flux 来表示单个和多个异步序列。
  • 适用于高并发:WebFlux 适用于需要处理大量并发请求的场景,如实时数据流和高负载应用。

Spring MVC:

  • 同步阻塞框架:Spring MVC 是一个基于 Servlet 的传统 Web 框架,使用同步阻塞模型处理请求
  • 基于 Servlet APl:Spring MVC 使用标准的 Servlet API,通常每个请求对应一个线程。
  • 广泛应用:Spring MVC 适用于大多数 Web 应用,特别是传统的 CRUD 操作和企业应用。

适用场景:

  • Spring MVc:适用于 I/O操作较少、请求数相对较少的应用。
  • Spring WebFlux:适用于I/O操作频繁、高并发、低延迟的应用。 

3.介绍一下Spring MVC的核心组件?

 1.DispatcherServlet:Spring MVC 的前端控制器,所有请求都会先由它接收并分发到相应的处理器。它是整个 Spring MVC 流程的入口,也是处理请求的调度中心。
2.HandlerMapping:根据请求 URL查找对应的处理器(Controller)。 HandlerMapping 用于将客户端的请求映射到具体的控制器方法。
3.Controller (控制器):负责处理用户请求的核心组件。Controller 接收请求后,调用业务逻辑处理,返回数据给前端
4.ModelAndView:Controller 返回的对象,包含模型数据和视图信息,表示返回给用户的页面或 AP! 响应。
5.ViewResolver:用于解析视图名称并找到实际的视图(如JSP、Thymeleaf等),然后将处理结果渲染为 HTML 或其他格式,发送给客户端。
6. Handlerinterceptor(拦截器):在请求处理的各个阶段拦截 HTTP 请求和响应,可以在控制器执行前后添加自定义逻辑,如日志记录、权限检查等。
7.HandlerAdapter:负责执行找到的处理器(Controller),将请求交给处理器进行业务逻辑的处理。

核心工作流程:

1.DispatcherServlet 接收请求并调用 HandlerMapping 查找对应的控制器
2.HandlerAdapter 调用具体的 Controller 方法处理请求.。
3.Controller 返回 ModelAndView,包括视图名和模型数据。
4.ViewResolver 解析视图并渲染结果。
5.最终,DispatcherServlet 将处理结果返回给客户端
 


4.说一说Springboot的启动流程

1.从main方法启动,调用SpringApplication.run()方法
2.先会创建SpringApplication对象,创建的时候会推断应用类型(判断是servlet应用,还是reactive应用,或者不是web应用)设置启动监听器
3.创建完SpringApplication之后,调用该对象的run方法,通过ConfigurableEnvironment准备环境,这一步会读取配置文件,例application.preperties
4.创建应用上下文,这一步会注册所有配置类和自动配置类
5.刷新应用上下文,这一步会进行bean的创建和初始化,包括开发者自定义的bean以及自动注入的bean
6.对于web应用,刷新应用上下文的最后,会自动启动嵌入式web服务器
7.服务器启动完成会发送应用已启动的事件
8.接着调用实现了CommandLineRunner或者ApplicationRunner接囗的bean,执行一些初始化逻辑9.发送ApplicationReadyEvent,应用启动完成

核心步骤如下:

1.SpringApplication.run(:这是启动的入口,它会创建 Spring 应用上下文,并执行自动配置。
2.创建应用上下文:为 Web 应用创建 AnnotationConfigServletWebServerApplicationContext 上下文.
3.启动内嵌 Web 服务器:在 refreshContext() 阶段启动内嵌的 Web 服务器(如 Tomcat)。
4.自动配置:通过 @EnableAutoConfiguration 自动配置各种组件,如 DispatcherServlet。
5.请求处理:内嵌的 DispatcherServlet 负责处理 HTTP 请求。

5.为什么使用springboot

  1. 简化开发:Spring Boot通过提供一系列的开箱即用的组件和自动配置,开发人员可以更专注于业务逻辑的实现,而不需要花费过多时间在繁琐的配置上。
  2. 快速启动:springboot可通过内嵌的Tomcat等容器快速启动应用程序,无需额外的部署步骤,方便快捷。
  3. 自动化配置:Spring Boot通过自动配置功能,根据项目中的依赖关系和约定俗成的规则来配置应用程序,减少了配置的复杂性,简化开发。

 6.SpringBoot是如何实现自动装配的?

自动配置是通过@EnableAutoConfiguration注解实现的,这个注解会通过@import注解导入AtuoConfigurationlmportSelector类,这个类会扫描META-INF/Spring.factories文件,这个文件里面定义了所有的自动配置类,这些配置类上可能存在条件注解spring boot启动的时候根据这些注解,加载这些自动配置类。
1.自定义自动配置类步骤
定义一个类使用configuration注解修饰;定义META-INF/Spring-factories文件,向EnableAutoConfiguration中注入这个类
2.禁用特定的自动配置
application.properties配置文件中,使用spring.autoconfigure.exclude指定要禁用的自动配置类main启动类上,使用@SpringBootApplication的exclue属性进行排除

7.Spring Boot 打成的 jar 和普通的 jar 有什么区别 ?

spring boot的jar除了包含源代码以及依赖之外,还包含运行所需要的环境,例如Tomcat服务器和运行代码所需要的依赖,能独立运行。
普通的jar只有源代码和依赖,不能直接独立运行。怎么打包?使用maven插件,运行mvn clean package命令

8.在 Spring Boot 中你是怎么使用拦截器的?

1.实现Handlerlnterceptor接口,并且实现preHandle,postHandle,afterCompletion方法
2.实现WebMvcConfigurer接口,并且实现addInterceptors方法,注入上面自定义的拦截器
常用于:权限校验,日志记录等

preHandle:在请求到达控制器之前,进行拦截处理。常用与权限校验
postHandle:在请求经过控制器处理,还没有进行染视图之前。可以对响应进行修改afterCompletion:在视图完成渲染之后。可以用于进行一些清理操作。

多个拦截器调用顺序:preHandle会根据拦截器定义的顺序,依次进行调用。postHandle和afterCompletion会按照定义的顺序逆序进行调用。

Filter和Interceptor区别:Filter优先级比Interceptor高

9.SpringBoot(Spring)中为什么不推荐使用 @Autowired ?
 

详情请看我的另一篇文章:@Autowired与构造器注入区别,为什么spring推荐使用构造注入而不是Autowired?_构造器注入和autowired区别-优快云博客

 10.怎么理解SpringBoot中的约定大于配置?
 

  1. 自动化配置:Spring Boot 提供了大量的自动化配置,通过分析项目的依赖和环境,自动配置应用程序的行为。例如,Spring Boot 可以根据项目中引入的数据库依赖自动配置数据源。
  2. 默认配置:Spring Boot 在没有明确配置的情况下,会使用合理的默认值来初始化应用程序。
  3. 约定优于配置:Spring Boot 遵循了约定优于配置的设计哲学,即通过约定好的方式来提供默认行为,减少开发者需要做出的决策。它是一种设计理念,通过减少配置和提供合理的默认值,让开发者快速构建部署一个程序,简化开发和降低维护成本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值