SpringBoot常见⾯试题及答案
⼀、为什么是 spring boot?
Spring Boot 是 Spring 开源组织下的⼦项⽬,是 Spring 组件⼀站式解决⽅案,主要是简化了使⽤ Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上⼿,简⽽⾔之:
SpringBoot来简化Spring应⽤开发,约定⼤于配置,去繁化简
SpringBoot来简化Spring应⽤开发,约定⼤于配置,去繁化简
SpringBoot来简化Spring应⽤开发,约定⼤于配置,去繁化简
⼆、为什么要⽤ spring boot /优缺点?
优点:
1、搭建项⽬快,⼏秒钟就可以搭建完成;
2、让测试变的简单:
内置了JUnit、Spring Boot Test等多种测试框架,⽅便测试;
3、Spring Boot让配置变的简单:
Spring Boot的核⼼理念:约定⼤约配置,如:pring-boot-starter-web 启动器⾃动依赖其他组件,简少了 maven 的配置
4、独⽴运⾏:
Spring Boot ⽽且内嵌了各种 servlet 容器,Tomcat、Jetty 等,现在不再需要打成war 包部署到容器中,Spring Boot 只要打成⼀个可执⾏的 jar 包就能独⽴运⾏,所有的依赖包都在⼀个 jar 包内。
5、⽅便监控:
使⽤Spring Boot Actuator组件提供了应⽤的系统监控,可以查看应⽤配置的详细信息;
6.⾃动配置:
Spring Boot 能根据当前类路径下的类、jar 包来⾃动配置 bean,如添加⼀个 spring;boot-starter-web 启动器就能拥有 web 的功能,⽆需其他配置。
7.⽆代码⽣成和XML配置
Spring Boot 配置过程中⽆代码⽣成,也⽆需 XML 配置⽂件就能完成所有配置⼯作,这⼀切都是借助于条件注解完成的
缺点:
Spring Boot 虽然上⼿很容易,但如果你不了解其核⼼技术及流程,所以⼀旦遇到问题就很棘⼿,⽽且现在的解决⽅案也不是很多,需要⼀个完善的过程。
三、spring boot 核⼼配置⽂件是什么?
1.Spring Boot 的核⼼配置⽂件是 application 和 bootstrap 配置⽂件。
application 配置⽂件这个容易理解,主要⽤于 Spring Boot 项⽬的⾃动化配置。
2.bootstrap 配置⽂件有以下⼏个应⽤场景。
●使⽤ Spring Cloud Config 配置中⼼时,这时需要在 bootstrap 配置⽂件中添加连接到配置中⼼的配置属性来加载外部配置中⼼的配置信息;
●⼀些固定的不能被覆盖的属性;
●⼀些加密/解密的场景;
四、spring boot 配置⽂件有哪⼏种类型?它们有什么区别?
有.properties 和 .yml,它们的区别主要是书写格式不同。
1、.properties
app.user.name = javastack
2、.yml
app:
user:
name: javastack
另外,.yml 格式不⽀持 @PropertySource 注解导⼊配置。
五、spring boot 有哪些⽅式可以实现热部署?
主要有两种⽅式:
● Spring Loaded
● Spring-boot-devtools
六、springboot容器启动流程
七、SpringBoot、Spring MVC和Spring有什么区别
Spring
Spring最重要的特征是依赖注⼊。所有Spring Modules不是依赖注⼊就是IOC控制反转。
当我们恰当的使⽤DI或者是IOC的时候,可以开发松耦合应⽤。
Spring MVC
Spring MVC提供了⼀种分离式的⽅法来开发Web应⽤。通过运⽤像DispatcherServelet,MoudlAndView 和 ViewResolver 等⼀些简单的概念,开发 Web 应⽤将会变的⾮常简单。
SpringBoot
Spring和Spring MVC的问题在于需要配置⼤量的参数。
SpringBoot通过⼀个⾃动配置和启动的项来解决这个问题
⼋、什么是Spring Boot Starter
1、Starters可以理解为启动器,它包含了⼀系列可以集成到应⽤⾥⾯的依赖包,你可以⼀站式集成 Spring 及其他技术,⽽不需要到处⽰例代码和依赖包。如你想使⽤ Spring JPA 访问数据库,只要加⼊ spring-boot-starter-data-jpa 启动器依赖就能使⽤了。
Starters包含了许多项⽬中需要⽤到的依赖,它们能快速持续的运⾏,都是⼀系列得到⽀持的管理传递性依赖。
2、Starters命名
Spring Boot官⽅的启动器都是以spring-boot-starter-命名的,代表了⼀个特定的应⽤类型。
为什么使用bootstrap?第三⽅的启动器不能以spring-boot开头命名,它们都被Spring Boot官⽅保留。⼀般⼀个第三⽅的应该这样命名,像mybatis的mybatis-spring-boot-starter。
九、为什么需要spring-boot-maven-plugin
spring-boot-maven-plugin提供了⼀些像jar⼀样打包或者运⾏应⽤程序的命令。
spring-boot:run 运⾏SpringBoot应⽤程序;
spring-boot:repackage 重新打包你的jar包或者是war包使其可执⾏
spring-boot:start和spring-boot:stop管理Spring Boot应⽤程序的⽣命周期
spring-boot:build-info⽣成执⾏器可以使⽤的构造信息
⼗、什么是YAML
YAML是⼀种⼈类可读的数据序列化语⾔。它通常⽤于配置⽂件。
与属性⽂件相⽐,如果我们想要在配置⽂件中添加复杂的属性,YAML⽂件就更加结构化,⽽且更少混淆。可以看出YAML具有分层配置数据。
⼗⼀、SpringBoot⾃动配置的原理
在Spring程序main⽅法中,添加@SpringBootApplication或者@EnableAutoConfiguration会⾃动去maven中读取每个starter中的spring.gfactories⽂件,改⽂件⾥配置了所有需要被创建的Spring容器中
的bean
⼗⼆、SpringBoot 打成jar和普通的jar有什么区别?
spring Boot 项⽬最终打包成的 jar 是可执⾏ jar ,这种 jar 可以直接通过java -jar xxx.jar命令来运⾏,这种 jar 不可以作为普通的 jar 被其他项⽬依赖,即使依赖了也⽆法使⽤其中的类。
Spring Boot 的 jar ⽆法被其他项⽬依赖,主要还是他和普通 jar 的结构不同。普通的 jar 包,解压后直接就是包名,包⾥就是我们的代码,⽽ Spring Boot 打包成的可执⾏ jar 解压后,在 \BOOT-INF\classes⽬录下才是我们的代码,因此⽆法被直接引⽤。如果⾮要引⽤,可以在 l ⽂件中增加配置,将 Spring Boot 项⽬打包成两个 jar ,⼀个可执⾏,⼀个可引⽤。
⼗三、运⾏SpringBoot有⼏种⽅式?
1、打包⽤命令或者放到容器中运⾏
mavn clean package -st.skip=true
2、⽤Maven或Gradle插件运⾏
<--添加依赖-->
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
</plugin>
3、直接执⾏main⽅法运⾏
⼗四、什么是Spring Data
Spring Data 是 Spring 的⼀个⼦项⽬。⽤于简化数据库访问,⽀持NoSQL 和 关系数据存储。其主要⽬标是使数据库的访问变得⽅便快捷。Spring Data 具有如下特点:
1、SpringData 项⽬⽀持 NoSQL 存储:
MongoDB (⽂档数据库)
Neo4j(图形数据库)
Redis(键/值存储)
Hbase(列族数据库)
2、SpringData 项⽬所⽀持的关系数据存储技术:
JDBC
JPA
Spring Data Jpa 致⼒于减少数据访问层 (DAO) 的开发量. 开发者唯⼀要做的,就是声明持久层的接⼝,其他都交给 Spring Data JPA 来帮你完成!Spring Data JPA 通过规范⽅法的名字,根据符合规范的名字来确定⽅法需要实现什么样的逻辑。
⼗五、什么是FreeMarker模板?
FreeMarker 是⼀个基于 Java 的模板引擎,最初专注于使⽤ MVC 软件架构进⾏动态⽹页⽣成。使⽤ Freemarker 的主要优点是表⽰层和业务层的完全分离。程序员可以处理应⽤程序代码,⽽设计⼈员可以处理 html 页⾯设计。最后使⽤freemarker 可以将这些结合起来,给出最终的输出页⾯。
⼗六、如何实现Spring Boot应⽤程序的安全性?
为了实现Spring Boot的安全性,使⽤spring-boot-starter-security依赖项,并且必须添加安全配置。它只需要很少代码。配置类将必须扩展WebSecurityConfigurerAdapter并覆盖其⽅法。
⼗七、如何使⽤Spring Boot实现异常处理
Spring提供了⼀种使⽤ControllerAdvice处理异常的⾮常有⽤的⽅法。通过实现⼀个ControlerAdvice类,来处理控制类抛出的所有异常。
⼗⼋、Spring Boot的核⼼注解是哪些?他主由哪⼏个注解组成的?
启动类上⾯的注解是@SpringBootApplication,它也是 Spring Boot 的核⼼注解,主要组合包含了以下 3 个注解:
1、@SpringBootConfiguration:组合了 @Configuration 注解,实现配置⽂件的功能。
2、@EnableAutoConfiguration:打开⾃动配置的功能,也可以关闭某个⾃动配置的选项,如关闭数据源⾃动配置功能:
3、@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring组件扫描。
⼗九、开启 Spring Boot 特性有哪⼏种⽅式
1、继承spring-boot-starter-parent项⽬
2、导⼊spring-boot-dependencies项⽬依赖
⼆⼗、Spring Boot 如何定义多套不同环境配置
applcation.properties
application-dev.properties
application-test.properties
application-prod.properties
⼆⼗⼀、你如何理解 Spring Boot 配置加载顺序?
1.项⽬内配置⽂件
在 Spring Boot ⾥⾯,可以使⽤以下⼏种⽅式来加载配置。
spring boot 启动会扫描以下位置的application.properties或者l⽂件作为Spring boot的默认配置⽂件
–file:./config/
–file:./
–classpath:/config/
–classpath:/
以上是按照优先级从⾼到低的顺序,所有位置的⽂件都会被加载,⾼优先级配置内容会覆盖低优先级配置内容。
SpringBoot会从这四个位置全部加载主配置⽂件,如果⾼优先级中配置⽂件属性与低优先级配置⽂件不冲突的属性,则会共同存在—互补配置。
我们也可以通过配置fig.location来改变默认配置。
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar
--fig.location=D:/application.properties
项⽬打包好以后,我们可以使⽤命令⾏参数的形式,启动项⽬的时候来指定配置⽂件的新位置。
指定配置⽂件和默认加载的这些配置⽂件共同起作⽤形成互补配置。
2.外部配置加载顺序
SpringBoot也可以从以下位置加载配置:优先级从⾼到低;⾼优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置。
1.命令⾏参数
所有的配置都可以在命令⾏上进⾏指定;
多个配置⽤空格分开; –配置项=值
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar
--server.port=8087 --t-path=/abc
2.来⾃java:comp/env的JNDI属性
3.Java系统属性(Properties())
4.操作系统环境变量
5.RandomValuePropertySource配置的random.*属性值
6.jar包外部的application-{profile}.properties或l(带spring.profile)配置⽂件
7.jar包内部的application-{profile}.properties或l(带spring.profile)配置⽂件
8.jar包外部的application.properties或l(不带spring.profile)配置⽂件
9.jar包内部的application.properties或l(不带spring.profile)配置⽂件
由jar包外向jar包内进⾏寻,优先加载待profile的,再加载不带profile的。
10.@Configuration注解类上的@PropertySource
11.通过SpringApplication.setDefaultProperties指定的默认属性
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论