什么是面霸?就是在面试中,神挡杀神佛挡杀佛,见招拆招,面到面试官自惭形秽自叹不如!松哥但愿本文能成为你面霸路上的垫脚石!前端
作 Java 开发,没有人敢小觑 Spring Boot 的重要性,如今出去面试,不管多小的公司 or 项目,都要跟你扯一扯 Spring Boot,扯一扯微服务,不会?没用过? Sorry ,咱们不合适!java
今天松哥就给你们整理了 15 道高频 Spring Boot 面试题,但愿可以帮助到刚刚走出校门的小伙伴以及准备寻找新的工做机会的小伙伴。面试
1.什么是 Spring Boot ?
传统的 SSM/SSH 框架组合配置繁琐臃肿,不一样项目有不少重复、模板化的配置,严重下降了 Java 工程师的开发效率,而 Spring Boot 能够轻松建立基于 Spring 的、能够独立运行的、生产级的应用程序。经过对 Spring 家族和一些第三方库提供一系列自动化配置的 Starter,来使得开发快速搭建一个基于 Spring 的应用程序。spring
Spring Boot 让日益臃肿的 Java 代码又重回简洁。在配合 Spring Cloud 使用时,还能够发挥更大的威力。数据库
2.Spring Boot 有哪些特色 ?
Spring Boot 主要有以下特色:bootstrap
为 Spring 开发提供一个更快、更普遍的入门体验。
开箱即用,远离繁琐的配置。
提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监控、运行情况检查和外部化配置等。
绝对没有代码生成,也不须要XML配置。
3.Spring Boot 中的 starter 究竟是什么 ?
首先,这个 Starter 并不是什么新的技术点,基本上仍是基于 Spring 已有功能来实现的。首先它提供了一个自动化配置类,通常命名为 XXXAutoConfiguration ,在这个配置类中经过条件注解来决定一个配置是否生效(条件注解就是 Spring 中本来就有的),而后它还会提供一系列的默认配置,也容许开发者根据实际状况自定义相关配置,而后经过类型安全的属性注入将这些配置属性注入进来,新注入的属性会代替掉默认属性。正由于如此,不少第三方框架,咱们只须要引入依赖就能够直接使用了。后端
固然,开发者也能够自定义 Starter,自定义 Starter 能够参考:徒手撸一个 Spring Boot 中的 Starter ,解密自动化配置黑魔法!。跨域
4.spring-boot-starter-parent 有什么用 ?
咱们都知道,新建立一个 Spring Boot 项目,默认都是有 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。
关于这个问题,读者能够参考:你真的理解 Spring Boot 项目中的 parent 吗?安全
5.YAML 配置的优点在哪里 ?
YAML 如今能够算是很是流行的一种配置文件格式了,不管是前端仍是后端,均可以见到 YAML 配置。那么 YAML 配置和传统的 properties 配置相比到底有哪些优点呢?
配置有序,在一些特殊的场景下,配置有序很关键
支持数组,数组中的元素能够是基本数据类型也能够是对象
简洁
相比 properties 配置文件,YAML 还有一个缺点,就是不支持 @PropertySource 注解导入自定义的 YAML 配置。
关于 YAML 配置,要是你们还不熟悉,能够参考: Spring Boot 中的 yaml 配置简介
6.Spring Boot 中如何解决跨域问题 ?
跨域能够在前端经过 JSONP 来解决,可是 JSONP 只能够发送 GET 请求,没法发送其余类型的请求,在 RESTful 风格的应用中,就显得很是鸡肋,所以咱们推荐在后端经过 (CORS,Cross-origin resource sharing) 来解决跨域问题。这种解决方案并不是 Spring Boot 特有的,在传统的 SSM 框架中,就能够经过 CORS 来解决跨域问题,只不过以前咱们是在 XML 文件中配置 CORS ,如今则是经过 @CrossOrigin 注解来解决跨域问题。关于 CORS ,小伙伴们能够参考:Spring Boot 中经过 CORS 解决跨域问题
7.比较一下 Spring Security 和 Shiro 各自的优缺点 ?
因为 Spring Boot 官方提供了大量的很是方便的开箱即用的 Starter ,包括 Spring Security 的 Starter ,使得在 Spring Boot 中使用 Spring Security 变得更加容易,甚至只须要添加一个依赖就能够保护全部的接口,因此,若是是 Spring Boot 项目,通常选择 Spring Security 。固然这只是一个建议的组合,单纯从技术上来讲,不管怎么组合,都是没有问题的。Shiro 和 Spring Security 相比,主要有以下一些特色:
Spring Security 是一个重量级的安全管理框架;Shiro 则是一个轻量级的安全管理框架
Spring Security 概念复杂,配置繁琐;Shiro 概念简单、配置简单
Spring Security 功能强大;Shiro 功能简单
8.微服务中如何实现 session 共享 ?
在微服务中,一个完整的项目被拆分红多个不相同的独立的服务,各个服务独立部署在不一样的服务器上,各自的 session 被从物理空间上隔离开了,可是常常,咱们须要在不一样微服务之间共享 session ,常见的方案就是 Spring Session + Redis 来实现 session 共享。将全部微服务的 session 统一保存在 Redis 上,当各个微服务对 session 有相关的读写操做时,都去操做 Redis 上的 session 。这样就实现了 session 共享,Spring Session 基于 Spring 中的代理过滤器实现,使得 session 的同步操做对开发人员而言是透明的,很是简便。 session 共享你们能够参考:Spring Boot 一个依赖搞定 session 共享,没有比这更简单的方案了!
9.Spring Boot 如何实现热部署 ?
Spring Boot 实现热部署其实很容易,引入 devtools 依赖便可,这样当编译文件发生变化时,Spring Boot 就会自动重启。在 Eclipse 中,用户按下保存按键,就会自动编译进而重启 Spring Boot,IDEA 中因为是自动保存的,自动保存时并未编译,因此须要开发者按下 Ctrl+F9 进行编译,编译完成后,项目就自动重启了。
若是仅仅只是页面模板发生变化,Java 类并未发生变化,此时能够不用重启 Spring Boot,使用 LiveReload 插件就能够轻松实现热部署。
10.Spring Boot 中如何实现定时任务 ?
定时任务也是一个常见的需求,Spring Boot 中对于定时任务的支持主要仍是来自 Spring 框架。
在 Spring Boot 中使用定时任务主要有两种不一样的方式,一个就是使用 Spring 中的 @Scheduled 注解,另外一个则是使用第三方框架 Quartz。
使用 Spring 中的 @Scheduled 的方式主要经过 @Scheduled 注解来实现。
使用 Quartz ,则按照 Quartz 的方式,定义 Job 和 Trigger 便可。
关于定时任务这一块,你们能够参考:Spring Boot 中实现定时任务的两种方式!
11.先后端分离,如何维护接口文档 ?
先后端分离开发日益流行,大部分状况下,咱们都是经过 Spring Boot 作先后端分离开发,先后端分离必定会有接口文档,否则会先后端会深深陷入到扯皮中。一个比较笨的方法就是使用 word 或者 md 来维护接口文档,可是效率过低,接口一变,全部人手上的文档都得变。在 Spring Boot 中,这个问题常见的解决方案是 Swagger ,使用 Swagger 咱们能够快速生成一个接口文档网站,接口一旦发生变化,文档就会自动更新,全部开发工程师访问这一个在线网站就能够获取到最新的接口文档,很是方便。关于 Swagger 的用法,你们能够参考:SpringBoot整合Swagger2,不再用维护接口文档了!
12.什么是 Spring Data ?
Spring Data 是 Spring 的一个子项目。用于简化数据库访问,支持NoSQL 和 关系数据存储。其主要目标是使数据库的访问变得方便快捷。Spring Data 具备以下特色:
SpringData 项目支持 NoSQL 存储:
MongoDB (文档数据库)
Neo4j(图形数据库)
Redis(键/值存储)
Hbase(列族数据库)
SpringData 项目所支持的关系数据存储技术:
JDBC
JPA
Spring Data Jpa 致力于减小数据访问层 (DAO) 的开发量. 开发者惟一要作的,就是声明持久层的接口,其余都交给 Spring Data JPA 来帮你完成!Spring Data JPA 经过规范方法的名字,根据符合规范的名字来肯定方法须要实现什么样的逻辑。
13.Spring Boot 是否可使用 XML 配置 ?
Spring Boot 推荐使用 Java 配置而非 XML 配置,可是 Spring Boot 中也可使用 XML 配置,经过 @ImportResource 注解能够引入一个 XML 配置。
14.Spring Boot 打成的 jar 和普通的 jar 有什么区别 ?
Spring Boot 项目最终打包成的 jar 是可执行 jar ,这种 jar 能够直接经过 java -jar xxx.jar 命令来运行,这种 jar 不能够做为普通的 jar 被其余项目依赖,即便依赖了也没法使用其中的类。
Spring Boot 的 jar 没法被其余项目依赖,主要仍是他和普通 jar 的结构不一样。普通的 jar 包,解压后直接就是包名,包里就是咱们的代码,而 Spring Boot 打包成的可执行 jar 解压后,在 \BOOT-INF\classes 目录下才是咱们的代码,所以没法被直接引用。若是非要引用,能够在 pom.xml 文件中增长配置,将 Spring Boot 项目打包成两个 jar ,一个可执行,一个可引用。
15.bootstrap.properties 和 application.properties 有何区别 ?
单纯作 Spring Boot 开发,可能不太容易遇到 bootstrap.properties 配置文件,可是在结合 Spring Cloud 时,这个配置就会常常遇到了,特别是在须要加载一些远程配置文件的时侯。
bootstrap.properties 在 application.properties 以前加载,配置在应用程序上下文的引导阶段生效。通常来讲咱们在 Spring Cloud Config 或者 Nacos 中会用到它。bootstrap.properties 被 Spring ApplicationContext 的父类加载,这个类先于加载 application.properties 的 ApplicatonContext 启动。
固然,前面叙述中的 properties 也能够修改成 yaml 。
好了,本文就说到这里,欢迎小伙伴留言说说你曾经遇到过的 Spring Boot 面试题!
关注公众号【江南一点雨】,专一于 Spring Boot+微服务以及先后端分离等全栈技术,按期视频教程分享,关注后回复 Java ,领取松哥为你精心准备的 Java 干货!--------------------- 做者:_江南一点雨 来源:CSDN 原文:https://blog.csdn.net/u012702547/article/details/92803816 版权声明:本文为博主原创文章,转载请附上博文连接!