做Java开发,谁也不敢低估SpringBoot的重要性,现在出去面试,不管公司再小,项目再小,我不得不跟你聊聊SpringBoot,聊聊微服务,是不是?不曾用过?对不起,我们不合适!今天,小编为大家整理了15道SpringBoot面试高频题,希望对刚毕业的小伙伴,以及正在寻找新工作机会的小伙伴有所帮助。当然整理了更多Java学习资料+面试真题,大家可以自己去拿~1.什么是弹簧引导?传统的SSM/SSH框架组合配置繁琐臃肿,针对不同的项目有很多重复的、模板化的配置,严重降低了Java工程师的开发效率,而SpringBoot可以轻松创建基于Spring的、standalone、production-级应用。通过为Spring家族和一些第三方库提供一系列自动配置的Starters,使开发能够快速构建一个基于Spring的应用。SpringBoot让日益臃肿的Java代码回归简单。与SpringCloud配合使用,还能发挥更大的威力。2、SpringBoot有什么特点?SpringBoot主要有以下特点:为Spring开发提供更快速、更广泛的入门体验。开箱即用,远离繁琐的配置。为大型项目提供一系列常用的非业务功能,如:嵌入式服务器、安全管理、运行数据监控、健康检查和外部配置等。完全不生成代码,不需要XML配置。3、SpringBoot的配置文件有哪些格式?有什么不同?.properties和.yml的区别主要在于书写格式。1).propertiesapp.user.name=javastack2).ymlapp:user:name:javastack另外.yml格式不支持@PropertySource注解导入配置。4、spring-boot-starter-parent有什么用?我们都知道,在新建一个SpringBoot项目时,默认有一个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.比较SpringSecurity和Shiro的优缺点?由于SpringBoot官方提供了大量非常方便的开箱即用的Starters,包括SpringSecurityStarter,在SpringBoot中使用SpringSecurity变得更加简单,甚至只需要添加一个依赖来保护所有的接口,所以如果是SpringBoot项目,一般选择SpringSecurity。当然,这只是一个建议的组合。从纯技术的角度来看,不管你怎么组合,都没有问题。与SpringSecurity相比,Shiro有以下特点:SpringSecurity是一个重量级的安全管理框架;Shiro是一个轻量级的安全管理框架;SpringSecurity概念复杂,配置繁琐;Shiro概念简单,配置简单。安全性强大;Shiro简单6.SpringBoot的核心注解是哪个?主要由哪些注解组成?启动类上面的注解是@SpringBootApplication,这也是SpringBoot的核心注解。主要组合包括以下三个注解:@SpringBootConfiguration:组合@Configuration注解实现配置文件的功能。@EnableAutoConfiguration:开启自动配置功能,也可以关闭一个自动配置选项,比如关闭数据源自动配置功能-@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})。@ComponentScan:Spring组件扫描。7、springboot的核心配置文件是什么?bootstrap.properties和application.properties有什么区别?单纯做SpringBoot开发,可能不太容易遇到bootstrap.properties配置文件,但是结合SpringCloud时,会经常遇到这种配置,尤其是需要加载一些远程配置文件的时候。springboot核心的两个配置文件:bootstrap(.yml或.properties):boostrap由父ApplicationContext加载,先于applicationton加载,配置在applicationcontext的bootstrap阶段生效。一般来说,我们会在SpringCloudConfig或者Nacos中使用(nacos是阿里巴巴开源的服务发现+配置中心组件)。并且boostrap中的属性不能被覆盖;application(.yml或.properties):由ApplicatonContext加载,用于springboot项目的自动配置。8.什么是SpringProfiles?SpringProfiles允许用户根据配置文件(dev、test、prod等)注册bean。因此,当应用程序在开发中运行时,只能加载某些bean,而在生产中,可以加载某些其他bean。假设我们的需求是Swagger(OpenApi的前身,一种编写API文档的规范)文档只适用于QA环境,其他文档全部禁用。这可以使用配置文件来完成。SpringBoot使配置文件的使用变得非常简单。9、SpringBoot中的monitor是什么?因为SpringBoot配置简单就可以使用,而且底层封装比较严格,不容易发现bug。所以我们需要监控项目的一些状态信息,方便发现bug。SpringBoot为你的项目提供的监控组件是SpringBootActuator。Endpoints:监控应用程序的入口。SpringBoot有许多内置端点。可以通过@EndPoints()注解自定义端点监控方式:HTTP或JMX访问路径:例如:"/actuator/health"注意:根据需要配置暴露的端点(一共20多个端点),所有端点都需要被SpringSecurity控制,只有管理员可以访问,否则任何人都可以访问底层代码,非常不安全。例如,下面定义了一个id为“database”的端点。用户只需要通过项目名+/actuator/database即可访问本项目的数据库连接转换信息。10.什么是SpringData?SpringData是Spring的一个子项目。用于简化数据库访问,支持NoSQL和关系数据存储。它的主要目标是使数据库访问变得简单快捷。SpringData具有以下特点:SpringData项目支持NoSQL存储:MongoDB(文档数据库)Neo4j(图数据库)Redis(key/value存储)Hbase(列族数据库)ElasticsearchSpringData项目支持的关系数据存储技术:JDBCJPA(JavaPersistenceAPIJavaPersistenceLayerAPI中文缩写)SpringDataJpa致力于减少数据访问层(DAO)的开发量。开发者唯一要做的就是声明持久层的接口,剩下的交给SpringDataJPA帮你完成!SpringDataJPA使用规范的方法名,根据符合规范的名称来判断该方法需要实现什么样的逻辑。11.什么是ApacheKafka?ApacheKafka是一个分布式发布-订阅消息系统。它是一个可扩展的、容错的发布-订阅消息系统,使我们能够构建分布式应用程序。这是一个Apache顶级项目。Kafka适用于离线和在线消息消费。12、SpringBoot制作的jar和普通的jar有什么区别?最后打包到SpringBoot项目中的jar是一个可执行的jar。这种jar可以直接通过java-jarxxx.jar命令运行。这种jar不能作为一个普通的jar,被其他项目依赖,即使被依赖了,里面的类也不能使用。SpringBoot的jar不能被其他项目依赖,主要是它和普通的jar结构不一样。普通的jar包,解压后直接就是包名,package就是我们的代码,而SpringBoot打包的可执行jar解压后,我们的代码在BOOT-INFclasses目录下,所以不能直接引用。如果一定要引用,可以在pom.xml文件中添加配置,将SpringBoot工程打包成两个jar,一个可执行,一个可引用。13.bootstrap.properties和application.properties有什么区别?单纯做SpringBoot开发,可能不太容易遇到bootstrap.properties配置文件,但是结合SpringCloud时,会经常遇到这个配置,尤其是在需要加载一些远程配置文件的时候。bootstrap.properties在application.properties之前加载,配置在应用程序上下文的引导阶段生效。一般来说,我们会在SpringCloudConfig或者Nacos中使用。bootstrap.properties由父SpringApplicationContext加载,它在Application.properties由ApplicationtonContext加载之前启动。当然,上面提到的属性也可以修改为yaml。14、SpringBoot是如何实现热部署的?SpringBoot实现热部署其实很容易,只需要引入devtools依赖,这样当编译文件发生变化时,SpringBoot会自动重启。在Eclipse中,当用户按下保存按钮时,会自动编译,然后重启SpringBoot。由于在IDEA中是自动保存的,自动保存的时候并没有编译,所以开发者需要按Ctrl+F9进行编译。编译完成后,项目自动重启。如果只是页面模板发生变化,而Java类没有发生变化,可以使用LiveReload插件轻松实现热部署,无需重启SpringBoot。15.如何在SpringBoot中实现定时任务?定时任务也是一个常见的需求。SpringBoot对定时任务的支持主要来自于Spring框架。在SpringBoot中使用定时任务主要有两种方式,一种是使用Spring中的@Scheduled注解,另一种是使用第三方框架Quartz。Spring中@Scheduled的使用方式主要是通过@Scheduled注解来实现的。如果使用Quartz,只需要根据Quartz定义Job和Trigger即可。
