top

P2P网络催生区块链技术,底层公链之争将如何上演?

橙三吉。 提交于 2020-01-20 01:50:14
2008年,神秘人物中本聪(Satoshi Nakamoto)在P2P foundation网站上发布了比特币白皮书《比特币:一种点对点的电子现金系统》。次年1月,一种叫做比特币的电子货币正式诞生。 根据中本聪的思路设计发布的开源软件以及建构其上的P2P网络可以看出,比特币是一种P2P形式的虚拟加密数字货币。其中,点对点的传输意味着一个去中心化的支付系统。这种去中心化的系统后来被称为区块链,并在此基础上诞生了诸如以太坊、EOS等知名公链,也在不断更新迭代中催生了Algorand、Conflux、TOP Network等公链市场新宠。因此,说P2P网络是区块链的源头也不为过。 P2P网络的概念 P2P网络也叫“Peer-to-Peer”对等网络,是分布式系统和计算机网络相结合的产物。对等的意思就是网络中的节点角色、地位是平等的,任何节点具有极强的自由,可以任意加入、离开网络。所有节点既充当客户端,又充当服务器,任何节点出现问题都不会对整个网络产生致命的影响,具有极强的伸缩性。 如果说公链是区块链的底层基础设施,那么P2P网络就是所有公链的基础,无论是比特币、以太坊、EOS,还是Algorand、Conflux、TOP Network都离不开P2P网络,可以说区块链本质上就是一种P2P网络。 与P2P网络不同的是传统的C/S模型,也就是“客户端-服务器(client-server)

用队列实现栈

我与影子孤独终老i 提交于 2020-01-17 18:30:41
题目: 使用队列实现栈的下列操作: push(x) – 元素 x 入栈 pop() – 移除栈顶元素 top() – 获取栈顶元素 empty() – 返回栈是否为空 方法一: 用两个队列q1和q2实现栈,q1用来入栈,q2用来出栈,定义一个top用来标记栈顶元素。出栈时,将q1中的n-1个元素出栈,然后从q2入栈,最后将第n个元素出栈,交换两个队列的元素 class MyStack { Queue < Integer > q1 ; Queue < Integer > q2 ; int top ; /** Initialize your data structure here. */ public MyStack ( ) { q1 = new LinkedList < > ( ) ; q2 = new LinkedList < > ( ) ; } /** Push element x onto stack. */ public void push ( int x ) { top = x ; q1 . offer ( x ) ; } /** Removes the element on top of the stack and returns that element. */ public int pop ( ) { while ( q1 . size ( ) > 1 ) { top

栈和队列总结

核能气质少年 提交于 2020-01-16 01:06:23
栈和队列都来自 线性表数据结构 ,都是 “操作受限”的线性表 栈 1.定义 : 是限制在表的一端进行插入和删除操作的线性表。 后进先出 LIFO 线性表 2. 注意点 : 栈顶 (Top) :允许进行插入、删除操作的一端,又称为 表尾 。用栈顶指针 (top) 来指示栈顶元素。 栈底 (Base) :是固定端,又称为 表头 栈 ——顺序存储 定义 : 栈的顺序存储结构,用 一维数组来存储栈 。根据数组是否可以根据需要增大,又可分为 静态顺序栈 和 动态顺序栈 。 栈 ——动态顺序存储 1. 注意点 : ◆ 用 top=bottom 作为 栈空的标记 ◆ 结点进栈时,首先将数据元素保存到栈顶 (top 所指的当前位置 ) ,然后执行 top 加 1 ,使 top 指向栈顶的下一个存储位置 ◆ 结点出栈时, 首先执行 top 减 1 ,使 top 指向栈顶元素的存储位置,然后将栈顶元素取出 ◆ 若栈的数组有 Maxsize 个元素,则 top=Maxsize 时 栈满 2. 结构体定义 : typedef struct SqStack { ElemType *bottom; /* 栈不存在时值为NULL */ ElemType *top; /* 栈顶指针 */ int stacksize ; /* 当前已分配空间,以元素为单位 */ }SqStack; 3. 追加存储空间操作 : //

运动框架之使用,缩放1

╄→гoц情女王★ 提交于 2020-01-13 07:21:52
上一篇我用css3 写了个缩放的功能,这次我们用js 写! 上面是布局, 我们来看下代码 我们发现坐标刚好就是我们要定位时的坐标,为了防止布局出现错误 我们采取,先给每个元素设置好, left 和top,然后统一将浮动的元素,转成定位! 但是定位时,要去掉margin 值,因为你的定位坐标已经包含了margin 如果定位后,还加margin ,此时margin 值仍然会起作用,就重复了, 所以要去掉! 第一步的布局转换就完毕了,下一步就是当悬浮的时候,放大,沿着中心点放到! // 当页面加载完毕的时候,我们在这里写代码! window.onload = function(){ var zIndex = 2; var oBox = document.getElementById('box'); var aLis = oBox.getElementsByTagName('li'); var w = aLis[0].offsetWidth; var h = aLis[0].offsetHeight; for(var i =0; i<aLis.length;i++){ var left = aLis[i].offsetLeft; var top = aLis[i].offsetTop; // 一次性就能得到 li的定位坐标,很溜 aLis[i].style.left = left +

Linux系统资源使用情况

最后都变了- 提交于 2020-01-13 06:55:33
概述: 用 'top -i' 看看有多少进程处于 Running 状态,可能系统存在内存或 I/O 瓶颈,用 free 看看系统内存使用情况,swap 是否被占用很多,用 iostat 看看 I/O 负载情况... 还有一种办法是 ps -ef | sort -k7 ,将进程按运行时间排序,看哪个进程消耗的cpu时间最多。 top: 主要参数 d:指定更新的间隔,以秒计算。 q:没有任何延迟的更新。如果使用者有超级用户,则top命令将会以最高的优先序执行。 c:显示进程完整的路径与名称。 S:累积模式,会将己完成或消失的子行程的CPU时间累积起来。 s:安全模式。 i:不显示任何闲置(Idle)或无用(Zombie)的行程。 n:显示更新的次数,完成后将会退出to 显示参数: PID(Process ID):进程标示号。 USER:进程所有者的用户名。 PR:进程的优先级别。 NI:进程的优先级别数值。 VIRT:进程占用的虚拟内存值。 RES:进程占用的物理内存值。 SHR:进程使用的共享内存值。 S:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。 %CPU:该进程占用的CPU使用率。 %MEM:该进程占用的物理内存和总内存的百分比。 TIME+:该进程启动后占用的总的CPU时间。 Command:进程启动的启动命令名称,如果这一行显示不下

Ddockerfile里的CMD和ENTRYPOINT的区别(图文介绍,超详细)

北慕城南 提交于 2020-01-12 21:13:31
Dockerfile中的ENTRYPOINT指令和CMD指令都可以设置容器启动时要执行的命令,但用途是有略微不同的。 ENTRYPOINT指令和CMD指令虽然是在Dockerfile中定义,但是在构建镜像的时候并不会被执行,只有在执行docker run命令启动容器时才会起作用。 1。在Dockerfile中,只能有一个ENTRYPOINT指令,如果有多个ENTRYPOINT指令则以最后一个为准。 2。在Dockerfile中,只能有一个CMD指令,如果有多个CMD指令则以最后一个为准。 3。在Dockerfile中,ENTRYPOINT指令或CMD指令,至少必有其一。 1. ENTRYPOINT指令 首先,执行docker run如果带有其他命令参数,不会覆盖ENTRYPOINT指令。 不过,docker run的–entrypoint可以覆盖Dockerfile中ENTRYPOINT设置的命令,后续文章详述。 1) exec格式用法(推荐) ENTRYPOINT [“top”,"-b", “-H”] exec格式,也被称为JSON风格[“command”,“arg1”]。 在创建容器实例执行docker run命令时,设置的任何命令参数或CMD指令的命令,都将作为ENTRYPOINT指令的命令参数,追加到ENTRYPOINT指令的命令之后。 如

【模板】树链剖分

丶灬走出姿态 提交于 2020-01-12 20:00:13
惨了惨了我好喜欢这个算法呜呜呜快超过 \(MST\) 了 树剖涉及的知识: \(LCA\) (最近公共祖先/倍增),线段树 已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节点的值都加上z 操作2: 格式: 2 x y 表示求树从x到y结点最短路径上所有节点的值之和 操作3: 格式: 3 x z 表示将以x为根节点的子树内所有节点值都加上z 操作4: 格式: 4 x 表示求以x为根节点的子树内所有节点值之和 (我理解中的)树剖就是将树上的问题,转化为线性来处理。 通过两次搜索,对每个结点加以一些标记,其中还包括对结点进行新的编号 编号之后就满足一个结点为根的子树,它们的新编号是连续的。 于是就可以维护区间和了w!(线段树好啊233) (懒得写太多了) #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <cmath> using namespace std; #define MAXN 233333 //变量们! int n,m,r,mod; int tot=0,cnt=0; int ans[MAXN<<2],tag[MAXN<<2]; struct qwq {

Linux(十二)—— Linux 进程管理

风流意气都作罢 提交于 2020-01-12 17:34:39
文章目录 一、Linux 进程管理 1、Linux 进程概述 2、进程指令 二、Linux 服务管理 1、Linux 服务概述 2、Linux 服务管理指令 三、Linux 监控服务 一、Linux 进程管理 1、Linux 进程概述 (1)进程简介 在LINUX中,每个执行的程序(代码)都称为一个进程。一个进程都分配一个ID号。 每一个进程, 都会对应一个父进程,而这个父进程可以复制多个子进程。例如wwww服务器。 每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才才结束。 2、进程指令 (1) ps 命令:查看进程,显示的字段有 PID:进程识别号 TTY:终端机号 TIME:此进程所消CPU时间 CMD:正在执行的命令或进程名 ps -a :显示当前终端的所有进程信息 ps -u :一用户的格式显示进程信息 ps -x :显示后台进程运行的参数 在上图的显示中, USER:表示用户名 PID:表示进程的id %CPU:表示占用的CPU %MEM:表示占用的内存百分比 VSZ:表示使用的虚拟内存 RSS:表示使用的物理内存 TTY:表示使用的终端 STAT:表示进程的状态,s表示休眠

html5+css3中的background: -moz-linear-gradient 用法

时光怂恿深爱的人放手 提交于 2020-01-12 13:49:08
在CSS中background: -moz-linear-gradient 让网站背景渐变的属性,目前火狐3.6以上版本和google浏览器支持这个属性。 background: -moz-linear-gradient(top, #bccfe3 0%, #d2dded 100%); 适合 FF3.6+ background: -webkit- gradient(linear, left top, left bottom, color-stop(0%,#bccfe3), color- stop(100%,#d2dded)); 适合 Chrome,Safari4+ background: -webkit-linear-gradient(top, #bccfe3 0%,#d2dded 100%); 适合Chrome10+,Safari5.1+ background: -o-linear-gradient(top, #bccfe3 0%,#d2dded 100%); 适合Opera 11.10+ background: -ms-linear-gradient(top, #bccfe3 0%,#d2dded 100%); 适合IE10+ background: linear-gradient(top, #bccfe3 0%,#d2dded 100%); 适合W3C

使用python完成栈的基本操作,压栈,出栈、计算栈长

时光怂恿深爱的人放手 提交于 2020-01-11 23:38:03
在python中不存在指针,所有需要进行链栈的操作时,自己初始化一个栈的结点类,其中定义栈每一个结点的属性,一个next,一个数据;后边的队列和二叉树的完成使用同样的原理,自己定义每一个数据结构的结点属性值 顺序栈的操作 '''栈的基本操作''' class StackList ( object ) : def __init__ ( self ) : self . _item = [ ] #判断是否为空 def is_empty ( self ) : return self . _item == [ ] #出栈 def put ( self ) : return self . _item . pop ( ) #入栈 def push ( self , _stack ) : return self . _item . append ( _stack ) #拿取栈顶元素 def peek ( self ) : return self . _item [ len ( self . _item ) - 1 ] #计算栈的长度 def size ( self ) : return len ( self . _item ) if __name__ == '__main__' : s = StackList ( ) print ( '初始栈是否为空:' , s . is_empty ( ) )