java
wj-1024
【日积跬步】
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
分布式事务解决方案
分布式事务解决方案一、啥是分布式事务?二、分布式事务模型DTP三、解决方案3.1 两阶段提交(2PC)3.2 三阶段提交(3PC)3.3 补偿事务(TCC)3.4 基于可靠消息的最终一致性方案一、啥是分布式事务?分布式事务是指会涉及到操作多个数据库的事务。其实就是将对同一库事务的概念扩大到了对多个库的事务。目的是为了保证分布式系统中的数据一致性。二、分布式事务模型DTP分布式事务的解决方案无外乎2PC,3PC,TCC,基于可靠消息等几种方案,但在具体介绍前,我认为有必要先介绍一些概念:原创 2020-08-26 14:13:36 · 576 阅读 · 0 评论 -
【算法】java实现用哈夫曼编码对文件进行压缩和解压
【算法】java实现用哈夫曼编码对文件进行压缩和解压1、什么是哈夫曼编码?2、哈夫曼编码如何对信息进行压缩?3、哈夫曼编码如何生成4、java实现用哈夫曼编码对文件进行压缩和解压聊哈夫曼编码前建议先了解一下 【数据结构】哈夫曼树1、什么是哈夫曼编码?哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就原创 2020-07-21 16:23:03 · 3017 阅读 · 2 评论 -
【数据结构】哈夫曼树
【数据结构】哈夫曼树1、基本概念2、什么是哈夫曼树?3、哈夫曼树构建图解4、代码实现哈夫曼树1、基本概念路径:一棵树中,从一个结点到另一个结点所经过的所有结点,被我们称为两个结点之间的路径,如图:从根节点1到叶子节点4的路径:1,2,4路径长度:在一棵树中,从一个结点到另一个结点所经过的“边”的数量,被我们称为两个结点之间的路径长度,还是上图,根节点1到叶子结点4的路径经过了2个边,也就是说,若规定根节点的层数为1,则从根节点到N层的结点的的路径长度为:N-1结点的带权路径长度:树的原创 2020-07-20 14:52:59 · 2756 阅读 · 0 评论 -
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 · 522 阅读 · 0 评论 -
接口幂等性设计
分布式高并发下的接口幂等性设计原创 2020-06-12 11:16:27 · 531 阅读 · 0 评论 -
用Java实现布隆过滤器
布隆过滤器1.什么是布隆过滤器?2.布隆过滤器的原理介绍3.布隆过滤器使用场景4.用Java 实现布隆过滤器1.什么是布隆过滤器?布隆过滤器(Bloom Filter)是一个叫做 Bloom 的老哥于1970年提出的。实际上可以把它看作由二进制向量(或者说位数组)和一系列随机映射函数(哈希函数)两部分组成的数据结构。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。2.布隆过滤器的原理介绍图解:如图所示,布隆过滤器添加元素时,该元素首先由多个原创 2020-05-11 15:47:03 · 10908 阅读 · 2 评论 -
【设计模式】设计模式之行为型模式(二)(备忘录、观察者、状态、策略、模板方法、访问者)
【设计模式】设计模式之行为型模式(二)(备忘录、观察者、状态、策略、模板方法、访问者)1、设计模式2、行为型设计模式之备忘录、观察者、状态、策略、模板方法、访问者模式2.1 备忘录模式2.2 观察者模式2.3 状态模式2.4 策略模式2.5 模板方法模式2.6 访问者模式1、设计模式之前聊了设计模式的概念,分类、五种创建型模式、七种结构型模式和五种行为型模式,二十三种设计模式,还剩六种行为型...原创 2020-04-10 18:33:20 · 2885 阅读 · 0 评论 -
【设计模式】设计模式之行为型模式(一)(责任链、命令、解释器、迭代器、中介)
【设计模式】设计模式之行为型模式(一)(职责链、命令、解释器、迭代器、中介)1、设计模式2、行为型模式2.1 概述2.2 行为型设计模式之责任链、命令、解释器、迭代器、中介模式2.2.1 责任链模式2.2.2 命令模式1、设计模式之前聊了设计模式的概念,分类、五种创建型模式和七种结构型模式,今天聊设计模式之行为型模式。创建型详见:【设计模式】设计模式之创建型模式(单例、原型、工厂、建造者...原创 2020-04-09 17:51:29 · 574 阅读 · 0 评论 -
【设计模式】设计模式之结构型模式(适配器、桥接、组合、装饰、外观、享元、代理)
【设计模式】设计模式之结构型模式(适配器、桥接、组合、装饰、外观、享元、代理)1、设计模式1.1 设计模式介绍1.2 分类2、结构型模式2.1 概述2.2 七大结构型设计模式2.2.1 适配器模式1、设计模式1.1 设计模式介绍设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、...原创 2020-04-07 21:37:27 · 15038 阅读 · 0 评论 -
【设计模式】设计模式之创建型模式(单例、原型、工厂、建造者)
【设计模式】设计模式之创建者模式(单例、原型、工厂、建造者)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 · 681 阅读 · 0 评论 -
【算法】排序算法(基数、归并、快速、希尔、插入、选择、冒泡、堆)
【算法】排序算法(基数、归并、快速、希尔、插入、选择、冒泡)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 · 252 阅读 · 0 评论 -
【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 · 3221 阅读 · 0 评论 -
【算法】 八皇后问题--回溯算法
1、八皇后问题介绍八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。2、java实现p...原创 2020-03-04 20:45:35 · 489 阅读 · 0 评论 -
【算法】用栈实现逆波兰计算器
逆波兰计算器就是使用逆波兰表达式实现的计算器1.什么是逆波兰表达式逆波兰表达式又叫后缀表达式那什么又叫后缀表达式?举例说明:(3+4)×5-6 就是中缀表达式,其对应的后缀表达式就是3 4 + 5 × 6 -有中缀有后缀就有前缀,(3+4)×5-6的前缀表达式就是:3 4 + 5 × 6 –简单来说,中缀表达式就是我们常见的计算表达式,对我们人类很友好,但对计算机不友好,相反,后缀表...原创 2020-03-01 13:49:05 · 293 阅读 · 0 评论 -
【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 · 1382 阅读 · 0 评论 -
【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 · 1383 阅读 · 0 评论 -
【springboot源码】springboot自动配置原理分析
【springboot源码】springboot自动配置源码分析1.测试用例2.springboot自动配置原理分析2.1 @EnableAutoConfiguration 开启自动配置功能注:本文阅读前提,对springboot基本使用有所了解,此外,其他一些源码解读,如果有需要,可以参考:【Spring源码】 后置处理器BeanPostProcessor底层原理分析【spring源码】s...原创 2020-02-15 18:24:11 · 2812 阅读 · 0 评论 -
【mybatis源码】 mybatis底层源码分析
【mybatis源码】 mybatis底层源码分析1.测试用例2.开撸源码2.1 SqlSessionFactory对象的创建与获取2.2 获取SqlSession对象注:其他一些源码解读,如果有需要,可以参考:【Spring源码】 后置处理器BeanPostProcessor底层原理分析【spring源码】spring声明式事务底层源码分析【spring源码】ApplicationLi...原创 2020-01-23 17:26:08 · 1897 阅读 · 0 评论 -
【SpringMVC源码】SpringMVC核心DispatcherServlet底层源码分析
【SpringMVC源码】SpringMVC核心DispatcherServlet底层源码分析1.核心业务流程2.DispatcherServlet底层源码分析3.SpringMVC的九大组件4.总结注:其他一些spring源码解读,如果有需要,可以参考:【Spring源码】 后置处理器BeanPostProcessor底层原理分析【spring源码】spring声明式事务底层源码分析【...原创 2020-01-17 18:01:11 · 16029 阅读 · 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 · 20052 阅读 · 0 评论 -
【spring源码】ApplicationListener事件监听底层原理
【spring源码】spring声明式事务底层源码分析1.测试案例2.源码分析3.@EventListener注解事件监听底层分析注:本文默认大家对spring IOC和AOP都比较熟,不会很赘述一些相关源码,如果有需要,可以参考:【spring源码】AOP底层源码分析【Spring源码】 后置处理器BeanPostProcessor底层原理分析【spring源码】spring声明式事务...原创 2020-01-10 16:24:33 · 4078 阅读 · 0 评论 -
【spring源码】spring声明式事务底层源码分析+spring事务失效场景总结
1.环境搭建依赖jar包<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> ...原创 2020-01-10 12:34:50 · 3299 阅读 · 0 评论 -
【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 · 19529 阅读 · 0 评论 -
【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 · 3271 阅读 · 0 评论 -
强引用、软引用、弱引用、虚引用
强引用、软引用、弱引用、虚引用1.前景提示2.整体介绍3.详细介绍1.前景提示要搞明白强、软、弱、虚这四种引用之前需要对JVM GC垃圾回收知识有所了解可见:【JVM】JVM内存结构+JVM参数配置+GC垃圾回收+OOM内存溢出2.整体介绍打开JDK文档可以看到Reference下面有三个子类:SoftReference软引用,WeakReference弱引用,PhantomR...原创 2020-01-04 18:07:36 · 2454 阅读 · 0 评论 -
【JVM】JVM内存结构+JVM参数配置+GC垃圾回收+OOM内存溢出
1.JVM内存结构上面是概览图,JVM内存结构大致可以分为线程共有和线程私有两部分:线程私有:1,程序计数器:用于存放下一条运行的指令,这里是唯一无内存溢出的区域。如果当前程序正在执行一个Java方法,则程序计数器记录正在执行的Java字节码地址,如果当前线程正在执行一个Native方法,则程序计数器为空。2,虚拟机栈:虚拟机栈为虚拟机执行Java方法(也就是字节码)服务;虚拟...原创 2020-01-04 00:53:51 · 19513 阅读 · 1 评论 -
【算法】约瑟夫问题--环形单链表实现
1.约瑟夫问题又称为约瑟夫环,丢手绢问题等。来历:据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephu...原创 2019-12-27 16:53:10 · 2441 阅读 · 0 评论 -
【锁】死锁与定位分析
1.什么是死锁?两个或两个以上进程在执行过程中,因争夺资源而造成的一种相互等待的现象2.产生的原因系统资源不足进程运行推进的顺序不合适资源分配不得当3.举例Demo:/** * 死锁与定位分析 * * @author wangjie * @version V1.0 * @date 2019/12/27 */public class DeadlockDe...原创 2019-12-27 11:20:53 · 2401 阅读 · 0 评论 -
【锁】 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 · 2497 阅读 · 0 评论 -
【JUC】阻塞队列
1.什么是阻塞队列?顾名思义,首先它是个队列:当阻塞队列是空时,从队列中获取元素的操作将会被阻塞。当阻塞队列是满时,往队列中添加元素的操作将会被阻塞。同样,试图往已满的阻塞队列中添加新的线程同样也会被阻塞,直到其他线程从队列中移除一个或者多个元素或者全清空队列后使队列重新变得空闲起来并后续新增。2.有什么用?在多线程领域:所谓阻塞,在某些情况下会挂起线程(即线程阻塞),一旦条件...原创 2019-12-24 14:50:25 · 2428 阅读 · 0 评论 -
【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 · 2339 阅读 · 0 评论 -
【锁】自旋锁-MCS/CLH队列
1.自旋锁-MCS/CLH队列之前有写过一篇关于锁的笔记:【锁】公平锁/非公平锁/可重入锁/递归锁/自旋锁/独占锁/共享锁/读写锁里面关于自旋锁,特别CLH队列并没有提到,故此有了这篇笔记。2.自旋锁指尝试获取锁的线程不会立即阻塞,而是采用循环的方式去尝试获取锁,这样的好处是减少线程上线文切换的消耗,缺点是循环会消耗CPU2.1 CASJUC包里的AtomicInteger类底层用...原创 2019-12-20 21:00:25 · 2648 阅读 · 0 评论 -
【JUC】CountDownLatch/CyclicBarrier/Semaphore
1.CountDownLatchCountDown减法计数,Latch门闩的意思让一些线程阻塞直到另外一些完成后才被唤醒。举例:1,值日生要等所有人走后,才能打扫卫生关灯锁门Demo:/** * 值日生要等所有人走后,才能打扫卫生关灯锁门 * * @author wangjie * @version V1.0 * @date 2019/12/19 */publ...原创 2019-12-19 17:18:11 · 2483 阅读 · 0 评论 -
【Java数据结构】稀疏数组
1.稀疏数组当一个数组中大部分元素为0,或者为同一个值的时候,可以用稀疏数组来保存该数组。稀疏数组的处理方法:1.记录数组一共有几行几列,有多少个不同的值2.把具有不同元素的行列及值记录在一个小规模数组中,从而缩小程序规模。2,代码实现/** * 稀疏数组 * * @author wangjie * @version V1.0 * @date 2019/12/...原创 2019-12-19 11:10:02 · 2440 阅读 · 0 评论 -
【锁】公平锁/非公平锁/可重入锁/递归锁/自旋锁/独占锁/共享锁/读写锁
1,公平锁与非公平锁公平锁:指多个线程按照申请锁的顺序来获取锁类似排队打饭 先来后到非公平锁:指在多线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取到锁,在高并发的情况下,有可能造成优先级反转或者饥饿现象1.1 公平锁与非公平锁区别并发包ReentrantLock的创建可以指定构造函数的boolean类型来得到公平锁或者非公平锁,不填默认是非公平锁...原创 2019-12-18 15:09:46 · 2721 阅读 · 1 评论 -
【JUC】CAS中的ABA问题和解决方案
1. CAS介绍CAS:Compare and Swap-----比较并交换。java.util.concurrent包中借助CAS实现了区别于synchronized同步锁的一种乐观锁。其原理是CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。传送门:【JUC】 Java中的CAS2.CAS缺点ABA问题...原创 2019-12-16 10:45:24 · 3429 阅读 · 0 评论 -
【JUC】volatile关键字相关整理
聊volatile关键字之前得先补充一些基本概念–JMM(java内存模型)JMM,一种抽象的概念,Java并发采用它作为共享内存模型:定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型,所以JMM是隶属于JVM。由于JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(有些地方成为栈空间),工作内存是每个线程的私有数据区域,而...原创 2019-12-14 17:12:28 · 2596 阅读 · 0 评论 -
SpringSecurity安全认证流程源码分析
基于SpringSecurity表单登陆进行源码分析项目基础搭建略过SpringSecurity安全认证基于一系列过滤器,表单提交,请求进入后端AbstractAuthenticationProcessingFilter过滤器doFilter方法根据请求不同选择不同过滤器,表单提交选择UsernamePasswordAuthenticationFilter,之后具体流程为:一步步分析,...原创 2019-11-05 16:29:22 · 2463 阅读 · 0 评论
分享