做 Java 开发,没有人敢小觑 Spring Boot 的重要性,当初进来面试,无论多小的公司 or 我的项目,都要跟你扯一扯 Spring Boot,扯一扯微服务,不会?没用过?Sorry ,咱们不适合!

明天小编就给大家整顿了 15 道高频 Spring Boot 面试题,心愿可能帮忙到刚刚走出校门的小伙伴以及筹备寻找新的工作机会的小伙伴。当然也整顿了更多Java学习材料+面试真题,须要的自行支付~

1.什么是 Spring Boot ?

传统的 SSM/SSH 框架组合配置繁琐臃肿,不同我的项目有很多反复、模板化的配置,重大升高了 Java 工程师的开发效率,而 Spring Boot 能够轻松创立基于 Spring 的、能够独立运行的、生产级的应用程序。通过对 Spring 家族和一些第三方库提供一系列自动化配置的 Starter,来使得开发疾速搭建一个基于 Spring 的应用程序。

Spring Boot 让日益臃肿的 Java 代码又重回简洁。在配合 Spring Cloud 应用时,还能够施展更大的威力。

2.Spring Boot 有哪些特点 ?

Spring Boot 次要有如下特点:

  • 为 Spring 开发提供一个更快、更宽泛的入门体验。
  • 开箱即用,远离繁琐的配置。
  • 提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、平安治理、运行数据监控、运行状况检查和内部化配置等。
  • 相对没有代码生成,也不须要XML配置。

3.Spring Boot 的配置文件有哪几种格局?它们有什么区别?

.properties 和 .yml,它们的区别次要是书写格局不同。

1).properties

app.user.name = javastack

2).yml

app:  user:    name: javastack

另外,.yml 格局不反对 @PropertySource 注解导入配置。

4.spring-boot-starter-parent 有什么用 ?

咱们都晓得,新创建一个 Spring Boot 我的项目,默认都是有 parent 的,这个 parent 就是 spring-boot-starter-parent ,spring-boot-starter-parent 次要有如下作用:

  • 定义了 Java 编译版本为 1.8 。
  • 应用 UTF-8 格局编码。
  • 继承自 spring-boot-dependencies,这个里边定义了依赖的版本,也正是因为继承了这个依赖,所以咱们在写依赖时才不须要写版本号。
  • 执行打包操作的配置。
  • 自动化的资源过滤。
  • 自动化的插件配置。

针对 application.properties 和 application.yml 的资源过滤,包含通过 profile 定义的不同环境的配置文件,例如 application-dev.properties 和 application-dev.yml。

5.比拟一下 Spring Security 和 Shiro 各自的优缺点 ?

因为 Spring Boot 官网提供了大量的十分不便的开箱即用的 Starter ,包含 Spring Security 的 Starter ,使得在 Spring Boot 中应用 Spring Security 变得更加容易,甚至只须要增加一个依赖就能够爱护所有的接口,所以,如果是 Spring Boot 我的项目,个别抉择 Spring Security 。当然这只是一个倡议的组合,单纯从技术上来说,无论怎么组合,都是没有问题的。Shiro 和 Spring Security 相比,次要有如下一些特点:

  • Spring Security 是一个重量级的平安治理框架;Shiro 则是一个轻量级的平安治理框架
  • Spring Security 概念简单,配置繁琐;Shiro 概念简略、配置简略
  • Spring Security 功能强大;Shiro 性能简略

6.Spring Boot 的外围注解是哪个?它次要由哪几个注解组成的?

启动类下面的注解是@SpringBootApplication,它也是 Spring Boot 的外围注解,次要组合蕴含了以下 3 个注解:

  • @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的性能。
  • @EnableAutoConfiguration:关上主动配置的性能,也能够敞开某个主动配置的选项,如敞开数据源主动配置性能-@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
  • @ComponentScan:Spring组件扫描。

7.spring boot 外围配置文件是什么?bootstrap.properties 和 application.properties 有何区别 ?

单纯做 Spring Boot 开发,可能不太容易遇到 bootstrap.properties 配置文件,然而在联合 Spring Cloud 时,这个配置就会常常遇到了,特地是在须要加载一些近程配置文件的时侯。

spring boot 外围的两个配置文件:

  • bootstrap (. yml 或者 . properties):boostrap 由父 ApplicationContext 加载的,比 applicaton 优先加载,配置在应用程序上下文的疏导阶段失效。一般来说咱们在 Spring Cloud Config 或者 Nacos(nacos是阿里巴巴开源的一款集服务发现+配置核心组件) 中会用到它。且 boostrap 外面的属性不能被笼罩;
  • application (. yml 或者 . properties): 由ApplicatonContext 加载,用于 spring boot 我的项目的自动化配置。

    8.什么是 Spring Profiles?

    Spring Profiles 容许用户依据配置文件(dev,test,prod 等)来注册 bean。因而,当应用程序在开发中运行时,只有某些 bean 能够加载,而在 PRODUCTION中,某些其余 bean 能够加载。假如咱们的要求是 Swagger (OpenApi的前身,是一个书写API文档的标准)文档仅实用于 QA 环境,并且禁用所有其余文档。这能够应用配置文件来实现。Spring Boot 使得应用配置文件非常简单。

9.Spring Boot 中的监视器是什么

因为SpringBoot简略配置即可应用,对底层封装的比拟严实,所以发现错误不太好找bug。所以咱们须要监控我的项目的某些状态信息来不便找bug。Spring Boot提供您的我的项目监控组件是Spring Boot Actuator。

  • Endpoints:监控利用的入口,Spring Boot内置很多端点,通过@EndPoints()注解即可自定义端点
  • 监控形式:HTTP 或者 JMX
  • 拜访门路:例如:"/actuator/health"
  • 注意事项:按需配置裸露的端点(一共20多个端点)、须要通过Spring Security对所有端点进行权限管制,只有管理员能够拜访,否则任何人都能够拜访底层的代码,很不平安。

比方上面定义了一个id为 "database"的端点,用户只有用 我的项目名+/actuator/database即可拜访这个我的项目的数据库连贯转态信息

10.什么是 Spring Data ?

Spring Data 是 Spring 的一个子项目。用于简化数据库拜访,反对NoSQL 和 关系数据存储。其次要指标是使数据库的拜访变得方便快捷。Spring Data 具备如下特点:

SpringData 我的项目反对 NoSQL 存储:

  • MongoDB (文档数据库)
  • Neo4j(图形数据库)
  • Redis(键/值存储)
  • Hbase(列族数据库)
  • Elasticsearch

SpringData 我的项目所反对的关系数据存储技术:

  • JDBC
  • JPA(Java Persistence API的简称,中文名Java长久层API)

Spring Data Jpa 致力于缩小数据拜访层 (DAO) 的开发量. 开发者惟一要做的,就是申明长久层的接口,其余都交给 Spring Data JPA 来帮你实现!Spring Data JPA 通过标准办法的名字,依据符合规范的名字来确定办法须要实现什么样的逻辑。

11.什么是 Apache Kafka?

Apache Kafka 是一个分布式公布 - 订阅音讯零碎。它是一个可扩大的,容错的公布 - 订阅音讯零碎,它使咱们可能构建分布式应用程序。这是一个 Apache 顶级我的项目。Kafka 适宜离线和在线音讯生产。

12.Spring Boot 打成的 jar 和一般的 jar 有什么区别 ?

Spring Boot 我的项目最终打包成的 jar 是可执行 jar ,这种 jar 能够间接通过 java-jar xxx.jar 命令来运行,这种 jar 不能够作为一般的 jar 被其余我的项目依赖,即便依赖了也无奈应用其中的类。

Spring Boot 的 jar 无奈被其余我的项目依赖,次要还是他和一般 jar 的构造不同。一般的 jar 包,解压后间接就是包名,包里就是咱们的代码,而 Spring Boot 打包成的可执行 jar 解压后,在 BOOT-INFclasses 目录下才是咱们的代码,因而无奈被间接援用。如果非要援用,能够在 pom.xml 文件中减少配置,将 Spring Boot 我的项目打包成两个 jar ,一个可执行,一个可援用。

13.bootstrap.properties 和 application.properties 有何区别 ?

单纯做 Spring Boot 开发,可能不太容易遇到 bootstrap.properties 配置文件,然而在联合 Spring Cloud 时,这个配置就会常常遇到了,特地是在须要加载一些近程配置文件的时侯。

bootstrap.properties 在 application.properties 之前加载,配置在应用程序上下文的疏导阶段失效。一般来说咱们在 Spring Cloud Config 或者 Nacos 中会用到它。bootstrap.properties 被 Spring ApplicationContext 的父类加载,这个类先于加载 application.properties 的 ApplicatonContext 启动。

当然,后面叙述中的 properties 也能够批改为 yaml 。

14..Spring Boot 如何实现热部署 ?

Spring Boot 实现热部署其实很容易,引入 devtools 依赖即可,这样当编译文件发生变化时,Spring Boot 就会主动重启。在 Eclipse 中,用户按下保留按键,就会主动编译进而重启 Spring Boot,IDEA 中因为是主动保留的,主动保留时并未编译,所以须要开发者按下 Ctrl+F9 进行编译,编译实现后,我的项目就主动重启了。

如果仅仅只是页面模板发生变化,Java 类并未发生变化,此时能够不必重启 Spring Boot,应用 LiveReload 插件就能够轻松实现热部署。

15.Spring Boot 中如何实现定时工作 ?

定时工作也是一个常见的需要,Spring Boot 中对于定时工作的反对次要还是来自 Spring 框架。

在 Spring Boot 中应用定时工作次要有两种不同的形式,一个就是应用 Spring 中的 @Scheduled 注解,另一个则是应用第三方框架 Quartz。

应用 Spring 中的 @Scheduled 的形式次要通过 @Scheduled 注解来实现。

应用 Quartz ,则依照 Quartz 的形式,定义 Job 和 Trigger 即可。