目录


引言

面试题==知识点,这里所记录的面试题并不针对于面试者,而是将这些面试题作为技能知识点来看待。不以刷题进大厂为目的,而是以学习为目的。这里的知识点会持续更新,目录也会随时进行调整。


一、面试题导航

点这里进入JavaWeb编程面试题——导航

面试题持续更新中…

二、面试题目

1.什么是SpringBoot?

SpringBoot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,使开发者能快速上手。

2.谈谈你对SpringBoot的理解?

SpringBoot 主要用来简化使用 Spring 的难度和繁重的 XML 配置,它是 Spring 组件的一站式解决方案,采取了习惯优于配置的方法。通过 .properties 或者 .yml 文件替代了 Spring 繁杂的 XML 配置文件,同时支持 @ImportResource 注解加载 XML 配置。SpringBoot 还提供了嵌入式 HTTP 服务器、命令行接口工具、多种插件等等,使得应用程序的测试和开发简单起来。

3.为什么需要SpringBoot?

SpringBoot 优点非常多,如:独立运行、简化配置、自动配置和无需部署 war 文件等等。

4.SpringBoot的配置文件有哪几种格式?

主要有 .properties 和 .yml 格式,它们的区别主要是书写格式不同。另外 .yml 格式不支持 @PropertySource 注解导入配置。

5.SpringBoot支持哪些日志框架?推荐和默认的日志框架是哪个?

SpringBoot 支持 Java Util Logging,Log4j2,Logback 作为日志框架。如果使用 Starters 启动器,SpringBoot 将使用 Logback 作为默认日志框架,推荐的日志框架是 Log4j2。但是不管是那种日志框架他都支持将配置文件输出到控制台或者文件中。

6.什么是YAML?

YAML 是一种可读的数据序列化语言,它通常用于配置文件。与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML 文件就更加结构化,而且更少混淆。可以看出 YAML 具有分层配置数据。

7.SpringBoot支持哪些嵌入式Web容器?

SpringBoot 支持的嵌入式 servlet 容器有:Tomcat、Jetty、Undertow。

8.SpringBoot需要独立的容器运行吗?

可以不需要,内置了 Tomcat/Jetty 等容器。

9.你如何理解SpringBoot配置加载顺序?

SpringBoot 配置加载顺序优先级是:properties 文件、YAML 文件、系统环境变量、命令行参数。

10.SpringBoot可以兼容老Spring项目吗?

可以兼容,使用 @ImportResource 注解导入老 Spring 项目配置文件。

11.说出SpringBoot的优点?

  • 简化开发,提高整体生产力。
  • SpringBoot 使用 JavaConfig 有助于避免使用 XML,同时避免大量的 Maven 导入和各种版本冲突。
  • SpringBoot 引导的应用程序可以很容易地与 Spring 生态系统集成,如Spring JDBC、Spring ORM、Spring Data、Spring Security 等等。
  • SpringBoot 应用程序提供嵌入式 HTTP 服务器,如 Tomcat 和 Jetty,可以轻松地开发和测试 Web 应用程序。
  • SpringBoot 提供命令行接口工具,用于开发和测试应用程序。
  • SpringBoot 提供了多种插件,可以使用内置 Maven 工具开发和测试应用程序。
  • SpringBoot 没有单独的 Web 服务器需要,这意味着不再需要启动 Tomcat 或其他任何东西。

12.如何在自定义端口上运行SpringBoot应用程序?

可以在 application.properties 配置文件中指定端口,比如 server.port=8090

13.如何重新加载SpringBoot上的更改,而无需重新启动服务器?

这可以使用 DEV 工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式 Tomcat 将重新启动。SpringBoot 有一个开发工具 DevTools 模块,它有助于提高开发人员的生产力。Java 开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。开发人员可以重新加载 SpringBoot 上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。SpringBoot 在发布它的第一个版本时没有这个功能。这是开发人员最需要的功能。
DevTools 模块完全满足开发人员的需求。该模块将在生产环境中被禁用。它还提供 H2 数据库控制台以更好地测试应用程序。

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
	<optional>true</optional>
</dependency>

14.如何使用SpringBoot实现异常处理?

Spring 提供了一种使用 ControllerAdvice 处理异常的非常有用的方法。我们通过实现一个 ControlerAdvice 类,来处理控制器类抛出的所有异常。

15.SpringBoot与SpringCloud区别?

SpringBoot 是快速开发的 Spring 框架,SpringCloud 是完整的微服务框架,SpringCloud 依赖于 SpringBoot。

16.SpringBoot支持什么前端模板?

thymeleaf、freemarker 和 jsp,官方不推荐 jsp 会有限制。

17.开启SpringBoot特性有哪几种方式?

  • 继承 spring-boot-starter-parent 项目
  • 导入 spring-boot-dependencies 项目依赖

18.SpringBoot中Async异步调用方法?

在 SpringBoot 中使用异步调用是很简单的,只需要在方法上使用 @Async 注解即可实现方法的异步调用。
**注意:**需要在启动类加入 @EnableAsync 使异步调用 @Async 注解生效。

19.比较一下Spring Security和Shiro各自的优缺点?

由于 SpringBoot 官方提供了大量的非常方便的开箱即用的 Starter,包括 Spring Security 的 Starter,使得在 SpringBoot 中使用 Spring Security 变得更加容易,甚至只需要添加一个依赖就可以保护所有的接口,所以,如果是 SpringBoot 项目,一般选择 Spring Security。当然这只是一个建议的组合,单纯从技术上来说,无论怎么组合,都是没有问题的。Shiro 和 Spring Security 相比,主要有如下一些特点:

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

20.SpringBoot事务的使用?

SpringBoot 的事务很简单,首先使用注解 @EnableTransactionManagement 开启事务之后,然后在 Service 方法上添加注解 @Transactional 便可。

21.SpringBoot自动配置原理是什么?

SpringBoot 项目的启动注解是:@SpringBootApplication,其实它就是由下面三个注解组成的:

  • @Configuration
  • @ComponentScan
  • @EnableAutoConfiguration

其中 @EnableAutoConfiguration 是实现自动配置的入口,该注解又通过 @Import 注解导入了AutoConfigurationImportSelector,在该类中加载 META-INF/spring.factories 的配置信息。然后筛选出以 EnableAutoConfiguration 为 key 的数据,加载到 IOC 容器中,实现自动配置功能。

22.SpringBoot的核心注解是哪个?它主要由哪几个注解组成的?

启动类上面的注解是 @SpringBootApplication,它也是 SpringBoot 的核心注解,主要组合包含了以下3个注解:

  • @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
  • @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:@SpringBootApplication(exclude{DataSourceAutoConfiguration.class})
  • @ComponentScan:Spring 组件扫描。

23.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。

总结就是打包用的。

24.SpringBoot、SpringMVC和Spring有什么区别?

  • Spring 最重要的特征是依赖注入。所有 SpringModules 不是依赖注入就是 IOC 控制反转。当我们恰当的使用 DI 或者是 IOC 的时候,我们可以开发松耦合应用。松耦合应用的单元测试可以很容易的进行。
  • SpringMVC 提供了一种分离式的方法来开发 Web 应用。通过运用像 DispatcherServlet,MoudlAndView 和 ViewResolver 等一些简单的概念,开发 Web 应用将会变的非常简单。
  • Spring 和 SpringMVC 的问题在于需要配置大量的参数。

SpringBoot 通过一个自动配置和启动的项来目解决这个问题。为了更快的构建产品就绪应用程序,SpringBoot 提供了一些非功能性特征。

25.SpringBoot中如何解决跨域问题?

跨域可以在前端通过 JSONP 来解决,但是 JSONP 只可以发送 GET 请求,无法发送其他类型的请求,在 RESTful 风格的应用中,就显得非常鸡肋,因此我们推荐在后端通过 (CORS,Cross-origin resource sharing) 来解决跨域问题。这种解决方案并非 Spring Boot 特有的,在传统的 SSM 框架中,就可以通过 CORS 来解决跨域问题,只不过之前我们是在 XML 文件中配置 CORS,现在可以通过实现 WebMvcConfigurer 接口然后重写 addCorsMappings 方法解决跨域问题。

26.为什么我们需要spring-boot-maven-plugin?

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 生成执行器可以使用的构造信息。

27.SpringBoot配置加载可以通过哪些方式定义?

  • propertiest文件
  • 命令行参数
  • YAML文件
  • 系统环境变量
05-13 15:40