- 博客(67)
- 收藏
- 关注
转载 【MYSQL】MySQL事务:ACID特性的实现原理
目录一、ACID特性二、原子性一、ACID特性原子性(Atomicity,或称不可分割性)一致性(Consistency)隔离性(Isolation)持久性(Durability)按照道理来说,ACID特性同时满足才是事务;但现实是,各大数据库真正满足ACID的事务少之又少。例如MySQL的NDB Cluster事务不满足持久性和隔离性;InnoDB默认事务隔离级别是可重复读,不满足隔离性;Oracle默认的事务隔离级别为READ COMMITTED,不满足隔离性。因此与其说ACID是
2021-05-14 17:26:21
400
原创 【MYSQL】二叉查找树、平衡二叉树,红黑树,B树中MySQL为什么选B+Tree做索引?
MySQL数据库索引为什么选择B+Tree?一、二叉查找树(BST)二、平衡二叉树(AVL)三、红黑树四、B-Tree五、B+Tree六、InnoDB 和MyISAM 对于B+Tree应用的区别七、为什么选择B+Tree?在 MySQL 中,MyISAM与InnoDB两种引擎都是使用B+Tree 作为索引结构,为什么它们都要选择B+Tree这种数据结构?我们先从相近的二叉查找树开始。一、二叉查找树(BST)二叉查找树的特性:1.若它的左子树不为空,则所有左子树上的值均小于其根节点的值2.若它
2020-11-02 15:12:16
400
原创 【MySQL】MyISAM与InnoDB区别
MyISAM与InnoDB区别一、MyISAM与InnoDB的区别1、 存储结构的区别2、 存储空间的区别3、 可移植性、备份及恢复的区别4、 事务支持的区别5、 自动增长的区别6、 表锁差异的区别7、 全文索引的区别8、 表主键的区别9、 表的具体行数的区别10、 CURD操作的区别11、 外键的区别二、开发的注意事项三、总结在MySQL 5.1之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默认的搜索引擎变更为InnoDB。MyISAM是由早期的ISAM(Indexe
2020-09-27 15:06:36
378
原创 分布式事务解决方案
分布式事务解决方案一、啥是分布式事务?二、分布式事务模型DTP三、解决方案3.1 两阶段提交(2PC)3.2 三阶段提交(3PC)3.3 补偿事务(TCC)3.4 基于可靠消息的最终一致性方案一、啥是分布式事务?分布式事务是指会涉及到操作多个数据库的事务。其实就是将对同一库事务的概念扩大到了对多个库的事务。目的是为了保证分布式系统中的数据一致性。二、分布式事务模型DTP分布式事务的解决方案无外乎2PC,3PC,TCC,基于可靠消息等几种方案,但在具体介绍前,我认为有必要先介绍一些概念:
2020-08-26 14:13:36
435
原创 【算法】java实现用哈夫曼编码对文件进行压缩和解压
【算法】java实现用哈夫曼编码对文件进行压缩和解压1、什么是哈夫曼编码?2、哈夫曼编码如何对信息进行压缩?3、哈夫曼编码如何生成4、java实现用哈夫曼编码对文件进行压缩和解压聊哈夫曼编码前建议先了解一下 【数据结构】哈夫曼树1、什么是哈夫曼编码?哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就
2020-07-21 16:23:03
2616
2
原创 【数据结构】哈夫曼树
【数据结构】哈夫曼树1、基本概念2、什么是哈夫曼树?3、哈夫曼树构建图解4、代码实现哈夫曼树1、基本概念路径:一棵树中,从一个结点到另一个结点所经过的所有结点,被我们称为两个结点之间的路径,如图:从根节点1到叶子节点4的路径:1,2,4路径长度:在一棵树中,从一个结点到另一个结点所经过的“边”的数量,被我们称为两个结点之间的路径长度,还是上图,根节点1到叶子结点4的路径经过了2个边,也就是说,若规定根节点的层数为1,则从根节点到N层的结点的的路径长度为:N-1结点的带权路径长度:树的
2020-07-20 14:52:59
2450
原创 IO多路复用机制(select、poll、epoll)
IO多路复用机制(select、poll、epoll)1、概念2、IO模式3、select、poll、epoll4、总结1、概念用户空间与内核空间现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操作内核(kernel),保证内核的安全,操心系统将虚拟空间划分为两部分,一部分为内核空间,一部分为用户空间。针对li
2020-07-16 15:50:11
242
原创 Hadoop-2.5.0-cdh5.14.4 分布式搭建
Hadoop-2.5.0-cdh5.14.4 分布式搭建1、环境2、配置安装环境3、开始安装1、环境三台CentOS 7.6jdk1.8.0_191Hadoop-2.6.0-cdh5.14.42、配置安装环境可以创建新用户 hadoop(我自己搭测试环境,直接用的root)安装jdk(别忘配置环境变量)[root@SC0006 ~]# java -versionjava version "1.8.0_191"Java(TM) SE Runtime Environment (bui
2020-06-12 14:40:18
365
原创 四种常见的限流算法
四种常见的限流算法一、计数器算法二、滑动窗口计数器算法三、漏桶算法四、令牌桶算法一、计数器算法计数器算法是限流算法里最简单也是最容易实现的一种算法,简单来说就是规定单位时间处理的请求数量。比如我们规定我们的一个接口一分钟只能访问100次的话。在一开始,我们设置一个计数器counter,每当一个请求过来,counter就加1,如果counter的值大于100并且该请求与第一个请求的间隔时间还在1分钟之内,那么说明请求数过多。如果该请求与第一个请求的间隔时间大于1分钟,且counter的值还在限流范
2020-05-15 14:48:36
609
原创 用Java实现布隆过滤器
布隆过滤器1.什么是布隆过滤器?2.布隆过滤器的原理介绍3.布隆过滤器使用场景4.用Java 实现布隆过滤器1.什么是布隆过滤器?布隆过滤器(Bloom Filter)是一个叫做 Bloom 的老哥于1970年提出的。实际上可以把它看作由二进制向量(或者说位数组)和一系列随机映射函数(哈希函数)两部分组成的数据结构。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。2.布隆过滤器的原理介绍图解:如图所示,布隆过滤器添加元素时,该元素首先由多个
2020-05-11 15:47:03
10410
2
原创 【设计模式】设计模式之行为型模式(二)(备忘录、观察者、状态、策略、模板方法、访问者)
【设计模式】设计模式之行为型模式(二)(备忘录、观察者、状态、策略、模板方法、访问者)1、设计模式2、行为型设计模式之备忘录、观察者、状态、策略、模板方法、访问者模式2.1 备忘录模式2.2 观察者模式2.3 状态模式2.4 策略模式2.5 模板方法模式2.6 访问者模式1、设计模式之前聊了设计模式的概念,分类、五种创建型模式、七种结构型模式和五种行为型模式,二十三种设计模式,还剩六种行为型...
2020-04-10 18:33:20
2659
原创 【设计模式】设计模式之行为型模式(一)(责任链、命令、解释器、迭代器、中介)
【设计模式】设计模式之行为型模式(一)(职责链、命令、解释器、迭代器、中介)1、设计模式2、行为型模式2.1 概述2.2 行为型设计模式之责任链、命令、解释器、迭代器、中介模式2.2.1 责任链模式2.2.2 命令模式1、设计模式之前聊了设计模式的概念,分类、五种创建型模式和七种结构型模式,今天聊设计模式之行为型模式。创建型详见:【设计模式】设计模式之创建型模式(单例、原型、工厂、建造者...
2020-04-09 17:51:29
360
原创 【设计模式】设计模式之结构型模式(适配器、桥接、组合、装饰、外观、享元、代理)
【设计模式】设计模式之结构型模式(适配器、桥接、组合、装饰、外观、享元、代理)1、设计模式1.1 设计模式介绍1.2 分类2、结构型模式2.1 概述2.2 七大结构型设计模式2.2.1 适配器模式1、设计模式1.1 设计模式介绍设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、...
2020-04-07 21:37:27
14732
原创 【设计模式】设计模式之创建型模式(单例、原型、工厂、建造者)
【设计模式】设计模式之创建者模式(单例、原型、工厂、建造者)1、设计模式1.1 设计模式介绍1.2 分类2、创建型模式2.1 概述2.2 五大创建型设计模式2.2.1 单例模式2.2.2 工厂模式(简单工厂,工厂方法。抽象工厂)2.2.3 建造者模式2.2.4 原型模式1、设计模式1.1 设计模式介绍设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一...
2020-04-04 11:42:29
458
原创 【JVM】JVM类加载机制和双亲委派模式
【JVM】JVM类加载过程和类加载器1、类的生命周期2、类加载过程2.1 加载2.1.1 加载机制-双亲委派模式2.2 验证2.3 准备2.4 解析2.5 初始化3 卸载1、类的生命周期2、类加载过程Class 文件需要加载到虚拟机中之后才能运行和使用系统加载 Class 类型的文件主要三步:加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。...
2020-03-31 15:53:01
13062
原创 【算法】排序算法(基数、归并、快速、希尔、插入、选择、冒泡、堆)
【算法】排序算法(基数、归并、快速、希尔、插入、选择、冒泡)1、基数排序1.1 图解1.2 代码实现2、归并排序2.1 图解2.2 代码实现3、快速排序3.1 图解3.2 代码实现4、希尔排序4.1 图解4.2 代码实现5、插入排序5.1 图解5.2 代码实现6、选择排序6.1 代码实现7、冒泡排序7.1 代码实现8、 常用排序算法对比1、基数排序基数排序(radix sort)又称桶排序(...
2020-03-29 22:00:30
172
原创 【JUC】HashMap源码JDK1.8与1.7的区别
【JUC】HashMap源码JDK1.8与1.7的区别1、HashMap2、HashMap底层数据结构2.1JDK1.8之前2.2 JDK1.8之后2.3 JDK1.7 VS JDK1.8 比较3、HashMap源码分析3.1 开始扒源码3.1.1 构造方法3.1.2 put方法3.1.3 resize方法3.1.4 treeifyBin()方法3.1.5 get方法3.1.6 remove()方...
2020-03-19 16:40:20
3037
原创 【算法】 八皇后问题--回溯算法
1、八皇后问题介绍八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。2、java实现p...
2020-03-04 20:45:35
319
原创 【算法】用栈实现逆波兰计算器
逆波兰计算器就是使用逆波兰表达式实现的计算器1.什么是逆波兰表达式逆波兰表达式又叫后缀表达式那什么又叫后缀表达式?举例说明:(3+4)×5-6 就是中缀表达式,其对应的后缀表达式就是3 4 + 5 × 6 -有中缀有后缀就有前缀,(3+4)×5-6的前缀表达式就是:3 4 + 5 × 6 –简单来说,中缀表达式就是我们常见的计算表达式,对我们人类很友好,但对计算机不友好,相反,后缀表...
2020-03-01 13:49:05
199
原创 【springboot源码】嵌入式Servlet容器底层原理分析
【springboot源码】嵌入式Servlet容器底层原理分析1.springboot嵌入式Servlet容器基础使用1.1 SpringBoot定制和修改Servlet容器的相关配置1.2 springboot注册Servlet三大组件【Servlet、Filter、Listener】方法2.springboot嵌入式Servlet容器自动配置原理3.springboot嵌入式Servlet容...
2020-02-16 22:52:57
1209
原创 【springboot源码】日志框架梳理
【springboot源码】日志框架梳理1、市面上的日志框架2、SLF4j使用2.1、如何在系统中使用SLF4j2、遗留问题3、SpringBoot日志关系4、日志使用;1、默认配置2、指定配置5、切换日志框架6.最后贴个logback-spring.xml模板1、市面上的日志框架JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j…日...
2020-02-15 22:54:29
1187
原创 【springboot源码】springboot自动配置原理分析
【springboot源码】springboot自动配置源码分析1.测试用例2.springboot自动配置原理分析2.1 @EnableAutoConfiguration 开启自动配置功能注:本文阅读前提,对springboot基本使用有所了解,此外,其他一些源码解读,如果有需要,可以参考:【Spring源码】 后置处理器BeanPostProcessor底层原理分析【spring源码】s...
2020-02-15 18:24:11
2671
原创 【mybatis源码】 mybatis底层源码分析
【mybatis源码】 mybatis底层源码分析1.测试用例2.开撸源码2.1 SqlSessionFactory对象的创建与获取2.2 获取SqlSession对象注:其他一些源码解读,如果有需要,可以参考:【Spring源码】 后置处理器BeanPostProcessor底层原理分析【spring源码】spring声明式事务底层源码分析【spring源码】ApplicationLi...
2020-01-23 17:26:08
1735
原创 【SpringMVC源码】SpringMVC核心DispatcherServlet底层源码分析
【SpringMVC源码】SpringMVC核心DispatcherServlet底层源码分析1.核心业务流程2.DispatcherServlet底层源码分析3.SpringMVC的九大组件4.总结注:其他一些spring源码解读,如果有需要,可以参考:【Spring源码】 后置处理器BeanPostProcessor底层原理分析【spring源码】spring声明式事务底层源码分析【...
2020-01-17 18:01:11
15827
2
原创 【spring源码】spring IOC容器底层源码分析
【spring源码】AOP底层源码分析1.入口2.spring IOC核心refresh()方法源码分析2.1 prepareRefresh()刷新前的预处理2.2 obtainFreshBeanFactory();获取BeanFactory2.3 prepareBeanFactory(beanFactory);BeanFactory的预准备工作2.4 postProcessBeanFactory...
2020-01-12 19:28:01
19670
原创 【spring源码】ApplicationListener事件监听底层原理
【spring源码】spring声明式事务底层源码分析1.测试案例2.源码分析3.@EventListener注解事件监听底层分析注:本文默认大家对spring IOC和AOP都比较熟,不会很赘述一些相关源码,如果有需要,可以参考:【spring源码】AOP底层源码分析【Spring源码】 后置处理器BeanPostProcessor底层原理分析【spring源码】spring声明式事务...
2020-01-10 16:24:33
3698
原创 【spring源码】spring声明式事务底层源码分析+spring事务失效场景总结
1.环境搭建依赖jar包<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> ...
2020-01-10 12:34:50
2972
原创 【spring源码】AOP底层源码分析
【spring源码】AOP底层源码分析1.测试用例2.AOP流程概述3.AOP源码分析spring的AOP是什么不在赘述,以下内容默认大家会使用AOP,我们今天来扒源码1.测试用例引入必要依赖: <dependencies> <dependency> <groupId>org.springframework&l...
2020-01-07 23:55:23
19279
原创 【Spring源码】 后置处理器BeanPostProcessor底层原理分析
1.Spring中bean的生命周期今天不聊那么复杂,其实bean的生命周期就这四步:实例化、初始化、使用、销毁2.Spring注解开发指定初始化和销毁的方式大概以下四种方式:2.1 @Bean指定init-method和destroy-method举例Demo:bean实体类/** * bean的生命周期 * * @author wangjie * @vers...
2020-01-06 20:15:36
3121
原创 强引用、软引用、弱引用、虚引用
强引用、软引用、弱引用、虚引用1.前景提示2.整体介绍3.详细介绍1.前景提示要搞明白强、软、弱、虚这四种引用之前需要对JVM GC垃圾回收知识有所了解可见:【JVM】JVM内存结构+JVM参数配置+GC垃圾回收+OOM内存溢出2.整体介绍打开JDK文档可以看到Reference下面有三个子类:SoftReference软引用,WeakReference弱引用,PhantomR...
2020-01-04 18:07:36
2346
原创 【JVM】JVM内存结构+JVM参数配置+GC垃圾回收+OOM内存溢出
1.JVM内存结构上面是概览图,JVM内存结构大致可以分为线程共有和线程私有两部分:线程私有:1,程序计数器:用于存放下一条运行的指令,这里是唯一无内存溢出的区域。如果当前程序正在执行一个Java方法,则程序计数器记录正在执行的Java字节码地址,如果当前线程正在执行一个Native方法,则程序计数器为空。2,虚拟机栈:虚拟机栈为虚拟机执行Java方法(也就是字节码)服务;虚拟...
2020-01-04 00:53:51
19205
1
原创 【算法】约瑟夫问题--环形单链表实现
1.约瑟夫问题又称为约瑟夫环,丢手绢问题等。来历:据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephu...
2019-12-27 16:53:10
2366
原创 【锁】死锁与定位分析
1.什么是死锁?两个或两个以上进程在执行过程中,因争夺资源而造成的一种相互等待的现象2.产生的原因系统资源不足进程运行推进的顺序不合适资源分配不得当3.举例Demo:/** * 死锁与定位分析 * * @author wangjie * @version V1.0 * @date 2019/12/27 */public class DeadlockDe...
2019-12-27 11:20:53
2322
原创 【JUC】线程池-ThreadPoolExecutor源码解析
1.线程池能做什么?是控制运行的线程的数量处理过程中将任务加入队列,然后在线程创建后启动这些任务如果先生超过了最大数量,超出的数量的线程排队等候等其他线程执行完毕,再从队列中取出任务来执行.简单来说,线程池可以管理线程,进行线程复用和控制最大并发数。2.线程池优点?第一:降低资源消耗.通过重复利用自己创建的线程降低线程创建和销毁造成的消耗.第二: 提高响应速度.当任务到...
2019-12-26 18:27:57
2496
原创 【JUC】Callable底层源码分析
1.线程创建我们创建线程一般有以下几种方式:1,承Thread,重写run方法2,实现Runnable接口,重新run方法3,实现Callable接口并重写call方法。我们今天聊的就是第三种。实现Callable接口并重写call方法,与 Runnable 相比Callable又有些不同:1, Callable 可以在任务结束的时候提供一个返回值,Runnabl...
2019-12-25 13:51:48
2949
原创 【锁】 synchronized与Lock的区别
1. 原始构成synchronized是关键字,属于JVM层面。Lock是具体类,是api层面。1.1 synchronized底层原理今天就用一个最简单的一个Demo来聊:/** * idea配置javap -c工具 * 右键查看字节码指令 * * @author wangjie * @version V1.0 * @date 2019/12/24 */pu...
2019-12-24 16:33:38
2378
原创 【JUC】阻塞队列
1.什么是阻塞队列?顾名思义,首先它是个队列:当阻塞队列是空时,从队列中获取元素的操作将会被阻塞。当阻塞队列是满时,往队列中添加元素的操作将会被阻塞。同样,试图往已满的阻塞队列中添加新的线程同样也会被阻塞,直到其他线程从队列中移除一个或者多个元素或者全清空队列后使队列重新变得空闲起来并后续新增。2.有什么用?在多线程领域:所谓阻塞,在某些情况下会挂起线程(即线程阻塞),一旦条件...
2019-12-24 14:50:25
2254
原创 【Java数据结构】使用数组模拟队列
1.队列队列是一个有序列表,可以用数组或是链表来实现。遵循先进先出的原则。示意图:代码实现:Demo1:/** * 数组模拟队列 * * @author wangjie * @version V1.0 * @date 2019/12/23 */public class ArrayQueueDemo { public static void main(St...
2019-12-23 21:22:33
2246
原创 【锁】读写锁--ReentrantReadWriteLock源码分析
1.什么读写锁–ReentrantReadWriteLock?撸源码前,可先看:【锁】公平锁/非公平锁/可重入锁/递归锁/自旋锁/独占锁/共享锁/读写锁2.开撸2.1 类图先从类图开始,一步一步看。idea找到依赖的jdk下面rt.jar里面JUC包里面的ReentrantReadWriteLock右键如图:打开类图:我们可以看到ReentrantLock里面有一个Sync抽象...
2019-12-23 11:04:13
2365
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人