Spring事务
事务是一组操作的集合,是一个不可分割的操作。事务会把所有的操作作为一个整体,一起向数据库提交或者是撤销操作请求。所以这组操作要么同时成功,要么同时失败。我们在进行程序开发时,也会有事务的需求。
参考文章:
深入解析 @Transactional——Spring 事务管理的核心
Springboot @Transactional大事务处理的几点建议
Spring事务基本信息Spring事务在解决什么问题
数据一致性:在分布式系统中,多个服务或组件可能需要同时操作同一数据,事务确保这些操作要么全部成功,要么全部失败,从而保持数据的一致性。
并发控制:在多用户并发访问的情况下,事务可以控制对共享资源的访问,避免数据冲突和损坏。
故障恢复:当操作过程中发生错误时,事务可以回滚到操作前的状态,确保系统不会处于不一致的状态。
Spring事务的实现原理Spring事务的实现基于 AOP (面向切面编程)和 动态代理 。Spring通过代理机制对目标对象进行包装,插入事务管理的逻辑,包括开启事务、提交事务和回滚事务等。具体来说:
动态代理:Spring使用 JDK动态代理 或 ...
并发编程
并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。本文转载自Java并发编程详解。
线程线程基础线程的本质线程是轻量级进程:在同一个进程中,多个线程共享内存空间(堆、方法区),但每个线程拥有独立的栈和程序计数器(PC)。并发 vs 并行:
并发:线程在单核CPU上交替执行(时间片轮转)。
并行:多核CPU上线程真正同时运行
创建线程的两种方式123456789101112131415161718192021222324// 方式1:继承Thread类class MyThread extends Thread { @Override public void run() { System.out.println("Thread running by extending Thread"); }}// 方式2:实现Runnable接口(推荐,避免单继承限制,在Java中,类只能继承一个父类( ...
LeetCode的较难题
本文收集了一些LeetCode的一些较难的题目。
找出两个正序数组的中位数
给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。 (归并、快速排序 n.log(n))。假设 nums1 和 nums2 不会同时为空。
示例 1: nums1 = [1, 3] nums2 = [2] 则中位数是 2.0
示例 2: nums1 = [1, 2] nums2 = [3, 4] 则中位数是 (2 + 3)/2 = 2.5
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192public static double problem1(int[] nums1, in ...
LeetCode的中等难度题
本文收集了一些LeetCode的一些中等难度的题目。
基础数据类型定义123456789101112131415161718192021222324public class ListNode1 { int val; ListNode1 next; ListNode1(int x) { val = x; } public ListNode1(int val , ListNode1 next){ this.val = val; this.next = next; } public ListNode1 reverseLink(ListNode1 head) { ListNode1 head1 = head, next1 = head.next, prev1 = null; while(head1 != null){ head1.next = prev1; pre ...
LeetCode的简单题
本文收集了一些LeetCode的一些简单的题目
基础数据类型定义
12345678910111213141516171819202122public class ListNode1 { int val; ListNode1 next; ListNode1() {} ListNode1(int val) { this.val = val; } ListNode1(int val, ListNode1 next) { this.val = val; this.next = next; }}public class TreeNode1 { int val; TreeNode1 left; TreeNode1 right; TreeNode1(int x) { val = x; }}
和为目标值的两数在数组中的下标
给定一个整数数组 ...
Linux备份数据到本地
本文简单记录了将Linux中数据库数据备份到本地是实现流程。
安装下载命令
1234安装下载命令sudo yum install lrzszsz filename 下载rz filename 上传
登录到MySQL
1mysql -u root -p
查看所有用户及权限
1SELECT User, Host FROM mysql.user;
查看数据库
123SHOW DATABASES;USE your_database_name;SHOW TABLES;
下载数据
12345678mysqldump -u root -p mysql > mysql_dump.sqlmysqldump -u username -p mydatabase > mydatabase_dump.sql# 其中:# username 是你的MySQL用户名。# -p 选项会提示你输入密码。# mydatabase 是要导出的数据库名称。# mydatabase_dump.sql 是导出的文件名。
Docker命令
Docker是一个用于创建、部署和管理容器的开源平台。在使用Docker时,有效地管理和监控容器是非常重要的,其中查看和解析Docker命令(command)是基本且关键的一步。本文将介绍一些关于Docker的命令。
基础命令Docker命令的格式1docker <command>[options] [arguments]
Docker基础命令1234docker version #显示版本信息docker info #显示docker系统信息,包括容器、镜像docker stats #cpu/内存使用情况docker [command] --help #帮助命令
镜像相关命令查看本地镜像 images12345678910111213docker images -a, --all # 列出所有的镜像 -q, --quiet # 只显示的镜像的id# 举例说明[root@localhost ~]# docker imagesREP ...
Docker
Docker是一组平台即服务(PaaS)的产品。它基于操作系统层级的虚拟化技术,将软件与其依赖项打包为容器。托管容器的软件称为Docker引擎。Docker能够帮助开发者在轻量级容器中自动部署应用程序,并使得不同容器中的应用程序彼此隔离,高效工作。
Docker
参考文档链接
官网:https://www.docker.com/
文档:https://docs.docker.com/
仓库:https://hub.docker.com/
什么是Docker
Docker 是基于Go语言开发的开源项目,是开源的容器化平台,旨在简化应用程序的开发、部署和运行过程。它提供了一种轻量级、可移植和自包含的容器化环境,使开发人员能够在不同的计算机上以一致的方式构建、打包和分发应用程序。
核心概念:
容器(Container):容器是 Docker 的基本部署单元。它是一个轻量级的、独立的运行时环境,包含应用程序及其相关依赖。容器利用 Linux 内核的命名空间和控制组技术,实现了隔离性和资源管理,使得应用程序在不同的容器中运行不会相互影响。
镜像(Image):镜像是用于创建容器的模板。它包含了 ...
WebSocket
WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
参考原文:
websocket 实现后端主动前端推送数据、及时通讯(vue3 + springboot)
Vue3和SpringBoot实现Web实时消息推送
即时通讯,服务端主动推送数据后端主动推送数据给前端的核心实现方案包括WebSocket、Server-Sent Events(SSE)、长轮询(Long Polling)和HTTP/2 Server Push。这些方案适用于不同场景,选择需综合考虑实时性要求、兼容性和实现复杂度。
主流实现方案对比
方案
协议基础
通信模式
延迟
实现复杂度
适用场景
WebSocket
独立TCP协议
全双工双向通信
低
较高
实时聊天、高频数据监控(如股票)
Server-Sent Events
HTTP
单向服务器推送
中等
较低
新 ...
WebPack
webpack 是代码编译工具,有入口、出口、loader 和插件。webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具。当 webpack 处理应用程序时,它会在内部构建一个依赖图(dependency graph),此依赖图对应映射到项目所需的每个模块,并生成一个或多个 bundle。
什么是 webpack ?
webpack 是一个现代 JavaScript 应用程序的静态模块打包器
webpack 可以递归的打包项目中所有模块(递归:指定一个入口,分析模块的依赖,它会递归的查找所有相关的依赖)
核心概念
Entry:配置入口文件。webpack 会找出有哪些模块是入库的依赖 , 相关的依赖会被处理,输出到 bundles 的文件中
Output:output 属性会告诉 webpack 它所创建的bundles 如何命名,默认值为 ./dist
module:模块。Webpack 里一切皆模块,一个模块对应一个文件。Webpack 从配置的 Entry 开始递归找出所有依赖的模块。
Chunk:代码块。一个 chunk 由多个模块组合而成,用于代码 ...




