一篇博客带你轻松应对Springboot面试

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
日志服务 SLS,月写入数据量 50GB 1个月
简介: 一篇博客带你轻松应对Springboot面试
  1. SpringBoot简介

SpringBoot是简化Spring应用开发的一个框架。他整合了Spring的技术栈,提供各种标准化的默认配置。使得我们可以快速开发Spring项目,免掉xml配置的麻烦。降低Spring项目的成本。

  1. SpringBoot的优缺点

使编码配置部署都变得很简单。缺点可能就是自动注入的bean,不是特别清楚,有可能会冲突。

  1. SpringBoot如何固定版本

一种是parenet的时候直接固定。

一种是通过dependcy来固定,因为可能当前项目已经有父项目。

  1. SpringBoot的使用方式

maven中父项目导入Springboot的启动器。然后编写一个主程序打上SpringBootApplication注解。通过run方法就可以启动。

  1. SpringBoot自动配置原理

首先可以看到启动类上面有一个SpringBootApplication注解,点进去之后,又EnableAutoConfiguration注解。然后再进去,发现有个@Import注解,其导入的是EnableAutoConfigurationImportSelector类。再看这个类,他是集成了一个抽象的AutoConfigutationimportSelector。再往上就是接口ImportSelector。然后如果实现了接口的selectImport接口就会将其中的返回的数组全部加载到Spring容器中。其中实现的最主要的地方是getCandidateConfigurations方法。那个方法内部实现就是回去读取meta-inf下的spring.factories。所以主要在那里面配置的类就都会被自动加载。

  1. SpringBoot配置文件注入

注入实体类中,实体类可以使用@ConfigurationProperties(prefix = "person")注解。

  1. @Value和@ConfigurationProperties比较
  2. @PropertySource

加载指定的配置文件。如下,如果不声明的话,将从主配置文件加载。

  1. @ImportResource

导入Spring的配置文件,让配置文件里面的内容生效;这种方式比如一个类没有使用@Componet注解注册进容器,则使用自动装配autowired找不到。引入文件后,即可找到。

Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;

想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上

  1. springboot的profile加载

在配置文件的时候,我们可以建立多个。用-进行结尾。通过主配置文件,配置profiles的active就可以指定加载文件。

在同一个文件中,yml文件支持文档块的写法,为---。

  1. SpringBoot激活指定profile的几种方式

第一种:直接在配置文件中通过active指定

第二种:通过java -jar 的参数指定

第三种:通过虚拟机参数

  1. SpringBoot项目内部配置文件加载顺序

顺序如下;

优先级由高到底,高优先级的配置会覆盖低优先级的配置;

SpringBoot会从这四个位置全部加载主配置文件;互补配置

我们还可以通过spring.config.location来改变默认的配置文件位置

项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默认加载的这些配置文件共同起作用形成互补配置;

  1. SpringBoot外部配置文件加载顺序

这个挺多的,我们就几个重要的。

高优先级的会覆盖低优先级的。

命令行上的参数配置是优先级最高的。

jar包外的带profile的配置文件。

jar包内的带profile的配置文件。

jar包外的不带profile的配置文件。

jar包内的不带profile的配置文件。

  1. Springboot日志关系

SpringBoot默认使用的slf4j+logback。引入logging-starter就可以使用。能自动适配其他日志。只需要将日志里面的commons-logging移除。就会自动引入其他日志。

使用LoggerFactory可以获得logger。通过logger就可以记录日志。

日志的一些配置

logging.level.com.atguigu=trace 指定打印级别

logging.file=G:/springboot.log 指定日志生成路径

logging.path=/spring/log 指定日志生成相对路径

logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n 指定控制台输出格式

logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== 指定文件中日志输出格式

  1. SpringBoot如何扩展SpringMVC的配置

通过建立自己的类继承WebMvcConfigurerAdapter,在类上面打上注解@Configuration。然后重写里面的方法即可。容器中的所有的WebMvcConfigurer会一起起作用。

如果我们不想使用mvc的自动配置,全部使用自己的。可以在配置类上增加注解@EnableWebMvc。这个注解可以导入一个webmvcconfigurationsupport的类。然后mvc的自动配置类上的注解有这么一句话,有一个条件注解,当没有上面那个类的时候,才生效。

  1. SpringBoot如何注册filter,servlet,listener

编写好一个servlet后,声明一个类,返回ServletRegistrationBean。通过里面的方法将servlet包装一下返回。

编写一个filter。通过FilterRegister包装。

编写一个listener,实现注册bean。

  1. SpringBoot切换成undertow

先排除掉tomcat,然后再引入undertow就行了。

  1. SpringBoot的任务

异步任务在启动类上,增加注解@EnableAsync,此时就开启了。然后对于异步的方法,打上注解@Async。

定时任务,在启动类上,打上注解@EnableScheduling,需要定时的方法使用@Scheduled注解。这里面分为秒,分,小时,日期,月份,星期。

邮件任务

引入邮件任务启动器。在配置文件中进行配置。通过javamailsenderimpl来发送。可以发送简单的邮件和复杂的邮件SimpleMailMessage和MimeMessage。

  1. SpringBoot热部署

jrebal是收费的。

一般使用springboot-dev-tool。通过ctrl+f9进行热部署。开启idea的自动编译。

  1. SpringBoot的监控

引入actuatro的监控器。配置文件需要配置安全关闭。management.security.enabled=false。可以配置endpoint的shutdown的enable开启,就可以直接关闭了。

  1. SpringBoot整合redis

引入redis的启动器。data-redis。引入后再配置文件进行配置redis的host。然后通过redistemplate就可以进行操作了。会乱码,默认使用的是jdk的序列化json器。需要改成jackson。自己实现一个RedisTmeplate。泛型为object,object。再实现CacheManager。就会发现缓存变成json形式了。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
4天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的博客系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的博客系统的详细设计和实现(源码+lw+部署文档+讲解等)
17 5
|
7天前
|
前端开发 Dubbo Java
spring面试题_spring mvc面试题_springboot面试题库
spring面试题_spring mvc面试题_springboot面试题库
|
16天前
|
设计模式 NoSQL Java
网易面试:SpringBoot如何开启虚拟线程?
虚拟线程(Virtual Thread)也称协程或纤程,是一种轻量级的线程实现,与传统的线程以及操作系统级别的线程(也称为平台线程)相比,它的创建开销更小、资源利用率更高,是 Java 并发编程领域的一项重要创新。 > PS:虚拟线程正式发布于 Java 长期支持版(Long Term Suort,LTS)Java 21(也就是 JDK 21)。 虚拟线程是一种在 Java 虚拟机(JVM)层面实现的逻辑线程,不直接和操作系统的物理线程一一对应,因此它可以减少上下文切换所带来的性能开销。 操作系统线程、普通线程(Java 线程)和虚拟线程的关系如下: ![image.png](https:
26 0
网易面试:SpringBoot如何开启虚拟线程?
|
1天前
|
监控 NoSQL Java
【面试高频 time:】SpringBoot整合Redisson实现分布式锁
【面试高频 time:】SpringBoot整合Redisson实现分布式锁
7 0
|
30天前
|
JavaScript Java 测试技术
基于springboot+vue.js的精简博客系统附带文章和源代码设计说明文档ppt
基于springboot+vue.js的精简博客系统附带文章和源代码设计说明文档ppt
20 2
|
8天前
|
安全 前端开发 Java
杨校老师课堂之Spring Boot框架面试题【开发工程师面试前必看】
杨校老师课堂之Spring Boot框架面试题【开发工程师面试前必看】
16 0
|
9天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的博客小程序的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的博客小程序的详细设计和实现(源码+lw+部署文档+讲解等)
|
15天前
|
前端开发 Java 开发工具
一款基于 Spring Boot 的现代化社区(论坛/问答/社交网络/博客)
一款基于 Spring Boot 的现代化社区(论坛/问答/社交网络/博客)
15 0
|
17天前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的精简博客系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的精简博客系统附带文章源码部署视频讲解等
10 0
|
21天前
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的博客小程序的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的博客小程序的详细设计和实现
10 0