自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 MySQL日体系

逻辑架构MySQL的逻辑架构可分为四层,包括连接层、服务层、引擎层和存储层,各层的接口交互及作用如下图所示。需要注意的是,由于本文将主要讲解事务的实现原理,因此下文针对的都是InnoDB引擎下的情况。连接层: 负责处理客户端的连接以及权限的认证。服务层: 定义有许多不同的模块,包括权限判断,SQL接口,SQL解析,SQL分析优化, 缓存查询的处理以及部分内置函数执行等。MySQL的查询语句在服务层内进行解析、优化、缓存以及内置函数的实现和存储。引擎层: 负责MySQL中数据的存储和提取。MySQL

2021-10-26 22:21:14 133

原创 Spring事务学习(一)

Spring事务管理分类:编程式事务管理声明式事务管理事务步骤开启事务执行业务逻辑出现异常进行回滚正常执行则提交事务编程式事务管理Spring提供了两种编程式事务管理的方法使用 TransactionTemplate 或者 TransactionalOperator.直接实现TransactionManager接口如果是使用的是命令式编程,Spring推荐使用TransactionTemplate 来完成编程式事务管理,如果是响应式编程,那么使用TransactionalOp

2021-08-09 23:09:08 255

原创 MyBatis源码学习(代理模式)

代理模式定义:代理对象具有和目标对象(真实业务对象)相同的方法,即实现共同的接口或继承同一个类代理对象持有目标对象的引用,并由代理对象控制对目标对象的操作代理模式属于结构型模式,它在不改变目标类代码的情况下,通过引入代理类来给目标类附加功能。Mybatis框架中,SqlSession类就用到了代理模式,SqlSession是操作数据库一个会话对象,我们用户一般通过SqlSession做增删改查,但是如果每次做增删改都开启事务,关闭事务,显然很麻烦,所以就可以交给代理类来完成这个工作,如果没

2021-07-24 10:28:44 141

转载 模板方法

作用:绝大部分设计模式的原理和实现,都非常简单,难的是掌握应用场景,搞清楚能解决什么问题。模板模式也不例外。模板模式主要是用来解决复用和扩展两个问题。定义:定义:模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤目的:1.使用模版方法模式的目的是避免编写重复代码,以便开发人员可以专注于核心业务逻辑的实现2.解决接口与接口实现类之间继承矛盾问题以上定义来自《设计模式之美》示例:我

2021-07-18 16:22:35 656

原创 分布式事务

分布式事务单体数据库不涉及网络交互,所以在多表之间实现事务是比较简单的,这种事务我们称之为本地事务。但是单体数据库的性能达到瓶颈的时候,就需要分库(分物理实例),就会出现跨库(数据库实例)的事务需求;随着企业应用的规模越来越大,企业会进一步进行服务化改造,以满足业务增长的需求;当前微服务架构越来越流行,跨服务的事务场景也会越来越多。这些都是分布式事务的需求。分布式事务是指是指事务的 参与者、数据资源服务器 以及 事务管理器 分别位于分布式系统的不同节点之上。概括起来,分布式事务有三种场景:跨

2021-06-14 23:44:47 169

原创 Redis分布式锁

Redis分布式锁Redis分布式锁演进-阶段一直接使用setnx 加锁,执行完业务逻辑后调用del 释放锁缺点:如果setnx成功, 还没来得及释放锁, Client就宕机挂了, 这就会导致死锁 ;解决:设置锁的自动过期 ,即使 Client 宕机或其他原因没有删除锁,锁到期也会自动释放;Redis分布式锁演进-阶段二为了解决第一个阶段的缺陷,我们用setnx获取锁,然后用expire对其设置一个过期时间,即使 Client 宕机或其他原因没有删除锁,过期时间一到锁也会自动释放缺点:s

2021-04-18 23:14:10 452 1

原创 缓存数据一致性问题

Redis 缓存与数据库的 数据不一致缓存与数据库的“一致性” 包含以下两种情况:缓存中有数据,缓存的数据值需要和数据库中的值相同;缓存中本身没有数据,那么数据库中的值必须是最新值。对于读写缓存来说,如果要对数据进行增删改,就需要在缓存中进行,同时还要根据采取的写回策略,决定是否同步写回到数据库中。同步直写策略:写缓存时,也同步写数据库,缓存和数据库中的数据一致;异步写回策略:写缓存时不同步写数据库,等到数据从缓存中淘汰时,再写回数据库。使用这种策略时,如果数据还没有写回数据库,缓存就发生

2021-04-04 12:30:58 355

原创 工厂模式

工厂模式一般情况下,工厂模式分为三种更加细分的类型:简单工厂、工厂方法和抽象工厂。不过,在 GoF 的《设计模式》一书中,它将简单工厂模式看作是工厂方法模式的一种特例,所以工厂模式只被分成了工厂方法和抽象工厂两类。工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类思考什么时候该用工厂模式?相对于直接 new 来创建对象,用工厂模式来创建究竟有什么好处呢?简单工

2021-02-21 14:41:22 216

原创 虚拟机类加载机制

虚拟机类加载机制Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载过程。我们知道一个Java类要想运行,必须由jvm将其加载到内存中才能运行,加载的目的就是把Java字节代码转换成JVM中的java.lang.Class类的对象。类与类加载器对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在 Java 虚拟机中的唯一性,每个类加载器都拥有一个独立的类名称空间。也就是说:比较

2020-12-19 10:11:47 158 1

原创 mysql锁

mysql中的锁两种思想:悲观锁 VS 乐观锁至于悲观锁和乐观锁,也并不是 MySQL 或者数据库中独有的概念,而是并发编程的基本概念。主要区别在于,操作共享数据时:“悲观锁”即认为数据出现冲突的可能性更大,每次操作时都会对数据进行锁定;而“乐观锁”则是认为大部分情况不会出现冲突,不用每次都对数据上锁。乐观锁的版本号机制在表中设计一个版本字段 version,第一次读的时候,会获取 version 字段的取值。然后对数据进行更新或删除操作时,会执行UPDATE … SET version=ve

2020-10-12 23:26:46 291

原创 mysql事务隔离级别

mysql中事务隔离级别的实现事务的特性:原子性、一致性、隔离性、持久性隔离级别所谓隔离级别(Isolation Level),就是在数据库事务中,为保证并发数据读写的正确性而提出的定义;每种关系型数据库(如Oracle、Mysql)都提供了各自特色的隔离级别实现,虽然在通常的定义中是以锁为实现单元,但实际的实现千差万别。SQL标准中规定,针对不同的隔离级别,并发事务可以发生不同严重程度的问题,具体情况如下:脏读:一个事务能够读到其他事务尚未提交的修改不可重复读:在一个事务执行过程中多次读取的

2020-09-26 22:42:50 226

原创 java内存模型(JMM)

文章目录RabbitMQ简介主要架构ConnectionFactory、Connection、ChannelQueueMessage acknowledgment参考文档:RabbitMQ简介AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道...

2020-07-10 09:18:02 258 1

原创 GC机制

一、JVM GC回收哪个区域内的垃圾?==需要注意的是,JVM GC只回收堆区和方法区内的对象。==而栈区的数据,在超出作用域后会被JVM自动释放掉,所以其不在JVM GC的管理范围内。Java方法区(Sun HotSpot虚拟机中被称为永久代),很多人认为该部分的内存是不用回收的,java虚拟机规范也没有对该部分内存的垃圾收集做规定,但是方法区中的废弃常量和无用的类还是需要回收以保证永久代不...

2020-06-12 09:00:02 166

原创 代理模式

代理模式   根据代理类的创建时机和创建方式的不同,我们可以将代理模式分为静态代理和动态代理两种形式,其中,在程序运行前就已经存在的编译好的代理类是为静态代理,在程序运行期间根据需要动态的创建代理类及其实例来完成具体的功能是为动态代理。其中,代理对象的作用如下:代理对象存在的价值主要用于拦截对真实业务对象的访问;代理对象应该具有和目标对象(真实业务对象)相同的方法,即实现共同的接口或继...

2019-08-28 21:34:07 3245

原创 HashMap

数组数组存储区间是连续的,进行插入和删除操作时,平均要移动数组中近一半的元素,时间复杂度为O(N)。但数组的查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;链表链表存储区间离散,插入和删除操作无需移动元素,只需修改指针,但查找时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。哈希表那么我们能不能综合两者的特性,做出一种寻址容易,插入和删除...

2019-08-25 22:46:24 137

原创 JVM运行时数据区域

JVM运行时数据区域是我们java程序员必须要掌握的一块内容,下面是我阅读《深入理解java虚拟机》周志明著后整理的一些笔记 先来看一下JVM的整体结构程序计数器(Program Counter Register)程序计数器是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器就是通过改变该计数器的值来选取下一条需要执...

2018-04-29 23:04:28 335

原创 插入排序思想与实现

插入排序的基本思想:每一趟将一个待排序元素,按其排序码大小插入到前面已经排好序的一组元素的适当位置上,直到所有待排序元素元素全部插入为止。在这里,这里介绍两种具体的插入排序算法:直接插入排序,希尔排序。1、直接插入排序直接插入排序的思想:当插入第i(i>=1)个元素时,前面的arr[0],…,arr[i-1]等i-1个 元素已经有序。这时,将第i个元素与前i-1个元素arr[i-1],…,a...

2017-09-27 22:09:11 1080

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除