【2021最新版】Spring Boot面试题总结(92道题含答案解析)

文章目录

最近面试的小伙伴不少,对此我整理了一份Java面试题手册:基础知识、JavaOOP、Java集合/泛型面试题、Java异常面试题、Java中的IO与NIO面试题、Java反射、Java序列化、Java注解、多线程&并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、SpringBoot、SpringCloud、RabbitMQ、Dubbo、MyBatis、ZooKeeper、数据结构、算法、Elasticsearch、Kafka、微服务、Linux等等。能够分享给你们学习。【持续更新中】html

完整版Java面试题地址:【2021最新版】Java面试真题汇总前端

序号 内容 地址连接
1 【2021最新版】JavaOOP面试题总结 http://www.noobyard.com/article/p-rncfmibs-oe.html
2 【2021最新版】Java基础面试题总结 http://www.noobyard.com/article/p-ykqnztan-oe.html
3 【2021最新版】多线程&并发面试题总结 http://www.noobyard.com/article/p-nhidektg-oe.html
4 【2021最新版】JVM面试题总结 http://www.noobyard.com/article/p-anzurdyn-oe.html
5 【2021最新版】Mysql面试题总结 http://www.noobyard.com/article/p-vvarpaer-oe.html
6 【2021最新版】Redis面试题总结 http://www.noobyard.com/article/p-gpqwxdxv-oe.html
7 【2021最新版】Memcached面试题总结 http://www.noobyard.com/article/p-hiwezhqi-oe.html
8 【2021最新版】MongoDB面试题总结 http://www.noobyard.com/article/p-qsqnmsta-oe.html
9 【2021最新版】Spring面试题总结 http://www.noobyard.com/article/p-uxlzrwiw-oe.html
10 【2021最新版】Spring Cloud面试题总结 未更新
11 【2021最新版】RabbitMQ面试题总结 未更新
12 【2021最新版】Dubbo面试题总结 未更新
13 【2021最新版】MyBatis面试题总结 未更新
14 【2021最新版】ZooKeeper面试题总结 未更新
15 【2021最新版】数据结构面试题总结 未更新
16 【2021最新版】算法面试题总结 未更新
17 【2021最新版】Elasticsearch面试题总结 未更新
18 【2021最新版】Kafka面试题总结 未更新
19 【2021最新版】微服务面试题总结 未更新
20 【2021最新版】Linux面试题总结 未更新

一、什么是Spring Boot?

答:java

多年来,随着新功能的增长 ,spring变得愈来愈复杂。 只需访问https://spring.io/projects页面 ,咱们就会看到能够在咱们的应 用程序中使用的全部Spring项目的不一样功能。 若是必须启动一个新的Spring项目,咱们必须添加构建路径或添加Maven依赖关系,配置应用程序服务器,添加spring配置。所以,开始一个新的spring项目须要不少努力,由于咱们如今必须从头开始作全部事情。mysql

Spring Boot是解决这个问题的方法。Spring Boot已经创建在现有spring框架之上。使用spring启动,咱们避免了以前咱们必须 作的全部样板代码和配置。所以, Spring Boot能够帮助咱们以最少的工做量, 更加健壮地使用现有的Spring功能。git

二、为何要用SpringBoot?

答:程序员

Spring Boot 优势很是多,如:github

1、独立运行web

Spring Boot并且内嵌了各类servlet容器,Tomcat、Jetty等,如今再也不须要打成war包部署到容器中,Spring Boot只要打成一个可执行的jar包就能独立运行,全部的依赖包都在一个jar包内。面试

2、简化配置redis

spring-boot-starter-web启动器自动依赖其余组件,简少了maven的配置。

3、自动配置

Spring Boot能根据当前类路径下的类、jar包来自动配置bean,如添加一个spring-boot-starter-web启动器就能拥有web的功能,无需其余配置。

4、无代码生成和XML配置

Spring Boot配置过程当中无代码生成,也无需XML配置文件就能完成全部配置工做,这一切都是借助于条件注解完成的,这也是Spring4.x的核心功能之一。

5、应用监控

Spring Boot提供一系列端点能够监控服务及应用,作健康检测。

三、Spring Boot有哪些优势?

答:

Spring Boot的优势有:

一、减小开发,测试时间和努力。

二、使用 JavaConfig 有助于避免使用 XML。

三、避免大量的 Maven 导入和各类版本冲突。

四、提供意见发展方法。

五、经过提供默认值快速开始开发。

六、没有单独的Web服务器须要。这意味着你再也不须要启动 omcat,Glassfish或其余任何东西。

七、须要更少的配置 由于没有web.xml文件。只需添加用@Configuration 注释的类,而后添加用@Bean注释的方法,Spring将自动加载对象并像之前同样对其进行管理。您甚至能够将@Autowired添加到bean方法中,以使Spring自动装入须要的依赖关系中。

八、基于环境的配置 使用这些属性,您能够将您正在使用的环境传递到应用程序:-Dspring.profiles.active = {enviornment}。在加载主应用程序属性文件后,Spring将在(application{environment} .properties)中加载后续的应用程序属性文件。

四、Spring Boot的核心注解是哪一个?它主要由哪几个注解组成的?

答:

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

@SpringBootConfiguration: 组合了@Configuration 注解,实现配置文件的功能。

@EnableAutoConfiguration: 打开自动配置的功能,也能够关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。

@ComponentScan: Spring组件扫描

五、运行Spring Boot有哪几种方式?

答:

1)打包用命令或者放到容器中运行

2)用Maven/Gradle插件运行

3)直接执行main方法运行

六、如何理解Spring Boot中的Starters?

答:

Starters是什么:

Starters能够理解为启动器,它包含了一系列能够集成到应用里面的依赖包,你能够一站式集成Spring及其余技术,而不须要处处找示例代码和依赖包。

如你想使用Spring JPA访问数据库,只要加入springboot-starter-data-jpa启动器依赖就能使用了。Starters包含了许多项目中须要用到的依赖,它们能快速持续的运行,都是一系列获得支持的管理传递性依赖。

Starters命名:

Spring Boot官方的启动器都是以spring-boot-starter-命名的,表明了一个特定的应用类型。第三方的启动器不能以spring-boot开头命名,它们都被Spring Boot官方保留。通常一个第三方的应该这样命名,像mybatis的mybatis-spring-boot-starter。

Starters分类:

  1. Spring Boot应用类启动器


2.Spring Boot生产启动器

3. 其余第三方启动器

七、如何在Spring Boot启动的时候运行一些特定的代码?

答:

若是你想在Spring Boot启动的时候运行一些特定的代码,你能够实现接口ApplicationRunner或者CommandLineRunner,这两个接口实现方式同样,它们都只提供了一个run方法。

CommandLineRunner:启动获取命令行参数。

八、Spring Boot须要独立的容器运行吗?

答:

能够不须要,内置了Tomcat/Jetty等容器。

九、Spring Boot中的监视器是什么?

答:

Spring boot actuator是spring启动框架中的重要功能之一。Spring boot监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。

有几个指标必须在生产环境中进行检查和监控。即便一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接做为HTTP URL访问的REST端点来检查状态。

十、如何使用Spring Boot实现异常处理?

答:

Spring提供了一种使用ControllerAdvice处理异常的很是有用的方法。 咱们经过实现一个ControlerAdvice类,来处理控制器类抛出的全部异常。

十一、你如何理解Spring Boot中的Starters?

答:

Starters能够理解为启动器,它包含了一系列能够集成到应用里面的依赖包,你能够一站式集成Spring及其余技术,而不须要处处找示例代码和依赖包。如你想使用Spring JPA访问数据库,只要加入spring-boot-starter-data-jpa 启动器依赖就能使用了

十二、springboot经常使用的starter有哪些?

答:

spring-boot-starter-web嵌入tomcat和web开发须要servlet与jsp支持

spring-boot-starter-data-jpa数据库支持

spring-boot-starter-data-redis redis数据库支持

spring-boot-starter-data-solr solr支持

mybatis-spring-boot-starter第三方的mybatis集成starter

1三、SpringBoot实现热部署有哪几种方式?

答:

主要有两种方式:

Spring Loaded

Spring-boot-devtools

1四、如何理解Spring Boot配置加载顺序?

答:

在Spring Boot里面,可使用如下几种方式来加载配置。

1)properties文件;

2)YAML文件;

3)系统环境变量;

4)命令行参数;

等等。

1五、Spring Boot的核心配置文件有哪几个?它们的区别是什么?

答:

Spring Boot的核心配置文件是application和bootstrap配置文件。

application配置文件这个容易理解,主要用于Spring Boot项目的自动化配置。

bootstrap配置文件有如下几个应用场景。

  1. 使用Spring Cloud Config配置中心时,这时须要在bootstrap配置文件中添加链接到配置中心的配置属性来加载外部配置中心的配置信息;

  2. 一些固定的不能被覆盖的属性;

  3. 一些加密/解密的场景

1六、如何集成Spring Boot和ActiveMQ?

答:

对于集成Spring Boot 和 ActiveMQ,咱们使用spring-boot-starter-activemq依赖关系。 它只须要不多的配置,而且不须要样板代码。

1七、什么是JavaConfifig?

答:

Spring JavaConfig是Spring社区的产品,它提供了配置Spring IoC容器的纯Java方法。所以它有助于避免使用XML配置。

使用JavaConfig 的优势在于:

一、面向对象的配置。因为配置被定义为JavaConfig中的类,所以用户能够充分利用Java中的面向对象功能。一个配置类能够继承另外一个,重写它的@Bean 方法等。

二、减小或消除XML配置。基于依赖注入原则的外化配置的好处已被证实。可是,许多开发人员不但愿在XML和Java之间来回切换。

JavaConfig为开发人员提供了一种纯Java方法来配置与XML配置概念类似的Spring容器。从技术角度来说,只使用JavaConfig配置类来配置容器是可行的,但实际上不少人认为将JavaConfig与XML混合匹配是理想的。

三、类型安全和重构友好。JavaConfig提供了一种类型安全的方法来配置Spring容器。因为Java 5.0对泛型的支持,如今能够按类型而不是按名称检索bean,不须要任何强制转换或基于字符串的查找。

1八、如何从新加载Spring Boot上的更改,而无需从新启动服务器?

答:

这可使用 DEV 工具来实现。经过这种依赖关系,您能够节省任何更改,嵌入式tomcat将从新启动。

Spring Boot有一个开发工具(DevTools)模块,它有助于提升开发人员的生产力。

Java开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。开发人员能够从新加载Spring Boot上的更改,而无需从新启动服务器。这将消除每次手动部署更改的须要。

Spring Boot在发布它的第一个版本时没有这个功能。这是开发人员最须要的功能。

DevTools模块彻底知足开发人员的需求。该模块将在生产环境中被禁用。它还提供H2数据库控制台以更好地测试应用程序。

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

1九、Spring Boot中的监视器是什么?

答:

Spring boot actuator是spring启动框架中的重要功能之一。

Spring boot监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。有几个指标必须在生产环境中进行检查和监控。即便一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接做为HTTP URL访问的REST端点来检查状态。

20、如何在Spring Boot中禁用Actuator端点安全性?

答:

默认状况下,全部敏感的HTTP端点都是安全的,只有具备ACTUATOR角色的用户才能访问它们。安全性是使用标准的HttpServletRequest.isUserInRole方法实施的。 咱们可使用来禁用安全性。只有在执行机构端点在防火墙后访问时,才建议禁用安全性。

2一、如何在自定义端口上运行Spring Boot应用程序?

答:

为了在自定义端口上运行Spring Boot应用程序,您能够在application.properties中指定端口。

server.port=8090

2二、什么是YAML?

答:

YAML是一种人类可读的数据序列化语言。它一般用于配置文件。

与属性文件相比,若是咱们想要在配置文件中添加复杂的属性,YAML文件就更加结构化,并且更少混淆。能够看出YAML具备分层配置数据。

2三、如何实现Spring Boot应用程序的安全性?

答:

为了实现Spring Boot的安全性,咱们使用spring-boot-starter-security依赖项,而且必须添加安全配置。它只须要不多的代码。配置类将必须扩展WebSecurityConfigurerAdapter并覆盖其方法。

2四、如何集成Spring Boot和ActiveMQ?

答:

对于集成Spring Boot和ActiveMQ,咱们使用依赖关系。 它只须要不多的配置,而且不须要样板代码。

2五、如何使用Spring Boot 实现分页和排序?

答:

使用Spring Boot实现分页很是简单。使用Spring Data-JPA能够实现将可分页的传递给存储库方法。

2六、什么是Swagger?你用Spring Boot实现了它吗?

答:

Swagger普遍用于可视化API,使用Swagger UI为前端开发人员提供在线沙箱。Swagger是用于生成RESTful Web服务的可视化表示的工具,规范和完整框架实现。它使文档可以以与服务器相同的速度更新。当经过Swagger正肯定义时,消费者可使用最少许的实现逻辑来理解远程服务并与其进行交互。所以,Swagger消除了调用服务时的猜想。

2七、什么是Spring Profifiles?

答:

Spring Profiles容许用户根据配置文件(dev,test,prod 等)来注册bean。

所以,当应用程序在开发中运行时,只有某些 bean能够加载,而在PRODUCTION中,某些其余bean能够加载。假设咱们的要求是Swagger文档仅适用于QA环境,而且禁用全部其余文档。这可使用配置文件来完成。Spring Boot使得使用配置文件很是简单。

2八、什么是Spring Batch?

答:

Spring Boot Batch提供可重用的函数,这些函数在处理大量记录时很是重要,包括日志/跟踪,事务管理,做业处理统计信息,做业从新启动,跳过和资源管理。它还提供了更先进的技术服务和功能,经过优化和分区技术,能够实现极高批量和高性能批处理做业。简单以及复杂的大批量批处理做业能够高度可扩展的方式利用框架处理重要大量的信息。

2九、什么是FreeMarker 模板?

答:

FreeMarker是一个基于Java的模板引擎,最初专一于使用MVC软件架构进行动态网页生成。使用Freemarker的主要优势是表示层和业务层的彻底分离。程序员能够处理应用程序代码,而设计人员能够处理html页面设计。最后使用freemarker能够将这些结合起来,给出最终的输出页面。

30、如何使用Spring Boot实现异常处理?

答:

Spring提供了一种使用ControllerAdvice处理异常的很是有用的方法。 咱们经过实现一个ControlerAdvice类,来处理控制器类抛出的全部异常。

3一、您使用了哪些starter maven依赖项?

答:

使用了下面的一些依赖项

spring-boot-starter-activemq

spring-boot-starter-security

3二、什么是CSRF攻击?

答:

CSRF表明跨站请求伪造。这是一种攻击,迫使最终用户在当前经过身份验证的Web应用程序上执行不须要的操做。CSRF攻击专门针对状态改变请求,而不是数据窃取,由于攻击者没法查看对伪造请求的响应。

这有助于增长更少的依赖关系,并减小版本的冲突。

3三、什么是WebSockets?

答:

WebSocket是一种计算机通讯协议,经过单个TCP链接提供全双工通讯信道。

一、WebSocket是双向的-使用WebSocket客户端或服务器能够发起消息发送。

二、WebSocket是全双工的 -客户端和服务器通讯是相互独立的。

三、单个TCP链接 -初始链接使用HTTP,而后将此链接升级到基于套接字的链接。而后这个单一链接用于全部将来的通讯。

四、Light-与http相比,WebSocket消息数据交换要轻得多。

3四、什么是AOP?

答:
在软件开发过程当中,跨越应用程序多个点的功能称为交叉问题。这些交叉问题与应用程序的主要业务逻辑不一样。所以,将这些横切关注与业务逻辑分开是面向方面编程(AOP)的地方。

3五、什么是Apache Kafka?

答:

Apache Kafka是一个分布式发布-订阅消息系统。它是一个可扩展的,容错的发布-订阅消息系统,它使咱们可以构建分布式应用程序。

这是一个Apache顶级项目。Kafka适合离线和在线消息消费。

3六、咱们如何监视全部Spring Boot微服务?

答:

Spring Boot提供监视器端点以监控各个微服务的度量。这些端点对于获取有关应用程序的信息(如它们是否已启动)以及它们的组件(如数据库等)是否正常运行颇有帮助。

可是,使用监视器的一个主要缺点或困难是,咱们必须单独打开应用程序的知识点以了解其状态或健康情况。想象一下涉及50个应用程序的微服务,管理员将不得不击中全部50个应用程序的执行终端。为了帮助咱们处理这种状况,咱们将使用位于的开源项目。

它创建在Spring Boot Actuator之上,它提供了一个Web UI,使咱们可以可视化多个应用程序的度量。

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

答:

properties和yml,它们的区别主要是书写格式不一样。

1)properties

app.user.name = javastack

2)yml

app:

user:

name:

javastack

另外,.yml格式不支持@PropertySource注解导入配置。

3八、开启Spring Boot特性有哪几种方式?

答:

1)继承spring-boot-starter-parent项目

2)导入spring-boot-dependencies项目依赖

3九、Spring Boot的目录结构是怎样的?

答:

cn+- javastack +- MyApplication.java |+- customer | +- Customer.java | +- CustomerController.java | +- CustomerService.java | +- CustomerRepository.java |+- order +- Order.java +- OrderController.java +- OrderService.java +- OrderRepository.java

这个目录结构是主流及推荐的作法,而在主入口类上加上@SpringBootApplication注解来开启Spring Boot的各项能力,如自动配置、组件扫描等。

40、运行Spring Boot有哪几种方式?

答:

1)打包用命令或者放到容器中运行

2)用Maven/Gradle插件运行

3)直接执行main方法运行

4一、Spring Boot自动配置原理是什么?

答:
注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自动配置的核心,首先它得是一个配置文件,其次根据类路径下是否有这个类去自动配置。

4二、如何在Spring Boot启动的时候运行一些特定的代码?

答:
能够实现接口ApplicationRunner或者CommandLineRunner,这两个接口实现方式同样,它们都只提供了一个run方法。

4三、Spring Boot有哪几种读取配置的方式?

答:
Spring Boot 能够经过@PropertySource,@Value,@Environment, @ConfigurationProperties 来绑定变量。

4四、Spring Boot支持哪些日志框架?推荐和默认的日志框架是哪一个?

答:

Spring Boot支持Java Util Logging, Log4j2, Lockback做为日志框架,若是你使用Starters启动器,Spring Boot将使用Logback 做为默认日志框架。

4五、Spring Boot如何定义多套不一样环境配置?

答:

提供多套配置文件,如:

运行时指定具体的配置文件。

4六、Spring Boot能够兼容老Spring项目吗,如何作?

答:

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

4七、保护Spring Boot应用有哪些方法?

答:

在生产中使用HTTPS

使用Snyk检查你的依赖关系

升级到最新版本

启用CSRF保护

使用内容安全策略防止XSS攻击

4八、Spring Boot 2.X 有什么新特性?与1.X有什么区别?

答:

配置变动

JDK 版本升级

第三方类库升级

响应式 Spring 编程支持

HTTP/2 支持

配置属性绑定

更多改进与增强…

4九、如何从新加载Spring Boot上的更改,而无需从新启动服务器?

答:

这可使用DEV工具来实现。经过这种依赖关系,您能够节省任何更改,嵌入式tomcat将从新启动。
Spring Boot有一个开发工具(DevTools)模块,它有助于提升开发人员的生产力。Java开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。

开发人员能够从新加载Spring Boot上的更改,而无需从新启动服务器。这将消除每次手动部署更改的须要。Spring Boot在发布它的第一个版本时没有这个功能。

这是开发人员最须要的功能。DevTools模块彻底知足开发人员的需求。该模块将在生产环境中被禁用。它还提供H2数据库控制台以更好地测试应用程序。

org.springframework.boot 
spring-boot-devtools 
true

50、springboot集成mybatis的过程

答:

添加mybatis的starter maven依赖

org.mybatis.spring.boot 
mybatis-spring-boot-starter 
1.2.0

在mybatis的接口中添加@Mapper注解

在application.yml配置数据源信息

5一、Spring Boot、Spring MVC 和 Spring 有什么区别?

答:

SpringFrame

SpringFramework最重要的特征是依赖注入。全部SpringModules不是依赖注入就是IOC控制反转。

当咱们恰当的使用DI或者是IOC的时候,咱们能够开发松耦合应用。松耦合应用的单元测试能够很容易的进行。

SpringMVC

Spring MVC提供了一种分离式的方法来开发Web应用。经过运用像DispatcherServelet,MoudlAndView和ViewResolver等一些简单的概念,开发Web应用将会变的很是简单。

SpringBoot

Spring和SpringMVC的问题在于须要配置大量的参数。

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix"> <value>/WEB-INF/views/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> <mvc:resources mapping="/webjars/**" location="/webjars/"/>

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

5二、什么是 Spring Boot Stater ?

答:

启动器是一套方便的依赖没描述符,它能够放在本身的程序中。你能够一站式的获取你所须要的Spring和相关技术,而不须要依赖描述符的经过示例代码搜索和复制黏贴的负载。

例如,若是你想使用Sping和JPA访问数据库,只须要你的项目包含spring-boot-starter-data-jpa依赖项,你就能够完美进行。

问题四 你可否举一个例子来解释更多Staters的内容?

让咱们来思考一个Stater的例子-Spring Boot Stater Web。

若是你想开发一个web应用程序或者是公开REST服务的应用程序。Spring Boot Start Web是首选。让咱们使用Spring Initializr 建立一个Spring Boot Start Web的快速项目。

Spring Boot Start Web的依赖项

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>

下面的截图是添加进咱们应用程序的不一样的依赖项

依赖项能够被分为

任何经典的Web应用程序都会使用全部这些依赖项。Spring Boot Starter Web预先打包了这些依赖项。

做为一个开发者,我不须要再担忧这些依赖项和它们的兼容版本。

5三、Spring Boot 还提供了其它的哪些 Starter Project Options?

答:

Spring Boot 也提供了其它的启动器项目包括,包括用于开发特定类型应用程序的典型依赖项。

spring-boot-starter-web-services - SOAP Web Services

spring-boot-starter-web - Web 和 RESTful 应用程序

spring-boot-starter-test - 单元测试和集成测试

spring-boot-starter-jdbc - 传统的 JDBC

spring-boot-starter-hateoas - 为服务添加 HATEOAS 功能

spring-boot-starter-security - 使用 SpringSecurity 进行身份验证和受权

spring-boot-starter-data-jpa - 带有 Hibeernate 的 Spring Data JPA

spring-boot-starter-data-rest - 使用 Spring Data REST 公布简单的 REST 服务

5四、Spring是如何快速建立产品就绪应用程序的?

答:

Spring Boot致力于快速产品就绪应用程序。为此,它提供了一些譬如高速缓存,日志记录,监控和嵌入式服务器等开箱即用的非功能性特征。

spring-boot-starter-actuator-使用一些如监控和跟踪应用的高级功能

spring-boot-starter-undertow, spring-boot-starter-jetty,
spring-boot-starter-tomcat - 选择您的特定嵌入式Servlet容器

spring-boot-starter-logging-使用logback进行日志记录

spring-boot-starter-cache-启用Spring Framework的缓存支持

Spring2和Spring5所须要的最低Java版本是什么?

Spring Boot2.0须要Java8或者更新的版本。Java6和Java7已经再也不支持。

推荐阅读:

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0.0-M1-Release-Notes

5五、建立一个Spring Boot Project的最简单的方法是什么?

答:

Spring Initializr是启动Spring Boot Projects的一个很好的工具。

就像上图中所展现的同样,咱们须要作一下几步:

登陆Spring Initializr,按照如下方式进行选择:

选择com.in28minutes.springboot为组

选择studet-services为组件

选择下面的依赖项

Web

Actuator

DevTools

点击生GenerateProject

将项目导入Eclipse。文件-导入-现有的Maven项目

5六、Spring Initializr是建立Spring Boot Projects的惟一方法吗?

答:

不是的。

Spring Initiatlizr让建立Spring Boot项目变的很容易,可是,你也能够经过设置一个maven项目并添加正确的依赖项来开始一个项目。

在咱们的Spring 课程中,咱们使用两种方法来建立项目。

第一种方法是start spring io

另一种方法是在项目的标题为“Basic Web Application”处进行手动设置。

手动设置一个maven项目

这里有几个重要的步骤:

在Eclipse中,使用文件 - 新建 Maven 项目来建立一个新项目添加依赖项。

添加maven插件。

添加 Spring Boot 应用程序类。

到这里,准备工做已经作好!

5七、如何使用SpringBoot自动重装个人应用程序?

答:

使用Spring Boot开发工具。

把Spring Boot开发工具添加进入你的项目是简单的。

把下面的依赖项添加至你的Spring Boot Project pom.xml中

重启应用程序,而后就能够了。

一样的,若是你想自动装载页面,有能够看看FiveReload

http://www.logicbig.com/tutorials/spring-framework/spring-boot/boot-live-reload/

在我测试的时候,发现了LiveReload漏洞,若是你测试时也发现了,请必定要告诉咱们。

5八、 什么是嵌入式服务器?咱们为何要使用嵌入式服务器呢?

答:

思考一下在你的虚拟机上部署应用程序须要些什么。

第一步: 安装 Java

第二部: 安装 Web 或者是应用程序的服务器(Tomat/Wbesphere/Weblogic 等等)

第三部: 部署应用程序war包若是咱们想简化这些步骤,应该如何作呢?

让咱们来思考如何使服务器成为应用程序的一部分你只须要一个安装了 Java 的虚拟机,就能够直接在上面部署应用程序了, 是否是很爽?

这个想法是嵌入式服务器的起源。

当咱们建立一个能够部署的应用程序的时候,咱们将会把服务器(例如,tomcat)嵌入到可部署的服务器中。

例如,对于一个Spring Boot应用程序来讲,你能够生成一个包含Embedded Tomcat的应用程序
jar。你就能够想运行正常Java应用程序同样来运行web应用程序了。

嵌入式服务器就是咱们的可执行单元包含服务器的二进制文件(例如,tomcat.jar)。

5九、如何在Spring Boot中添加通用的JS代码?

答:

在源文件夹下,建立一个名为static的文件夹。而后,你能够把你的静态的内容放在这里面。

例如,myapp.js的路径是resources\static\js\myapp.js

你能够参考它在jsp中的使用方法

<csript src="/js/myapp.js"></script>

错误:HAL browser gives me unauthorized error - Full authenticaition is required to access this resource.
该如何来修复这个错误呢?

{ 
 
   "timestamp": 1488656019562, "status": 401, "error": "Unauthorized", "message": "Full authentication is required to access this resource.", "path": "/beans" }

两种方法:

方法 1:关闭安全验证

application.properties

management.security.enabled:FALSE

方法二:在日志中搜索密码并传递至请求标头中

60、什么是Spring Date?

答:

来自://projects.spring.io/spring- data/

Spring Data的使命是在保证底层数据存储特殊性的前提下,为数据访问提供一个熟悉的,一致性的,基于Spring的编程模型。这使得使用数据访问技术,关系数据库和非关系数据库,map-reduce框架以及基于云的数据服务变得很容易。

为了让它更简单一些,Spring Data提供了不受底层数据源限制的Abstractions接口。

下面来举一个例子

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </dependency> <csript src="/js/myapp.js"></script> { 
 
   "timestamp": 1488656019562, "status": 401, "error": "Unauthorized", "message": "Full authentication is required to access this resource.", "path": "/beans" }management.security.enabled:FALSE interface TodoRepository extends CrudRepository<Todo, Long> { 
 
  

你能够定义一简单的库,用来插入,更新,删除和检索代办事项,而不须要编写大量的代码。

6一、什么是Spring Data REST?

答:

Spring Data TEST能够用来发布关于Spring数据库的HATEOAS RESTful资源。

下面是一个使用JPA的例子

@RepositoryRestResource(collectionResourceRel = "todos", path = "todos") public interface TodoRepository extends PagingAndSortingRepository<Todo, Long> { 
 
  

不须要写太多代码,咱们能够发布关于Spring数据库的RESTful API。

下面展现的是一些关于TEST服务器的例子

POST

URL:http://localhost:8080/todos

Use Header:Content-Type:Type:application/json

Request Content

代码以下

{ 
 
   "user": "Jill", "desc": "Learn Hibernate", "done": false }

响应内容

{ 
 
   "user": "Jill", "desc": "Learn Hibernate", "done": false, "_links": { 
 
   "self": { 
 
   "href": "http://localhost:8080/todos/1" },"todo": { 
 
   "href": "http://localhost:8080/todos/1" } } }

响应包含新建立资源的href。

6二、path=”users”, collectionResourceRel=”users”如何与Spring Data Rest一块儿使用?

答:

@RepositoryRestResource(collectionResourceRel = "users", path = "users") public interface UserRestRepository extends PagingAndSortingRepository<User, Long>

path-这个资源要导出的路径段。

collectionResourceRel-生成指向集合资源的连接时使用的rel值。在生成HATEOAS连接时使用。

6三、当Spring Boot应用程序做为Java应用程序运行时,后台会发生什么?

答:

若是你使用Eclipse IDE,Eclipse maven 插件确保依赖项或者类文件的改变一经添加,就会被编译并在目标文件中准备好!在这以后,就和其它的Java应用程序同样了。

当你启动java应用程序的时候,spring boot自动配置文件就会魔法般的启用了。

当Spring Boot应用程序检测到你正在开发一个web应用程序的时候,它就会启动tomcat。

6四、咱们可否在spring-boot-starter-web中用jetty代替 tomcat?

答:

在 spring-boot-starter-web 移除现有的依赖项,并把下面这些添加进去。

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion>

<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency>

6五、如何使用Spring Boot生成一个WAR文件?

答:

推荐阅读:

https://spring.io/guides/gs/convert-jar-to-war/

下面有spring说明文档直接的连接地址:

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build-tool-plugins-maven-packaging

6六、如何使用Spring Boot部署到不一样的服务器?

答:

你须要作下面两个步骤:

在一个项目中生成一个war文件。

将它部署到你最喜欢的服务器(websphere或者Weblogic或者Tomcat and so on)。

第一步:这本入门指南应该有所帮助:

https://spring.io/guides/gs/convert-jar-to-war/

第二步:取决于你的服务器。

6七、RequestMapping和GetMapping的不一样之处在哪里?

答:

RequestMapping具备类属性的,能够进行GET,POST,PUT或者其它的注释中具备的请求方法。

GetMapping是GET 请求方法中的一个特例。它只是ResquestMapping的一个延伸,目的是为了提升清晰度。

6八、为何咱们不建议在实际的应用程序中使用Spring Data Rest?

答:

咱们认为Spring Data Rest很适合快速原型制造!在大型应用程序中使用须要谨慎。

经过Spring Data REST你能够把你的数据实体做为RESTful服务直接发布。

当你设计RESTful服务器的时候,最佳实践代表,你的接口应该考虑到两件重要的事情:

1.你的模型范围。

2.你的客户。

经过With Spring Data REST,你不须要再考虑这两个方面,只须要做为 TEST 服务发布实体。

这就是为何咱们建议使用Spring Data Rest在快速原型构造上面,或者做为项目的初始解决方法。对于完整演变项目来讲,这并非一个好的注意。

6九、在Spring Initializer中,如何改变一个项目的包名字?

答:
好消息是你能够定制它。点击连接“转到完整版本”。你能够配置你想要修改的包名称!

70、能够配置application.propertierde的完整的属性列表在哪里能够找到?

答:

这里是完整的指南:

https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

7一、JPA和Hibernate有哪些区别?

答:

简而言之

JPA 是一个规范或者接口

Hibernate是JPA的一个实现

当咱们使用JPA的时候,咱们使用javax.persistence包中的注释和接口时,不须要使用hibernate的导入包。

咱们建议使用JPA注释,由于哦咱们没有将其绑定到Hibernate做为实现。后来(我知道-小于百分之一的概率),咱们可使用另外一种JPA实现。

7二、使用Spring Boot启动链接到内存数据H2的JPA应用程序须要哪些依赖项?

答:

在Spring Boot项目中,当你确保下面的依赖项都在类路里面的时候,你能够加载H2控制台。

web 启动器h2jpa数据启动器

其它的依赖项在下面:

须要注意的一些地方:

一个内部数据内存只在应用程序执行期间存在。这是学习框架的有效方式。

这不是你但愿的真是世界应用程序的方式。

在问题“如何链接一个外部数据库?”中,咱们解释了如何链接一个你所选择的数据库。

7三、如何不经过任何配置来选择Hibernate做为JPA的默认实现?

答:

由于Spring Boot是自动配置的。

下面是咱们添加的依赖项


spring-boot-stater-data-jpa对于Hibernate和JPA有过渡依赖性。

当Spring Boot在类路径中检测到Hibernate中,将会自动配置它为默认的JPA实现。

7四、指定的数据库链接信息在哪里?它是如何知道自动链接至 H2的?

答:

这就是Spring Boot自动配置的魔力。

来自:https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-auto-configuration.html

Spring Boot auto-configuration试图自动配置你已经添加的基于jar依赖项的Spring应用程序。

好比说,若是HSQLDBis存在你的类路径中,而且,数据库链接 bean 尚未手动配置,那么咱们能够自动配置一个内存数据库。

进一步的阅读:

http://www.springboottutorial.com/spring-boot-auto-configuration

7五、咱们如何链接一个像MSSQL或者orcale同样的外部数据库?

答:

让咱们以MySQL为例来思考这个问题:

第一步-把mysql链接器的依赖项添加至pom.xml

第二步-从pom.xml中移除H2的依赖项

或者至少把它做为测试的范围。

第三步-安装你的MySQL数据库

更多的来看看这里-https://github.com/in28minutes/jpa-with-hibernate#installing-and-setting-up-mysql

第四步-配置你的MySQL数据库链接

配置application.properties


第五步-从新启动,你就准备好了!

就是这么简单!

7六、Spring Boot配置的默认H2数据库的名字是上面?为何默认的数据库名字是testdb?

答:

在 application.properties里面,列出了全部的默认值

https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

找到下面的属性

spring.datasource.name=testdb # Name of the datasource.

若是你使用了H2内部存储数据库,它里面肯定了Spring Boot用来安装你的H2数据库的名字。

7七、若是H2不在类路径里面,会出现上面状况?

答:

将会报下面的错误

Cannot determine embedded database driver class for database type NONE

把H2添加至pom.xml中,而后重启你的服务器

<dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency>

7八、你可否举一个以ReadOnly为事务管理的例子?

答:

当你从数据库读取内容的时候,你想把事物中的用户描述或者是其它描述设置为只读模式,以便于Hebernate不须要再次检查实体的变化。这是很是高效的。

7九、发布Spring Boot用户应用程序自定义配置的最好方法是什么?

答:

@Value的问题在于,您能够经过应用程序分配你配置值。更好的操做是采起集中的方法。

你可使用 @ConfigurationProperties定义一个配置组件。

@Component @ConfigurationProperties("basic") public class BasicConfiguration { 
 
   private boolean value; private String message; private int number;

你能够在application.properties中配置参数。

basic.value: true basic.message: Dynamic Message basic.number: 100

80、配置文件的需求是什么?

答:

企业应用程序的开发是复杂的,你须要混合的环境:

Dev

QA

Stage

Production

在每一个环境中,你想要不一样的应用程序配置。

配置文件有助于在不一样的环境中进行不一样的应用程序配置。

Spring和Spring Boot提供了你能够制定的功能。

不一样配置文件中,不一样环境的配置是什么?

为一个制定的环境设置活动的配置文件。

Spring Boot将会根据特定环境中设置的活动配置文件来选择应用程序的配置。

8一、如何使用配置文件经过Spring Boot配置特定环境的配置?

答:

配置文件不是设别环境的关键。

在下面的例子中,咱们将会用到两个配置文件

dev

prod

缺省的应用程序配置在application.properties中。让咱们来看下面的例子:

application.properties

basic.value= true basic.message= Dynamic Message basic.number= 100

咱们想要为dev文件自定义application.properties属性。咱们须要建立一个名为application-dev.properties的文件,而且重写咱们想要自定义的属性。

application-dev.properties

basic.message: Dynamic Message in DEV

一旦你特定配置了配置文件,你须要在环境中设定一个活动的配置文件。

有多种方法能够作到这一点:

在VM参数中使用Dspring.profiles.active=prod

在application.properties中使用spring.profiles.active=prod

文章来源:http://www.3xmq.com/article/1522809264295

8二、咱们如何使用Maven设置Spring Boot应用程序?

答:

咱们能够像在任何其余库中同样在Maven项目中包含Spring Boot。

可是,最好的方法是从spring-boot-starter-parent 项目继承并声明依赖于Spring Boot启动器。这样作可让咱们的项目重用Spring Boot的默认设置。 继承spring-boot-starter-parent项目很是简单-咱们只须要在pom.xml中指定一个 parent 元素:

在这里插入图片描述
咱们能够在Maven中央仓库找到最新版本的spring-boot-starter-parent。上面的方式很方便可是并不必定符合实际须要。例如公司要求全部项目依赖构建从一个标准BOM开始,咱们就不能按上面的方式进行。在这种状况下,咱们能够进行以下引用:
在这里插入图片描述

8三、如何禁用特定的自动配置?

答:

若是咱们要禁用特定的自动配置,咱们可使用@EnableAutoConfiguration注解的exclude属性来指示它。以下禁用了数据源自动配置DataSourceAutoConfiguration :
在这里插入图片描述
若是咱们使用@SpringBootApplication注解。 它具备@EnableAutoConfiguration做为元注解 - 咱们一样能够配置exclude属性来禁用自动配置:

在这里插入图片描述
咱们还可使用spring.autoconfigure.exclude环境属性禁用自动配置。在application.properties (也能够是application.yml)配
置文件设置以下也能够达到一样的目的:
在这里插入图片描述

8四、Spring boot支持哪些外部配置?

答:

Spring Boot支持外部配置,容许咱们在各类环境中运行相同的应用程序。咱们可使用properties文件,YAML文件 ,环境变量,系统属性和命令行选项参数来指定配置属性。 而后,咱们能够访问使用这些属性@Value注释,经由绑定对象的@ConfigurationProperties注释或Environment环境抽象类注入。

如下是最多见的外部配置来源:

命令行属性: 命令行选项参数是以双连字符开头的程序参数,例如-server.port=8080 。Spring Boot将全部参数转换为属性,并将它们添加到环境属性集中。

应用程序属性: 应用程序属性是从application.properties文件或其YAML对应文件加载的属性。默认状况下,Spring Boot会在当前目录,类路径根或其config子目录中搜索此文件。

特定于配置文件的属性: 特定于配置文件的属性从application-{profile} .properties文件或其YAML对应文件加载。{profile}占位符是指活性轮廓。这些文件与非特定属性文件位于相同位置,而且优先于非特定属性文件。

8五、如何对Spring Boot应用进行测试?

答:

在为Spring应用程序运行集成测试时,咱们必须有一个ApplicationContext 。

为了简化测试,Spring Boot为测试提供了一个特殊的注释@SpringBootTest 。此批注从其classes属性指示的配置类建立 ApplicationContext。 若是未设置classes属性,Spring Boot将搜索主配置类。

搜索从包含测试的包开始,直到找到使用@SpringBootApplication或@SpringBootConfiguration注释的类。 请注意,若是咱们使用JUnit4 ,咱们必须用@RunWith(SpringRunner.class) 装饰测试类。

8六、Spring Boot Actuator有什么用?

答:

Spring Boot Actuator能够帮助你监控和管理Spring Boot应用,好比健康检查、审计、统计和HTTP追踪等。全部的这些特性能够经过JMX或者HTTP endpoints来得到。

Actuator同时还能够与外部应用监控系统整合,好比Prometheus , Graphite , DataDog , Influx , Wavefront , New Relic等。

这些系统提供了很是好的仪表盘、图标、分析和告警等功能,使得你能够经过统一的接口轻松的监控和管理你的应用。
Actuator 使用 Micrometer 来整合上面提到的外部应用监控系统。这使得只要经过很是小的配置就能够集成任何应用监控系统。

将Spring Boot Actuator集成到一个项目中很是简单。咱们须要作的就是在pom.xml文件中包含spring-boot-starter-actuator启动器:
在这里插入图片描述
Spring Boot Actuator可使用HTT或JMX端点公开操做信息。可是,大多数应用程序都使用HTTP ,其中端点的标识和/执行器前缀造成URL路径。 如下是Actuator提供的一些最多见的内置端点:

auditevents: 公开审计事件信息

env: 公开环境属性

health: 显示应用程序运行情况信息

httptrace: 显示HTTP跟踪信息

info: 显示任意应用程序信息

metrics: 显示指标信息

mappings: 显示全部@RequestMapping路径的列表

scheduledtasks: 显示应用程序中的计划任务

threaddump: 执行线程转储

`beans:全部加载的spring bean

更多关于Spring Boot Actuator的信息可查看Spring Boot 2.x中的Actuator 。
请注意:生产使用Actuator务必保护好这些端点,避免未受权的访问请求。

8七、SpringBoot 中静态首页默认位置能够放在哪里?

当咱们应用根目录时,能够直接映射,将index.html放入下面的位置:
在这里插入图片描述

8八、SpringBoot 中静态资源直接映射的优先级是怎样的?

答:

SpringBoot静态资源直接映射为/**,能够经过根目录来访问。/META-INF/resources/webjars/映射为/webjars/,经过访问 /webjar访问。优先级顺序为:META-INF/resources>resources>static>public。

8九、继承 WebMvcConfifigurerAdapter 抽象类,经常使用的重写方法列举几个?

答:

WebMvcConfigurerAdapter实现WebMvcConfigurer接口,经常使用的可能须要重写的方法有下面几个:
在这里插入图片描述

90、@SpringBootApplication引入了哪3个重要的注解?

答:

@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan。其它的4个@Target、@Retention、@Documented、@Inherited,也重要,但应该不是本题想问的知识点。

9一、@SpringBootApplication注解中的属性至关于哪几个注解?

答:

等价于以默认属性使用@Configuration,@EnableAutoConfiguration和@ComponentScan。

总结

该面试题答案解析完整文档获取方式:Spring Boot面试题总结