Kang's Blog

疯狂创作中···

事务隔离级别、锁与日志操作

只想说的通俗易懂

触发当前读: select…lock in share mode , select…for update update , delete , insert 在MVCC并发控制中,读操作可以分成两类:快照读 (snapshot read)与当前读 (current read)。 快照读,读取的是记录的可见版本 (有可能是历史版本),不用加锁。 当前读,读取的是记录的最新...

以太坊

以太坊简介

mining puzzle(挖矿方式)   区块链:计算密集型,导致挖矿设备趋于专业化。   以太坊:为避免挖矿专业化,采用了memory hard(对内存要求高)的方式,在一定程度上限制ASIC芯片的使用。 Double spending   交易发布者在交易head中维护一个nonce计数器(故参与了签名),记录了这个交易账户有史以来一共发布过多少个交易。在系统所...

区块链

区块链

    非对称加解密:   存在私钥签名则证明是本人发出。 比特币中所有的交易都包含输入和输出两部分,输入部分需要存在签名(也就是私钥签名),说明币的来源,输出部分要给出收款人的公钥的hash(也就是公钥加密)。 merkle proof:必须先给出需要验证节点的位置,然后返回该节点的Merkle路径。Merkle Proof包括一个数据块,Merkle Root,以及从数据块到根...

中间件-RocketMQ

中间件RocketMQ之Producer(三)

  路由管理是RocketMQ的核心功能之一,涵盖了订阅管理,连接管理,负载均衡等一系列功能,代码分布在NameServer、Broker、Producer和Consumer等各组件实现中。RocketMQ有一个特色功能:支持灵活的集群工作方式。Broker、Producer和Consumer都能够在运行时动态扩容或缩容,这都要依赖于强大的路由管理模块。 Producer如何投递消息  ...

中间件-RocketMQ

中间件RocketMQ之Rebalance(二)

Rebalence过程   RocketMQ的consumer负载均衡依赖于RebalanceImpl类。我们仍然以Pull模式进行讲解。在DefaultMQPullConsumerImpl中存在RebalanceImpl属性,关键方法: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...

中间件-RocketMQ

中间件RocketMQ之Offset(一)

两种消费模式 Pull模式:由消费者客户端主动向消息中间件(MQ消息服务器代理)拉取消息;(消费端消费慢问题) Push模式:由消息中间件(MQ消息服务器代理)主动地将消息推送给消费者;(消息延迟与忙等待问题) RocketMQ的消费方式:是基于拉模式拉取消息的,在这其中有一种长轮询机制(对普通轮询的一种优化),来平衡上面Push/Pull模型的各自缺点。基本设计思路是:消费者...

分布式-2pc示例简介

2p示例简介

前面分布式-2pc、3pc、TCC已经介绍分布式相关的事务。本文接上文,提供一个可简单学习的2PC示例。 1. 基于XAResource底层接口实现 1 2 3 4 5 6 7 8 9 10 11 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector...

其它-关于领域驱动模型

领域驱动模型的学习与思考(V1)

推荐阅读-领域驱动设计到底难在哪? 推荐阅读-领域驱动设计系列 领域驱动设计的概念   在开发前通常需要进行大量的业务知识梳理,然后才到软件设计的层面,最后才是开发。在业务知识梳理的过程中,必然会形成某个领域知识,根据领域知识来一步步驱动软件设计,就是领域驱动设计(DDD,Domain-Driven Design)的基本概念 。DDD首先应该是一种软件开发过程,它拥抱与发展了敏捷开发方法,采...

项目管理-git之Merge与Rebase

Merge与Rebase的差别与使用


多线程-如何确定线程池大小

如何确定线程池大小

”并发线程池到底设置多大呢?” 通常有点年纪的程序员或许都听说这样一个说法 (其中 N 代表 CPU 的个数): CPU 密集型应用,线程池大小设置为 N + 1 IO 密集型应用,线程池大小设置为 2N 如果一台服务器上只部署这一个应用并且只有这一个线程池,那么这种估算或许合理,但是在实际应用中是不可能的。 怎么设置线程池大小呢 在网上相关博客介绍到...