自定义博客皮肤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)是由Burton Howard Bloom于1970年提出,它是一种space efficient的概率型数据结构,用于判断一个元素是否在集合中。在垃圾邮件过滤的黑白名单方法、爬虫(Crawler)的网址判重模块中等等经常被用到。哈希表也能用于判断元素是否在集合中,但是布隆过滤器只需要哈希表的1/8或1/4的空间复杂度就能完成同样的问题。布隆过滤器可以插入元素,但不可以删除已有元素。其中的元素越多,false positive rate(误报率)越大,但是false

2021-03-24 08:43:30 529

原创 Redis Cluster Gossip协议

集群模式和 Gossip 简介对于数据存储领域,当数据量或者请求流量大到一定程度后,就必然会引入分布式。比如 Redis,虽然其单机性能十分优秀,但是因为下列原因时,也不得不引入集群。单机无法保证高可用,需要引入多实例来提供高可用性 单机能够提供高达 8W 左右的QPS,再高的QPS则需要引入多实例 单机能够支持的数据量有限,处理更多的数据需要引入多实例; 单机所处理的网络流量已经超过服务器的网卡的上限值,需要引入多实例来分流。有集群,集群往往需要维护一定的元数据,比如实例的...

2021-03-23 20:39:00 205

原创 Gossip 协议简介

P2P 网络核心技术:Gossip 协议背景Gossip protocol 也叫 Epidemic Protocol (流行病协议),实际上它还有很多别名,比如:“流言算法”、“疫情传播算法”等。这个协议的作用就像其名字表示的意思一样,非常容易理解,它的方式其实在我们日常生活中也很常见,比如电脑病毒的传播,森林大火,细胞扩散等等。Gossip protocol 最早是在 1987 年发表在 ACM 上的论文 《Epidemic Algorithms for Replicated Databa

2021-03-23 17:11:27 639

原创 .so文件查看方法

有些.so 文件经常提示为打开后是一堆乱码这时可以在vsCode中搜索Linux Binary Preview扩展插件下载安装就可以查看了!

2021-03-18 18:18:44 12099 3

原创 执行 npm install -g ganache-cli 报错ERR! network ‘proxy‘ config is set properly.  See: ‘npm help config‘

执行 npm install -g ganache-cli报错:npm ERR! code ENOTFOUNDnpm ERR! syscall getaddrinfonpm ERR! errno ENOTFOUNDnpm ERR! network request to https://registry.your-registry.npme.io/ganache-cli failed, reason: getaddrinfo ENOTFOUND registry.your-registr.

2021-03-15 14:26:37 618

原创 python中sys

sys模块功能多,这里介绍一些比较实用的功能!sys模块的常见函数列表 sys.argv: 实现从程序外部向程序传递参数。 sys.exit([arg]): 程序中间的退出,arg=0为正常退出。 sys.getdefaultencoding(): 获取系统当前编码,一般默认为ascii。 sys.setdefaultencoding(): 设置系统默认编码,执行dir(sys)时不会看到这个方法,在解释器中执行不通过,可以先执行reload(sys),在执行 set

2021-03-10 14:44:55 68

原创 Makefile中常见的错误信息

Makefile中常见的错误信息make 执行过程中所产生错误并不都是致命的,特别是在命令行之前存在 "-"、或者 make 使用 "-k" 选项执行时。make 执行过程的致命错误都带有前缀字符串 "***"。错误信息都有前缀,一种是执行程序名作为错误前缀(通常是 "make");另外一种是当 Makefile 本身存在语法错误无法被 make 解析并执行时,前缀包含了 Makefile 文件名和出现错误的行号。在下述的错误列表中,省略了普通前缀:[FOO] Error NN[FOO] sig

2021-03-03 20:43:14 1070 1

原创 Makefile控制函数error和warning

Makefile控制函数error和warningMakefile 中提供了两个控制 make 运行方式的函数。其作用是当 make 执行过程中检测到某些错误时为用户提供消息,并且可以控制 make 执行过程是否继续。这两个函数是 "error" 和 "warning",我们来详细的介绍一下这两个函数。$(error TEXT...)函数说明如下:函数功能:产生致命错误,并提示 "TEXT..." 信息给用户,并退出 make 的执行。需要说明的是:"error" 函数是在函数展开时(函数.

2021-03-03 20:40:21 2564 2

原创 Makefile变量的高级用法

Makefile变量的高级用法我们之前已经学习过变量的定义和基本的赋值运算,我们可以更深入的了解一下变量的一些高级的用法。高级使用方法有两种:一种是变量的替换引用,一种是变量的嵌套引用。这是我们在使用的时候比较常见的两种使用方法,我们来具体分析使用一下变量的这两种高级的用法。变量的替换引用我们定义变量的目的是为了简化我们的书写格式,代替我们在代码中频繁出现且冗杂的部分。它可以出现在我们规则的目标中,也可以是我们规则的依赖中。我们使用的时候会经常的对它的值(表示的字符串)进行操作。遇到这样的问题我

2021-03-03 20:35:59 209 1

原创 Makefile目标类型大汇总

Makefile目标类型大汇总这个章节主要讲解的是模式规则中的目标。规则中的目标形式是多种多样的,它可以是一个或多个的文件、可以是一个伪目标,这是我们之前讲到过的,也是经常使用的。其实规则目标还可以是其他的类型,下面是对这些类型的详细的说明。强制目标如果一个目标中没有命令或者是依赖,并且它的目标不是一个存在的文件名,在执行此规则时,目标总会被认为是最新的。就是说:这个规则一旦被执行,make 就认为它的目标已经被更新过。这样的目标在作为一个规则的依赖时,因为依赖总被认为更新过,因此作为依赖在的规

2021-03-03 20:18:09 305 1

原创 make命令参数和选项大汇总

make命令参数和选项大汇总我们在在执行 make 命令时,有的时候需要加上一下参数选项来保证我们的程序的执行,其实之前已经遇到过 make 在执行命令的时候需要添加上参数选项,比如只打印命令但不执行使用的参数是 "-n" ,还有只执命令不打印命令的参数选项是 "-s",包含其它文件的路径参数选项是 "-include"等等。我们现在列举一下 make 可以使用的参数选项,以及它们的功能是什么。参数选项 功能 -b,-m 忽略,提供其他版本 make 的兼容性 -B,--a.

2021-03-03 20:15:36 2411 1

原创 Makefile文件教程(四)

十七、Makefile嵌套执行make这个章节主要讲解的是在 Makefile 中嵌套执行 make。我们都知道在一个大的工程文件中,不同的文件按照功能被划分到不同的模块中,也就说很多的源文件被放置在了不同的目录下。每个模块可能都会有自己的编译顺序和规则,如果在一个 Makefile 文件中描述所有模块的编译规则,就会很乱,执行时也会不方便,所以就需要在不同的模块中分别对它们的规则进行描述,也就是每一个模块都编写一个 Makefile 文件,这样不仅方便管理,而且可以迅速发现模块中的问题。这样我们只需要

2021-03-03 20:15:02 277 1

原创 Makefile文件教程(三)

十二、Makefile常用字符串处理函数学习使用函数之前,先来看一下函数的语法结构。函数的调用和变量的调用很像。引用变量的格式为$(变量名),函数调用的格式如下:$(<function> <arguments>) 或者是 ${<function> <arguments>}其中,function 是函数名,arguments 是函数的参数,参数之间要用逗号分隔开。而参数和函数名之间使用空格分开。调用函数的时候要使用字符“$”,后面可以跟...

2021-03-03 20:07:19 511 2

原创 Makefile文件教程(二)

八、Makefile路径搜索使用案例我们了解了一下路径搜索的使用方式,我们再来看一下具体的使用方法。为了体验实例的效果的更加明显,我们按照源代码树的布局来放置文件。我们把源代码放置在src目录下,包含的文件文件是:list1.c、list2.c、main.c 文件,我们把头文件包含在 include 的目录下,包含文件 list1.h、list2.h 文件。Makefile 放在这两个目录文件的上一级目录。我们按照之前的方式来编写 Makefile 文件:main:main.o list1.o

2021-03-03 19:48:45 510 1

原创 Makefile文件教程(一)

Makefile 文件描述了 Linux 系统下 C/C++ 工程的编译规则,它用来自动化编译 C/C++ 项目。一旦写编写好 Makefile 文件,只需要一个 make 命令,整个工程就开始自动编译,不再需要手动执行 GCC 命令。一个中大型 C/C++ 工程的源文件有成百上千个,它们按照功能、模块、类型分别放在不同的目录中,Makefile 文件定义了一系列规则,指明了源文件的编译顺序、依赖关系、是否需要重新编译等。这套 Makefile 入门教程针对有 C/C++ 基础的读者。Makefil

2021-03-03 19:23:03 1335 1

原创 Mac 终端命令

Mac 终端命令目录操作命令名 功能描述 使用举例 mkdir 创建一个目录 mkdir dirname rmdir 删除一个目录 rmdir dirname mvdir 移动或重命名一个目录 mvdir dir1 dir2 cd 改变当前目录 cd dirname pwd 显示当前目录的路径名 pwd ls 显示当前目录的内容 ls -la dircmp 比较两个目录的内容.

2021-03-02 20:32:00 155

原创 Mac 键盘快捷键

Mac 键盘快捷键您可以按下某些组合键来实现通常需要鼠标、触控板或其他输入设备才能完成的操作。要使用键盘快捷键,请按住一个或多个修饰键,然后按快捷键的最后一个键。例如,要使用 Command-C(拷贝),请按住 Command 键并按 C 键,然后同时松开这两个键。Mac 菜单和键盘通常使用符号来表示某些按键,其中包括以下修饰键:Command(或 Cmd)⌘ Shift ⇧Option(或 Alt)⌥ Control(或 Ctrl)⌃Caps Lock ⇪ Fn在 Windows

2021-03-02 15:47:50 155

原创 如何提升公链TPS?

如何提升公链TPS?任务描述:BTC开启了区块链1.0时代,ETH将我们带入了区块链2.0,由于两者都没有很快的TPS,商业应用没有享受到区块链的优势,关于提升公链的TPS,请提出一些可行方案,并做详细说明。公链TPS的瓶颈:随着区块链越来越火,比特币、以太坊的网络阻塞问题也愈加严重。随后不少的技术方案与项目都着力解决此问题,以求更高的TPS(每秒交易数)。 区块链作为一个记账系统,数据的一致性是必须首先保证的,而保证一致性的过程,在传统数据库中,叫做数据同步,在区块链中,叫做共识。区块

2021-03-02 09:48:07 927

原创 Graphene(石墨烯)区块传播技术能够实现10倍的更高效率

在加利福尼亚斯坦福大学举办的2017比特币扩容大会(Scaling Bitcoin Conference 2017)上,比特币的支持者听说了一种新的区块传播技术,据称该技术比致密区块(compact block)的效率要高出10倍。“石墨烯(Graphene)”协议是一种利用布隆过滤器(bloom filter)以及可逆式布鲁姆查找表(IBLT)降低带宽将区块传播到全节点的新方法。石墨烯技术据称比致密区块(Compact Block)和极瘦区块(Xthin Block)的效率要高出10倍比特币...

2021-03-02 09:42:57 332

原创 可逆式布隆查找表(IBLT)

可逆式布隆查找表(IBLT)比特币系统(Bitcoin)需要矿工(或者说矿池)以及全节点的分散化,以实现某些人认为的比特币核心属性:抗审查性(censorship resistance)。因此,区块大小争议也意味着是一种权衡。更大的区块,允许比特币网络可以承载更多的交易,但也会带来问题,它需要更多的时间来传播交易,这将有利于大矿工和矿池,同时增加的数据传递对于用户运行全节点而言,也是一种打击。幸运的是,当前也存在着一些提议,它们可以增加比特币网络的效率,并减少更大区块会产生的风险。而其中最有前.

2021-03-02 09:39:56 972

原创 BloomFilter

什么是 BloomFilter布隆过滤器(英语:Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。主要用于判断一个元素是否在一个集合中。通常我们会遇到很多要判断一个元素是否在某个集合中的业务场景,一般想到的是将集合中所有元素保存起来,然后通过比较确定。链表、树、散列表(又叫哈希表,Hash table)等等数据结构都是这种思路。但是随着集合中元素的增加,我们需要的存储空间也会呈现线性增长,最终达到瓶颈。同时检索速度也越来越慢,上述三种结构的检

2021-03-02 09:24:32 293

原创 布隆过滤器(Bloom Filter)详解

布隆过滤器(Bloom Filter)详解直观的说,bloom算法类似一个hash set,用来判断某个元素(key)是否在某个集合中。和一般的hash set不同的是,这个算法无需存储key的值,对于每个key,只需要k个比特位,每个存储一个标志,用来判断key是否在集合中。算法:1. 首先需要k个hash函数,每个函数可以把key散列成为1个整数2. 初始化时,需要一个长度为n比特的数组,每个比特位初始化为03. 某个key加入集合时,用k个hash函数计算出k个散列值,并把数组中对应的

2021-03-02 09:22:10 400 1

空空如也

空空如也

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

TA关注的人

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