自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(22)
  • 收藏
  • 关注

原创 bloom filter浅析(基本概念,概率分析,源码分析)

基本概念Bloom filter是一个空间高效(space- efficient)概率算法,被用于测试一个元素是否存在于一个集合中。存在假阳性(false positive,表示实际是假但误辨为真的情况)匹配的可能,但不存在假阴性(false negatives)的可能。也就是说,一次查询返回的结果是可能在集合里或者绝对不在集合里。最常用的操作是校验元素是否存在于集合中,也可以添加元素,但不可以删除元素。同时,越多元素被加入到集合中,假阳性的概率就会越高。Bloom filter一般应用在内存有限

2020-12-01 17:30:03 1175

原创 eos-unittest

eos-unittest 是白盒测试。build/unittests/unit_test 是一个二进制源程序,运行会自动运行所有测试用例。unit_test --list_content 枚举所有测试套及测试用例。./unit_test -t eosio_system_tests/stake_unstake 单独测试eosio_system_tests测试套的stake_unstake测试用...

2019-10-15 13:36:15 313

原创 分布式锁学习笔记

安全性与活跃性(liveness)保证安全性:互斥。在任意时刻,仅存在唯一客户拥有锁。活跃性A:死锁释放。最终肯定可以获取到一个锁,即便拥有着锁的客户崩溃宕机。活跃性B:容错。只要大多数节点正常,客户就能够获取和释放锁。为什么基于故障转移(容错转移)的实现还不够?基于REDIS的分布式锁库的简单实现方案:一个锁对应一个键的实例。利用REDIS的超时机制,最终肯定可以获取到锁。锁不存在...

2019-10-11 14:21:44 148

原创 网络分裂(network partition)

未整理一次网络分裂指的是,为了各自节点的优化,或者因为宕机,使得网络分离成独立子网的现象。例如,在这种情况下,各个子网需要具备分裂容忍(partition-tolerant)的能力,保证情况发生时,仍然能正常工作。...

2019-10-07 10:08:50 1429

转载 机器学习相关速查表Cheat Sheet

写在前面早上逛技术新闻时,看到的一个有意思的帖子,分享给大家:)速查表内容包括(12项):kerasnumpypandasscipymatplotlibscikit-learnneural networks zooggplot2pysparkR studiojupyter notebookdaskkeras图片来源——https://www.datacamp....

2019-07-26 10:10:20 329

原创 关于区块链的一些思绪

关于区块链升级,是一件很容易引发争议的事情。有感而发。对于常规的思维来说,区块链智能合约升级应该是一件再普通正常不过的事情。但对于区块链本身来说,秉承一种代码即是法律的理念,而法律是不能轻易更改的(如若随意更改,则丧失法律的权威性,沦为当权者的玩物,与人人平等,去中心化的理念背道而驰)。以太坊的智能合约是无法升级的,如果真要升级,则需要通过分叉解决,后果代价可想而知。即便如此,以太坊的社区依然...

2018-12-14 10:39:08 4116 1

原创 eosio.cdt心得

写在前面从eos v1.3.0更新开始,eosio提倡使用eosio.cdt工具来编译智能合约,以提高智能合约的执行性能等。其中相较于旧的工具,eosio.cdt更新了不少语法。asset实现完善了不少,使得代币相关的实现更加严谨。默认初始化的asset内的symbol为空,值为零。在作asset比较和赋值的时候,一不小新就经常遇到符号错误。在智能合约编写过程中,应该指定所设计的代码的符号...

2018-11-15 18:43:11 2029 1

原创 eosio.msig合约源码分析

eosio.msig接口proposeapproveunapprovecancelexec数据结构eosio.sudo

2018-11-12 16:57:27 297

原创 bitcoin-memorypool源码分析

涉及的bipbip68 交易输出会锁定一段时间不允许消费bip125 如果mempool已经有相同交易输入的交易,具备更高手续费(小费)的新加入交易会替换掉旧的交易。ctxmempoolentry存储一个交易的相关信息和其他在mempool中与这个交易有关的祖先、后裔交易的数据。每当有新的交易添加到mempool,都需要更新这个新交易的所有祖先交易的相关状态。ctxmempool...

2018-11-04 17:10:50 526

原创 system合约源码分析

写在前面system合约是EOS区块链最核心的智能合约,分析其源码可以一窥EOS的精妙之处。接口// *** native.hpp ***newaccountupdateauthdeleteauthlinkauthunlinkauthcanceldelayonerror// *** eosio.system.cpp ***void setram(uint64_t...

2018-09-27 16:00:09 1216

原创 交易校验与交易脚本

校验与脚本交易校验是基于对脚本语言的执行结果的判断。 交易校验引擎依赖于两种类型的脚本: * unlocking script * locking script 当一个交易被校验有效时,每个输入的unlocking script会与对应的locking script一起被执行,以判断他们是否满足给定的要求(花费条件)。 script是用来使可编程货币的校验生效的。 未花费...

2018-09-10 19:40:56 736

原创 POW

概念对于单向散列函数,输出是不可知的。但在假设输出结果是随机平均分布的情况下,可以预先计算出特定范围的结果的可能性,推导要计算出满足特定条件的结果所花费的工作量。 在比特币的区块链实现中,POW是一种保护区块链网络,维持通货稳定的手段。因为对比特币来说,一个非常重要的原则是维持每10分钟生成一个区块。新的通货只会从新区块的第一个交易(coinbase transaction)产生。如此,维持...

2018-09-02 21:05:43 545

原创 merkle tree(hash tree)

merkle tree即为hash tree,以下都用hash tree表示。 hash tree使得可以对大型数据结构的内容进行有效且安全的校验。 hash tree是hash list和hash chain的一般化形式。 hash trees 主要用于p2p网络中保证数据的完整性。原理Hash tree是一种树,大多数是二叉树,也可以多叉树,无论是几叉树,它都具有树结构的所...

2018-08-26 17:34:13 1543

翻译 visitor

意图表示一个作用在对象结构中元素的操作。 visitor模式使得可以在不改变各元素的类的前提下定义作用于这些元素的新操作。适用性一个对象结构(一个代理类)包含很多提供不同接口的类对象,而你想对这些对象实施一些依赖于其具体类的操作。需要对对象结构中的一个对象进行多种不同且互不相关的操作,而你想避免让这些操作“污染”这些对象的类。Visitor可以将多个类的相关的操作集中起来(类似代...

2018-08-19 20:05:27 2491

翻译 base58

Base58 is a subset of Base64, using upper- and lowercase letters and numbers, but omitting some characters that are frequently mistaken for one another and can appear identical when displayed in certa...

2018-08-05 15:32:25 710

翻译 密钥与地址

私钥(private key)理论创建一个bitcoin密钥可以比作在 1 到 2 的256次方之间随机选择一个数。 更确切地说,设 n = 1.158 * 1077,略小于2的256次方,私钥是 1 到 n-1 的任意一个数。对于 n ,是ECC(椭圆曲线加密算法)中有限集的阶。实现随机生成一个较大的随机位数的字符串,然后将它输入到SHA256散列算法中,得到一个256...

2018-08-05 15:27:47 1159

原创 进程控制

fork创建子进程,也可理解为创建当前进程的拷贝(copy on write),新进程被视为原进程的子进程。 调用fork后,父子进程都会继续原来的执行流。 调用fork后,父进程返回的是子进程ID,子进程返回的是0。 同步问题 对于fork以后,父子进程共用相同的文件,子进程使用的是父进程文件的duplicated one。但他们都是共用同一个 file table 和 v-no...

2018-04-24 19:15:14 169

原创 进程环境

main func当内核启动C程序时,是通过一种exec函数启动的,是一个特殊的start-up routine,在main函数调用之前。该routine会被链接器设定为可执行程序的入口点。ISO C 和 POSIX.1 规定,argv[argc]是一个null指针。进程终止有8种终止进程的方式。 正常的终止方式有: * Return from main * Call...

2018-04-24 19:14:46 229

原创 IOCP原理

简介I/O完成端口是为多处理器系统处理多重异步I/O请求线程模型。 I/O完成端口就是与线程池配合使用的。APICreateIoCompletetionPort 创建IOCP和关联一个或多个句柄到端口上。 GetQueuedCompletionStatus 等待或从IOCP队列中取出完成包(completion packet)。 PostQueuedCompletionStatus 把一个完成

2017-12-06 16:54:28 542

原创 epoll

简介linux下的可拓展Io事件驱动机制。性能性能复杂度:O(1)。 相较于poll的优点: * 不会重复把文件描述符传入内核,节省性能消耗。 * 支持任意个描述符而不是有限。#触发模式 * 边沿触发(edge-triggered):阻塞等待新事件。 * 水平触发(level-triggered):立即返回即时状态。注意如果再一次读过程中只读取部分数据,那么

2017-12-06 16:49:09 115

原创 二叉搜索树(binary search tree)

性质 设 x 是二叉搜索树中的一个结点。如果 y 是 x 左子树中的一个结点,那么 y.key ≤ x.key。如果 y 是 x 右子树中的一个结点,那么 y.key ≥ x.key。特性期望高度:height = O(lgn)基本操作平均时间复杂度:Operations = Θ(lgn)操作遍历:时间复杂度 θ(n),n 为总结点数。INORDER_TREE_WALK if x !=

2017-12-02 20:13:28 245

原创 快速排序(quick sort)

Pseudo CodeQUICKSORTif (p < r)  q = PARTITION(A, p, r)  QUICKSORT(A, p, q-1)  QUICKSORT(A, q+1, r) PARTITIONx = A[r] i = p -1 for j = p to r -1  if A[j] <= x   i = i +1   exchange A[i] with A[

2017-10-13 10:02:40 197

空空如也

空空如也

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

TA关注的人

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