自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

转载 哈希表原理以及go map原理

哈希表原理其实map是一种HashMap,表面上看它只有键值对结构,实际上在存储键值对的过程中涉及到了数组和链表。HashMap之所以高效,是因为其结合了顺序存储(数组)和链式存储(链表)两种存储结构。数组是HashMap的主干,在数组下有有一个类型为链表的元素。当我们存储一个键值对时,HashMap会首先通过一个哈希函数将key转换为数组下标,真正的key-value是存储在该数组对应的链...

2019-07-16 20:02:03 1210 1

原创 golang实现切片

切片//定义切片类型type Slice struct { // void * C语言中的万能指针,没有具体数据类型,不能进行运算 Data unsafe.Pointer //go语言中万能指针类型。操作需要转换成int Len int //数据元素个数 Cap int //可扩展的有效容量}unsafe.Pointer参与运算操作需要转换,p := uintpt...

2019-07-16 19:57:03 631

原创 gc机制

gc机制引用计数法三色标记法:目标是为了缩短STW(stop the world)时间,提高程序时序性。基本原理扫描与标记阶段起初所有对象都是白色扫描找出所有可达对象,标记为灰色,放入待处理队列从队列提取灰色对象,将其所有引用对象标记为灰色放入队列,自身标记为黑色写屏障监视对象内存的修改,重新标色或清理阶段此时只剩下白色和黑色对象,将白色对象的内存收回。将所有黑...

2019-07-16 07:37:10 185

原创 websocket

websocketWebSocket是应用层的双向全双工协议,基于tcp。创建链接只需要一次握手,服务器和浏览器就可以创建持久性连接。服务器可以持续推送消息,而过去使用轮询方法。首先浏览器要支持websocket,websocket主要应用弹幕,网站客服聊天,交易所行情实时推送。uri协议是ws,增加安全套接字wssgolang版本demopackage mainimport ( ...

2019-07-15 21:19:27 143

原创 go mod

go mod12.5版本及以上检查go mod是否开启go mod没有开启可以在环境变量中配置export GO111MODULE=auto# 12.5默认不需要配#auto#on#off使用新建一个文件test.gopackage mainimport ( "fmt" "github.com/astaxie/beego")func main() { b...

2019-07-02 22:01:46 195

原创 一个好用的errors包

一个好用的errors包可以报出错误的位置地址"github.com/pkg/errors"demo包裹错误,打印出像panic的效果func Wrap(err error, message string) error打印错误需要%+v才能详细输出package mainimport ( "fmt" "github.com/pkg/errors" E "errors"...

2019-07-02 21:02:49 2283

原创 panic

panic异常指的是不应该出现问题的地方出现了问题例如:引用空指针、数组下标越界、除数为零。使用panic抛出异常,抛出异常后将立即停止当前函数的执行并运行所有被defer的函数,然后将panic抛向上一层,直至程序carsh。但是也可以使用被defer的recover函数来捕获异常阻止程序的崩溃,recover只有被defer后才是有意义的。对于异常,我们可以选择在一个合适的上游去rec...

2019-07-28 11:30:02 478

原创 二分查找go实现

二分查找二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。O(log2n)go实现这里是升序情况递归实现1. 与中间数比较2. 小于则递归中间数左半数组3. 大于于则递归中间数右半数组 加上 length/2 + 14. 返回下标,-1表示没找到//递归法func bin...

2019-07-21 20:56:14 386

原创 堆排序

堆排序堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列;...

2019-07-21 19:40:22 168

原创 快速排序

快速排序算法初始化基准值游标,首尾游标,首游标为第二个元素首游标与基准值比较,大于时尾游标和首游标交换,尾游标向前移动。小于则首游标与基准值交换,首游标和基准值游标向后移动。重复2和3步,直到首游标遇到尾游标(注意有等号)。将基准值左边数组和右边数组递归快排。go实现func quickSort(arr []int) { if len(arr) <= 1 { ret...

2019-07-21 15:25:49 163

原创 计数排序

计数排序计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。场景:10万个数,每个数取值0-999区间内go实现借助slice实现//maxValue 为统计数的最大值func countingSort(arr []int, maxValue int) { bucket := make([...

2019-07-21 11:09:33 135

原创 希尔排序

希尔排序又称为缩小增量排序。希尔排序没有快速排序算法快 O(n(logn)),因此中等大小规模表现良好,对规模非常大的数据排序不是最优选择。但是比O(n^2 )复杂度的算法快得多。并且希尔排序非常容易实现,算法代码短而简单。 此外,希尔算法在最坏的情况下和平均情况下执行效率相差不是很多,与此同时快速排序在最坏的情况下执行的效率会非常差。算法算法先将要排序的一组数按某个增量d(n/2,n为要...

2019-07-21 10:38:02 118

原创 直接插入排序

直接插入排序它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。原理像扑克牌抓牌动作一样,牌堆是无序的,手中的牌有序的,从牌堆中抓牌,并将牌根据手牌大小插入到手牌相应的位置。算法将待排序列分成有序数据组和无序数据组取无序数据组第一个元素,与有序数据组的最后一个元素比较有序数组依次向后移动,为待插入数据留出合适位置。数据插入有序数组重复1-...

2019-07-21 09:43:02 112

原创 选择排序

选择排序选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。外层控制行,比较次数数据元素个数减一内层控制列,从i+1开始,比较次数是len(arr)将第一个元素当做最小数使用该数依次向后比较,找真正的最小数,记录下标当一行比较结束。将index对应值,写到最开始位置。func SelectSort(arr []i...

2019-07-20 23:05:40 118

原创 冒泡排序算法

冒泡排序算法外层控制行,比较次数数据元素个数减一内层控制列,比较次数数据元素个数减一,减去已经排序好的元素相邻数据比大小满足条件进行交换go实现func BubbleSort(arr []int) []int { //len(arr) - 1是比较的次数,例如2个数只用比较1次 for i := 0; i < len(arr) - 1; i++ { //len(a...

2019-07-20 19:25:21 90

原创 二叉树

二叉树根:根结点叶子:终端结点,没有后继双亲:直接前驱结点孩子:直接后继结点结点的度:有几个直接后继结点就是几度树的度:所有结点度中的最大值树的深度:所有结点中最大的层数二叉树性质满二叉树每层都充满了结点完全二叉树除最后一层外,每一层节点数都达到最大值,在最后一层只缺少右边的若干结点完全二叉树的顺序存储左子右兄表示法多叉树转换成一个二叉树将同层所有兄弟连成一条线...

2019-07-19 19:58:30 239

原创 链式栈

链式栈先进后出,FILO(first in last out)入栈出栈都属于增删操作操作方法创建链式栈打印链式栈压栈出栈go实现创建type StackNode struct { Data interface{} Next *StackNode}func CreateStack(Data ...interface{}) *StackNode { if Data =...

2019-07-19 19:47:23 135

原创 循环链表

环形链表概念是单向链表的特例。将单向链表的尾结点,指向第一个数据结点(不是头结点)循环链表数据结点type LinkNode struct { Data interface{} Next *LinkNode}循环链表的方法1. 创建链表 Create(数据)2. 打印链表 Print()3. 获取结点个数 Length() int4. 插入结点 Insert(...

2019-07-17 20:03:33 136

原创 双向链表

双向链表结点数据结构type LinkNode struct { Data interface{} Prev *LinkNode Next *LinkNode}双向链表方法:1. 创建链表 Create(数据)2. 打印链表 Print()3. 获取结点个数 Length() int4. 插入结点 Insert(index, 数据)5. 删除结点 De...

2019-07-17 20:00:46 168

原创 线性表-单向链表

线性表动态数组(切片)、链表、栈、队列都属于线性结构。线性表是零个或者多个数据元素的有限序列,数据元素之间是有顺序的,数据元素个数是有限的,数据元素的类型是相同的。头节点只有一个后继节点,尾节点只有一个前继节点,中间节点既有前继节点又有后续节点。线性表的抽象数据类型定义ADT线性表(List)Data线性表的数据对象集合为{ a1, a2, ……, an },每个元素的类型均为Dat...

2019-07-16 20:10:15 158

原创 数据结构简介

概念数据结构是计算机存储、组织数据的方式。数据结构是算法的基础。算法是特定问题求解步骤的描述算法的分类分治(分布治理):有明确的目标,明确的执行方式。一般采用 拆分、解决小问题、合并的流程来加以实现。最短路径:有明确的目标,需要找寻有效的执行方式。游戏开发使用较多。贪婪(贪心):没有明确的目标,没有有效的执行方式。需要现场分析,获取目标,找寻执行方式。人工智能领域。算法的特性...

2019-07-16 20:09:38 175

原创 以太坊搭建开发环境和合约例子

以太坊搭建开发环境和合约例子Remix介绍官方出的一个在线版的编译器Remix在线编译环境https://remix.ethereum.org/#optimize=true&version=soljson-v0.5.0+commit.1d4f565a.js&evmVersion=nullRemix本地编译环境调试方便、相对稳定安装:npm install remi...

2019-07-14 20:09:18 496

原创 以太坊一些概念

以太坊一些概念以太坊是一个区块链的网络,由很多节点组成以太坊可以转账,可以做数据存储(合约)以太坊可以执行程序,程序叫做智能合约,所有节点都运行这个程序浏览器插件metamask仅具有转账功能,合约开发需要配合Remix编译器以太坊网络主网络和测试网络测试网络:Ropsten也是以太坊官方提供的测试网络,是为了解决Morden难度炸弹问题而重新启动的一条区块链,目前仍在运行,共识...

2019-07-14 19:41:20 151

原创 fabric 环境手动搭建步骤三

环境手动搭建步骤三当前配置后的目录结构.├── a.yaml├── chaincode│ └── chaincode_example02.go├── channel-artifacts│ └── channel.tx├── channel.tx├── configtx.yaml├── crypto-config│ ├── ordererOrganizations...

2019-07-07 20:51:21 568

原创 fabric 环境手动搭建步骤二

3. docker-compose文件的编写first-networks有模板文件docker-compose-cli.yaml日志级别:critical ,error ,warning ,notice ,info ,debuf 从高到低的顺序3.1 客户端角色需要使用的环境变量- GOPATH=/opt/gopath # 官方配置go环境设置的gopath目录- CORE_VM_EN...

2019-07-05 22:39:36 233

原创 fabric 环境手动搭建步骤一

fabric 环境手动搭建步骤准备工作流程给节点生成账号生成网络中需要的创始区块和通道文件编写docker-compose配置文件节点的操作流程创建通道将peer节点加入channel将智能合约安装到peer节点对链码初始化通过客户端测试,读写账本给节点生成账号创建目录并进入:mkdir 目录生成账号模板并修改:./cryptogen showtemplayte...

2019-07-05 19:41:56 658

原创 hyperledger fabric基础概念

fabric基础概念节点peer节点1.存储账本2.安装智能合约3.接收并处理客户端的请求4.使用的镜像: hyperledger/fabric-peer5.分为四个角色客户端节点1.连接peer节点、 orderer节点2.发送请求给peer节点3.镜像: hyperledger/fabric-toolsorderer节点1.对交易排序:解决双花问题 使用的排序算...

2019-07-03 21:43:30 983

原创 Hyperledger Fabric简介

fabric简介Hyperledger Fabric是Hyperledger中的区块链项目之一。与其他区块链技术一样,使用账本,智能合约,参与者 可以管理交易。Hyperledger Fabric是私有和许可。网络的成员通过可信赖的会员服务提供商(MSP)注册,而不是开放式的无权限系统。Hyperledger Fabric支持隐私,提供了创建通道的功能,允许一组参与者创建单独的交易账本。身份...

2019-07-03 20:42:23 4311

原创 设置程序的全局访问

设置程序的全局访问程序配置到path中第三方应用程序一般放在/usr/local/bin或者放在/opt将路径添加到path中# 进入家目录cd# 打开~/.bashrcvim ~/.bashrc# 文件最后追加export PATH=可执行程序绝对路径:$PATH关闭当前终端,打开新终端生效.不关闭则需要执行文件生效. ~/.bashrc...

2019-07-03 19:57:17 588

原创 hyperledger fabric安装

fabric 部署创建目录# 创建放置的目录,然后进入该目录,用curl下载脚本。$ cd ~ # 这里在家目录下创建放置目录$ mkdir hyperledger-fabric # 创建放置目录$ cd hyperledger-fabric下载并执行脚本,不需要翻墙curl -sSL https://raw.githubusercontent.com/hyperledger/fa...

2019-07-03 19:53:27 243

原创 bitcoin交易input中的签名过程

交易input中的签名过程input的结构引用前交易的交易号id交易的索引号index公钥pubkey签名sig签名的流程签名需要:对交易拷贝一份,把所有input的pubkey,sig都设置为空遍历交易的Inputs,对每一个Input的pubkey字段赋值(input引用的output的公钥哈希)使用私钥对当前交易进行签名得到签名值sig1,赋值给原交易sig字段将...

2019-07-02 20:38:36 874

空空如也

空空如也

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

TA关注的人

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