springboot常见面试题

这篇具有很好参考价值的文章主要介绍了springboot常见面试题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 为什么要springboot?springboot跟spring的区别

Spring Boot是一个开源Java-based框架,用于创建微服务。它是由Pivotal团队创建的,用于快速开发生产级的Spring应用。Spring Boot让你可以不用或者只需要很少的Spring配置就能创建一个应用。

与Spring Framework相比,Spring Boot具有以下特点:

  1. 自动配置:Spring Boot可以根据在类路径上的jar依赖自动配置你的应用。例如,如果在类路径上检测到HSQLDB,则Spring Boot会自动配置内存数据库。你不需要编写配置代码。

  2. 开箱即用:Spring Boot内置了应用服务器(例如Tomcat),所以你可以直接运行应用。你不需要部署war文件。

  3. 生产准备的特性:Spring Boot具有内置的功能,例如健康检查和指标,这可以帮助你监控和管理生产应用。

  4. 无代码生成:Spring Boot不生成代码,绝对没有任何代码生成,也没有xml配置文件。

与Spring Framework相比,Spring Boot具有以下优势:

  1. 简化配置:Spring Boot通过自动配置和提供默认值,简化了Spring应用的配置。

  2. 快速开发:Spring Boot内置了很多模板代码和库,可以帮助你快速开发新的功能。

  3. 微服务准备:Spring Boot适合微服务的开发,因为它可以轻松地开发和部署独立的服务。

  4. 集成Spring生态系统:Spring Boot与Spring Data、Spring Security、Spring Batch等项目完美集成。

总之,Spring Boot让Spring应用的开发变得更加简单、快速和方便。对于Spring的开发者来说,Spring Boot是一个非常有用的工具。

2 springboot跟springcloud的区别

Spring Boot和Spring Cloud都是Spring的项目,但它们的关注点和用途有所不同。

  1. 目标

    • Spring Boot 的主要目标是简化Spring应用的创建和开发过程。它提供了一种新的方式来创建Spring应用,包括自动配置、生产就绪的功能和开箱即用的依赖管理。
    • Spring Cloud 的目标是为开发者提供一些常见的模式用于构建分布式系统。它是一个工具集,用于帮助开发者在云计算环境中快速构建分布式应用。
  2. 功能

    • Spring Boot 提供了创建独立的Spring应用的方式。它可以帮助你快速启动、开发和运行Spring应用。它可以自动配置你的Spring应用,生产准备级的应用监控,集成了大量常用的第三方库配置。
    • Spring Cloud 提供了一系列用于处理分布式系统中常见问题的解决方案。例如,它提供了服务发现(Service Discovery)、配置管理(Configuration Management)、路由(Routing)、负载均衡(Load Balancing)等功能。
  3. 使用场景

    • Spring Boot 通常用于构建单体应用或微服务,无论是Web应用还是后台服务。
    • Spring Cloud 主要用于构建大型的分布式系统,通常是微服务架构的应用。它是建立在Spring Boot的基础上的,它用于简化分布式系统中的一些常见模式。
  4. 依赖关系

    • Spring Boot 是一个独立的项目,它可以不依赖于其他Spring项目。
    • Spring Cloud 是建立在Spring Boot的基础上的,它使用Spring Boot来创建微服务并提供与云相关的功能。

总之,Spring Boot和Spring Cloud是为不同目的而设计的。Spring Boot是为了简化Spring应用的开发,而Spring Cloud是为了简化分布式系统的开发。如果你在开发一个分布式系统,你通常会同时使用这两个项目。

3 springboot的常用注解

Spring Boot提供了许多注解来简化Spring应用的配置和开发。以下是一些常用的注解:

  1. @SpringBootApplication:标注一个主程序类,说明这是一个Spring Boot应用。

  2. @ComponentScan:自动扫描并加载符合条件的组件或bean,将它们注册到容器(applicationContext)中。

  3. @Configuration:声明当前类是一个配置类,用于替代XML配置文件。

  4. @Bean:将一个方法的返回值注入到Spring容器。

  5. @Autowired:自动注入Spring容器中的bean。

  6. @Component:泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

  7. @Service:标注在服务类上,表示这是一个业务逻辑类。

  8. @Controller:标注在控制器类上,表示这是一个Spring MVC控制器。

  9. @RestController:标注在控制器类上,表示这是一个Spring MVC控制器,且返回的数据默认为JSON格式。

  10. @RequestMapping:处理请求地址映射,用于类或方法上。该注解可以标明一个URL到类或方法的映射。

  11. @GetMapping, @PostMapping, @PutMapping, @DeleteMapping:处理详细的HTTP请求类型映射。

  12. @PathVariable:用于获取路径变量。

  13. @RequestParam:用于获取查询参数。

  14. @RequestBody:用于获取请求体内容。

  15. @ResponseBody:用于指定一个方法返回的结果直接写入HTTP响应正文中。

  16. @Value:注入配置文件中的属性。

  17. @Profile:指定组件在哪个环境下才能被注册到容器中。

  18. @PropertySource:加载指定的配置文件。

  19. @EnableAutoConfiguration:启用自动配置。

这些注解在Spring Boot应用开发中被广泛使用,可以极大地简化Spring应用的配置和开发。

4 springboot starter启动过程

4.1 概述

Spring Boot Starter是Spring Boot项目的一个核心概念。一个Starter是一个预配置的模板,它包含了一个或多个JAR依赖,以及可能的自动配置。它们的目的是简化Spring Boot应用的配置和开发过程。

以下是Spring Boot启动过程的一般步骤:

  1. 初始化Spring应用上下文:Spring Boot启动过程的第一步是创建一个Spring应用上下文,该上下文包含了应用中所有的Bean定义。

  2. 加载Spring Boot Starter依赖:Spring Boot会加载在项目中声明的所有Starter依赖。Starter是一种特殊的Spring Boot模块,它包含了一组有用的默认配置、JAR依赖和自动配置的代码。

  3. 加载应用属性:Spring Boot会加载应用的属性配置文件,如application.propertiesapplication.yml。这些文件包含了应用的各种配置信息。

  4. 执行自动配置:Spring Boot会执行自动配置的过程。这是通过@EnableAutoConfiguration注解完成的。自动配置会扫描应用上下文中的Bean,然后基于应用的配置和依赖自动配置Spring Bean。

  5. 创建并初始化Bean:在自动配置阶段之后,Spring Boot会创建并初始化应用上下文中的所有Bean。这些Bean包括应用中的所有组件、服务、控制器等。

  6. 启动内嵌的Web服务器:如果应用是一个Web应用,Spring Boot会启动一个内嵌的Web服务器(默认是Tomcat)来处理HTTP请求。

  7. 启动Spring应用:最后,Spring Boot会启动Spring应用。这通常是通过调用SpringApplication.run()方法完成的。该方法会启动Spring应用并返回一个Spring应用上下文。

  8. 运行应用:应用现在已经启动并运行。它可以接受和处理HTTP请求,执行业务逻辑,访问数据库等。

总之,Spring Boot启动过程涉及初始化Spring应用上下文、加载Starter依赖、加载应用属性、执行自动配置、创建和初始化Bean、启动内嵌的Web服务器等步骤。这个过程简化了Spring应用的配置和开发过程,并使得Spring应用的启动变得更加快速和简单。

4.2 执行"自动配置"和"创建并初始化Bean"有什么区别"?

执行自动配置和创建并初始化Bean这两个步骤在Spring Boot应用启动过程中都是非常重要的,它们有不同的职责和作用:

  1. 执行自动配置:这个步骤主要是为了自动配置Spring应用上下文中的Bean。自动配置是Spring Boot的一个重要特性,它可以根据应用的配置和依赖自动配置一些常见的Bean,如数据源、Web服务器、模板引擎等。这个过程是通过@EnableAutoConfiguration注解完成的。自动配置会扫描应用上下文中的Bean和配置,然后根据这些信息自动配置一些常见的Bean。这样可以简化应用的配置,让开发者更加专注于业务逻辑的开发。

  2. 创建并初始化Bean:这个步骤主要是为了创建和初始化Spring应用上下文中的所有Bean。这些Bean包括应用中的所有组件、服务、控制器等。这个过程是在自动配置阶段之后进行的。Spring会根据Bean的定义和依赖关系创建并初始化Bean,然后将这些Bean注入到应用中需要的地方。这个过程是Spring IoC(控制反转)容器的核心功能。

总之,执行自动配置和创建并初始化Bean这两个步骤有不同的职责和作用。执行自动配置主要是为了自动配置一些常见的Bean,spring.factories文件中的bean,而创建并初始化Bean主要是为了创建和初始化应用上下文中的所有Bean,指的是处理beanDefinitionMap中的bean元数据,即我们程序员自己写的@Componnet等注解标注的类。这两个步骤都是Spring Boot应用启动过程中非常重要的。

4.3 执行自动配置主要是为了自动配置一些常见的Bean,spring.factories文件中的bean,而创建并初始化Bean主要是为了创建和初始化应用上下文中的所有Bean,指的是处理beanDefinitionMap中的bean元数据,即我们程序员自己写的@Componnet等注解标注的类,对吗?

是的,你的理解是正确的:

  1. 执行自动配置:主要是为了自动配置一些常见的Bean。这个过程是通过spring.factories文件中的配置来完成的。在这个文件中,Spring Boot列出了一些自动配置的类。当应用启动时,Spring Boot会自动加载这些类,并根据应用的配置和依赖自动配置一些常见的Bean。这些Bean通常是一些基础设施的组件,如数据源、Web服务器、模板引擎等。

  2. 创建并初始化Bean:主要是为了创建和初始化应用上下文中的所有Bean。这个过程包括处理beanDefinitionMap中的Bean元数据,以及根据这些元数据创建和初始化Bean。这些Bean包括我们程序员自己写的@Component@Service@Controller@Repository等注解标注的类,以及其他一些通过XML配置或Java配置定义的Bean。

这两个步骤都是Spring Boot应用启动过程中非常重要的。执行自动配置主要是为了简化应用的配置,而创建并初始化Bean主要是为了初始化应用上下文中的所有Bean,这两个步骤都是Spring IoC(控制反转)容器的核心功能。

5 @autowire和@resource

5.1 @autowire和@resource注解是springboot中的注解吗

@Autowired@Resource 注解都不是 Spring Boot 特有的,它们都来自于 Spring 框架本身。Spring Boot 是 Spring 的一个子项目,专注于简化 Spring 应用的创建和开发过程。

5.2 @autowire和@resource的区别

  1. 基因不同: 首先其最大的不同在于她们的爸爸妈妈不同(@Autowired是由org.springframework.beans.factory.annotation.Autowired提供,换句话说就是由Spring提供;@Resource是由javax.annotation.Resource提供,即J2EE提供,需要JDK1.6及以上。)

  2. @Autowired@Resource 都用于自动装配 bean,但它们的工作方式有所不同。

    • @Autowired:是 Spring 提供的注解。它根据类型来自动装配。如果存在类型的多个实现,则会按照 bean 的名称进行匹配。可以配合 @Qualifier 注解使用,通过指定的名字来匹配 bean。

    • @Resource:是 Java EE 提供的注解。它可以按照名称或类型进行自动装配。@Resource 注解有一个属性 name,可以指定一个 bean 的名称进行注入。如果不指定 name 属性,它会默认按照字段名称进行装配。

    以下是两个注解的简单例子:

    public class MyClass {
    
        // 使用 @Autowired
        @Autowired
        private MyService myService;
        
        // 使用 @Resource
        @Resource(name = "myService")
        private MyService myService;
    }
    

    总结来说,@Autowired 是根据类型进行自动装配的(如果有多个同类型的 bean,则根据名字进行匹配),而 @Resource 是默认按照名字进行自动装配的。

5.3 为什么我看到大家很少用@Resource,而是@Autowire用的多

5.4 哪一个性能更好

6 springMVC与springboot的关系:

Spring Boot是一个用来简化Spring应用程序构建、部署和运行的框架。而Spring MVC是Spring的一个模块,用于构建web应用程序。Spring Boot可以与Spring MVC结合使用,为开发者提供了一个快速构建web应用程序的方式。所以,Spring Boot确实可以使用Spring MVC,但它不仅限于此。

6.1 一个请求是怎么打到springMVC的某一个controller中,那怎么打到springboot的controller中呢?

请求如何打到Controller:

  • Spring MVC:当请求到达DispatcherServlet时,它会使用一个处理器映射(HandlerMapping)来确定请求应该由哪个controller处理,然后使用处理器适配器(HandlerAdapter)来触发controller的方法。
  • Spring Boot:Spring Boot在背后使用Spring MVC处理Web请求(除非你选择使用WebFlux)。所以,请求的处理流程与传统的Spring MVC应用程序相同。Spring Boot的主要目的是自动配置和简化应用程序的启动流程。

7 springMVC的三大组件

7.1 springboot接收请求时,所有的都会经过DispatcherServlet嘛?这里应该是reactor线程模型中的主线程?比如当A请求打到AController中,B请求打到BController中,这相当于是两个子线程在处理嘛

Spring Boot和DispatcherServlet:是的,当你在Spring Boot应用中使用Spring MVC时,所有的Web请求都会经过DispatcherServlet。在传统的servlet容器(如Tomcat)中,每个请求会由一个线程处理,这也是多线程模型。但对于Spring WebFlux和其他反应式框架,它们使用不同的线程模型(如Reactor线程模型)。

7.2 handlerAdapter是spring框架中的三大组件之一,作用是什么,另外两大组件呢?

三大组件:在Spring MVC中,DispatcherServlet的三大组件是HandlerMapping、HandlerAdapter和ViewResolver。

HandlerMapping:确定哪个Controller或handler应该处理请求。
HandlerAdapter:负责执行handler的方法。
ViewResolver:解析逻辑视图名称到具体的视图对象,如JSP、Thymeleaf等。

7.3 在ssm框架中,我们使用arthas的trace org.springframework.web.servlet.DispatcherServlet命令可以知道某一个具体的请求经过了哪一个servlet,那springboot中呢?为什么叫适配器,是因为应用层的controller动态变化,所以需要用适配器设计模式嘛; ha = this.getHandlerAdapter(mappedHandler.getHandler());是什么意思,将处理器放到一个适配器中?

Spring Boot和DispatcherServlet:在Spring Boot应用程序中,你仍然可以使用各种Java工具和技术来跟踪请求如何经过DispatcherServlet。关于适配器,它的命名并不完全是因为“适配器”设计模式,但概念是相似的。handlerAdapter的目的是使DispatcherServlet可以与多种类型的处理器一起工作,而不只是Spring MVC controllers。ha = this.getHandlerAdapter(mappedHandler.getHandler());这段代码的目的是根据给定的处理器(handler)找到合适的处理器适配器;找到合适的适配器后,再由这个适配器负责具体的控制器方法的执行操作。文章来源地址https://www.toymoban.com/news/detail-656729.html

到了这里,关于springboot常见面试题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java常见面试题(160道)

    1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环境和运行环境。 JRE:Java Runtime Environment 的简称,Java 运行环境,为 Java 的运行提供了所需环境。 具体来说 JDK 其实包含了 JRE,同时还包含了编译 Java 源码的编译器 Javac,还包含了很

    2024年02月09日
    浏览(36)
  • 【Java】常见面试题:多线程

    努力经营当下 直至未来明朗 答:① 进程包含线程; ② 线程比进程更轻量,创建更快、销毁也更快; ③ 同一个进程的多个线程之间共用一份内存和文件资源,而进程和进程之间则是独立的文件和内存资源;线程共用资源就省去了线程分配资源的过程 ④ 进程是资源分配的基

    2024年03月21日
    浏览(29)
  • Java-常见面试题收集(十)

    1 springboot 特点  1.自动配置:Spring Boot可以自动配置项目所需的常见配置,从而大大简化了项目的搭建和开发过程。开发者只需通过添加相应  2.的依赖,Spring Boot就会自动完成相关的配置工作。  3.独立运行:Spring Boot内嵌了如Tomcat、Jetty等Servlet容器,因此可以打包为jar或

    2024年04月14日
    浏览(29)
  • Spring-SpringBoot-SpringMVC-MyBatis常见面试题

    不是线程安全的,他默认是单例的,如果有多个线程会并发执行该请求对应的逻辑,在处理过程中如果有对该单例状态修改,则需要考虑线程同步问题, 他是面向编程的,用于与业务无关,可以抽取为公共模块,降低耦合,一般用于日志,事务 主要是使用AOP来记录操作日志,主要思路的使用

    2024年02月10日
    浏览(58)
  • 【Java常见面试题】Spring篇

     导航: 【黑马Java笔记+踩坑汇总】JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud+黑马旅游+谷粒商城+学成在线+常见面试题 目录 1、简单介绍Spring 2、说说你对IOC的理解 3、说说你对AOP的理解 4、说说Bean的生命周期 5、说说循环依赖和三级缓存 6、说说Bean的几种注册方式 7、说说B

    2024年02月09日
    浏览(25)
  • Java常见面试题之RabbitMQ

            RabbitMQ是一款非常优秀的消息中间件,它可以实现各个模块之间的松耦合,提高程序的灵活性,可扩展性,使用RabbitMQ主要有以下优点: 异步消息传递,RabbitMQ支持异步消息传递,可以实现异步处理消息,提高程序的执行效率. 消息队列排队服务,RabbitMQ可以将消息暂存到消息队列

    2024年02月09日
    浏览(38)
  • Java常见面试题---面向对象篇

    什么是构造方法?构造方法有那些特点? 构造方法,是一种特殊的方法,它是一个与类同名的方法。 对象 的创建就是通过构造方法来完成,其功能主要是完成对象的 初始 化。当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以 重载 。 特点: 构造

    2024年02月22日
    浏览(33)
  • Java常见面试题之Redis

            Redis支持五中常用数据类型,string hash list set zset         Redis提供两种持久化机制,RDB和AOF机制         RDB持久化机制 ,是指数据集快照的方式半持久化模式记录Redis数据库的所有键值对,在某个时间点将数据写入一个临时文件,持久化结束后,用这个临时文件替换上

    2024年02月09日
    浏览(33)
  • Java线程池常见面试题详解

    池化技术 池化技术是一种常见的编程技巧, 把一些能够复用的东西(比如说数据库连接、线程)放到池中,避免重复创建、销毁的开销,在需要时可以重复使用这些预先准备的资源,从而极大提高性能。(提前保存大量资源, 以备不时之需) 线程池、数据库连接池、Http 连接池等

    2023年04月26日
    浏览(68)
  • java常见面试题:如何使用Java进行单元测试?

    单元测试是软件开发中的一个重要环节,它确保每个单独的代码单元都能按照预期工作。以下是如何使用Java进行单元测试的详细说明: JUnit : JUnit是Java中最流行的单元测试框架。 首先,添加JUnit依赖到你的项目中。如果你使用Maven,可以在 pom.xml 中添加以下依赖: 复制代码

    2024年02月02日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包