SpringBoot篇面试宝典

1.什么是SpringBoot,为什么要使用SpringBoot

  • 用来简化spring的使用难度,提供了各种启动器,使开发者能快速上手。
  • 快速开发、快速整合、配置简化、内嵌服务器

2.SpringBoot有哪些优点

1.容易上手,提高开发效率,为spring开发提供了一个更快更简单的开发框架
2.开箱即用,远离繁琐的配置
3.提供了一系列大型项目通用的非业务线功能,如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置
4.SpringBoot总结就是使编程变得简单、配置变得简单、部署变得见得、监控变得简单等等

3.SpringBoot的核心注解是什么,由哪几个注解组成

启动类上的注解@SpringBootApplication,也是SpringBoot核心注解。主要包含了:

  • @SpringBootConfiguration:组合了@Configuration注解,实现配置文件功能
  • @EnableAutoConfiguration:打开自动配置的功能
  • @ComponentScan:spring组件扫描

4.SpringBoot支持哪些日志框架?推荐和默认的日志框架是哪个

  • SpringBoot支持Java Util Logging ,Log4j,LockBack作为日志框架。
  • 如果使用starter启动器,SpringBoot将使用LogBack作为默认日志框架,但是不管是哪种日志框架都支持配置文件输出到控制台或者到文件中

5.SpringBoot starter的工作原理

个人理解SpringBoot就是由各种starter组合起来的,我们自己也可以开发starter

在SpringBoot启动时由@SpringBootApplication注解自动去maven中读取每个starter中的spring.factories文件(该文件里配置了所有需要被创建spring容器中的bean,并且进行自动配置吧bean注入到springContext中)。

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

  • 配置变更
  • JDK 版本升级
  • 第三方类库升级
  • 响应式 Spring 编程支持
  • HTTP/2 支持
  • 配置属性绑定
  • 更多改进与加强

7.SpringBoot支持什么前端模板

thymeleaf,freemarker,jsp,官方不推荐JSP会有限制

8.SpringBoot的缺点

emmm,不好说。由于不用自己配置,报错时很难定位

9.运行SpringBoot有哪几种方式

1.打包用命令或者放到容器中运行
2.用maven/Gradle插件运行
3.直接执行main方法

10.SpringBoot需要独立的容器运行吗

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

11.开启SpringBoot特性有哪几种方式

1.继承spring-boot-starter-parent项目
2.导入spring-boot-dependencies项目依赖

12.SpringBoot事务的使用

SpringBoot的事务很简单,首先使用注解EnableTransactionManagement开启事务后,然后在Service方法上添加注解Transactional便可。

13.Async异步调用方法

SpringBoot中使用异步调用很简单,只需要在方法上使用@Async注解即可实现方法的异步调用。(需要在启动类上加入@EnableAsync使异步调用@Async注解生效)

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@Service
public class AsyncService {
    //告诉Spring这是一个异步的方法
    @Async
    public void hello(){
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("数据正在处理...");
    }
}

14.如何在SpringBoot启动时运行一些特定的代码

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

15.SpringBoot有哪几种读取配置的方式

SpringBoot可以通过@PropertySource,@Value,@Environment,@ConfigurationProperties注解来绑定变量

16.什么是JavaConfig

spring JavaConfig是spring社区的产品,spring3.0引入,提供了配置springIOC容器的纯java方法。因此有助于避免使用xml配置。
优点:

  • 面向对象配置。由于配置被定义在JavaConfig中的类,因此用户可以充分利用Java中的面向对象功能。一个配置类可以继承另一个,重写它的@bean方法
  • 减少或消除xml配置。
  • 类型安全和重构友好。JavaConfig提供了一种类型安全的方法来配置spring容器。

常用的JavaConfig:

  • @Configuration:在类上使用,表示此类是配置类
  • @CompoScan:在配置类上使用。该注解默认会扫描该类所在报下的所有配置类,相当于context:component-scan。
  • @Bean:bean的注入,相当于
  • @EnableWebMvc:相当于xml的mvc:annotation-driven
  • @ImportResource:相当于xml的

17.SpringBoot的自动配置原理是什么

核心注解下回开启一个@EnableAutoConfiguration注解自动配置功能:

  • 从配置文件META_INF/Spring.factories加载可能用到的自动配置类
  • 去重,并将exclude和excludeName属性携带的类排除
  • 过滤,将满足条件(@Conditional)的自动配置类返回

18.如何理解SpringBoot配置加载顺序

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

  • properties文件;
  • YAML文件;
  • 系统环境变量;
  • 命令行参数;
  • 等等……

19.什么是yaml

yaml是一个人类可读的数据序列化语言。通常用于配置文件,与属性文件相比,在配置文件中添加复杂的属性,yaml文件更加结构化,而且更少混淆。可以看出yaml具有分层配置数据。

20.yaml配置的优势在哪

  • 配置有序,在一些特殊场景下,配置有序很关键
  • 简洁明了,支持数组,数组中的元素可以是基本数据类型也可以是对象
  • 相比properties配置文件,yaml有一个缺点,不支持@PropertySource注解导入自定义的yaml配置

21.SpringBoot是否可以使用xml配置

SpringBoot推荐使用Java配置而非xml配置,但是SpringBoot中也可以使用xml配置,通过@ImportResource注解可以引入一个xml配置

22.SpringBoot核心配置文件是什么?bootstrap.properties和applicationContext.properties有何区别

在结合springcloud时,经常会遇到bootstrap.properties。
SpringBoot核心的两个配置文件:

  • bootstrap(.yaml或者.properties):bootstrap由父-ApplicationContext加载的,比application优先加载,配置在应用程序上下文的引导阶段生效。,bootstrap里的属性不能被覆盖
  • application(.yaml或.properties):由ApplicationContext加载,用于SpringBoot项目的自动化配置

23.什么是spring Profiles

先在properties配置文件中配置2个数据源,创建分包mapper,使用@ConfigurationProperties读取properties中的配置,使用@MapperScan注册到对应的mapper包中

24.SpringBoot多数据源拆分的思路

①在service层的@TransactionManager中使用transactionManager指定DataSourceConfig中配置的事务
②使用jta-atomikos实现分布式事务管理

25.保护SpringBoot应用有哪些方法

  • 在生产中使用HTTPS
  • 使用Sync检查你的依赖关系
  • 升级到最新版本
  • 启用CSRF保护
  • 使用内容安全策略防止XSS攻击

26.如何实现SpringBoot应用程序的安全性

使用spring-boot-starter-security依赖项,并且添加安全配置。只需要少量代码,配置类必须扩展WebSecurityConfigurerAdapter并且覆盖其方法

27.比较一下SpringSecurity和Shiro各自优缺点

  • SpringSecurity是一个重量级的安全管理框架;shiro是一个轻量级的安全管理框架
  • SpringSecurity概念复杂,配置繁琐;shrio概念简单,配置简单
  • SpringSecurity功能强大;shiro功能简单

28.SpringBoot如何解决跨域问题

跨域跨域在前端通过JSON来解决,但是JSON只可以发生GET请求,无法发送其他类型的请求,在Restful风格的应用中,显得很鸡肋,因此推荐在后端通过(CORS,Cross-origin resource sharing)来解决跨域问题。这种解决方案并对SpringBoot特有,在传统的SSM框架中,就可以通过CORS来解决跨域问题

@Configuration
 public class CorsConfig implements WebMvcConfigurer {
     @Override
     public void addCorsMappings(CorsRegistry registry) {
         registry.addMapping("/**")
                 .allowedOrigins("*")
                 .allowCredentials(true)
                 .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                 .maxAge(3600);
     }
 }

29.SpringBoot中的监视器是什么

SpringBoot actualtor是spring启动框架中的重要功能之一。SpringBoot监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。监视器模块公开了一组可直接作为HTTP URL访问的TEST断点来检查状态

30.如何使用SpringBoot实现全局异常处理

SpringBoot提供了一种使用ControllerAdvice处理异常的非常有用的方法。通过实现ControllerAdvice类,来处理控制器类抛出的所有异常。

31.我们如何监视所有SpringBoot微服务

Spring Boot 提供监视器端点以监控各个微服务的度量。这些端点对于获取有关应用程序的信息
(如它们是否已启动)以及它们的组件(如数据库等)是否正常运行很有帮助。但是,使用监视器
的一个主要缺点或困难是,我们必须单独打开应用程序的知识点以了解其状态或健康状况。想象一
下涉及 50 个应用程序的微服务,管理员将不得不击中所有 50 个应用程序的执行终端。为了帮助
我们处理这种情况,我们将使用位于的开源项目。 它建立在 Spring Boot Actuator 之上,它提供
了一个 Web UI,使我们能够可视化多个应用程序的度量。

32.SpringBoot性能如何优化

  • 如果项目比较大,类比较多,不使用@SpringBootApplication,采用@Component指定扫包范围
    在项目启动时设置JVM初始化内存和最大内存相同
  • 将SpringBoot内置服务器由Tomcat设置为undertow

33.如何重新加载SpringBoot上的更改而无需重新启动服务器?如何热部署

这可以使用 DEV 工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式tomcat 将重新启动。Spring Boot 有一个开发工具(DevTools)模块,它有助于提高开发人员的生产力。Java 开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。开发人员可以重新加载 Spring Boot 上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。Spring Boot 在发布它的第一个版本时没有这个功能。这是开发人员最需要的功能。DevTools 模块完全满足开发人员的需求。该模块将在生产环境中被禁用。它还提供 H2 数据库控制台以更好地测试应用程序。

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

34.您使用了哪些starter maven依赖项

  • 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
    自定义的starter(有就说出来)

35.SpringBoot中的starter到底是什么

这个starter是基于spring已有的功能来实现的。它提出了一个自动化配置,一般命名为xxxAutoConfiguration,在这个配置类中通过条件注解来决定一个配置是否生效(条件注解就是spring原本就有的),然后他会提供一系列默认配置,也允许开发者根据实际情况自定义相关配置,然后通过类型安全的属性(spring.factories)注入,降噪和谐配置属性注入进来,新注入的属性就会替换默认属性。
说白了就一个或一系列jar包

36.SpringBoot中如何实现定时任务

使用@Schedule注解(在启动类中添加注@EnableScheduling //开启定时功能注解)

@Service
public class ScheduledService {
    //"0 * * * * 0-7" :秒 分 时 日 月 周几
    //"0 40 15 * * ?" :每天的15.40.0执行
    //"30 0/5 15,16 * * ?" : 每天的15点16点 每隔5分钟执行一次
    @Scheduled(cron = "0 40 15 * * ?") //@Scheduled(时间表达式)
    public void hello(){
        System.out.println("******************************");
        System.out.println("在特定的时间被执行了~");
    }
}

第三方框架Quartz

37.spring-boot-starter-parent 有什么用

创建SpringBoot项目时,默认都有parent的,这个parent就是spring-boot-starter-parent。

  • 定义了java编译版本为1.8
  • 使用UTF-8格式编码
  • 继承自spring-boot-dependencies ,这里面定义了依赖的版本
  • 执行打包操作的配置
  • 自动化的资源过滤
  • 自动化的插件配置
  • 针对application.properties和application.yaml的资源过滤,包括通过profile定义的不同环境的配置文件,如:application-dev.properties和application-dev.yaml

总结:就是打包 用的

38.SpringBoot如何实现打包

  • 进入项目目录在控制台输入mvn clean package,clean是清空- 已存在的项目包,package进行打包。
  • 点击左边选项栏中的Maven,先点击clean再进行package。

39.SpringBoot打成的jar和普通的jar有什么区别

  • SpringBoot项目最终打包成的jar是可执行jar,这种jar可以直接通过java -jar xxx.jar命令来运行,这种jar不可以作为普通的jar被其他项目依赖,即使依赖也无法使用其中的类。
  • SpringBoot的jar无法被其他项目依赖,主要是它和普通项目的jar结构不同。普通jar解压后就是包名,包里就是代码,而SpringBoot打包的可执行jar解压后,在\BOOT-INF\classes目录下才是我们的代码,因此无法被直接引用。如果非要引用,可以在pom.xml文件中增加配置,将SpringBoot项目打包成2个jar,一个可执行,一个可引用
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值