未命名
1.安装
1 | yum install nginx |
安装目录:/usr/sbin
配置目录:/etc/nginx
关于docker使用,每个image可以去docker官网查看使用说明,包括环境变量等配置。 例如https://hub.docker.com/_/zookeeper/。 docker-compose安装https://docs.docker.com/compose/install/
1 | docker network ls |
run(fetched, feed_dict=None, options=None, run_metadata=None)
fetches
:
表示数据流图中能接收的任意数据流图元素,各类Op/Tensor对象
feed_dict
:可选。给数据流图提供运行时数据。feed_dict
的数据结构为python中的字典,其元素为各种键值对。
options
: ## 2. 常用 tf 函数
1 | result = tf.equal(tf.sign(p - 0.5), tf.sign(t - 0.5)) |
1 | accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) |
[toc]
1.父 -> 子 使用prop
子组件Pack.vue
1 | <template> |
父组件
1 | <bike k="你好" /> |
2.子 -> 父 使用$emit 触发自定义事件
子组件 Pack.vue
1 | <template> |
父组件
1 | <template> |
3.其他方式 中央事件管理器vuex
见第二节。
4.如果是页面路由组件 ? Vue
5.eventBus
1 | // 定义eventBus ./eventBus/index.js |
vue 官方提供的 状态管理器 整个项目中需要在多个地方共享的数据存放在同一的位置进行管理
(1)state:存放状态
1 | //定义 |
(2)getters:加工states成员给外界
1 | //定义 |
(3)mutations: state成员操作
1 | //定义 |
mutations必须是同步函数。提交 mutation 是更改状态的唯一方法。
(4)actions:异步操作
1 | //注册 |
Action 函数接受一个与 store 实例具有相同方法和属性的 context 对象,因此你可以调用 context.commit 提交一个 mutation,或者通过 context.state 和 context.getters 来获取 state 和 getters。
Action 提交的是 mutation,而不是直接变更状态,异步逻辑都应该封装到 action 里面。
(5)modules:模块化状态管理
./store/modules/orange.js
1 | const state = { |
./store/getters.js
1 | const getters = { |
./store/index.js
1 | import Vue from 'vue' |
main.js
1 | import Vue from 'vue' |
1.使用了 vue- router,并且多个路由之间需要共享数据的时候
2.页面数据太多难以管理
(1)安装 vuex npm install --save vuex
(2)在 src 目录下创建一个 store/index.js 文件
思考项目的哪些数据要放到仓库中;
(3)需要在 main.js 中,也就是 new Vue 的时候,配置 store 这个选项,选项的值就是 store 的实例对象
(4)如何使用仓库的数据
使用 mapState 辅助函数;
(5)如何在组件中修改仓库的数据
首先在仓库的 mutations 中定义一个修改 state 的方法;
组件中使用 mapMutations 辅助函数;
1 | 1. $root 获取到根组件的实例对象 |
子组件方法定义 使用\(refs 获取具体某个子组件的实例或者具体html元素的真实dom(常用) (1)首先需要标记。你想要获取的组件或者html元素,在他们身上定义一个 ref="xxx" (2)然后 this.\)refs.xxx (3)如果 ref 标记的是普通html元素,那么到通过 $refs.xxx 得到的将是这个html元素的dom对象 (4)如果 ref 标记的是一个子组件。那么通过 $refs.xxx 得到的将是这个子组件的实例对象
1 | <template> |
父组件调用
1 | //定义ref |
定义proto文件text1.proto
定义消息类型:
1 | syntax = "proto3" ; |
使用protocol
buffer编译器执行以下命令来运行.proto
文件,编译器将生成所选语言的代码,这些代码可以操作在.proto
文件中定义的消息类型,包括获取、设置字段值,将消息序列化到一个输出流中,以及从一个输入流中解析消息。对go来说,编译器会为每个消息类型生成一个.pb.go
文件。
1 | $ protoc --go_out=./ *.proto #不添加grpc插件 |
执行以上命令会将text1.proto文件编译生成以文件text1.pb.go
,内容如下:
1 | // Code generated by protoc-gen-go. DO NOT EDIT. |
定义服务(Service)
如果想要将消息类型用在 RPC(远程过程调用)系统中,可以在.proto文件中定义一个RPC服务接口,protocol buffe 编译器将会根据所选择的不同语言生成服务接口代码及存根。如想要定义一个RPC服务并具有一个方法,该方法能够接收SearchRequest并返回一个SearchResponse,此时可在.proto文件中进行如下定义:
1 | service SearchService { |
矿工根据难度系数值,进行随机数运算找到符合条件的解,找到解的旷工即获得记账权。
特点:耗费巨大计算资源,最终体现为电力资源的浪费。
根据股权占比来决定记账权,即股权占比最高的节点获得记账权 。
PoS基于网络参与者目前所持有的数字货币的数量和时间进行利益分配,是一种对货币所有权的证明,PoS依赖于其区块链自身的代币,在不同的代币系统,PoS算法往往有不同的表达形式。
###2.DPOS 股权授权证明算法
授权股份证明算法(Delegated proof-of-stake, DPoS).DPoS共识的基本思路类似于“董事会决策”,即系统中每个节点可以将其持有的股份权益作为选票授予一个代表,获得票数最多且愿意成为代表的前N个节点将进入“董事会”,按照既定的时间表轮流对交易进行打包结算、并且签署(即生产)新区块.如果说 PoW 和 PoS 共识分别是 “算力为王” 和 “权益为王” 的记账方式 的话, DPoS 则可以认为是 “民主集中式” 的记账方式, 其不仅能够很好地解决 PoW 浪费能源和联合挖 矿对系统的去中心化构成威胁的问题, 也能够弥补 PoS 中拥有记账权益的参与者未必希望参与记账的缺点, 其设计者认为 DPoS 是当时最快速、最高效、最去中心化和最灵活的共识算法.
股份授权证明机制(DPOS,Delegated Proof of stake)又称为“股东代表机制”,将拥有一定数量的 代币的每个节点看作为股东,各个节点根据持有的代币的数量做出定量的投票,最后选出定量的节点。这些节点作为代表,轮流生成区块,同时其代表们 也会收到等同于一个平均水平的 区块所包含交易费的10%作为报酬。如果一些代表在生成区块的过程中发现了问题,股东将会重新投票,并选取新 的代表进行替换。
代表EOS。
参考博客:https://blog.csdn.net/jfkidear/article/details/81275974
PBFT算法由于每个副本节点都需要和其他节点进行P2P的共识同步,因此随着节点的增多,性能会下降的很快,但是在较少节点的情况下可以有不错的性能,并且分叉的几率很低。PBFT主要用于联盟链,但是如果能够结合类似DPOS这样的节点代表选举规则的话也可以应用于公联,并且可以在一个不可信的网络里解决拜占庭容错问题,TPS应该是远大于POW的。
PBFT论文地址:http://pmg.csail.mit.edu/papers/osdi99.pdf
角色介绍
Client
请求发起者。系统外部角色
Proposer
接收client的请求,向集群提出提议。起到冲突调节的作用。
Acceptor
提议投票和接受者,只在形成法定人数(多数派)时,提议才会最终被接受。
Learner
提议接受者,备份,对集群一致性没有影响(不参与投票)
步骤和阶段
Prepare
Proposer提出一个提案,编号为N,此N大于这个Proposer之前提出的提案编号,请求acceptors的quorum接受。
Promise
如果N大于此proposer之前接收的任何提案的编号则接受,否则拒绝。
Accept
如果达到了多数派,proposer会发出accept请求,此请求包含提案编号N,以及提案内容。
Accepted
如果此proposer在此期间没有收到任何编号大于N的提案,则接受此提案内容,否则忽略。
###5.Raft
角色定义
参考文章:https://www.jianshu.com/p/8e4bbe7e276c
###总结各共识算法的特点
算法 | 特点 |
---|---|
PBFT | 达成共识速度快,适用于节点少的分布式系统 |
DPOS | 要求系统有代表权益的代币,而且由于权益的争夺,会极大减少代币的流动性 |
1
git clone https://github.com/hyperledger/caliper.git
1
2
3
4
5
6
7cd caliper
npm install
#如果本机是Python3环境,换成Python2
npm run repoclean
#备份当前目录下package.json
npm run bootstrap
#这一步卡住的话ctr+c终止,将备份的package.json覆盖当前pakage.json再执行npm run bootstrap
1
2
3
4
5
6
7
8cd ./packages/caliper-tests-integration
npm run start_verdaccio
#我的是macos,这一步会卡住,pm2启动不了verdaccio,那么直接执行以下命令:
pm2 start verdaccio -- -l 0.0.0.0:4873 -c scripts/config.yaml
此时启动成功,接着发布包:
npm run publish_packages
安装包:
npm run install_cli
1
BENCHMARK=fabric npm run run_tests
训练多个分类器取平均。 代表算法:随机森林,随机森林尽量使得所有决策树之间有差异性,通过两个随机选择来构造有差异的决策树:
对多个弱学习器加权训练