Java Spring Boot面试题解析

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文件;

系统环境变量;

命令行参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/707514.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter开发进阶之Flutter Web加载速度优化

Flutter开发进阶之Flutter Web加载速度优化 通常使用Flutter开发的web加载速度会比较慢,原因是Flutter web需要加载的资源处于国外,以下是据此所做的相应优化。 一、FlutterWeb打包 flutter build web --web-renderer canvaskit使用新命令打包 flutter build web --web-…

matlab批量替换txt文本文件的特定行的内容

1.下图所示&#xff0c;我想要替换第14行。 2.运行代码后&#xff0c;第14行已经更改为需要的内容。 clc,clear; %%----------------------需要更改的地方------------------------------------ % 设置要操作的文本文件路径&#xff0c;替换为你自己的文件路径 path D:\paper_…

【算法与数据结构】复杂度深度解析(超详解)

文章目录 &#x1f4dd;算法效率&#x1f320; 算法的复杂度&#x1f320; 时间复杂度的概念&#x1f309;大O的渐进表示法。 &#x1f320;常见复杂度&#x1f320;常见时间复杂度计算举例&#x1f309;常数阶O(1)&#x1f309;对数阶 O(logN)&#x1f309;线性阶 O(N)&#x…

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

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

揭示预处理中的秘密!(二)

目录 ​编辑 1. #运算符 2. ##运算符 3. 命名约定 4. #undef 5. 命令行定义 6. 条件编译 7. 头文件的被包含的方式 8.嵌套文件包含 9. 其他预处理指令 10. 完结散花 悟已往之不谏&#xff0c;知来者犹可追 …

微信小程序引入Vant插件

Vant官网&#xff1a;Vant Weapp - 轻量、可靠的小程序 UI 组件库 先查看官网的版本 新建一个package.json页面&#xff0c;代码写上&#xff1a;&#xff08;我先执行的npm安装没出package页面&#xff0c;所以先自己创建了一个才正常&#xff09; {"dependencies"…

【软件测试】--功能测试4-html介绍

1.1 前端三大核心 html:超文本标记语言&#xff0c;由一套标记标签组成 标签&#xff1a; 单标签&#xff1a;<标签名 /> 双标签:<标签名></标签名> 属性&#xff1a;描述某一特征 示例:<a 属性名"属性值"> 1.2 html骨架标签 <!DOC…

web组态软件

1、强大的画面显示web组态功能 2、良好的开放性。 开放性是指组态软件能与多种通信协议互联&#xff0c;支持多种硬件设备&#xff0c;向上能与管理层通信&#xff0c;实现上位机和下位机的双向通信。 3、丰富的功能模块。 web组态提供丰富的控制功能库&#xff0c;满足用户的测…

【数据分享】2019-2023年我国地级市逐月新房房价数据(Excel/Shp格式)

房价是一个城市发展程度的重要体现&#xff0c;一个城市的房价越高通常代表这个城市越发达&#xff0c;对于人口的吸引力越大&#xff01;因此&#xff0c;房价数据是我们在各项城市研究中都非常常用的数据&#xff01;之前我们分享过2011-2023年我国地级市逐月二手房房价数据&…

【pytorch】tensor.detach()和tensor.data的区别

文章目录 序言相同点不同点测试实例应用 序言 .detach()和.data都可以用来分离tensor数据&#xff0c;下面进行比较pytorch0.4及之后的版本&#xff0c;.data仍保留&#xff0c;但建议使用.detach() 相同点 x.detach()和x.data返回和x相同数据的tensor&#xff0c;这个新的t…

rpmrebuild 重新制作 rpm

重新制作 rpm 有两种方式 方式一&#xff1a; 1、rpm2cpio xxx.rpm |cpio -idv 2、修改相关文件 3、rpmrebuild -s my.spec xxx.rpm 4、rpmbuild -ba xxx.spec 方式二&#xff1a; 1、rpmrebuild -m /bin/bash -np rpm/xxx.rpm 2、此时我们得到一个交互shell&#xff0c; 3、比…

算法打卡day5|哈希表篇01|Leetcode 242.有效的字母异位词 、19.删除链表的倒数第N个节点、202. 快乐数、1. 两数之和

哈希表基础知识 哈希表 哈希表关键码就是数组的索引下标&#xff0c;然后通过下标直接访问数组中的元素&#xff1b;数组就是哈希表的一种 一般哈希表都是用来快速判断一个元素是否出现集合里。例如要查询一个名字是否在班级里&#xff1a; 要枚举的话时间复杂度是O(n)&…

docker发布dubbo服务 外部程序访问不到问题处理

一、问题简述 程序通过docker向zookeeper注册服务时&#xff0c;会将容器地址(内网地址)作为服务的通信地址。当我们的程序都在容器内相互通信时&#xff0c;可以凭借容器地址相互通信。但是外部程序想要直接通过宿主机取访问服务时&#xff0c;从zk上取到providers的地址&…

【数据结构】从链表到LinkedList类

&#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;个人主页&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388; &#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;数据结构专栏&#x1f388;&#x1f388;&#x1f388;&…

标准库中的String类 String(C++)【2】

文章目录 String常用的接口&#xff08;黑框标记的是常用接口&#xff09;string类对象的反向遍历操作第一种第二种 容量string的扩容机制 String常用的接口&#xff08;黑框标记的是常用接口&#xff09; string类对象的反向遍历操作 第一种 通过下表进行遍历 void TestSt…

计算机网络期末复习笔记

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

springboot226经方药食两用服务平台

经方药食两用服务平台的设计与实现 摘要 近年来&#xff0c;信息化管理行业的不断兴起&#xff0c;使得人们的日常生活越来越离不开计算机和互联网技术。首先&#xff0c;根据收集到的用户需求分析&#xff0c;对设计系统有一个初步的认识与了解&#xff0c;确定经方药食两用…

Redis、Memcache、MongoDB三者区别?

使用Redis、Memcache和MongoDB这些工具或数据库取决于具体的需求和应用场景。每种技术都有自己的优势和适用范围。 Redis&#xff1a; 高性能的内存存储&#xff1a;Redis是一个基于内存的数据存储系统&#xff0c;因此读取和写入速度非常快。 丰富的数据结构支持&#xff1a…

RK3568平台 RTC时间框架

一.RTC时间框架概述 RTC&#xff08;Real Time Clock&#xff09;是一种用于计时的模块&#xff0c;可以是再soc内部&#xff0c;也可以是外部模块。对于soc内部的RTC&#xff0c;只需要读取寄存器即可&#xff0c;对于外部模块的RTC&#xff0c;一般需要使用到I2C接口进行读取…

nebula容器方式安装:docker 安装nebula到windows

感谢阅读 基础环境安装安装docker下载nebula 安装数据库命令行安装查询network nebula-docker-compose_nebula-net并初始化查询安装初始使用root&#xff08;God用户类似LINUX的root&#xff09; 关闭服务 安装UI 基础环境安装 安装docker 点我下载docker 下载nebula 数据…