- 博客(20)
- 资源 (20)
- 收藏
- 关注

原创 InnoDB基于MVCC和next-key锁解决幻读问题
MySQL多版本并发控制事务的ACID事务的隔离级别锁锁粒度多版本并发控制(MVCC)SELECTINSERTDELETEUPDATE可重复读下,MVCC的幻读问题读操作不会出现幻读更新操作会出现幻读问题这种现象的原因快照读当前读如何解决当前读导致的幻读问题使用可串行化的隔离级别使用next-key锁,即更新时基于非唯一索引更新数据事务的ACID原子性:整个事务中的所有操作要么全部提交成功,要么全部失败回滚;一致性:总是从一个一致性的状态转换到另外一个一致性的状态,无中间状态;隔离性:一个事务所做
2020-06-27 16:30:45
4043
8

原创 JVM类加载机制-类是如何被加载的?
JVM把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被JVM直接使用的Java类型,这就是JVM的类加载机制类的生命周期JVM规范中初始化的条件被动引用不会触发初始化类加载的过程加载:非数组类:数组类:验证文件格式验证元数据验证字节码验证符号引用验证准备解析初始化类的生命周期加载、验证、准备、初始化和卸载5个阶段的顺序是确认的,类加载过程必须按照这种顺序按部就班的开始,在动态绑定中解析可以在初始化后完成JVM规范中初始化的条件使用new关键字实例化对象
2020-06-21 22:00:41
788

原创 JVM相关知识简单总结
JVM内存区域1,程序计数器:当前线程执行的字节码的行号指示器,线程私有,唯一一个虚拟机规范中没有规定任何OOM的区域2,虚拟机栈:用于存储局部变量,操作数栈,动态链接,方法出口信息等3,本地方法栈:执行Native方法服务使用的的内存4,堆:1个Eden区+2个survivor区+老年代,垃圾回收器管理的主要区域5,方法区:存储类信息,常量,静态变量,也叫永久代JVM常见参数-Xms 初始堆大小-Xmx 最大堆大小-Xmn 新生代大小(一般为整个堆的1/3或1/4.
2020-06-16 13:33:59
393
原创 基于okhttp3和CompletableFuture异步调用RESTful接口
基于okhttp3和CompletableFuture异步调用RESTful接口
2023-09-14 15:04:47
626
原创 乐观锁和悲观锁在实际开发中的应用
业务开发中更新操作引发的一点思考背景新增操作常见错误处理优化处理更新处理常见错误处理优化处理乐观锁方案悲观锁方案 update悲观锁方案 select for update背景在系统开发中,新增数据和更新数据是很常见的业务行为,有时更新数据还会附带新增数据的行为,面对这些业务行为,系统必须做到接口的幂等性和关联数据的一致性,下面先针对两种业务的常见错误写法和正确写法。新增操作常见业务场景:A系统给B系统同步业务数据,业务数据中有一个唯一字段businessCode作为幂等字段。常见错误处理先根
2021-03-13 13:41:24
632
1
原创 从本地事务到分布式事务
从本地事务到分布式事务本地事务本地事务的ACIDSpring代理本地事务Spring代理本地事务提供的属性传播属性隔离级别本地事务和Spring代理事务之间的关系Spring代理事务失效分布式事务分布式事务理论CAP理论BASE理论刚性事务2PC方案XA实现Seata实现TCC方案柔性事务可靠消息最终一致性本地消息表事务性消息最大努力通知四种方案比较本地事务当一个事务被提交给了数据库,则数据库需要确保该事务中的所有操作都成功完成且其结果被永久保存在数据库中,如果事务中有的操作没有成功完成,则事务中的所有
2020-10-14 12:28:47
492
原创 Java中的内部类
普通内部类外部类不能访问普通内部类属性和方法普通内部类可以访问外部类属性和方法创建普通内部类的时候必须创建外部类静态内部类静态内部类可以访问外部类静态属性和方法静态内部类不能访问外部类非静态属性和方法外部类不能访问静态内部类的属性和方法示例代码:public class A { private Integer a; private static Integer s = 10; public A() { } public A(Intege
2020-09-30 22:49:29
1869
原创 8种排序算法简单总结
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入时间复杂度空间复杂度稳定性选择选择选择选择冒泡选择选择选择插入选择选择
2020-07-25 12:32:49
1154
原创 Redis中的Bitmap和HyperLogLog
Redis中Bitmap的妙用 Bitmap存储结构Bitmap上的统计bitcount count [start end]bitop operation destkey key [key ...]Bitmap的妙用用户在线状态用户签到统计活跃用户Bitmap存储结构在Redis中以位为单位存储字符串,这种存储结构称为Bitmap,也叫位图。每个字节存储结构如下:offset01234567value00000000setbit key 0 1
2020-07-23 17:46:46
1036
原创 MySQL表设计和高性能索引
MySQL表设计和高性能索引MySQL数据类型整数类型实数类型VARCHAR 和 CHARBLOB和TEXT日期类型位数据类型MySQL表结构设计表设计的一些原则范式设计优点和缺点混用范式化和反范式化缓存表和汇总表计数器表高性能索引索引的优点B-Tree索引可以使用B-Tree索引的查询类型B-Tree索引的限制哈希索引哈希索引的限制高性能的索引策略聚簇索引和非聚簇索引InnoDB中使用聚簇索引插入行MySQL数据类型整数类型类型TINYINTSMALLINTMEDIUMINTINT
2020-07-12 15:53:05
695
原创 微服务架构模型和进程间通信
微服务架构微服务的扩展模型X轴扩展在多个相同实例之间实现请求的负载均衡Y轴扩展根据功能将应用程序拆分为服务Z轴扩展根据请求的属性路由请求微服务架构与SOA的异同微服务架构的好处微服务架构的弊端微服务进程间通信基于同步远程过程调用模式的通信:REST API开发可靠的远程过程调用代理:基于异步消息模式的通信:消息中间件处理重复消息使用异步消息提高可用性:消除同步交互微服务的扩展模型X轴扩展在多个相同实例之间实现请求的负载均衡Y轴扩展根据功能将应用程序拆分为服务Z轴扩展根据请求的属性路由请求微
2020-07-11 16:30:51
606
1
原创 SpringBoot中基于AOP打印接口日志和全局异常处理
SpringBoot项目中基于AOP特性打印接口日志新建SpringBoot项目引入web、aop和log4j2依赖包新增log4j2配置文件自定义切入点自定义切面测试代码运行效果新建SpringBoot项目import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic
2020-06-23 14:28:04
830
原创 JVM垃圾回收器-如何正确选择垃圾回收器?
JVM垃圾回收器回收的空间包括新生代和老年代,基于标记-清除,复制,标记-整理等算法实现,自动回收JVM堆内存垃圾回收期分类垃圾回收器介绍并发与并行内存分配与回收策略垃圾回收期分类连线表示两款垃圾回收器可配合使用,目前JDK8最多的搭配是PS+PO垃圾回收器介绍Serial:多个用户线程运行之后达到“安全点”,垃圾回收线程单线程回收新生代,采用复制算法实现,主要用于单CPU环境;ParNew:多个用户线程运行之后达到“安全点”,垃圾回收线程多线程并行回收新生代,采用复制算法实现,主要用于多CP
2020-06-20 16:46:52
1128
原创 synchronized实现原理总结
synchronized用于多线程同步访问临界区,保证线程安全实现原理锁升级synchronized的特性synchronized的用法实现原理基于对象头的MarkWord存储锁状态,实现获取锁,释放锁以及锁升级所以首先要了解对象头,在未开启指针压缩情况下:对象头 = 8byte的MarkWord + 8byte的ClassPointer开启指针压缩后:对象头 = 8byte的MarkWord + 4byte的ClassPointer + 4byte的对齐数据对齐是因为64位的JVM寻址空间是
2020-06-17 18:12:40
1827
原创 JVM垃圾回收算法-对象已死吗?
1,判断对象是否已死引用计数法:实现:给对象添加一个引用计数器,每当有一个地方引用到它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的缺点:无法解决循环引用的问题可达性分析算法实现:从GC Roots对象为起点,往下搜索,形成一条引用链,当对象与任何引用链没有相连的时候,证明该对象是不可用的GC Roots对象: 虚拟机栈引用的对象 方法区中类静态属性和常量引用的对象 本地方法栈中JNI引用的对象...
2020-06-16 16:31:34
340
原创 安装Linux虚拟机网络设置
virtual box安装Linux虚拟机网络设置:1,桥接方式:虚拟机内部自动分配ip,虚拟机对于宿主机是透明的,可根据ip地址ssh直连2,NAT方式:虚拟机内部也会分配ip,但是虚拟机对于宿主机是不可见的,不能使用ip直连,必须配置网络接口映射,如下图:3,使用NAT方式配置虚拟机网络时,安装docker容器后,如果需要容器对宿主机可见,也必须配置网络接口映射,如mysql,nginx等...
2020-06-16 13:27:00
297
原创 git提交和撤销
提交1,提交到暂存区 git add -A2,提交到本地仓库 git commit -m ‘refactor[dev]:备注’3,推送到远程 git ps origin dev撤销1,没有add的文件撤销git checkout -- filename 单个git chechout -- . 多个2,已经add的文件撤销git reset HEAD filename 撤销至没有add的状态3,已经push远程的撤销git revert 提交版本号 ..
2020-06-16 13:19:21
250
原创 Linux环境下yum安装docker
1,卸载docker历史信息yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine2,安装系统工具yum install -y yum-utils device-mapper
2020-06-16 13:16:25
473
原创 常用开发组件构建docker镜像命令
关系型数据库mysqldocker run -d -p 3306:3306 --name mysql \ -e MYSQL_ROOT_PASSWORD=root \ -v /map/mysql/data/:/var/lib/mysql/ \ -v /etc/localtime:/etc/localtime:ro \ mysql:5.7.20 \ --character-set-server=utf8mb4 \ --collation-server=utf8mb4_general_ci \ --max_c.
2020-06-16 13:14:38
222
原创 DDL语句规范
#例子一:创建库CREATE DATABASE DBORDER CHARACTER SET utf8 ;USE DBORDER;#例子二:创建表CREATE TABLE PAGE (id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增id',url VARCHAR(255) NOT NULL COMMENT '页面地址',description VARCHAR(255) DEFAULT NULL COMMENT '页面...
2020-06-16 13:10:07
479
esdk-obs-java-3.20.3.zip
2020-06-16
dcm4che-linux-x86_64.zip
2020-06-16
wechat_devtools_1.02.1904090_x64.exe
2020-06-16
xjar-master.zip
2020-06-16
arthas-idea-plugin.zip
2020-06-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人