2024-06学习笔记
1.事务与数据库链接的占用
如果用@Transactional注解,那在第一次与数据库交互的时候,就会打开数据库链接,再整个方法执行完,才会关闭数据库链接。
即使后边用的事务传播是required_new,那之前的事务也是被挂起,不会被关闭,也是占用了数据库链接。
所以为了防止链接占用时间过长,最好不要在被@Transactional修饰的方法中,做文件处理或者是操作redis
可以像下边那样写
//MethodA不被@Transactional修饰
MethodA(){MethodB();//被@Transactional修饰的方法,注意B方法和A方法不能在同一个类中MethodC();//文件处理,或者操作redis
}
或者,使用编程式事务。execute执行完,数据库链接就会关闭。
@Transactional是注解式事务,TansactionTemplate是注解式事务
2.事务传播
- REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则把当前事务挂起。
- 这是新创建了一个数据库链接Connection,新事务完成后就关闭那个数据库链接
- NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前不存在事务,则创建一个新的事务。如果主事务提交,则提交所有的嵌套事务。如果任何一个嵌套事务失败,则回滚所有的嵌套事务,但不影响主事务的提交。
- 这个数据库链接用的还是原来的,但是新建了savepoint。如果嵌套事务执行失败,就回滚到指定的savepoint
- 因为外层事务的savepoint在更前边,所以嵌套事务不影响外层事务,但是外层事务回滚时,子事务也回滚。
总结
加入事务(REQUIRED)和嵌套事务(NESTED)都是事务传播机制中的两种传播级别,如果当前不存在事务,那么二者的行为是一致的;但如果当前存在事务,那么加入事务的事务传播级别当遇到异常时会回滚全部事务,而嵌套事务则是回滚部分事务。嵌套事务之所以能回滚部分事务,是因为数据库中存在一个保存点的概念,嵌套事务相对于新建了一个保存点,如果出现异常了,那么只需要回滚到保存点即可,这样就实现了部分事务的回滚。
Nested事务传播的模拟
3.spring如何处理事务
1. spring检查当前方法以及类上有没有@transactional注解
2. 事务开启后,会在连接中关闭数据库的自动提交
3. 非public得方法,事务不生效,因为spring无法生成代理对象
这是spring源码
4.spring的切面
1.代理模式
这是spring源码
2.切面加载排序
如果注解相同,比如同为@Before,那就按照代码编写顺序
5.要实例化一个类必须有beandefinition
6.前后端交互逻辑
1.url匹配
后端启动的时候就把被@Controller修饰的类加载出来,并且找到类上边的@RequestMapping和方法上的@RequestMapping,两个url拼接,形成完整的url
下边是源码
2.返回的时候,不一定使用到视图解析器
在Spring MVC中,如果你的控制器方法只返回字符串或者JSON串(通常作为RESTful API的响应),通常不需要配置视图解析器(ViewResolver)。
视图解析器主要用于将控制器方法返回的逻辑视图名称解析为实际的视图(如JSP、Thymeleaf模板等),然后渲染到客户端。但是,如果你的方法直接返回字符串或者JSON数据,Spring会将这些数据写入HTTP响应体中,而不是尝试解析为视图。
### 返回字符串
如果你的控制器方法返回一个普通的字符串,Spring MVC将直接将这个字符串作为HTTP响应的内容返回给客户端,而不会将其解析为视图。例如:
```java
@RequestMapping("/hello")
@ResponseBody
public String hello() {
return "Hello, World!";
}
```在这个例子中,`@ResponseBody`注解告诉Spring MVC将方法的返回值直接作为HTTP响应的主体内容,而不会通过视图解析器来渲染。
### 返回JSON
如果你的控制器方法返回一个对象,并且希望将其转换为JSON格式返回给客户端,通常使用`@RestController`注解更为方便,它结合了`@Controller`和`@ResponseBody`的功能。例如:
```java
@RestController
public class ExampleController {@RequestMapping("/user")
public User getUser() {
User user = new User("John Doe", 30);
return user;
}
}
```在这个例子中,Spring MVC会自动将`User`对象转换为JSON格式,并将其作为HTTP响应的内容返回给客户端,而不需要视图解析器的参与。
因此,当你的控制器方法仅返回字符串或者JSON数据时,视图解析器是不必要的。相反,Spring MVC会根据方法的注解(如`@ResponseBody`或`@RestController`)来直接处理返回的数据。
3.前端header中的Accept与后端的produces对比
7.如何注入所有子类
8.spring中${}和#{}
9.算法相关
1.双指针
2.同构字符串
3.二叉树最大深度
4.有序数组转为二叉搜索树
二叉搜索树的 左<根<右
5.二进制逐位颠倒
>>>无论如何都补0,>>如果有符号位补符号位
1.我的解决办法
6.异或^=
两数相同,异或为1
1和任何数n异或,结果为n
7.二叉搜索树两个节点公共祖先
因为二叉搜索树满足 左<根<右
所以可以分别求两个节点路径
当路径不同时,前一个值就是公共祖先
10.字符串在内存中的分配
11.java1.8后map扩容算法
(n - 1) & hash 在计算机科学中经常用于快速计算 hash 值在数组(或哈希表)中的索引位置
这里的 n 通常是数组的长度,而 hash 则是计算出来的哈希值。
相关文章:

2024-06学习笔记
1.事务与数据库链接的占用 如果用Transactional注解,那在第一次与数据库交互的时候,就会打开数据库链接,再整个方法执行完,才会关闭数据库链接。 即使后边用的事务传播是required_new,那之前的事务也是被挂起,不会被…...

【VUE】封装一个追随鼠标的漂浮组件框架
红色箭头代表鼠标位置,蓝色区域跟随鼠标出现,鼠标进行其他操作的时候,蓝色区域隐藏。 vue全码 <template><divmousemove"updatePosition"mouseleave"hideDiv"class"container":style"{ positi…...
mapstruct与lombok结合使用
问题 如果同时使用mapstruct与lombok,需要多添加一个lombok支持mapstruct的依赖库。 解决 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId> </dependency><dependency><groupId&…...
【SpringBoot】Web开发之URL映射
RequestMapping("/getDataById/{id}") public String getDataById(PathVariable("id") Long id){ return "getDataById:"id; }46 如果URL中的参数名称与方法中的参数名称一致,则可以简化为: RequestMapping("/get…...

对递归的一些理解。力扣206题:翻转链表
今天在刷力扣的时候,在写一道翻转链表的题目的过程中,在尝试使用递归解决该问题的时候,第一版代码却每次都返回的是null,这个错误让我尝试去debug了一下,最终找出了问题,并且让我对递归有了一些更深的理解&…...
Kafka面试三道题
针对Kafka的面试题,从简单到困难,我可以给出以下三道题目: 1. Kafka的基本概念与优势 问题:请简要介绍Kafka是什么,并说明它相比传统消息队列的优势有哪些? 答案: Kafka定义:Apa…...

C/C++编程-算法学习-数字滤波器
数字滤波器 一阶低通滤波器结论推导11. 基本公式推导2. 截止频率 和 采样频率 推导 实现 二阶低通滤波器实现1实现2 一阶低通滤波器 结论 其基本原理基于以下公式: o u t p u t [ n ] α ∗ i n p u t [ n ] ( 1 − α ) ∗ o u t p u t [ n − 1 ] output[n] …...

maven介绍 搭建Nexus3(maven私服搭建)
Maven是一个强大的项目管理工具,它基于项目对象模型(POM:Project Object Model)的概念,通过XML格式的配置文件(pom.xml)来管理项目的构建 Maven确实可以被视为一种工程管理工具或项目自动化构…...

电商项目之如何判断线程池是否执行完所有任务
文章目录 1 问题背景2 前言3 4种常用的方法4 代码4.1 isTerminated()4.2 线程池的任务总数是否等于已执行的任务数4.3 CountDownLatch计数器4.4 CyclicBarrier计数器 1 问题背景 真实生产环境的电商项目,常使用线程池应用于执行大批量操作达到高性能的效果。应用场景…...

【前端 15】Vue生命周期
Vue生命周期 在Vue.js中,了解组件的生命周期对于开发者来说是至关重要的。Vue的生命周期指的是Vue实例从创建到销毁的一系列过程,每个阶段都对应着特定的生命周期钩子(或称为生命周期方法),允许我们在不同的时间点加入…...

PCIe总线-Linux内核PCIe软件框架分析(十一)
1.简介 Linux内核PCIe软件框架如下图所示,按照PCIe的模式,可分为RC和EP软件框架。RC的软件框架分为五层,第一层为RC Controller Driver,和RC Controller硬件直接交互,不同的RC Controller,其驱动实现也不相…...

视觉SLAM第二讲
SLAM分为定位和建图两个问题。 定位问题 定位问题是通过传感器观测数据直接或间接求解位置和姿态。 通常可以分为两类:基于已知地图的定位和基于未知地图的定位。 基于已知地图的定位 利用预先构建的地图,结合传感器数据进行全局定位。SLAM中的全局…...

mysql1055报错解决方法
目录 一、mysql版本 二、 问题描述 三、解决方法 1.方法一(临时) 2.方法二(永久) 一、mysql版本 mysql版本:5.7.23 二、 问题描述 在查询时使用group by语句,出现错误代码:1055…...
Java的@DateTimeFormat注解与@JsonFormat注解的使用对比
Java的DateTimeFormat注解与JsonFormat注解的使用对比 在Java开发中,处理日期和时间格式时,我们经常会使用到DateTimeFormat和JsonFormat注解。这两个注解主要用于格式化日期和时间,但在使用场景和功能上有所不同。本文将详细介绍这两个注解…...

德国云手机:企业移动办公解决方案
在现代商业环境中,移动办公已经成为一种趋势。德国云手机作为一种高效的解决方案,为企业提供了强大的支持。本文将探讨德国云手机如何优化企业的移动办公环境。 一、德国云手机的主要优势 高灵活性 德国云手机具有高度的灵活性,能够根据用户需…...

【React】useState:状态管理的基石
文章目录 一、什么是 useState?二、useState 的基本用法三、useState 的工作原理四、高级用法五、最佳实践 在现代前端开发中,React 是一个非常流行的库,而 useState 是 React 中最重要的 Hook 之一。useState 使得函数组件能够拥有自己的状态…...
商品中心关于缓存热key的解决方案
缓存热key一旦被击穿,流量势必会打到数据库,如果数据库崩了,游戏直接结束。 从两点来讨论:如何监控、如何解决。 如何监控 通过业务评估:比如营销活动推出的商品或者热卖的商品。基于LRU的命令,redis-cl…...

【Python系列】Parquet 数据处理与合并:高效数据操作实践
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

大脑自组织神经网络通俗讲解
大脑自组织神经网络的核心概念 大脑自组织神经网络,是指大脑中的神经元通过自组织的方式形成复杂的网络结构,从而实现信息的处理和存储。这一过程涉及到神经元的生长、连接和重塑,是大脑学习和记忆的基础。其核心公式涉及神经网络的权重更新…...
org.springframework.context.annotation.DeferredImportSelector如何使用?
DeferredImportSelector 是 Spring 框架中一个比较高级的功能,主要用于在 Spring 应用上下文的配置阶段延迟导入某些组件或配置。这个功能特别有用,比如在处理依赖于其他自动配置的场景,或者当你想基于某些条件来决定是否导入特定的配置类时。…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...

Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...