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 计算机…...
前端npm常用命令总结
npm(Node Package Manager)是Node.js的包管理器,用于安装和管理Node.js的依赖库。以下是一份npm命令的总结文档,涵盖了常用的npm命令及其功能: 包相关的 安装和卸载包 npm install :安装指定名称的包。n…...
[尚硅谷flink] 检查点笔记
在Flink中,有一套完整的容错机制来保证故障后的恢复,其中最重要的就是检查点。 文章目录 11.1 检查点11.1.1 检查点的保存1)周期性的触发保存2)保存的时间点3)保存的具体流程 11.1.2 从检查点恢复状态11.1.3 检查点算法…...
JVM虚拟机(五)强引用、软引用、弱引用、虚引用
目录 一、强引用二、软引用三、弱引用四、虚引用五、总结 引文: 在 Java 中一共存在 4 种引用:强、软、弱、虚。它们主要指的是,在进行垃圾回收的时候,对于不同的引用垃圾回收的情况是不一样的。下面我们就一起来看一下这 4 种引用…...
(最新)itext7 freemarker动态模板转pdf
1.引入依赖 <!--PDF导出POM--> <dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>8.0.3</version><type>pom</type> </dependency> <dependency><grou…...
solidworks electrical 2D和3D有什么区别
SolidWorks Electrical 是一款专为电气设计开发的软件工具,它提供了两种主要的工作环境:2D电气设计和3D电气集成设计。两者在功能和应用场景上存在显著的区别: SolidWorks Electrical 2D 设计 特点与用途: SolidWorks Electrica…...
4.2、ipex-llm(原bigdl-llm)进行语音识别
ipex-llm环境配置及模型下载 由于需要处理音频文件,还需要安装用于音频分析的 librosa 软件包。 pip install librosa下载音频文件 !wget -O audio_en.mp3 https://datasets-server.huggingface.co/assets/common_voice/--/en/train/5/audio/audio.mp3 !wget -O a…...
上海亚商投顾:创业板指低开低走 黄金、家电股逆势大涨
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指4月12日震荡调整,创业板指尾盘跌超1%。黄金板块延续强势,莱绅通灵9连板࿰…...
AIGC革新浪潮:大语言模型如何优化企业运营
在当今快速发展的商业环境中,企业对于有效管理知识资产的需求日益增长。知识管理作为企业核心竞争力的关键组成部分,对于提高决策质量、增强创新能力和优化运营流程起着至关重要的作用。随着数字化转型的推进,企业对知识管理系统提出了新的要…...
Golang基础-12
Go语言基础 介绍 目录操作 创建 删除 重命名 遍历目录 修改权限 文件操作 创建 打开关闭 删除 重命名 修改权限 读文件 写文件 文件定位 拷贝 测试 单元测试 基准测试 示例 介绍 本文介绍Go语言中目录操作(创建目录、删除目录、重命名、遍历…...
python递归统计文件夹下pdf文件的数量
python递归统计文件夹下pdf文件的数量 import os from docx import Documentdef count_all_pages(root_dir):total_pages 0# 遍历文件夹for dirpath, dirnames, filenames in os.walk(root_dir):for filename in filenames:# if filename.endswith(.docx) or filename.endswit…...
wordpress菜单对齐修改/线上推广方式有哪些
mysql---随机获取10%的数据最近在研究从某张表中随机获取百分之十的数据,查询各大网站,基本上都使用的是rand()函数,完全看不懂,感觉也不太符合我的需求,所以决定自己研究一下,怎么实现此需求。 查询原始数…...
网站ftp根目录/百度广告推广费用
springboot利用druid和mybatis批量数据写入clickhouse时,刚开始的时候,完全按照mysql的写法,出现无法写入的问题。经过不断的尝试,发现所使用的驱动包,驱动类配置以及sql写法上都需要特别注意,不然批量写入…...
宝丰县建设局网站/电商推广联盟
Spring中使用Quartz的3种方法(MethodInvokingJobDetailFactoryBean,implements Job,extends QuartzJobBean) #动态启动,暂定,添加,删除定时功能,可传参数 Quartz是一个强大的企业级任务调度框架࿰…...
各类郑州网站建设/刚刚中国突然宣布
2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/2726276586/blog/683938...
wordpress主题ashley/免费发广告的网站
- START - 什么是内存管理器(what) Python作为一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言,与大多数编程语言不同。Python中的变量无需事先申明,变量无需指定类型,程序员无需关心内存管理ÿ…...
平面设计线/北京seo运营推广
5319. 删除回文子序列 题目描述 给你一个字符串 s,它仅由字母 a 和 b 组成。每一次删除操作都可以从 s 中删除一个回文 子序列。 返回删除给定字符串中所有字符(字符串为空)的最小删除次数。 「子序列」定义:如果一个字符串可…...