当前位置: 首页 > news >正文

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、框架知识分布
  • 二、Spring
    • 1. spring-单例bean
      • ① 问题引入
      • ② 单例bean是线程安全的吗
      • ③ 问题总结
      • ④ 实战面试
    • 2. spring-AOP
      • ① 问题引入
      • ② AOP记录操作日志
      • ③ Spring事务如何实现的
      • ④ 问题总结
    • 3. Spring-事务失效的场景
      • ① 问题引入
      • ② 情况一:异常捕获处理
      • ③ 情况二:抛出检查异常
      • ④ 非public方法导致事务失效
      • ⑤ 问题总结
    • 4. Spring-bean的生命周期(难)
      • ① 问题引入
      • ② BeanDefinition(Bean的定义信息)
      • ③ 问题总结
    • 5. Spring-bean的循环依赖
      • ① 问题引入
      • ② Spring的循环依赖
      • ③ 问题总结
  • 三、SpringMVC
    • 1. SpringMVC-执行流程
      • ① 问题引入
      • ② 视图阶段(JSP)
      • ③ 前后端分离阶段(接口开发,异步)
      • ④ 问题总结
  • 四、SpringBoot
    • 1. springboot-自动配置
      • ① 问题引入
      • ② 问题总结
  • 五、Spring-框架中常见的注解
    • 1. spring常见的注解
    • 2. springMVC常见注解
    • 3.springboot常见注解
  • 引用说明


前言

本文主要记录spring的单例bean、切面编程AOP、spring事务、循环依赖、常见注解等


提示:以下是本篇文章正文内容,下面案例可供参考

一、框架知识分布

在这里插入图片描述
在这里插入图片描述

二、Spring

1. spring-单例bean

① 问题引入

在这里插入图片描述
Spring框架中的bean是单例的
在这里插入图片描述
singleton :bean在每个Spring IOC容器中只有一个实例。
prototype:一个bean的定义可以有多个实例。

② 单例bean是线程安全的吗

count是可修改的成员变量需要考虑线程安全
userService是无法修改的成员变量不需要考虑线程安全
在这里插入图片描述

③ 问题总结

在这里插入图片描述

④ 实战面试

在这里插入图片描述

2. spring-AOP

① 问题引入

在这里插入图片描述
AOP称为面向切面编程,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码降低模块间的耦合度,同时提高了系统的可维护性。

常见的AOP使用场景:
1.记录操作日志(每一个service记录操作)
2.缓存处理(业务加缓存,写在AOP的切面拦截需要添加缓存的业务方法)
3.Spring中内置的事务处理

② AOP记录操作日志

获取请求的用户名、请求方式、访问地址、模块名称、登录ip、操作时间,记录到数据库的日志表中,如下图所示:
在这里插入图片描述
后台有四个请求接口,需要记录操作日志,使用AOP提供的环绕通知做一个切面,相当于一个通过的代码,遇到请求的时候就可以执行这段代码。
在这里插入图片描述
代码解释:https://zhuanlan.zhihu.com/p/596205936?utm_id=0

③ Spring事务如何实现的

Spring支持编程式事务管理和声明式事务管理两种方式。

  1. 编程式事务控制:需使用TransactionTemplate来进行实现,对业务代码有侵入性,项目中很少使用
  2. 声明式事务管理:声明式事务管理建立在AOP之上的。其本质是通过AOP功能**,对方法前后进行拦截**,将事务处理的功能编织到拦截的方法中,也就是在目标方法开始之前加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。(常用)
    在这里插入图片描述

④ 问题总结

在这里插入图片描述

3. Spring-事务失效的场景

① 问题引入

在这里插入图片描述
对spring框架的深入理解、复杂业务的编码经验

  1. 异常捕获处理
  2. 抛出检查异常
  3. 非public方法

② 情况一:异常捕获处理

转账的代码中出现一个异常,由于这个异常会被try-catch捕获却没有抛出,所以可能导致事务失效(如果异常没有被捕获,就会发生事务回滚)
在这里插入图片描述
原因分析: 事务通知只有捉到了目标抛出的异常,才能进行后续的回滚处理,如果目标自己处理掉异常,事务通知无法知悉
解决方法: 在catch块添加throw new RuntimeException(e)抛出
在这里插入图片描述

③ 情况二:抛出检查异常

系统找不到指定文件,抛出一个检查异常
在这里插入图片描述
原因分析: Spring 默认只会回滚非检查异常
解决方法: 配置rollbackFor属性Transactional(rollbackFor=Exception.class),一旦出现异常都会被事务控制
在这里插入图片描述

④ 非public方法导致事务失效

方法没有用public
在这里插入图片描述
原因分析: Spring为方法创建代理、添加事务通知、前提条件都是该方法是public的
解决方法: 方法改为public

⑤ 问题总结

在这里插入图片描述

4. Spring-bean的生命周期(难)

① 问题引入

在这里插入图片描述
Spring容器是如何管理和创建bean实例
方便调试和解决问题

② BeanDefinition(Bean的定义信息)

Spring容器在进行实例化时,会将xml配置的<bean>的信息封装成一个BeanDefinition对象,Spring根据BeanDefinition来创建Bean对象,里面有很多的属性用来描述Bean
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

③ 问题总结

在这里插入图片描述

5. Spring-bean的循环依赖

① 问题引入

在这里插入图片描述
在创建A对象的同时需要使用的B对象,在创建B对象的同时需要使用到A对象

在这里插入图片描述
在这里插入图片描述

② Spring的循环依赖

在这里插入图片描述

Spring解决循环依赖是通过三级缓存,对应的三级缓存如下所示:
在这里插入图片描述
如果要想打破循环依赖,就需要一个中间人的参与,这个中间人就是二级缓存。
一级和二级缓存可以解决一般对象的循环依赖
在这里插入图片描述
代理对象需要用到三级缓存
在这里插入图片描述
构造方法注入产生的循环依赖问题,使用延迟加载解决问题
在这里插入图片描述

③ 问题总结

在这里插入图片描述
在这里插入图片描述

三、SpringMVC

1. SpringMVC-执行流程

① 问题引入

在这里插入图片描述
Springmvc的执行流程是这个框架最核心的内容

  1. 视图阶段(老旧JSP等)
  2. 前后端分离阶段(接口开发,异步)

② 视图阶段(JSP)

重要的组件:前端控制器、处理器映射器、处理器适配器、视图解析器
在这里插入图片描述

③ 前后端分离阶段(接口开发,异步)

在这里插入图片描述

④ 问题总结

在这里插入图片描述

在这里插入图片描述

四、SpringBoot

1. springboot-自动配置

① 问题引入

在这里插入图片描述
自动配置主要依赖于@SpringBootApplication注解,其中还包含了三个注解
在这里插入图片描述
@SpringBootConfiguration:该注解与@Configuration注解作用相同,用来声明当前也是
个配置类。
@ComponentScan:组件扫描,默认扫描当前引导类所在包及其子包。
@EnableAutoConfiguration: SpringBoot实现自动化配置的核心注解。

② 问题总结

在这里插入图片描述

五、Spring-框架中常见的注解

在这里插入图片描述

1. spring常见的注解

在这里插入图片描述

2. springMVC常见注解

在这里插入图片描述

3.springboot常见注解

在这里插入图片描述

引用说明

https://www.bilibili.com/video/BV1yT411H7YK?p=35&vd_source=98092b0aee05ae7c890b09fe07f13df4

相关文章:

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、框架知识分布二、Spring1. spring-单例bean① 问题引入② 单例bean是线程安全的吗③ 问题总结④ 实战面试 2. spring-AOP① 问题引入② AOP记录操作日志③ …...

QT人脸识别知识

机器学习的作用&#xff1a;根据提供的图片模型通过算法生成数据模型&#xff0c;从而在其它图片中查找相关的目 标。 级联分类器&#xff1a;是用来人脸识别。 在判断之前&#xff0c;我们要先进行学习&#xff0c;生成人脸的模型以便后续识别使用。 人脸识别器&#xff1a;…...

熟悉Redis6

NoSQL数据库简介 技术发展 技术的分类 1、解决功能性的问题&#xff1a;Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN 2、解决扩展性的问题&#xff1a;Struts、Spring、SpringMVC、Hibernate、Mybatis 3、解决性能的问题&#xff1a;NoSQL、Java线程、Hadoop、Nginx…...

ip地址会随网络变化而变化吗

随着科技的飞速发展&#xff0c;互联网已深入我们生活的方方面面。在这庞大的网络世界中&#xff0c;IP地址作为网络通信的基础元素&#xff0c;引起了广泛关注。网络变化与IP地址之间存在着密切的关系。那么&#xff0c;IP地址是否会随着网络变化而变化呢&#xff1f;虎观代理…...

QT连接服务器通信,客户端以及服务器端

服务器端 .h文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器头文件 #include <QTcpSocket> //客户端头文件 #include <QList> //链表头文件&#xff0c;用来存放客户端容器 #include <QDebug> #i…...

Vuex仓库的创建

vuex 的使用 - 创建仓库 文章目录 vuex 的使用 - 创建仓库1.安装 vuex2.新建 store/index.js 专门存放 vuex3.创建仓库 store/index.js4 在 main.js 中导入挂载到 Vue 实例上5.测试打印Vuex 1.安装 vuex 安装vuex与vue-router类似&#xff0c;vuex是一个独立存在的插件&#x…...

C++中的红黑树

红黑树 搜索二叉树搜索二叉树的模拟实现平衡搜索二叉树(AVL Tree)平衡搜索二叉树的模拟实现红黑树(Red Black Tree)红黑树的模拟实现 红黑树的应用(Map 和 Set)Map和Set的封装 搜索二叉树 搜索二叉树的概念&#xff1a;二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&…...

SQL语法知识回顾

一、SQL语言的分类 由于数据库管理系统&#xff08;数据库软件&#xff09;功能非常多&#xff0c;不仅仅是存储数据&#xff0c;还要包含&#xff1a;数据的管理、表的管理、库的管理、账户管理、权限管理等等。所以&#xff0c;操作数据库的SQL语言&#xff0c;也基于功能&am…...

Java基础二十七(泛型)

泛型 Java 泛型&#xff08;generics&#xff09;是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制&#xff0c;该机制允许程序员在编译时检测到非法的类型。 泛型的本质是参数化类型&#xff0c;也就是说所操作的数据类型被指定为一个参数。 Java的泛型是伪…...

Python入门教程36:urllib网页请求模块的用法

urllib是Python中的一个模块&#xff0c;它提供了一些函数和类&#xff0c;用于发送HTTP请求、处理URL编码、解析URL等操作。无需安装即可使用&#xff0c;包含了4个模块&#xff1a; #我的Python教程 #官方微信公众号&#xff1a;wdPythonrequest&#xff1a;它是最基本的htt…...

LeetCode 每日一题 2023/9/4-2023/9/10

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 9/4 449. 序列化和反序列化二叉搜索树9/5 2605. 从两个数字数组里生成最小数字9/6 1123. 最深叶节点的最近公共祖先9/7 2594. 修车的最少时间9/8 2651. 计算列车到站时间9/…...

C# Onnx Yolov8 Seg 分割

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System…...

Postman接口测试流程

一、工具安装 ● 安装Postman有中文版和英文版&#xff0c;可以选择自己喜欢的版本即可。安装时重新选择一下安装路径&#xff08;也可以默认路径&#xff09;&#xff0c;一直下一步安装完成即可。&#xff08;本文档采用英文版本&#xff09;安装文件网盘路径链接&#xff1…...

探索GreatADM:如何快速定义监控

引文 在数据库运维过程中&#xff0c;所使用的运维管理平台是否存在这样的问题&#xff1a; 1、默认监控粒度不够,业务需要更细颗粒度的监控数据。2、平台默认的监控命令不适合,需要调整阈值量身定制监控策略。3、不同类型的实例或组件需要有不同的监控重点,但管理平台监控固…...

C# 参数名加冒号,可以打乱参数顺序

今天看到Python有这种语法&#xff0c;参数名后面跟着等号写参数&#xff0c;联想到前几天用到的Serilog&#xff0c;好像有个参数名加冒号的写法&#xff0c;搜索了一下&#xff0c;果真有这种用法。 函数特别大的时候&#xff0c;用这种方法很直观&#xff0c;而且参数可以打…...

AVL树 模拟实现(插入)

目录 模拟插入节点 左单旋 右单旋 右左双旋 左右双旋 总结 实现 插入实现 左单旋实现 右单旋实现 右左双旋实现 左右双旋实现 AVL树 模拟实现&#xff08;插入&#xff09; AVL 树&#xff0c;是高度平衡二叉搜索树&#xff0c;其主要通过旋转来控制其左右子树的高…...

Java面试整理(三)《JavaSE》

反射机制(低) 在我刚开始学Java的时候,大家都很难理解反射这个概念,在实际开发中,虽然都有反射的踪影,但感觉自己又能理解是的。反射机制是指在程序运行时,对任意一个类都能获取其所有属性和方法,并且对任意一个对象都能调用其任意一个方法。 反射的步骤如下: 获取想要…...

LeetCode 1282. Group the People Given the Group Size They Belong To【哈希表】1267

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…...

Vue2项目练手——通用后台管理项目第八节

Vue2项目练手——通用后台管理项目 菜单权限功能tab.jsLogin.vueCommonAside.vuerouter/index.js 权限管理问题解决router/tab.jsCommonHeader.vuemain.js 菜单权限功能 不同的账号登录&#xff0c;会有不同的菜单权限通过url输入地址来显示页面对于菜单的数据在不同页面之间的…...

leetcode872. 叶子相似的树(java)

叶子相似的树 题目描述递归 题目描述 难度 - 简单 leetcode - 872. 叶子相似的树 请考虑一棵二叉树上所有的叶子&#xff0c;这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。 举个例子&#xff0c;如上图所示&#xff0c;给定一棵叶值序列为 (6, 7, 4, 9, 8) 的树。 如果…...

【Linux从入门到精通】信号(初识信号 信号的产生)

本篇文章会对Linux下的信号进行详细解释。主要内容是什么是信号、信号的产生、核心转储等问题。希望本篇文章会对你有所帮助。 文章目录 引入 一、初识信号 1、1 生活中的信号 1、2 Linux 下的信号 1、3 信号进程所得的初识结论 二、信号的产生 2、1 用户通过终端输入产生信号 …...

Golang综合项目实战(一)

Golang综合项目实战&#xff08;一&#xff09; 01-项目简介02-项目架构、术语、运行结果03-创建并初始化项目04-创建用户模型和错误处理05-创建密码加密工具类06-保存密码之前的hooks07-创建用户名密码验证工具类08-用户数据库操作逻辑09-操作用户service10-创建商品分类模型…...

springmvc 获取项目中的所有请求路径

springboot/springmvc 获取项目中的所有请求路径 1. 编写业务代码 Autowiredprivate WebApplicationContext applicationContext;GetMapping("/getAllURL")public RestfulResult getAllURL() {// 获取springmvc处理器映射器组件对象 RequestMappingHandlerMapping无…...

【React学习】React高级特性

1. 函数式组件和类组件区别 函数式组件 函数式组件是一种简单的组件定义方式&#xff0c;它是一个以JavaScript函数为基础的组件。 可以把函数式组件理解为纯函数&#xff0c;它的输入为props&#xff0c;输出为JSX。函数式组件没有状态&#xff0c;也没有生命周期。 functio…...

如何在Windows系统搭建filebrowser私人网盘并实现在外网访问本地内网

Windows系统搭建网盘神器filebrowser结合内网穿透实现公网访问 文章目录 Windows系统搭建网盘神器filebrowser结合内网穿透实现公网访问前言1.下载安装File Browser2.启动访问File Browser3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3…...

蓝桥杯官网练习题(算式900)

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小明的作业本上有道思考题&#xff1a; 看下面的算式&#xff1a; (□□□□-□□□□)*□□900其中的小方块代表 0 ~ 9 的数字&#xff0c;这 10 个方块刚好包含了…...

【C++从入门到精通】第1篇:C++基础知识(上)

文章目录 1.1 C语句和程序结构1.1.1 本篇介绍1.1.2 语句1.1.3 函数和主函数1.1.4 解析Hello world1.1.5 语法和语法错误1.1.6 练习时间 1.2 注释1.2.1 单行注释1.2.2 多行注释1.2.3 正确使用注释1.2.4 注释掉代码 1.3 对象和变量1.3.1 数据和值1.3.2 对象和变量1.3.3 变量实例化…...

liunx系统无sudo或管理员权限安装rar解压安装包

liunx无sudo权限安装rar解压安装包 &#xff08;1&#xff09;正常liunx安装rar&#xff08;2&#xff09;无sudo\root(管理员身份)时如何安装rar &#xff08;1&#xff09;正常liunx安装rar 1、下载安装包 WinRAR archiver, a powerful tool to process RAR and ZIP files (r…...

浅析目标检测入门算法:YOLOv1,SSD,YOLOv2,YOLOv3,CenterNet,EfficientDet,YOLOv4

本文致力于让读者对以下这些模型的创新点和设计思想有一个大体的认识&#xff0c;从而知晓YOLOv1到YOLOv4的发展源流和历史演进&#xff0c;进而对目标检测技术有更为宏观和深入的认知。本文讲解的模型包括&#xff1a;YOLOv1,SSD,YOLOv2,YOLOv3,CenterNet,EfficientDet,YOLOv4…...

C++:类和对象(三)

本文主要介绍初始化列表、static成员、友元、内部类、匿名对象、拷贝对象时编译器的优化。 目录 一、再谈构造函数 1.构造函数体赋值 2.初始化列表 3.explicit关键字 二、static成员 1.概念 2.特性 三、友元 1.友元函数 2.友元类 四、内部类 五、匿名对象 六、拷…...

韩国有哪些专业做汽车的网站/可以推广的软件有哪些

展开全部在现实中&#xff0c;有些时候的条件不是一个&#xff0c;而是一组相关的条件&#xff0c;例如将阿拉伯e69da5e887aa62616964757a686964616f31333337616535数字转换为中文大写&#xff0c;根据分数转换为对应的等级等&#xff0c;都是多条件的结构&#xff0c;在程序中…...

视频网站如何做盗链/威海网站制作

文章目录1 报错2 解决办法1 报错 尝试在linux上通过Pycharm IDE使用matplotlib包。当我运行此代码时&#xff1a; from matplotlib import pyplot结果报错&#xff1a; ImportError: No module named tkinter2 解决办法 ubuntu的系统&#xff1a; sudo apt-get install py…...

建立免费网站/百度关键词优化软件排名

intellij 开发webservice 最近项目中有用到WebService&#xff0c;于是就研究了一下&#xff0c;但是关于intellij 开发 WebService 的文章极少&#xff0c;要不就是多年以前&#xff0c;于是研究一下&#xff0c;写这篇博文。纯属记录&#xff0c;分享&#xff0c;中间有不对的…...

网站改版做301重定向/dw软件怎么制作网页

混杂模式 只要流经该机器的报文都会被抓取 抓包过滤器 简单使用 保存 停止抓包后保存。file->save 最好保存为pcap格式 选择解析方式 例如访问web网页默认是80端口&#xff0c;若访问了81端口&#xff0c;需要用decode as指定按什么协议解析 数据量跟踪 常用视图 常见协…...

二级院系网站建设/外贸网站建设流程

一. CMS 并发标记清除&#xff08;CMS&#xff09;收集器&#xff08;也叫并发低延迟收集器&#xff09;回收年老代垃圾。它通过和应用线程并发的执行大部分垃圾收集工作的方式来尝试最小化垃圾回收引起的暂停。正常情况下并发低延迟收集器不会复制或者压缩活跃对象。一次垃圾…...

19手机网站/seo外包优化

回望2020 2020年第一天。2020年第一个月。2020年第一季度。十一,国庆。现在,2021.1.12020年第一天。 今天是2020年的第一天,昨晚我刚刚经历了一场紧张刺激且尴尬的转正答辩。我来到这家公司6个月了,说实话,我很不开心。昨晚的答辩是我们的部门大boss亲自坐镇,我看得出来…...