spring|京东二面上来就问我springboot?还好我早有准备

spring|京东二面上来就问我springboot?还好我早有准备

文章图片

spring|京东二面上来就问我springboot?还好我早有准备

文章图片

spring|京东二面上来就问我springboot?还好我早有准备

文章图片

spring|京东二面上来就问我springboot?还好我早有准备

文章图片

spring|京东二面上来就问我springboot?还好我早有准备

文章图片

【spring|京东二面上来就问我springboot?还好我早有准备】spring|京东二面上来就问我springboot?还好我早有准备

文章图片

spring|京东二面上来就问我springboot?还好我早有准备

文章图片

spring|京东二面上来就问我springboot?还好我早有准备

文章图片

spring|京东二面上来就问我springboot?还好我早有准备

文章图片

spring|京东二面上来就问我springboot?还好我早有准备

文章图片

spring|京东二面上来就问我springboot?还好我早有准备

文章图片

spring|京东二面上来就问我springboot?还好我早有准备

1.SpringBoot 简介SpringBoot 是简化 Spring 应用开发的一个框架 。 他整合了 Spring 的技术栈 , 提供各种标准化的默认配置 。 使得我们可以快速开发 Spring 项目 , 免掉 xml 配置的麻烦 。 降低 Spring 项目的成本 。
2. SpringBoot 的优缺点使编码配置部署都变得很简单 。 缺点可能就是自动注入的 bean, 不是特别清楚 , 有可能会冲突 。
3. SpringBoot 如何固定版本一种是 parenet 的时候直接固定 。
一种是通过 dependcy 来固定 , 因为可能当前项目已经有父项目 。

4. SpringBoot 的使用方式maven 中父项目导入 Springboot 的启动器 。 然后编写一个主程序打上 SpringBootApplication 注解 。 通过 run 方法就可以启动 。
5. SpringBoot 自动配置原理首先可以看到启动类上面有一个 SpringBootApplication 注解 , 点进去之后 , 又 EnableAutoConfiguration 注解 。 然后再进去 , 发现有个 @Import 注解 , 其导入的是 EnableAutoConfigurationImportSelector 类 。 再看这个类 , 他是集成了一个抽象的 AutoConfigutationimportSelector。 再往上就是接口 ImportSelector。 然后如果实现了接口的 selectImport 接口就会将其中的返回的数组全部加载到 Spring 容器中 。 其中实现的最主要的地方是 getCandidateConfigurations 方法 。 那个方法内部实现就是回去读取 meta-inf 下的 spring.factories。 所以主要在那里面配置的类就都会被自动加载 。
6. SpringBoot 配置文件注入
注入实体类中 , 实体类可以使用 @ConfigurationProperties(prefix = \"person\") 注解 。

7. @Value 和 @ConfigurationProperties 比较
8.@PropertySource加载指定的配置文件 。 如下 , 如果不声明的话 , 将从主配置文件加载 。

9.@ImportResource导入 Spring 的配置文件 , 让配置文件里面的内容生效;这种方式比如一个类没有使用 @Componet 注解注册进容器 , 则使用自动装配 autowired 找不到 。 引入文件后 , 即可找到 。
Spring Boot 里面没有 Spring 的配置文件 , 我们自己编写的配置文件 , 也不能自动识别;
想让 Spring 的配置文件生效 , 加载进来; @**ImportResource** 标注在一个配置类上

10. springboot 的 profile 加载在配置文件的时候 , 我们可以建立多个 。 用 - 进行结尾 。 通过主配置文件 , 配置 profiles 的 active 就可以指定加载文件 。
在同一个文件中 ,yml 文件支持文档块的写法 , 为 ---。

11. SpringBoot 激活指定 profile 的几种方式第一种:直接在配置文件中通过 active 指定
第二种:通过 java -jar 的参数指定


第三种:通过虚拟机参数

12. SpringBoot 项目内部配置文件加载顺序顺序如下;


优先级由高到底 , 高优先级的配置会覆盖低优先级的配置;
SpringBoot 会从这四个位置全部加载主配置文件; ** 互补配置 ** ;
我们还可以通过 spring.config.location 来改变默认的配置文件位置
项目打包好以后 , 我们可以使用命令行参数的形式 , 启动项目的时候来指定配置文件的新位置;指定配置文件和默认加载的这些配置文件共同起作用形成互补配置;

13. SpringBoot 外部配置文件加载顺序这个挺多的 , 我们就几个重要的 。
高优先级的会覆盖低优先级的 。
命令行上的参数配置是优先级最高的 。
jar 包外的带 profile 的配置文件 。
jar 包内的带 profile 的配置文件 。
jar 包外的不带 profile 的配置文件 。
jar 包内的不带 profile 的配置文件 。
14. 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 ==== 指定文件中日志输出格式
15. SpringBoot 如何扩展 SpringMVC 的配置通过建立自己的类继承 WebMvcConfigurerAdapter, 在类上面打上注解 @Configuration。 然后重写里面的方法即可 。 容器中的所有的 WebMvcConfigurer 会一起起作用 。

如果我们不想使用 mvc 的自动配置 , 全部使用自己的 。 可以在配置类上增加注解 @EnableWebMvc。 这个注解可以导入一个 webmvcconfigurationsupport 的类 。 然后 mvc 的自动配置类上的注解有这么一句话 , 有一个条件注解 , 当没有上面那个类的时候 , 才生效 。
16. SpringBoot 如何注册 filter,servlet,listener编写好一个 servlet 后 , 声明一个类 , 返回 ServletRegistrationBean。 通过里面的方法将 servlet 包装一下返回 。


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


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


17. SpringBoot 切换成 undertow先排除掉 tomcat, 然后再引入 undertow 就行了 。

18. SpringBoot 的任务异步任务在启动类上 , 增加注解 @EnableAsync, 此时就开启了 。 然后对于异步的方法 , 打上注解 @Async。
定时任务 , 在启动类上 , 打上注解 @EnableScheduling, 需要定时的方法使用 @Scheduled 注解 。 这里面分为秒 , 分 , 小时 , 日期 , 月份 , 星期 。

邮件任务
引入邮件任务启动器 。 在配置文件中进行配置 。 通过 javamailsenderimpl 来发送 。 可以发送简单的邮件和复杂的邮件 SimpleMailMessage 和 MimeMessage。
19. SpringBoot 热部署jrebal 是收费的 。
一般使用 springboot-dev-tool。 通过 ctrl+f9 进行热部署 。 开启 idea 的自动编译 。
20. SpringBoot 的监控引入 actuatro 的监控器 。 配置文件需要配置安全关闭 。 management.security.enabled=false。 可以配置 endpoint 的 shutdown 的 enable 开启 , 就可以直接关闭了 。
21. SpringBoot 整合 redis引入 redis 的启动器 。 data-redis。 引入后再配置文件进行配置 redis 的 host。 然后通过 redistemplate 就可以进行操作了 。 会乱码 , 默认使用的是 jdk 的序列化 json 器 。 需要改成 jackson。 自己实现一个 RedisTmeplate。 泛型为 object,object。 再实现 CacheManager。 就会发现缓存变成 json 形式了 。

由于篇幅有限 , 本文就先总结整理这么多 , 需要完整版【2020年大厂面试题总结】请后台私聊小编:666 , 直接领取!


    推荐阅读