Java-常见面试题收集(十)

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

十八 SpringBoot

1 springboot 特点

 1.自动配置:Spring Boot可以自动配置项目所需的常见配置,从而大大简化了项目的搭建和开发过程。开发者只需通过添加相应
 2.的依赖,Spring Boot就会自动完成相关的配置工作。
 3.独立运行:Spring Boot内嵌了如Tomcat、Jetty等Servlet容器,因此可以打包为jar或war文件,独立运行而无需外部容器。
 4.简化监控:提供生产就绪型功能,如指标、健康检查和外部化配置。
 5.简化安全性:在Spring Boot中,你可以轻松地添加安全性控制,保护你的应用程序。
 6.无代码生成和XML配置:Spring Boot不需要你编写大量的样板代码或XML配置,使得开发过程更加高效。

2 Spring Boot 的核心注解是?

 @SpringBootApplication 有下面这些注解组合:
  @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
  @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能
  @SpringBootApplication(exclude ={ DataSourceAutoConfiguration.class })。 @ComponentScan:Spring 组件扫描

3 如何实现Spring Boot应用程序的更改重新加载,而无需重新启动服务器

 1.使用DevTools(开发者工具):Spring Boot DevTools是一个模块,它提供了在开发过程中快速应用更改的能力。DevTools会自动重启你的应用程序,当你更改类路径下的文件时,它会在运行时重新加载你的应用程序。要启用DevTools,只需将spring-boot-devtools依赖添加到你的pom.xml(Maven)或build.gradle(Gradle)文件中。true标记是为了防止devtools被传递性地引入生产环境的依赖中。

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-devtools</artifactId>  
    <optional>true</optional>  
</dependency>

 2.使用Spring Cloud Config或外部化配置:如果你正在使用Spring Cloud Config或其他外部化配置解决方案,你可以通过更新配置服务器上的属性来重新加载配置,而无需重启应用程序。Spring Cloud Config客户端支持动态刷新配置。

 3.使用/refresh端点:如果你已经启用了Spring Boot Actuator(另一个有用的开发模块),你可以使用/refresh端点来重新加载配置。这要求你的应用程序正在使用@RefreshScope注解,并且配置源(如配置文件、环境变量等)支持动态刷新。.启用Actuator并在配置文件中添加相关端点后,你可以发送一个POST请求到/actuator/refresh端点来触发配置刷新。

 4.使用热部署(Hot Swap)工具:有一些IDE(如IntelliJ IDEA或Eclipse)提供了热部署功能,允许你在不重启服务器的情况下实时应用代码更改。这些工具通常依赖于Java的JPDA(Java Platform Debugger Architecture)和JRebel等第三方库。

 5.使用JRebel或Spring Loaded:JRebel和Spring Loaded是Java虚拟机(JVM)代理,它们能够在运行时重新加载类更改。这些工具需要额外的配置,但它们能够在不重启JVM的情况下提供类的热更新。

4 Spring Boot、Spring MVC 和 Spring 的区别

 Spring Boot、Spring MVC和Spring在功能和使用上存在着明显的区别。

 首先,Spring是一个开源的Java应用框架,旨在提供全面的基础设施支持,用于简化企业级应用开发的复杂性。其核心是一个IoC(控制反转)容器,它将对象的创建、依赖注入和生命周期管理等任务委托给容器来完成,使得企业级应用的组件化开发变得更加简单、灵活、可维护。Spring还提供了一个AOP(面向切面编程)框架,可以在不修改原有代码的情况下实现横切关注点的功能,如事务管理、安全控制、日志跟踪等。

 Spring MVC则是Spring框架中的一个模块,主要用于开发Web应用程序。它基于MVC(Model-View-Controller)设计模式,将应用程序分为模型、视图和控制器三个部分。控制器负责接收请求并将其分派到适当的处理程序,视图负责将响应呈现给用户,而模型则处理数据和业务逻辑。这种设计模式使得代码更易于维护和重用,提高了开发效率。

 而Spring Boot则是一个快速开发和部署Spring应用程序的框架。它遵循“约定优于配置”的原则,通过自动化配置和默认设置,减少了繁琐的配置代码,从而简化了开发者的配置工作。Spring Boot还内嵌了多种常用的Web容器,如Tomcat、Jetty等,使得构建独立的Web应用程序变得简单。此外,Spring Boot还提供了外部化配置、健康检查、指标、日志记录等功能,方便开发者进行运维管理。

 总的来说,Spring是一个全面的应用框架,提供了企业级应用开发所需的各种功能;Spring MVC则是专门用于Web开发的模块,实现了MVC设计模式;而Spring Boot则是一个快速开发和部署Spring应用程序的框架,简化了配置和部署过程。这三者各自有其独特的优势和适用场景,开发者可以根据项目需求选择合适的框架进行开发。

5 Spring Boot 配置加载顺序

 1.properties 文件
 2.YAML 文件
 3.系统环境变量
 4.命令行参数

6 yaml 配置相比 properties 配置的优势

 1.语法简洁易读:YAML使用缩进和冒号来表示层次结构,使得配置文件结构清晰易读。相比之下,Properties使用点号和等号来表示键值对,语法相对简单,但不如YAML直观。

 2.更好的组织和描述复杂配置:YAML支持注释和多行文本,使得开发者可以更好地组织和描述复杂的配置信息。这对于理解和维护大型项目中的配置非常有帮助。而Properties不支持注释和多行文本,不太适合描述复杂的配置信息。

 3.支持多种数据类型:YAML支持多种数据类型,如字符串、数字、布尔值、数组、对象等,可以更好地表示复杂的数据结构。而Properties只支持字符串类型,不支持其他数据类型,这在处理复杂配置时可能较为受限。

 4.层级结构清晰:YAML的层级结构使得配置文件更具有层次感,方便对复杂数据进行组织和管理。这种结构化的表示方式有助于开发者快速定位和修改配置信息。

 5.扩展性:YAML支持自定义标签和类型,可以扩展语言的功能和表达能力。这使得YAML在处理特定领域或复杂场景的配置时更加灵活。而Properties不支持扩展,只能使用预定义的键值对。

 综上所述,YAML配置在语法简洁性、可读性、组织复杂性、数据类型支持和扩展性等方面相比Properties配置具有明显优势。因此,在需要处理复杂配置或需要更高可读性和可维护性的项目中,YAML配置通常是一个更好的选择。

7 Spring Boot 中如何管理事务

 在Spring Boot中,事务管理通常通过Spring框架的事务管理支持来实现。Spring Boot为开发者提供了简洁的事务管理方式,通过注解和配置可以方便地管理事务。以下是在Spring Boot中管理事务的一些关键步骤和最佳实践:

 1.添加依赖:确保你的pom.xml(Maven)或build.gradle(Gradle)中包含了Spring Boot的spring-boot-starter-data-jpa或spring-boot-starter-jdbc依赖,这些依赖会自动包含Spring框架的事务管理支持。

 2.启用事务管理:在你的Spring Boot应用上启用事务管理,通常通过在配置类上使用@EnableTransactionManagement注解来实现。然而,在Spring Boot中,这个注解通常不是必需的,因为Spring Boot会自动配置很多事务相关的bean。

 3.使用@Transactional注解:在需要事务支持的方法上使用@Transactional注解。这个注解告诉Spring,当这个方法被调用时,应该在一个事务的上下文中执行。你可以将这个注解放在类级别或方法级别。如果放在类级别,该类中的所有public方法都将默认运行在事务中。还可以使用@Transactional注解的属性来定制事务的行为,例如设置隔离级别、传播行为、超时时间、只读标志等。

 4.配置数据源和事务管理器:在application.properties或application.yml配置文件中配置数据源和事务管理器的相关属性。Spring Boot会根据这些配置自动创建数据源和事务管理器bean。

 5.处理异常:当事务中的方法抛出未检查的异常(通常是运行时异常)时,Spring会回滚事务。如果抛出的是检查异常(通常是Exception及其子类,但非RuntimeException),默认情况下事务不会回滚。你可以通过@Transactional注解的rollbackFor和noRollbackFor属性来定制回滚行为。

 6.编程式事务管理:虽然声明式事务管理(使用@Transactional注解)在Spring中更为常见和推荐,但Spring也支持编程式事务管理。你可以通过PlatformTransactionManager接口手动开始、提交或回滚事务。但这种方式通常不推荐,因为它会使代码更加复杂且难以维护。

 7.监控和调优:使用Spring Boot Actuator和相关的监控工具来监控事务的性能和状态。根据需要调整事务属性,如隔离级别、超时时间等,以优化性能和避免潜在的问题。

8 什么是 Spring Profiles

 Spring Profiles是Spring框架中的一个核心功能,它允许开发者根据不同的环境(如开发、测试和生产环境)注册和激活不同的bean。通过使用@Profile注解,开发者可以将bean映射到特定的Profile,然后在不同的环境中激活不同的Profiles,从而仅加载和引导所需的bean。

 Spring Profiles的工作原理基于两种状态的Profile:默认加载的Profile(spring.profiles.default)和指定激活的Profile(spring.profiles.active)。如果程序未指定active状态的Profile,那么将执行default状态的Profile;如果两种状态都指定,则优先执行或选择active状态的Profile。

 这种机制使得开发者能够灵活地管理不同环境下的配置和bean加载,提高了应用程序的可维护性和可移植性。例如,在开发环境中,可能需要加载一些用于调试和测试的bean,而在生产环境中,则需要加载用于实际运行的bean。通过使用Spring Profiles,开发者可以轻松地实现这种环境间的切换和配置。

9 SpringBoot 中如何解决跨域问题

 跨域可以在前端通过 JSONP 来解决,但是 JSONP 只可以发送 GET 请求,无法发送其他类型的请求,在 RESTful 风格的应用中,就显得非常鸡肋,因此我们推荐在后端通过(CORS,Cross-origin resource sharing)来解决跨域问题。这种解决方案并非 SpringBoot 特有的,在传统的 SSM 框架中,就可以通过CORS 来解决跨域问题,只不过之前我们是在 XML 文件中配置 CORS ,现在可以通过实现 WebMvcConfigurer 接口然后重写 addCorsMappings 方法解决跨域问题。

10 Spring Boot 常见的日志框架

 1.Logback:作为 Spring Boot 的默认日志框架,Logback 是 Log4j 的改进版本,提供了更好的性能和可靠性。它支持多种日志输出目的地,如文件、数据库、远程服务器等,并且具有自动重新加载配置文件的功能,无需重启应用。此外,Logback 还提供了丰富的过滤器,可以根据不同的条件过滤日志信息。
 2.Log4j2:作为 Apache 开发的一款高性能、灵活的日志框架,Log4j2 是 Log4j 的升级版本,提供更快速的异步日志记录,并具有更优的性能和低延迟。与 Logback 相比,它在某些特定场景下可能具有更好的性能表现。
 3.Java Util Logging(JUL):这是 Java SE 的默认日志框架,虽然 Spring Boot 可以配置使用 JUL 作为日志框架,但一般不推荐使用,因为它的性能和灵活性相对较差。
 在使用 Spring Boot 时,推荐导入 spring-boot-starter-logging 依赖,因为它会根据 Spring Boot 的规则进行日志框架的自动配置,并确保与 Spring Boot 的其他模块协同工作。你可以通过创建相应的配置文件(如 logback.xml 或 log4j2.xml)来定制日志框架的行为,以满足你的具体需求。文章来源地址https://www.toymoban.com/news/detail-850618.html

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

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

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

相关文章

  • Java常见面试题---面向对象篇

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

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

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

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

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

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

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

    2024年02月09日
    浏览(45)
  • java常见面试题:如何使用Java进行单元测试?

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

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

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

    2023年04月26日
    浏览(80)
  • Java voliate关键字常见面试题

    volatile 是 Java 中的,用于声明一个变量是“易变”的,即可能被多个线程同时修改。它的主要作用是保证对该变量的读写操作具有可见性,即一个线程对该变量的修改对其他线程是可见的,同时禁止了编译器和运行时对指令的重排序。 主要区别在于可见性和禁止重排序

    2024年02月09日
    浏览(49)
  • java面试常问,zookeeper常见面试题

    什么是 Spring Boot? 为什么要用 Spring Boot? Spring Boot 的核心配置文件有哪几个?它们的区别是什么? Spring Boot 的配置文件有哪几种格式?它们有什么区别? Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的? 开启 Spring Boot 特性有哪几种方式? Spring Boot 需要独立的容器

    2024年03月15日
    浏览(67)
  • 数据结构常见面试题及详细java示例

    下面是一些常见的数据结构面试题以及使用Java实现的解决方案。 1、如何在给定数组中找到重复的元素?         使用HashSet是一个常见的解决方法。 2、链表反转         反转链表是最常见的数据结构问题之一。以下是用Java实现的一个例子。 3、二叉树的深度     

    2024年04月12日
    浏览(37)
  • 【Java系列】MyBatis-Plus常见面试题

      MyBatis-Plus是MyBatis框架的一个扩展库,它提供了一系列方便的API和工具,可以简化常见的数据库操作。MyBatis-Plus的优点包括: 提高开发效率:MyBatis-Plus提供了代码生成、分页、查询构建等功能,可以帮助开发人员快速开发数据库相关的功能。 简化操作:MyBatis-Plus提供了一些

    2024年02月08日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包