5.SpringSpringBoot八股
Spring,Spring MVC,Spring Boot 之间什么关系?
Spring就是整个Spring框架的整体,包含AOP、JDBC、Spring MVC等等模块
SpringBoot是Spring的精简版,它在Spring的基础上添加了自动装配、内置tomcat服务器等功能,使得代码量更少,同时还添加了很多方便的注解,比如@Component等。
SpringMVC就是Spring框架专门用于web应用开发的模块,方便我们使用Model、View、Controller的三层架构。比如SpringBoot中的controller层、Service层、Mappler层,Entity层等等。
Spring相关
IOC、DI
ioc,控制反转,就是把创建对象实例的权力移交给了IOC容器来管理,创建好的实例都存储在单例池中
DI,依赖注入,就是把存在IOC容器中 的对象注入到该使用的地方去。
Bean的生命周期
1、BeanDefination的创建,在BeanFactory创建之后,把它放入BeanDefinitationMap中
2、根据BeanDefination,利用反射,实例化Bean对象
3、对实例化的Bean对象进行属性注入:
如果有setter方法,执行setter方法,
如果有Aware回调接口,则执行回调方法初始化对应的BeanName、BeanClassLoader、BeanFactory等
4、初始化
执行BeanPostProcessor中的PostProcessorBeforeInitialization方法
执行初始化方法
执行BeanPostProcessor中的PostProcessorAfterInitialization方法
5、放入单例池,使用
6、销毁
如果实现了DisableBean接口,执行Distory方法
非懒加载、懒加载、原型bean
默认非懒加载,最开始就存入IOC容器中
懒加载需要@Lazy,有需要才实例化。懒加载可以避免循环依赖问题
原型Bean就是非单例模式
BeanFactory和FactoryBean的区别?
前者是用来管理IOC容器的总接口
后者是用来实现自定义Bean的接口,如果要自定义bean,那就实现它,然后重写方法
BeanFactory和ApplicationContext的区别与联系?
后者是前者的子接口,因此,后者拥有前者的功能,即能够获取当前IOC容器中的实例对象
其次,后者还可以获取当前的环境变量等额外功能。
@Bean和FactoryBean的关系?
都可以创建实例到IOC容器中,
前者只创建一个Bean,有完整的生命周期
后者创建两个Bean,代理的Bean有完整的生命周期,被代理的原始对象只会存在于初始化
Spring支持哪些依赖注入的方式?
1、字段注入
2、Setter注入
3、构造器注入
为什么推荐构造器注入而不用字段注入?
1、掩盖了依赖注入的问题(虽然三级缓存能够解决这个问题),而构造器注入能够明确依赖之间的关系,从而避免依赖注入的发生。
2、字段注入不利于单元测试,需要mock一个对象才能执行。而构造注入很方便。
什么是Bean的循环依赖?如何解决循环依赖?
就是A引用B,B引用A。
对于字段注入,使用三级缓存解决
对于构造器、setter注入,使用懒加载解决。
三级缓存如何解决循环依赖?
解决循环依赖一定需要第三级缓存吗?
主要是为了防止AOP状态下的三级缓存
第三级缓存提供了一个lambda函数,用于判断当前是否为AOP类型的注入,如果是,则返回代理对象。
这样就避免了循环依赖的情况下,只能注入原初始化的对象,而无法注入代理对象。
解决循环依赖一定需要第二级缓存吗?
需要,假设A引用B\C,B->A, C->A,
A注入了B,此时要注入C,如果没有介于两者之间的,A就拿不到了。
什么场景下的循环依赖Spring无法解决?
构造器
原型Bean
@Lazy注解如何解决循环依赖?
其他时候都是代理对象加状态存在,因此解决了循环依赖问题。
将一个类声明为 Bean 的注解有哪些?
3种
@Autowired 和 @Resource 的区别是什么?(4个)
Bean 的作用域有哪些?如何配置呢?
scope:
- singleton
- prototype
- session
- request
Bean 是线程安全的吗?如何保证线程安全?
Spring AoP
1、介绍
面向切面编程
原理是基于动态代理+反射
2、使用,自定义打印日志的功能
1、先定义一个注解Interface
2、在使用的方法前面加上这个注解
3、写一个切面类,aspect
- 定义切点pointcut是注解。
- 定义环绕通知,around advice
- 环绕通知入参为连接点join point,他代表注解修饰的具体方法,在环绕通知前后写额外的方法即可
3、aop的两种实现方式?
4、多个切面的执行顺序如何控制?
5、AOP 的应用场景有哪些?
日志打印
事务
限流
6、AOP失效的情况?
- 内部调用
- 静态方法
- 私有方法
Spring MVC
介绍Spring MVC
3个部分
4个层次
执行流程
核心组件
1、handlerMapping
2、handlerAdapter
3、DispatchServlet
4、ViewResolver
过程
先传给DispatcherServlet。
1、handerMapping找controller
2、交给HandlerAdapter适配对应的Controller
3、Controller返回model和view
4、根据View解析视图,然后结合modle返回
SpringMVC的启动流程?
大概就是:
SpringBoot启动了,顺便在BeanFactory初始化的时候,tomcat也启动了,因此DispatcherServlet启动了,拦截就生效了。
统一异常处理怎么做?
ControllerAdvice + ExceptionHandler
Spring Data JPA
只需要知道,它和Mybatis一样都是ORM数据持久化的框架。
不过Mybatis比它更灵活,因此它用到不多。
Spring Security
登录流程
写SecurityConfig,继承自WebSecurityConfiguratorAdaptor
- 重写passwordEncoder
- config
- authenticManeger
实现UserDeailServiceImpl,getUserDetail,
验证用户名密码之后,根据id生成JWT,然后redis存入key为id,val为用户信息。
设置拦截器类OncePerRequestFilter,获取前端jwt,解析后到redis找,找到了之后,把用户信息整体存入线程本地变量。
1、JWT的作用
加密,实现前后端之间交互的身份认证
2、Redis的作用
保证单点登录有效,
每次拦截请求后都会刷新有效期,
只有当Redis的信息过期后,才会显示登录过期,需要重新登录
3、线程本地变量的作用
线程本地变量的生命周期依赖于Request,即只在本次请求中有效!
它的作用就是方便这次请求的时候,如果需要知道这个请求发起的用户的信息时,不再需要去redis或者再jwt解析了,而是直接从现场本地变量获取即可!!!
Spring中的设计模式
1、单例模式
Bean的IOC池,
2、工厂模式
Collection类
3、适配器模式
HandlerAdapter
类1
接口
接口的实现
- 构造器获得类1的实例
- 执行更多
4、装饰器模式
接口
实现1
实现2
- 构造器获得实现1的实例
- 执行更多
5、观察者模式
被观察的接口a(两个抽象方法,注册、唤醒)
观察者接口b(一个方法执行)
接口a的唯一实现aa(一个list,重写两个方法)
接口b的多个实现b1、b2。。。(只需要重写一个方法即可)
Spring事务
事务的特性:
ACID
原子性
持久性
隔离性
一致性
Spring如何支持事务
1、前提,数据库支持事务
2、两种方式
- 显式地使用TractionalTemplate接口实现
- 使用@Transactional注解,
事务的传播行为
3种
Reqired,如果有,则直接加入当前事务
Requires new,无论有没有,都新增事务
Nested,如果有,则新增一个存档点,而不是直接新增事务。
举例说明:
1.
2.
3.
事务隔离级别
读未提交
读已提交
可重复读
可串行化
脏读,就是更新过程中可以读,
不可重复度,就是重复读一个正在修改的数据,前后读到的内容不一样
幻读,就是重复读一个count,前后不一样
@transactional的原理
Spring自身不实现隔离,只是提供了回滚和提交的标记。
真正的隔离级别的实现取决于数据库。这也是为什么如果数据库是MYISAM,Spring的事务就失效了。
@Transactional的原理是通过aop+动态代理,在动态代理的方法前后添加事务提交和回滚的标记。
事务失效的情况
。。。
@Async注解为什么不建议使用?
SpringBoot
SpringBoot的主要优点有哪些?即和Spring的区别?
1、自动装配
2、自带web应用
3、内置cli
什么是 Spring Boot Starters?
1、Spring官方或者热门的第三方组件一般都会维护一个Starters。
官方的是 Spring-boot-xxx-starters、第三方的是xxx-Spring-boot-starters
2、引入xml后,不需要担心版本问题和依赖问题
3、支持自动装配
Spring Boot 支持哪些内嵌 Servlet 容器?
tomcat、jetty、undertow
默认tomcat,如果要用别的,只需要更改xml即可
介绍一下@SpringBootApplication 注解
1、EnableAutoConfirguation
2、Confirguation
3、ComponentScan
SpringBoot的启动流程
1、初始化SpringApplication
- 确定要用哪个web服务
- 创建初始化器、监听器
2、执行SpringApplication的run方法
- 启动监听器
- 加载环境变量配置信息
- 创建Spring容器
- 启动容器前的操作
- 启动容器(启动SpringFactory、自动装配,启动Web应用)
- 发布就绪
Spring Boot 的自动配置是如何实现的?
1、什么是自动装配
就是在应用依赖第三方组件的时候,只需要导入依赖即可,不需要再写繁琐的xml、Bean文件了
2、如何实现的自动装配?
通过EnableAutoConfirguation实现
在第三方组件的依赖导入时,通过starter约定了所有需要导入的内容都有一个配置类,然后把需要导入的用Bean修饰
SpringFactoryLoader,约定去每个第三方组件的jar包的META-INF的spirng。factiories中有全类名。然后根据全类名进行加载
加载的过程中是通过import selector配合被加载的Bean前面的条件注解是否被满足来判断是否需要加载,比如它有一个ConditionalOnclass(。。。)那么就需要提前有这个类才会加载。
SpringBoot中如何自定义Starter?
1、父
2、xxx-springboot-starter,空项目
3、xxx-springboot-starter-autoconfigurer
- confirgurationProporties
- service
- @Config+@Bean、@enableConfirgurationProporties、@ConditionalOnClass
- META-INF。。。
4、install
5、xml导入即可使用了
开发 RESTful Web 服务常用的注解有哪些?
1、Bean相关
2、http相关
3、前后端传值
4、读取配置
Spring Boot 常用的读取配置文件的方法有哪些?
背两个
@Values
@ConfirgurationProporties
Spring Boot 加载配置文件的优先级了解么?
1、
2、
3、
1.
2.
3.
什么是Bean 映射工具?常用的 Bean 映射工具有哪些?
Spring Boot 如何监控系统实际运行状况?
Spring Boot 如何做请求参数校验?
1、实体类上加
2、参数前面加
Spring Boot 中如何实现定时任务 ?
启动任务接口
启动类注解
方法注解
@RestController
MyBatis
使用MyBatis
1、写实体类
2、写mapper接口继承自BaseMapper
3、写serviceImpl继承自ServiceImpl
新增Mapper接口的方法
新增mapper。xml写具体的sql
SQL注入? #{} ${}
什么是DAO层?
Mapper接口中只能有一个有参方法和一个无参方法
MyBatis 是如何进行分页的?分页插件的原理是什么?
默认:逻辑分页
可以自定义实现物理分页
也可以使用第三方组件实现物理分页(PageHelper)
Mybatis如何编写一个插件?
原理:AOP,动态代理
实现:
- @Intercepts
- 实现Interceptor接口,
- 写intercept方法,具体的sql语句
动态sql
if
where
choose
foreach
原理:动态代理
Mybatis只有接口没有实现类,为什么能调用去操作数据库?
- 写了mapper
- 动态代理接口,生成对应的方法
Mybatis和Mybatis-plus的区别?
Mybatis和Hibernate
ORM
半自动映射
MyBatis中有哪几种字段映射的方式
resultType和resultMap
说说Mybatis中查询SQL的执行流程
1、创建sqlSessionFactory
2、开启一个OpenSession
3、关联到Mapper动态代理生成的实现类
4、执行类的方法,执行sql
说说MyBatis中的数据库连接池
说说MyBatis中的延迟加载
Netty
基于NIO的网络通信框架
比如RocketMQ的网络传输就是用Netty实现的。
原理
selector单个,对应一个线程
channel多个
client对应每个channel
什么是 TCP 粘包/拆包?有什么解决办法呢?
相关文章:
5.SpringSpringBoot八股
Spring,Spring MVC,Spring Boot 之间什么关系? Spring就是整个Spring框架的整体,包含AOP、JDBC、Spring MVC等等模块 SpringBoot是Spring的精简版,它在Spring的基础上添加了自动装配、内置tomcat服务器等功能,使得代码量更少,同…...
0基础刷图论最短路 3(从ATcoder 0分到1800分)
AT最短路刷题3(本文难度rated 1200~ 1400) 题目来源:Atcoder 题目收集: https://atcoder-tags.herokuapp.com/tags/Graph/Shortest-Path (里面按tag分类好了Atcoder的所有题目,类似cf) &#x…...
k8s+docker一键安装过程
环境: k8s 1.20 docker 20.10 centos7.9 #docker安装 yum install -y epel-release yum install -y yum-utils yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo yum install -y docker-ce-20.10.6 docker-ce-cli-2…...
Python3+Appium+Android SDK+真机+实现app自动化测试-基于Red Hat7.9版本搭建环境及运行python脚本。
1、总体概述? 收费有收费的服务,那就是细致。Red Hat9.0自动化环境也有,需要的说一声。 1、实现在Red Ha/t Enterprise Linux7.9环境中搭建部署app自动化测试环境,提供详细步骤。 2、版本说明:jdk8/17+nodejs16/18/19/20/21+android sdk29+python3.9.18/3.11.1+appium1…...

深入理解MD5算法:原理、应用与安全
title: 深入理解MD5算法:原理、应用与安全 date: 2024/4/11 20:55:57 updated: 2024/4/11 20:55:57 tags: MD5算法数据安全哈希函数摘要算法安全漏洞SHA算法密码学 第一章:引言 导言 在当今数字化时代,数据安全和完整性变得至关重要。消息…...
架构师系列-搜索引擎ElasticSearch(三)- Java API
SpringBoot整合ES 搭建SpringBoot工程,引入ElasticSearch相关坐标 <!--引入es的坐标--><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><versi…...

Ubuntu下配置Android NDK环境
Android-NDK的下载 下载Android-NDK wget -c http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin 执行bin文件(即解压) ./android-ndk-r10c-linux-x86_64.bin Android-NDK的配置 要想使用Android-NDK,还需要进行环境变量…...

使用 vue3-sfc-loader 加载远程Vue文件, 在运行时动态加载 .vue 文件。无需 Node.js 环境,无需 (webpack) 构建步骤
加载远程Vue文件 vue3-sfc-loader vue3-sfc-loader ,它是Vue3/Vue2 单文件组件加载器。 在运行时从 html/js 动态加载 .vue 文件。无需 Node.js 环境,无需 (webpack) 构建步骤。 主要特征 支持 Vue 3 和 Vue 2(参见dist/)仅需…...

stm32移植嵌入式数据库FlashDB
本次实验的程序链接stm32f103FlashDB嵌入式数据库程序资源-CSDN文库 一、介绍 FlashDB 是一款超轻量级的嵌入式数据库,专注于提供嵌入式产品的数据存储方案。与传统的基于文件系统的数据库不同,FlashDB 结合了 Flash 的特性,具有较强的性能…...

Ubuntu 安装Java、Git、maven、Jenkins等持续集成环境
Ubuntu 持续集成 安装OpenJdk 查看所有可安装的 JDK 版本 apt list OpenJDK\*使用 apt 安装 JDK(以 11为例),最好是用11,java8对应的jenkins会有兼容问题。 sudo apt install openjdk-11-jdk openjdk-11-jre安装成功后,可以使用以…...

文件批量重命名并批量修改文件扩展名,支持随机大小写字母命名并修改扩展名字母
在数字时代,文件的管理和整理成为了我们日常工作与生活中不可或缺的一部分。然而,面对堆积如山的文件,如何高效地对其进行重命名和修改扩展名,成为了许多人的难题。 第一步,进入文件批量改名高手的主页面,…...

【管理咨询宝藏70】MBB大型城投集团内外部环境分析报告
本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏70】MBB大型城投集团内外部环境分析报告 【格式】PDF版本 【关键词】战略规划、商业分析、管理咨询、MBB顶级咨询公司 【强烈推荐】 这是一套市…...

服务器挖矿病毒解决ponscan,定时任务解决
服务器挖矿病毒解决ponscan,定时任务解决 挖矿病毒会隐藏chattr的操作权限,让我们无法删除病毒文件,杀掉病毒进程。所以要去下载chattr.c的文件,编译成a.out。然后再对原来的chattr文件的权限进行修改。然后覆盖掉它。 chattr.c …...

【鸿蒙开发】第二十一章 Media媒体服务(二)--- 音频播放和录制
1 AVPlayer音频播放 使用AVPlayer可以实现端到端播放原始媒体资源,本开发指导将以完整地播放一首音乐作为示例,向开发者讲解AVPlayer音频播放相关功能。 以下指导仅介绍如何实现媒体资源播放,如果要实现后台播放或熄屏播放,需要…...
网络安全从入门到精通(特别篇I):Windows安全事件应急响应之Windows应急响应基础必备技能
Windows应急 询问攻击情况范围 事件发生时的状况或安全设备告警等,能帮助应急处置人员快速分析确定事件类型,方便前期准备。 通用排查思路 入侵肯定会留下痕迹,另外重点强调的是不要一上来就各种查查查,问清楚谁在什么时间发现的主机异常情况,异常的现象是什么,受害用…...

基于SpringBoot+Mybatis框架的私人影院预约系统(附源码,包含数据库文件)
基于SpringBootMybatis框架的私人影院预约系统,附源码,包含数据库文件。 非常完整的一个项目,希望能对大家有帮助哈。 本系统的完整源码以及数据库文件都在文章结尾处,大家自行获取即可。 项目简介 该项目设计了基于SpringBoo…...

【SERVERLESS】AWS Lambda上实操
通过Serverless的发展历程及带给我们的挑战,引出我们改如何改变思路,化繁为简,趋利避害,更好的利用其优势,来释放企业效能,为创造带来无限可能。 一 Serverless概述 无服务器计算近年来与云原生计算都是在…...

IDEA2023 开发环境配置
目录 1. 关闭IDEA自动更新1.2 IDEA 新版样式切换 2. Maven配置2.1本地仓库优先加载2.2 maven.config配置文件中 3. 全局配置JDK4. 配置文件编码:UTF-85. 开启自动编译(全局配置)6. 开启自动导包7. 开启鼠标悬浮(提示文档信息)8. 设…...

YOLOV5 + 双目相机实现三维测距(新版本)
文章目录 YOLOV5 双目相机实现三维测距(新版本)1. 项目流程2. 测距原理3. 操作步骤和代码解析4. 实时检测5. 训练6. 源码下载 YOLOV5 双目相机实现三维测距(新版本) 本文主要是对此篇文章做一些改进,以及解释读者在…...
【计算机网络】(一)计算机网络概述
文章目录 【计算机网络】(一)计算机网络概述前言1.1 计算机网络在信息时代中的作用1.2 互联网概述1.2.1 网络的网络1.2.2 互联网基础结构发展的三个阶段1.2.3 互联网标准化工作 1.3 互联网的组成1.3.1 互联网的边缘部分1.3.2 互联网的核心部分 1.4 计算机…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...

ui框架-文件列表展示
ui框架-文件列表展示 介绍 UI框架的文件列表展示组件,可以展示文件夹,支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项,适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...

aardio 自动识别验证码输入
技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...