spring boot面试笔记

starter

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

Spring和SpringMVC:

1、Spring是一个一站式的轻量级的java开发框架,核心是控制反转(IOC)和面向切面(AOP),针对于开发的WEB层(springMvc)、业务层(Ioc)、持久层(jdbcTemplate)等都提供了多种配置解决方案;
2、springMvc是spring基础之上的一个MVC框架,主要处理web开发的路径映射和视图渲染,属于spring框架中WEB层开发的一部分;

SpringMvc和SpringBoot:
1、SpringMvc属于一个企业WEB开发的MVC框架,涵盖面包括前端视图开发、文件配置、后台接口逻辑开发等,XML、config等配置相对比较复杂。
2、SpringBoot框架相对于springMVC框架来说,更专注于开发微服务后台接口,不开发前端视图,同时遵循默认优于配置,简化了插件配置流程,不需要配置xml,相对springmvc,大大简化了配置流程;

简述什么是SpringBoot ?

(1)Spring Boot是由Pivotal团队提供的基于Spring的框架,该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
(2)Spring Boot集成了绝大部分目前流行的开发框架,就像Maven集成了所有的JAR包一样,Spring Boot集成了几乎所有的框架,使得开发者能快速搭建Spring项目。
(3)Spring Boot 是由 Pivotal 团队提供的基于 Spring 的全新框架,旨在简化 Spring 应用的初始搭建和开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

Spring 官网给的定义是:Spring Boot 是所有基于 Spring 开发项目的起点。Spring Boot 集成了绝大部分目前流行的开发框架,就像 Maven 集成了所有的 JAR 包一样,Spring Boot 集成了几乎所有的框架,使得开发者能快速搭建 Spring 项目。
Spring Boot 的核心设计思想是“约定优于配置”。基于这一设计原则,Spring Boot 极大地简化了项目和框架的配置。比如在使用 Spring 开发 Web 项目时,我们需要配置 web.xml、Spring 和 MyBatis 等,还需要将它们集成在一起。而使用 Spring Boot 一切将变得极其简单,它采用了大量的默认配置来简化这些文件的配置过程,只需引入对应的 Starters(启动器)。
Spring Boot 可以构建一切。设计它就是为了使用最少的配置,以最快的速度来启动和运行 Spring 项目

简述什么是Spring Boot Starter ?

Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,可以一站式集成 Spring和其他技术,而不需要到处找示例代码和依赖包。Spring Boot Starter的工作原理是:
Spring Boot在启动时扫描项目所依赖的JAR包,寻找包含spring.factories文件的JAR包,根据spring.factories配置加载AutoConfigure类,根据@Conditional注解的条件,进行自动配置并将Bean注入Spring Context

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

  1. application.properties:这是 Spring Boot 使用最广泛的配置文件类型,采用 key=value 的形式进行配置。
  2. application.yml:这是 Spring Boot 的另一种配置文件类型,采用 YAML 格式进行配置。相比于 properties 文件,它更加易读、易维护。
  3. application.xml:这是一种传统的 XML 格式的配置文件,在 Spring Boot 中并不是很常见。
    这些配置文件类型的区别主要在于其格式,properties 文件使用 key=value 的格式,YAML 文件则采用缩进来表示层级关系,XML 文件则采用 XML 元素表示配置信息。除此以外,在配置文件中可以定义不同的配置项,比如数据源配置、日志配置、服务端口配置等。不同类型的配置文件在配置项上的区别并不大。同时,Spring Boot 还支持通过环境变量、命令行参数的方式进行配置。

spring boot 自动配置

阐述 Spring Boot 自动配置原理 ?

spring boot自动装配

注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自动配置的核心,
@EnableAutoConfiguration 给容器导入META-INF/spring.factories 里定义的自动配置类。
筛选有效的自动配置类。
每一个自动配置类结合对应的 xxxProperties.java 读取配置文件进行自动配置功能

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

Spring Boot 中读取配置文件有以下 5 种方法:
使用 @Value 读取配置文件。
使用 @ConfigurationProperties 读取配置文件。
使用 Environment 读取配置文件。
使用 @PropertySource 读取配置文件。
使用原生方式读取配置文件。

简述SpringBoot配置加载顺序

SpringBoot配置文件的加载顺序
1、项目内配置文件加载顺序
SpringBoot项目启动会扫描以下位置的application.properties或者application.yml文件作为SpringBoot的默认配置文件,具体的目录位置见下图。
file:./config/(项目根路径下的config文件夹) file:./(项目根路径) classpath:/config/(类路径下的config文件夹) classpath:/(类路径)
上面四个位置的配置文件位置,优先级由高到底,高优先级的配置会覆盖低优先级的配置,没有的配置进行互补配置。
2、外部配置文件
当我们把项目打包后,如何在配置SpringBoot项目呢?
1)命令行参数
项目打包好以后,我们可以使用命令行参数的形式,来改变想改变的几个参数,直接在启动命令后添加启动参数,如果有多个配置项,可以用空格分开。
2)spring.config.location
在第一种情况下,如果参数数量过多,我们就要考虑配置文件了,我们在启动项目的时候可以用spring.config.location来指定配置文件的新位置。指定的配置文件和jar包中默认加载的配置文件共同起作用形成互补配置。

实际开发

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

RequestMapping具有类属性的,可以进行GET、POST、PUT或者其他的注释中具有的请求方法。
GetMapping是Get请求方法中的一个特例,它只是RequestMapping的一个延伸,目的是为了提高清晰度

面试题:SpringBoot 实现热部署有哪几种方式?

1、模板热部署

    在SpringBoot中,模板引擎的页面默认是开启缓存的,如果修改了页面的内容,则刷新页面是得不到修改后的页面的,因此我们可以在application.properties中关闭模版引擎的缓存,如下:

    Thymeleaf的配置:

spring.thymeleaf.cache=false

    FreeMarker的配置:

spring.freemarker.cache=false

    Groovy的配置:

spring.groovy.template.cache=false

    Velocity的配置:

spring.velocity.cache=false

2、使用调试模式Debug实现热部署

此种方式为最简单最快速的一种热部署方式,运行系统时使用Debug模式,无需装任何插件即可,但是无发对配置文件,方法名称改变,增加类及方法进行热部署,使用范围有限。

3、spring-boot-devtools

    在Spring Boot 项目中添加 spring-boot-devtools依赖即可实现页面和代码的热部署

4、Spring Loaded

此种方式与Debug模式类似,适用范围有限,但是不依赖于Debug模式启动,通过Spring Loaded库文件启动,即可在正常模式下进行实时热部署。此种需要在 run confrgration 中进行配置。

5、JRebel

Jrebel是Java开发最好的热部署工具,对Spring Boot 提供了极佳的支持,JRebel为收费软件,试用期14天。,可直接通过插件安装。

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

·配置变更
在2.x 中废除了一些1.x 中的配置,并增加了许多新配置,
·依赖JDK版本升级
2.x至少需要JDK 8 的支持,2.x里面的许多方法应用了JDK 8的许多高级新特性,所以你要升级到2.0 版本,先确认你的应用必须兼容JDK 8。另外,2.x开始了对JDK 9的支持。
·第三方类库升级
2.x 对第三方类库升级了所有能升级的稳定版本,一些值得关注的类库升级我给列出来了。

  1. Spring Framework 5+
  2. Tomcat 8.5+
  3. Flyway 5+
  4. Hibernate 5.2+
  5. Thymeleaf 3+
    ·配置属性绑定
    在1.x中,配置绑定是通过注解@ConfigurationProperties来注入到Spring环境变量中的。
    在2.x中,配置绑定功能有了些的改造,在调整了1.x中许多不一致地方之外,还提供了独立于注解之外的API来装配配置属性。并增加了属性来源,这样你就能知道这些属性是从哪个配置文件中加载进来的

bootstrap.properties和application.properties 有何区别

1 bootstrap(.yml 或者 .properties):boostrap 由父 ApplicationContext 加载的,比applicaton优先加载,配置在应用程序上下文的引导阶段生效。一般来说我们在 SpringCloud Config
 或者Nacos中会用到它。且boostrap里面的属性不能被覆盖;
2 application (.yml或者.properties):由ApplicatonContext 加载,用于 SpringBoot项目的自动化配置。

spring boot 实现异常处理

@ControllerAdvice+@ExceptionHandler实现(推荐)底层逻辑是调用底层的ExceptionHandlerExceptionResolver,如果返回json格式的数据也可以使用@RestControllerAdvice@ExceptionHandler可以在参数中指定异常的类型。

如何实现Spring Boot应用程序的安全性

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

Spring Boot 中如何处理事务?使用的任何注释

Spring Boot 提供了一个名为“@Transactional”的注解来管理事务。

简述SpringBoot多数据源拆分的思路

定义不同的数据源配置

  1. 在应用代码中,使用 @ConfigurationProperties 注解将数据源配置读取到 Java Bean 中

  2. 为每个数据源创建数据源实例,并通过 @Bean 注解将数据源实例注册到 Spring 容器

  3. 在需要使用数据源的地方,通过 @Autowired 注解注入数据源实例即可使用

SpringBoot如何配置log4j?

1.除去默认logback日志依赖

  1. 添加对log4j的依赖
  2. 3.在配置文件中添加
    #logging.config=src/main/resources/log4j.properties
    4.添加log4j.properties日志文件

SpringBoot中如何实现定时任务?

定时任务也是一个常见的需求,Spring Boot 中对于定时任务的支持主要还是来自 Spring 框架。
在 Spring Boot 中使用定时任务主要有两种不同的方式,
一个就是使用 Spring 中的 @Scheduled 注解,
另一个则是使用第三方框架 Quartz。
使用 Spring 中的 @Scheduled 的方式主要通过 @Scheduled 注解来实现。
使用 Quartz ,则按照 Quartz 的方式,定义 Job 和 Trigger 即可。

简述什么是Spring Profiles?

  1. 概述

Profiles是框架的核心功能——允许我们将 bean 映射到不同的Profile——例如,dev、test 和 prod。

然后我们可以在不同的环境中激活不同的Profiles以仅引导我们需要的 bean。

简单描述Springboot集成MyBatis

添加mybatis的starter maven依赖

org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.2

在mybatis的接口中 添加@Mapper注解
在application.yml配置数据源信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值