2020-04-01
概念及用法在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁。但是,随着JDK的升级迭代,对其进行了各种优化之后,有些情况下它就并不那么重了。
先来看下利用Synchronized实现同步的基础:Java中的每一个对象都可以作为锁。具体表现有三种使用方式:
对于普通同步方法,锁是当前实例对象。
对于静态同步方法,锁是当前...
阅读全文
2020-03-16
前言CPU Cache模型在现在的计算机中,所有的运算操作都是由CPU的寄存器完成的,而过程涉及数据的存取都需要主存内存的确认。但是主内存由于制造工艺和成本的限制,在访问速度上还是大大落后于不断发展的CPU的处理速度,他们的差距能够达到成千上万倍。于是,就有了在CPU和主内存之间增加缓存的设计。程序在运行的过程中,会将运算所需要的数据从主存复制一份到CPU ...
阅读全文
2020-03-13
前言当我们碰到线程不安全场景下,需要使用 Map 的时候,我们第一个想到的 API 估计就是 ConcurrentHashMap,ConcurrentHashMap 内部封装了锁和各种数据结构来保证访问 Map 是线程安全的,接下来我们一一来看下,和 HashMap 相比,多了哪些数据结构,又是如何保证线程安全的。
类注释我们从类注释上大概可以得到如下信息:...
阅读全文
2020-02-03
整体架构HashMap 底层的数据结构主要是:数组 + 链表 + 红黑树。其中当链表的长度大于等于 8 时,链表会转化成红黑树,当红黑树的大小小于等于 6 时,红黑树会转化成链表,整体的数据结构如下:
图中左边竖着的是 HashMap 的数组结构,数组的元素可能是单个 Node,也可能是个链表,也可能是个红黑树,比如数组下标索引为 2 的位置就是一个链表,...
阅读全文
2019-11-17
前言MPT树,全称Merkle Patria Tree,是以太坊采用的一种经典存储结构。该结构不仅仅被以太坊所使用,像国内金链盟的Fisco Bcos联盟链就将该结构纳入了自身的存储体系。MPT树的概念可以说是很简单,就是merkle + trie,但又因为它是这些知识的综合体,故往往又弄的初学者一头雾水。这里采用一种层层递进的方式将这个MPT树的概念讲清楚...
阅读全文
2019-09-28
ECDSA-secp256k1以太坊数字签名算法使用的是椭圆曲线数字签名算法,英文简称ECDSA。其中EC是“椭圆曲线”的简称,DSA是“数字签名算法”的简称。椭圆曲线算法简单的说就是用X和Y坐标画一个曲线。这个曲线怎么画,需要很多个参数来确定。以太坊使用了一套叫secp256k1的参数确定了椭圆的形状。所以,以太坊的椭圆曲线签名算法全称就是ECDSA-se...
阅读全文
2019-09-24
前言多重签名:multi-signature,顾名思义就是多个用户对同一个消息进行数字签名。“用N把钥匙生成一个多重签名的地址,需要其中M把钥匙才能执行完成这个地址上的交易,N>=M,这就是M/N的多重签名”。
意义多重签名的作用意义非常,如果采用单独的私钥,尽管以目前的密码学可以保证无法被暴力破解,但是这个私钥不保证会以其他方式(...
阅读全文
2019-04-09
前言Redis作为内存型数据库,性能好,读写快。但是难免会遇到进程崩溃或者系统重启的时候,如果此时的内存数据没有被及时的保存,无法恢复,就会消失不见。所以数据的持久化是内存型数据库的重中之重。为此Redis对于数据持久化提供了两种持久化的方案,RDB(Redis DataBase)与AOF(Append Only)。下面我们来详细地了解下两者的区别于选择场景...
阅读全文
2019-02-24
前言Tendermint是Tendermint公司开源的的一个项目,是一个PBFT算法的变体优化,只需要两轮投票就可以完成共识。其本质上是POS+BFT结合的算法。
在上篇文章[PBFT学习笔记]的基础上,本文主要介绍Tendermint共识算法的核心流程和相关证明机制。
算法流程关于 Tendermint 算法的完整描述在这里。
下面这张图是 Tender...
阅读全文
2019-02-14
前言关于拜占庭将军的问题,也很有意思,可以当作故事看看。
PBFT是Practical Byzantine Fault Tolerance的缩写,意为实用拜占庭容错算法。1999年,卡斯托(Miguel Castro)与李斯克夫(Barbara Liskov)提出了实用拜占庭容错算法,解决了原始拜占庭算法效率不高的问题。
PBFT作为一种许可制的一种算法,应...
阅读全文