Seata分布式事务
1.什么是分布式事务要了解分布式事务,必须先了解本地事务。
注:本学习参考B站-分布式事务全攻略:2小时搞懂分布式事务
1.1.本地事务本地事务,是指传统的单机数据库事务,必须具备ACID原则:
原子性(A)
所谓的原子性就是说,在整个事务中的所有操作,要么全部完成,要么全部不做,没有中间状态。对于事务在执行中发生错误,所有的操作都会被回滚,整个事务就像从没被执行过一样。
一致性(C)
事务的执行必须保证系统的一致性,在事务开始之前和事务结束以后,数据库的完整性没有被破坏,就拿转账为例,A有500元,B有500元,如果在一个事务里A成功转给B50元,那么不管发生什么,那么最后A账户和B账户的数据之和必须是1000元。
隔离性(I)
所谓的隔离性就是说,事务与事务之间不会互相影响,一个事务的中间状态不会被其他事务感知。数据库保证隔离性包括四种不同的隔离级别:
Read Uncommitted(读取未提交内容)
Read Committed(读取提交内容)
Repeatable Read(可重读)
Serializable(可串行化)
持久性(D ...
Spring实战-第四版学习
JVM调优
参数
含义
-Xms2G -Xmx2G
代表jvm可用的heap内存最小和最大
-XX:PermSize -XX:MaxPermSize
代表jvm的metadata内存的大小
1、启动报的错是:Could not reserve enough space for object heap error
1-Xms512M -Xmx1024M
2、Jvm out of memroy 报错总结:
Java heap space: 增加-xmx
PermGen space: 增加-XX:PermSize
Requested array size exceeds VM limit: 错误的意思是创建数组的大小超过了heap的最大大小,所以解决办法就是,要么增加-xmx,要么减小要创建的这个数组大小。
简化Java开发依赖注入任何一个有实际意义的应用(肯定比 Hello World 示例更复杂)都会由两个或者更多的类组成,这些类相互之间进行协作来完成特定的业务逻辑。按照传统的做法,每个对象负责管理与自己相互协作的对象(即它所依赖的对象)的引用,这将会导 ...
ElasticSearch学习
入门简介Elasticsearch是一个基于Lucene库的开源搜索引擎,它提供分布式的实时文件存储和搜索,可扩展性好,并且支持通过HTTP网络接口交互,数据以JSON格式展示。
Elasticsearch因为其极快的搜索和聚合速度通常被应用在各种搜索应用中,比如在自己的app里面加一个搜索框或者分析实时日志(ELK系统)。
Elasticsearch会对所有输入的文本进行处理,建立索引放入内存中,从而提高搜索效率。在这一点上ES要优于MySQL的B+树的结构,MySQL需要将索引放入磁盘,每次读取需要先从磁盘读取索引然后寻找对应的数据节点,但是ES能够直接在内存中就找到目标文档对应的大致位置,最大化提高效率。并且在进行组合查询的时候MySQL的劣势更加明显,它不支持复杂的组合查询比如聚合操作,即使要组合查询也要事先建好索引,但是ES就可以完成这种复杂的操作,默认每个字段都是有索引的,在查询的时候可以各种互相组合。
为了省事,以下统一用ES来代替Elasticsearch,其实我们在公司里面也基本都说ES,全称比较难读。还有一点,因为ES使用了Lucene的库,下面说的很多优 ...
Java核心技术 - JUC
JUC包中锁原理剖析LockSupport工具类JDK中的 rt.jar包 里面的 LockSupport 是个工具类,它的主要作用是挂起和唤醒线程,该工具类是创建锁和其他同步类的基础。
LockSupport类与每个使用它的线程都会关联一个许可证,在默认情况下调用LockSupport类的方法的线程是不持有许可证的。LockSupport是使用Unsafe类实现的,下面介绍LockSupport中的几个主要函数。
1、void park()
如果调用 park 方法的线程已经拿到了与 LockSupport关联 的许可证,则调用 Locksupport.park() 时会马上返回,否则调用线程会被禁止参与线程的调度,也就是会被阻塞挂起。
如下代码直接在main函数里面调用park方法,最终只会输出begin park!,然后当前线程被挂起(阻塞),这是因为在默认情况下调用线程是不持有许可证的。
1234567public class Demo { public static void main(String[] args) { Sys ...
Java核心技术 - 多线程
线程种类
用户线程
守护线程
什么是线程操作系统在分配资源时是把资源分配给进程的,但是CPU资源比较特殊,它是被分配到线程的,因为真正要占用CPU运行的是线程,所以也说线程是CPU分配的基本单位。
在Java 中,当我们启动main函数时其实就启动了一个JVM的进程,而main 函数所在的线程就是这个进程中的一个线程,也称主线程。
进程和线程的关系如图1-1所示。
由图1-1可以看到,一个进程中有多个线程,多个线程共享进程的堆和方法区资源,但是每个线程有自己的程序计数器和栈区域。
程序计数器是一块内存区域,用来记录线程当前要执行的指令地址。那么为何要将程序计数器设计为线程私有的呢?前面说了线程是占用CPU执行的基本单位,而CPU一般是使用时间片轮转方式让线程轮询占用的,所以当前线程CPU时间片用完后,要让出CPU,等下次轮到自己的时候再执行。那么如何知道之前程序执行到哪里了呢?其实程序计数器就是为了记录该线程让出CPU时的执行地址的,待再次分配到时间片时线程就可以从自己私有的计数器指定地址继续执行。另外需要注意的是,如果执行的是native方法,那么pc计数器记录的是u ...
Java核心技术 - 基础
数值类型之间的转换
而比如doblue转int强制类型转换通过截断小数部分将浮点值转换为整型
自增与自减运算符
n++将变量n的当前值加 1, n--则将变量n 的值减一
前缀形式会先完成加 ;而后缀形式会先使用变量原来的值数据操作,最后才进行加减。
序列化我们使用序列化将对象集合保存到磁盘文件中,并按照它们被存储的样子获取它们。 序列化的另一种非常重要的应用是通过网络将对象集合传送到另一台计算机上。 正如在文件中保存原生的内存地址毫无意义一样,这些地址对于在不同的处理器之间的通信也是毫无意义的。 因为序列化用序列号代替了内存地址,所以它允许将对象集合从一台机器传送到另一台机器。
大数值使用 java.math 包中的两个很有用的类: Biglnteger BigDecimal 这两个类可以处理包含任意长度数字序列的数值。
Biglnteger 类实现了任意精度的整数运算, BigDecimal 实现了任意精度的浮点数运算。
数组12345String[] names = new String[10];会创建一个包含10个字符串的数组,所有字符串都为null。如果希望这个 ...
Docker学习
Docker安装123456789101112131415161718// 使用官方安装脚本自动安装curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun// 启动 Dockersudo systemctl start docker// 通过运行 hello-world 映像来验证是否正确安装了 Docker Engine-Community 。sudo docker run hello-world// 卸载旧版本sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ ...
RocketMQ学习
基本概念Producer Group标识发送同一类消息的Producer,通常发送逻辑一致。发送普通消息的时候,仅标识使用,并无特别用处。若事务消息,如果某条发送某条消息的producer-A宕机,使得事务消息一直处于PREPARED状态并超时,则broker会回查同一个group的其 他producer,确认这条消息应该commit还是rollback。
Consumer Group标识一类Consumer的集合名称,这类Consumer通常消费一类消息,且消费逻辑一致。同一个Consumer Group下的各个实例将共同消费topic的消息,起到负载均衡的作用。Consumer Group、topic 和 tag决定消费唯一Queue消息。
Topic标识一类消息的逻辑名字,消息的逻辑管理单位。无论消息生产还是消费,都需要指定Topic。消息主题,通过Topic对不同的业务消息进行分类。
Tag消息标签,用来进一步区分某个Topic下的消息分类,消息从生产者发出即带上的属性。
选择创建多个Topic,或者在同一个Topic下创建多个Tag。但通常情况下,不同的Topic之 ...
MySQL进阶学习
MySQL基础数据定义语言DDL(Data Definition Language)123456789101112131415161718对象: 数据库和表关键词: create alter drop truncate(删除当前表再新建一个一模一样的表结构)创建数据库:create database school;删除数据库:drop database school;切换数据库:use school;创建表:create table student id int(4) primary key auto_increment name varchar(20) score int(3) );查看数据库里存在的表:show tables;
数据操纵语言DML(Data Manipulation Language)1.插入 INSERT
1234567891011-- 单行插入INSERT INTO test(id, NAME) value(16, 'g');-- 插入且支持子查询INSERT INTO test(id, NAME) ...
MongoDB入门到进阶
安装MongoDB1. 下载:下载地址
2. 配置环境变量,注意到bin目录
3. 创建数据库所在目录,默认在C盘下的data文件夹中的db文件里
自定义数据库路径启动
1mongod --dbpath 数据库路径
自定义端口号启动
1mongod --port 端口号
自定义数据库路径 和 端口号 启动
1mongod --dbpath 数据库路径 --port 端口号
4. cmd输入 mongod 启动服务
5. 通过 localhost:27017 访问
6. cmd输入 mongo 启动客户端
7. 开机自启动mongod服务
在自定义的数据库路径data中新建log文件夹,然后在根目录新建mongod.cfg配置文件(mongodb4后,说是自带服务了,但是我是免安装版的,还是自己配置。)
配置文件内容如下:
123456<!--配置内容-->systemLog: destination: file path: mongod的目录\mongod.cfgstorage: dbPath: mongod的目录\bin
8. ...



