springboot常见面试题
一、前言
微服务应用中,springboot最常用的java框架。本文将列举springboot相应的面试知识点,来祝同学一臂之力。
对于springboot还不熟悉的同学,可以先花费半小时时间网上随便找一个入门案例去敲一遍,或者通过下面的简单介绍先了解一下springboot的入门操作。
想查看更多的文章请关注公众号:IT巡游屋
二、springboot入门
springboot的学习天梯图
2.1、springboot的快速入门
需求:搭建SpringBoot工程,定义HelloController.hello()方法,返回”Hello SpringBoot!”。
实现步骤:
①创建Maven项目
②导入SpringBoot起步依赖
<!--springboot工程需要继承的父工程-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.9.RELEASE</version>
</parent>
<dependencies>
<!--web开发的起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
③定义Controller
@RestController
public class HelloController {
@RequestMapping("/run")
public String hello(){
return " run Spring Boot !";
}
}
④编写引导类
/**
* 引导类。 SpringBoot项目的入口
*/
@SpringBootApplication
public class HelloApplication {
public static void main(String[] args) {
SpringApplication.run(HelloApplication.class,args);
}
}
⑤启动测试
结论:基于约定大于配置的思想,springboot极大的优化了spring 的繁琐配置,让项目非常迅速的就能启动起来,同时避免了很多jar包的冲突问题。
三、面试题
面试题一:说说你对springboot的了解?
SpringBoot其实就是对spring的一个扩展,可以快速让spring项目运行起来,作为开发工程师只需要把重心放到业务代码中,不需要花费过多的精力去考虑配置问题,springboot宣扬的是约定优于配置的思想,因此springboot会默认使用一些常用的配置。开发者也能自己去配置一些不常用的配置参数。使用springboot并不能去增强spring的功能,但是它却能让spring项目更快的运行起来。
面试题二:Springboot、SpringMvc和 Spring 有什么区别?
1、Spring
对于spring,同学都很熟悉,我们就简单的去说,Spring作为java框架为项目开发做了强大的架构支撑。spring内部提供了很多优秀的功能,如IOC,AOP,依赖注入等。spring维护一个容器来管理全局的bean对象。
不仅如此,spring还提供了JDBCTemplate 、SpringMVC 、SpringSecurity、Spring Test
这些模块,大大减少了程序的开发时间,增加了开发效率。
使用spring的IOC控制反转和DI依赖注入,来管理我们bean。也能使用AOP面向切面来增强程序功能。以上操作spring均能够以低耦合的方式进行,使用spring我们可以开发出低耦合程序。
2、Spring MVC
Spring MVC 是spring的一个表现层模块。spring MVC除了具有spring的特征以外还提供了很多组件,在Spring MVC中所有的请求由DisPatcherServlet统一接收,并调用不同的组件协作处理,例如处理器适配器,处理器,视图解析器等等,组件之间低耦合,我们可以自由选择使用什么组件,甚至还可以自定义开发对应的组件。毫无疑问springmvc让web开发低耦合同时自由度更高。
3、SpringBoot
Spring 和 SpringMVC 的问题在于需要完成大量的配置,并且导入大量的坐标。且很多坐标和配置几乎适用于每一个spring项目,但是我们不得不去千篇一律的配置它们。而且使用的时候还有可能因为坐标太多一时疏忽造成版本冲突等问题。
spring的依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
Spring Boot算是在Spring的基础上扩展出来的一个框架,使用springboot我们将不用再写spring的xml配置,我们甚至不需要去考虑依赖版本冲突的问题,springboot会自动集成对应的可靠的依赖版本。使用springboot可以让项目更快速的搭建起来。
注意:Spring Boot 并不是对 Spring 功能上的增强,而是提供了一种快速使用 Spring 的方式。
springboot的web依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.0.5.RELEASE</version>
</dependency>
面试题三:什么是自动配置?
在spring中我们要完成依赖注入可以通过@Autowired注解实现,但要求注入与被注入的对象都应该被容器所管理,才能完成依赖注入过程,如果依赖注入的双方任一不在容器中,则必然会注入失败。我们通常会在类上定义@Component等注解来将对象交给容器管理,也可以xml中配置标签完成这个过程。若是将第三方提供的类交由容器管理的话可能会更复杂一点,得根据第三方类的实现方式进行相应的xml配置。
但对于spring boot而言,可以使用@EnableAutoConfiguration注解开启自动配置,自动配置可以让我们配置好的类,自动交由spring容器所管理。对于第三方的类也有很好的支持,要是使用者在项目中遇到需要注入例如,如果你想使用 Sping 和 JPA 访问数据库,只需要你的项目包含 spring-boot-starter-data-jpa 依赖项,你就可以完美进行。
面试题四:说说什么是Starter?
starter作为SpringBoot的一个特色,大大提高了项目的构建效率,极大的简化了传统模式下的配置和依赖管理。
1)之前的实现方式:
starter出现以前,如果我想要在Spring中通过mybatis操作数据库,那我可能需要做以下操作
- 在pom文件里引入连接池、数据库驱动包等坐标
- 引入spring ,springmvc,mybatis框架的坐标
- 在多个xml里配置一堆参数信息
- 重复的调整程序,修改配置,到结果成功为止
你要明白的是,我们每次新建一个这样的项目,以上操作都要重复做一次。可能我们在首次创建项目之时,是通过百度上搜索了一些坐标和配置,消耗了很多时间排除了很多奇怪bug之后,项目最后能正常跑通了。可能也有很多经验丰富的同学会用笔记把这些操作记录起来,包括完整的步骤或者要用到的配置和坐标,下一回再次创建这样的项目的时候,就不用再百度上耗费时间了,只用按照自己记录的笔记一步一步完成即可,对于配置文件和坐标则可以通过拷贝笔记的方式快速引入。
之前我们就这样实现的,这里会产生几个问题:
- 配置过程假设太过麻烦,像这样很多步骤的操作要多出很多出问题的可能
- 经常性的复制粘贴,不符合DRY原则
- 由于配置的内容过多,我们首次实现的时候会耗费大量的时间
- 使用springboot后:
我们可以通过导入starter坐标,相应的starter会将所需的jar坐标都传来依赖进来,这样就防止了我们自己去引入坐标而造成的冲突或者百度坐标版本所造成的问题。starter有很多类别,不同的starter所包含的jar包坐标也各不相同,他们内部可能实现方式也有所不同。
不同的starter的实现方式也不同,不过都是由两部分组合而成:其一是ConfigurationProperties,其二是AutoConfiguration。在约定大于配置的大前提下,springboot会让ConfigurationProperties来记录我们的配置,且会为配置附上最常用的参数作为默认值,这样的话在我们什么都不操作默认值就起作用了,这个是非常有用的,极大的减少了开发配置。springboot会让这些配置聚集在一个配置文件中application.properties。
spring项目的配置文件:
springboot的配置文件:
关系图:
可以看出,使用springboot让我们的配置更加简洁。
面试题五:说说常用的一些springboot Starter?
1)spring-boot-starter-web
包含springmvc ,嵌入 Tomcat 以及web开发所必须的全套组件
2)mybatis-spring-boot-starter
包含mybatis操作数据库所必须的全套组件
3)spring-boot-starter-test
包含测试所必须的全套组件
4)spring-boot-starter-thymeleaf
包含Thymeleaf视图整合的全套组件
5)spring-boot-starter-actuator
包含生产级监控的全套组件
6)spring-boot-starter-security
包含SpringSecurity 安全认证授权的全套组件
7)spring-boot-starter-data-jpa
包含 Hibeernate和 Spring Data JPA的全套组件
面试题六:说说springboot 的核心注解?
@SpringBootApplication是启动类上的核心注解,主要包含了下面三个注解
1)@SpringBootConfiguration:集成了 @Configuration 处理配置文件
2)@EnableAutoConfiguration:springboot的自动配置开启
3)@ComponentScan:扫描spring组件