面试题==知识点,这里所记录的面试题并不针对于面试者,而是将这些面试题作为技能知识点来看待。不以刷题进大厂为目的,而是以学习为目的。这里的知识点会持续更新,目录也会随时进行调整。
关注公众号:编程火箭车,在文章最下方扫码关注。在【粉丝福利】中点击【面题大全】,其中的Java面试题在线实时更新、查看。
点这里进入JavaWeb编程面试题——导航
面试题持续更新中…
SpringBoot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,使开发者能快速上手。
SpringBoot 主要用来简化使用 Spring 的难度和繁重的 XML 配置,它是 Spring 组件的一站式解决方案,采取了习惯优于配置的方法。通过 .properties
或者 .yml
文件替代了 Spring 繁杂的 XML 配置文件,同时支持 @ImportResource
注解加载 XML 配置。SpringBoot 还提供了嵌入式 HTTP 服务器、命令行接口工具、多种插件等等,使得应用程序的测试和开发简单起来。
SpringBoot 优点非常多,如:独立运行、简化配置、自动配置和无需部署 war 文件等等。
主要有 .properties
和 .yml
格式,它们的区别主要是书写格式不同。另外 .yml
格式不支持 @PropertySource
注解导入配置。
SpringBoot 支持 Java Util Logging
,Log4j2
,Logback
作为日志框架。如果使用 Starters
启动器,SpringBoot 将使用 Logback
作为默认日志框架,推荐的日志框架是 Log4j2
。但是不管是那种日志框架他都支持将配置文件输出到控制台或者文件中。
YAML 是一种可读的数据序列化语言,它通常用于配置文件。与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML 文件就更加结构化,而且更少混淆。可以看出 YAML 具有分层配置数据。
SpringBoot 支持的嵌入式 servlet 容器有:Tomcat
、Jetty
、Undertow
。
可以不需要,内置了 Tomcat/Jetty
等容器。
SpringBoot 配置加载顺序优先级是:properties 文件、YAML 文件、系统环境变量、命令行参数。
可以兼容,使用 @ImportResource
注解导入老 Spring 项目配置文件。
JavaConfig
有助于避免使用 XML,同时避免大量的 Maven 导入和各种版本冲突。Spring JDBC
、Spring ORM
、Spring Data
、Spring Security
等等。Tomcat
和 Jetty
,可以轻松地开发和测试 Web 应用程序。可以在 application.properties
配置文件中指定端口,比如 server.port=8090
这可以使用 DEV 工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式 Tomcat 将重新启动。SpringBoot 有一个开发工具 DevTools 模块,它有助于提高开发人员的生产力。Java 开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。开发人员可以重新加载 SpringBoot 上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。SpringBoot 在发布它的第一个版本时没有这个功能。这是开发人员最需要的功能。
DevTools 模块完全满足开发人员的需求。该模块将在生产环境中被禁用。它还提供 H2 数据库控制台以更好地测试应用程序。
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-devtoolsartifactId>
<optional>trueoptional>
dependency>
Spring 提供了一种使用 ControllerAdvice
处理异常的非常有用的方法。我们通过实现一个 ControlerAdvice
类,来处理控制器类抛出的所有异常。
SpringBoot 是快速开发的 Spring 框架,SpringCloud 是完整的微服务框架,SpringCloud 依赖于 SpringBoot。
thymeleaf
、freemarker
和 jsp
,官方不推荐 jsp
会有限制。
spring-boot-starter-parent
项目spring-boot-dependencies
项目依赖在 SpringBoot 中使用异步调用是很简单的,只需要在方法上使用 @Async
注解即可实现方法的异步调用。
**注意:**需要在启动类加入 @EnableAsync
使异步调用 @Async
注解生效。
由于 SpringBoot 官方提供了大量的非常方便的开箱即用的 Starter,包括 Spring Security 的 Starter,使得在 SpringBoot 中使用 Spring Security 变得更加容易,甚至只需要添加一个依赖就可以保护所有的接口,所以,如果是 SpringBoot 项目,一般选择 Spring Security。当然这只是一个建议的组合,单纯从技术上来说,无论怎么组合,都是没有问题的。Shiro 和 Spring Security 相比,主要有如下一些特点:
SpringBoot 的事务很简单,首先使用注解 @EnableTransactionManagement
开启事务之后,然后在 Service 方法上添加注解 @Transactional
便可。
SpringBoot 项目的启动注解是:@SpringBootApplication
,其实它就是由下面三个注解组成的:
@Configuration
@ComponentScan
@EnableAutoConfiguration
其中 @EnableAutoConfiguration
是实现自动配置的入口,该注解又通过 @Import
注解导入了AutoConfigurationImportSelector
,在该类中加载 META-INF/spring.factories
的配置信息。然后筛选出以 EnableAutoConfiguration
为 key 的数据,加载到 IOC 容器中,实现自动配置功能。
启动类上面的注解是 @SpringBootApplication
,它也是 SpringBoot 的核心注解,主要组合包含了以下3个注解:
@SpringBootConfiguration
:组合了 @Configuration
注解,实现配置文件的功能。@EnableAutoConfiguration
:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:@SpringBootApplication(exclude{DataSourceAutoConfiguration.class})
@ComponentScan
:Spring 组件扫描。新创建一个 SpringBoot 项目,默认都是有 parent 的,这个 parent 就是 spring-boot-starter-parent
,spring-boot-starter-parent
主要有如下作用:
spring-boot-dependencies
,这个里边定义了依赖的版本,也正是因为继承了这个依赖,所以我们在写依赖时才不需要写版本号。application.properties
和 application.yml
的资源过滤,包括通过 profile 定义的不同环境的配置文件,例如 application-dev.properties
和 application-dev.yml
。总结就是打包用的。
DispatcherServlet
,MoudlAndView
和 ViewResolver
等一些简单的概念,开发 Web 应用将会变的非常简单。SpringBoot 通过一个自动配置和启动的项来目解决这个问题。为了更快的构建产品就绪应用程序,SpringBoot 提供了一些非功能性特征。
跨域可以在前端通过 JSONP 来解决,但是 JSONP 只可以发送 GET 请求,无法发送其他类型的请求,在 RESTful 风格的应用中,就显得非常鸡肋,因此我们推荐在后端通过 (CORS
,Cross-origin resource sharing
) 来解决跨域问题。这种解决方案并非 Spring Boot 特有的,在传统的 SSM 框架中,就可以通过 CORS 来解决跨域问题,只不过之前我们是在 XML 文件中配置 CORS,现在可以通过实现 WebMvcConfigurer
接口然后重写 addCorsMappings
方法解决跨域问题。
spring-boot-maven-plugin
提供了一些像 jar 一样打包或者运行应用程序的命令。
spring-boot:run
运行你的 SpringBoot 应用程序。spring-boot:repackage
重新打包你的 jar 包或者是 war 包使其可执行。spring-boot:start
/ spring-boot:stop
管理 SpringBoot 应用程序的生命周期(也可以说是为了集成测试)。spring-boot:build-info
生成执行器可以使用的构造信息。