SpringBoot面试

SpringBoot 面试题

2019-03-21  本文已影响157人  bullion

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

Spring:

Spring 框架的特征是依赖注入。所有 Spring 模块不是依赖注入就是 IOC 控制反转。

SpringMVC:

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

SpringBoot:

Spring 和 SpringMVC 的问题在于需要配置大量的参数,Spring Boot 则通过一个自动配置和启动的项来目解决这个问题。简省了繁重的配置,能快速上手。

为什么要用SpringBoot?

Spring Boot 优点非常多,如:

独立运行

简化配置

简化部署

上手容易

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

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

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

@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置

@ComponentScan:Spring组件扫描。


什么是自动配置?

Spring 查看已存在的应用程序的配置。在此基础上,Spring Boot 提供了配置应用程序和框架所需要的基本配置。这就是自动配置。

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

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

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

Spring Boot 需要独立的容器运行吗?

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

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

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

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

可以实现接口 ApplicationRunner 或者 CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个 run 方法

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

Spring Boot 可以通过 @PropertySource,@Value,@Environment, @ConfigurationProperties 来绑定变量

什么是 Spring Boot Stater ?

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

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

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

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

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

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

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

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

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

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

Spring Boot 支持 Java Util Logging, Log4j2, Lockback 作为日志框架,如果你使用 Starters 启动器,Spring Boot 将使用 Logback 作为默认日志框架


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

主要有两种方式:

    Spring Loaded

    Spring-boot-devtools

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

spring-boot-maven-plugin 提供了一些像 jar 一样打包或者运行应用程序的命令。

spring-boot:run 运行你的 SpringBooty 应用程序。

spring-boot:repackage 重新打包你的 jar 包或者是 war 包使其可执行

spring-boot:start 和 spring-boot:stop 管理 Spring Boot 应用程序的生命周期(也可以说是为了集成测试)。

spring-boot:build-info 生成执行器可以使用的构造信息。

Spring Boot 可以兼容老 Spring 项目吗,如何做?

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

Spring Boot 如何定义多套不同环境配置?

提供多套配置文件

    applcation.properties

    application-dev.properties

    application-test.properties

    application-prod.properties

什么是嵌入式服务器?我们为什么要使用嵌入式服务器呢?

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

RequestMapping 和 GetMapping 的不同之处在哪里?

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

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

JPA 和 Hibernate 有哪些区别?

JPA 是一个规范或者接口

Hibernate 是 JPA 的一个实现

SpringBoot热部署?

Spring Boot有一个开发工具(DevTools)模块,它将文件更改自动部署到服务器并自动重启服务器。

什么是YAML?

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

总结Spring Boot Starter的工作原理

Spring Boot Starter的工作原理如下:

1. Spring Boot 在启动时扫描项目所依赖的JAR包,寻找包含spring.factories文件的JAR

2. 根据spring.factories配置加载AutoConfigure类

3. 根据 @Conditional注解的条件,进行自动配置并将Bean注入Spring Context

谈谈你对Spring Boot的认识

spring Boot是一个开源框架,它可用于创建可执行的Spring应用程序,采用了习惯优于配置的方法。


springboot配置监听器、过滤器和拦截器

监听器继承HttpSessionListener 

过滤器继承Filter 

拦截器继承HandlerInterceptor

配置类注解@Configuration实现WebMvcConfigurer

拦截器过滤器的区别

拦截器可以访问action上下文、值栈里的对象而过滤器不能

拦截器只能对action请求起作用,拦截器可以多次被调用,过滤器可以对几乎所有的请求起作用

Filter在Servlet前后作用,Interceptor在方法的前后作用,异常抛出前后,具有更大的弹性。所以优先使用拦截器。

springboot常用注解?

@SpringBootApplication

在系统启动类里面,都加入了此启动注解,此注解是个组合注解,包括了@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan注解

@Controller 和 @RestController

原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式。

@RequestMapping

一个用来处理请求地址映射的注解,可用于类或方法上

@RequestBody和@ResponseBody

@RequestBody注解允许request的参数在reqeust体中,常常结合前端POST请求,进行前后端交互。

@ResponseBody注解支持将的参数在reqeust体中,通常返回json格式给前端。

@PathVariable、@RequestParam、@RequestAttribute

@PathVariable用来接收参数,如/path/001,可接收001作为参数

@RequestParam 用来接收URL中的参数,如/param?id=001,可接收001作为参数

@RequestAttribute用于访问由过滤器或拦截器创建的、预先存在的请求属性,效果等同与request.getAttrbute().

@Component、@Service、@Repository

@Component 最普通的组件,可以被注入到spring容器进行管理

@Repository 作用于持久层

@Service 作用于业务逻辑层

通常一些类无法确定是使用@Service还是@Component时,注解使用@Component,比如redis的配置类等

@ModelAndView

ModelAndView是SpringMVC视图机制,代表了Spring Web MVC中呈现画面时所使用的Model与View,由于Java一次只能返回一个物件,所以ModelAndView的作用封装这两个物件,以方便您一次返回Model与View这两个物件。

上一篇下一篇

猜你喜欢

热点阅读