Java Spring Boot面试题解析

news/2024/4/17 7:59:49

1. 什么是 Spring Boot?【重点】

多年来,随着新功能的增加,Spring变得越来越复杂;一个Spring项目,我们必须做添加构建路径或添加Maven依赖关系,配置应用程序服务器,添加Spring配置等工作;因此,创建一个Spring项目需要很多配置,过程复杂。

Spring Boot是解决这个问题的方法,建立在现有Spring框架之上,避免了之前我们必须做的所有模板代码和配置;Spring Boot帮助我们以最少的工作量,更加健壮地使用现有的Spring功能。

2. Spring Boot有哪些优点?【重点】

独立运行:

Spring Boot而且内嵌了各种Servlet容器(Tomcat、Jetty)等,现在不再需要打成WAR包部署到容器中,Spring Boot只要打成一个可执行的JAR包就能独立运行,所有的依赖包都在一个JAR包内。

简化配置:

spring-boot-starter-web启动器自动依赖其他组件,简少了Maven的配置。

自动配置:

Spring Boot能根据当前类路径下的类、JAR包来自动配置Bean,如添加一个spring-boot-starter-web启动器就能拥有Web的功能,无需其他配置。

无代码生成和XML配置:

Spring Boot配置过程中无代码生成,也无需XML配置文件就能完成所有配置工作,这一切都是借助于条件注解完成的,这也是Spring4.x的核心功能之一。

应用监控:

Spring Boot提供一系列端点可以监控服务及应用,做健康检测。

3. Spring Boot Starter作用是什么?有哪些常见的Starter?【了解】

当一个项目变得相当复杂,管理依赖会成为一个噩梦,因为当中涉及太多artifacts了;这时候Spring Boot Starter就派上用处了,每一个Stater都在扮演着提供我们所需的Spring特性的一站式角色,其所需的依赖以一致的方式注入并且被管理。

常用的Starter:

spring-boot-starter:SpringBoot核心Starter,包括自动化配置支持,日志以及YAML等;

spring-boot-starter-aop:使用Spring AOP和AspectJ相关切面编程的Starter;

spring-boot-starter-data-redis:使用Spring data redis的Starter;

spring-boot-starter-jdbc:使用JDBC连接池的Starter;

spring-boot-starter-security:使用Spring安全的Starter;

spring-boot-starter-test:使用测试相关的Starter;

spring-boot-starter-web:构建RESTFUL、Spring MVC的Web应用程序的Starter。

4. Spring Boot、Spring MVC和Spring有什么区别?【重点】

分别描述各自的特征:

Spring框架就像一个家族,有众多衍生产品例如Boot、Security、JPA等等;但他们的基础都是Spring 的IOC和AOP,IOC提供了依赖注入的容器,AOP解决了面向切面编程,然后在此两者的基础上实现了其他延伸产品的高级功能。

Spring MVC提供了一种轻度耦合的方式来开发Web应用;它是Spring的一个模块,是一个Web框架;通过DispatcherServlet、ModelAndView和View Resolver,开发Web应用变得很容易;解决的问题领域是网站应用程序或者服务开发等。

Spring Boot实现了Auto-configuration自动配置,降低了项目搭建的复杂度。它主要是为了解决使用Spring框架需要进行大量的配置太麻烦的问题,所以它并不是用来替代Spring的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具;同时它集成了大量常用的第三方库配置(例如Jackson, JDBC, Mongo, Redis, Mail等等),Spring Boot应用中这些第三方库几乎可以零配置的开箱即用。

所以,用最简练的语言概括就是:

Spring是一个“引擎”;

Spring MVC是基于Spring的一个MVC框架;

Spring Boot是基于Spring的一套快速开发整合包。

5. Spring Boot的核心配置文件有哪几个?它们的区别是什么?【重点】

Spring Boot的核心配置文件是application和bootstrap配置文件。

application配置文件这个容易理解,主要用于Spring Boot项目的自动化配置。

bootstrap配置文件有以下几个应用场景。

使用 Spring Cloud Config配置中心时,这时需要在bootstrap配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;

一些固定的不能被覆盖的属性;

一些加密/解密的场景。

6. Spring Boot的配置文件有哪几种格式?它们有什么区别?【了解】

properties和yml,它们的区别主要是书写格式不同:

properties:

app.user.name = javastack

yml:

app:user :name: javastack

yml格式不支持 @PropertySource 注解;

properties配置文件优先级高于yml配置文件。

7. Spring Boot的核心注解是哪个?它主要由哪几个注解组成的?【重点】

Spring Boot的核心注解是@SpringBootApplication,使用在启动类上,主要组合包含3个注解:

@SpringBootConfiguration:组合了@Configuration注解,实现配置文件的功能;

@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,

如关闭数据源自动配置功能:

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })

@ComponentScan:Spring组件扫描。

8. 运行Spring Boot应用程序有哪几种方式?【重点】

打成JAR包使用命令运行或者打成War发布到容器中运行;

使用Maven命令运行Spring Boot项目:mvn spring-boot:run。

直接执行应用程序的main方法运行。

9. Spring Boot如何实现热部署?【掌握】

引用Devtools依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>
自定义配置热部署:
热部署开关,false即不启用热部署
spring.devtools.restart.enabled=true
指定热部署的目录
spring.devtools.restart.additional-paths:=src/main/java
指定目录不更新
spring.devtools.restart.exclude= test/**
如果是idea,需要更改以下两个地方配置:
设置自动编译:
File > Settings > Compiler-Build Project automatically
注册项目运行时允许自动编译:
ctrl + shift + alt + / > Registry > 勾选Compiler autoMake allow when app running
生产环境Devtools将被禁用;
打包应用默认不会包含Devtools,除非你禁用Spring Boot Maven插件的Exclude Devtools属性;
Thymeleaf无需配置spring.thymeleaf.cache:false,Devtools默认会自动设置。

10. Spring Boot支持哪些日志框架?默认的日志框架是哪个?【了解】

Spring Boot支持Java Util Logging,Log4j2,Lockback作为日志框架,Spring Boot使用Logback作为默认日志框架。

Spring-boot-starter启动器包含Spring-boot-starter-logging启动器并集成了slf4j日志抽象及Logback日志框架。

11. Spring Boot如何定义多套不同环境配置?【重点】

Spring Boot可以使用多profile方式实现定义多套不同环境配置文件。
applcation.properties:默认配置文件,此文件需要指定使用哪一个profile;
application-dev.properties:开发环境配置文件:
application-test.properties:测试环境配置文件;
application-prod.properties:生产环境配置文件。
如果使用YAML格式,可以使用一个配置文件来实现:
spring:
profiles: 
    active: prod
---
spring: 
profiles: prod
server: 
port: 8080  
---
spring: 
profiles: test  
server: 
port: 8081
使用Java代码指定profile:
@Configuration @Profile("prod")
public class ProductionConfiguration {}
运行时指定Profile:
main方法启动方式:
--spring.profiles.active=prod
插件启动方式:
mvn spring-boot:run -Drun.profiles=prod
jar运行方式:
java -jar xx.jar --spring.profiles.active=prod
启动类中指定profile,添加如下方法:
public void setAdditionalProfiles(String... profiles) {
    this.additionalProfiles = new LinkedHashSet<String>(Arrays.asList(profiles));
}

12. Spring Boot中的监视器是什么?【了解】

Spring Boot中的监视器是Spring Boot Actuator,是Spring框架中的重要功能之一;

Spring Boot Actuator可帮助您访问生产环境中正在运行的应用程序的当前状态;

Spring Boot Actuator可以帮助你监控系统数据的框架,可以查看应用配置的详细信息,如:应用程序的健康信息;应用程序基本信息;应用程序的HTTP Request跟踪信息;应用程序的Metrics信息;应用程序的@RequestMapping的路径信息;应用程序的各种配置信息;应用程序的请求的次数、时间、等各种信息。

13. Spring Boot自动配置的原理是什么?【重点】

Spring Boot启动的时候通过@EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中所有的自动配置类,并对其进行加载;

这些自动配置类的类名都是以AutoConfiguration结尾来命名的,它实际上就是一个Spring容器配置类,它们都有一个@EnableConfigurationPerperties的注解,通过这个注解启动以Properties为后缀的类去加载全局配置中的属性;

以Properties为后缀的类通过@ConfigurationProperties注解将全局配置文件中的属性与自己的属性进行绑定。

14. Spring Boot配置加载顺序?【重点】

properties文件;

YAML文件;

系统环境变量;

命令行参数。


https://www.xjx100.cn/news/3293511.html

相关文章

C++多线程学习06

参考 参考资料:恋恋风辰官方博客 测试异步执行std::async #include <iostream> #include <future> #include <chrono> #include <string>// 模拟一个从数据库查询的操作 std::string fetchDataFromDB(std::string query) {// 模拟一个耗时操作std::…

高防服务器托管应注意什么

选择高防服务器托管主要考虑的因素&#xff1a;1.服务商的服务器大小。2.服务器的防御值大小。3.服务器机房的位置以及机房的资质。 具体内容如下&#xff1a; 1&#xff0e;服务器大小是按照U来定的&#xff0c;U是一种表示服务器外部尺寸的单位(计量单位&#xff1a;高度或厚…

ARM系列 -- 虚拟化(三)

为了实现虚拟化&#xff0c;虚拟机需要控制系统资源。但是实际的系统资源是在hypervisor直接控制之下&#xff0c;为了实现隔离和安全等方面的考虑&#xff0c;不可能让虚拟机直接控制这些系统资源。 比如&#xff0c;虚拟机想根据具体情况去做电源管理。一个解决办法就是利用…

Docker部署Portainer图形化管理工具

文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer 公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 前言 Portainer 是一个轻量级的容器管理工具&#xff0c;可以通过 Web 界面对 Docker 容器进行管理和监控。它提供了可…

计算机网络期末复习笔记

一、引言 计算机网络是现代信息技术的核心&#xff0c;涉及计算机、通信、电子等多个领域。在信息时代&#xff0c;计算机网络已经深入到人们生活的各个方面&#xff0c;如社交、购物、教育、科研等。因此&#xff0c;理解和掌握计算机网络的基本概念和原理&#xff0c;对于计…

垂直领域大模型搭建训练指南,ChemLLM论文介绍

ChemLLM论文介绍&#xff0c;垂直领域模型搭建训练指南(ChemLLM: A Chemical Large Language Model) 返回论文目录 1.论文简介 论文是上海人工智能实验室的工作&#xff0c;想训练一个化学垂直领域的对话大模型&#xff0c;然而现有的化学数据往往是结构性的&#xff0c;所以…

STM32_DS18B20_1_芯片简介及初始化配置

DS18B20介绍 DS18B20数字温度计提供9位到12位摄氏度的温度测量&#xff0c;并具有非易失性&#xff0c;用户可编程的上下触发点的报警功能。DS18B20通过1线总线进行通信&#xff0c;根据定义&#xff0c;该总线只需要一条数据线&#xff0c;即可与中央微处理器进行通信…

【Python】进程与线程实现子进(线)程终止,另一个子进(线)程继续执行,不干扰

需求&#xff1a; 1.一个工具有两个子进程&#xff0c;分别是进程A与进程B&#xff0c;现在情况是其中一个进程A出现异常停止&#xff0c;另一个进程B也被终止了&#xff1b;现在想进程A终止的时候&#xff0c;进程B继续运行&#xff0c;如何实现&#xff0c;给出python代码示例…