- 博客(34)
- 资源 (3)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 golang重写区块链——0.6 UTXO集和Merkle树的实现(优化链上交易)
到目前为止,我们已经基本实现了区块链中的所有元素。在第一章节就讲到区块链是一个分布式数据库,这也是去中心化的核心所在,但是在前面的章节我们在实现区块链中的各种功能的过程中我们并没有去考虑‘分布式’的问题,只是关注了数据库这部分的实现。在这一章节中我们来讨论区块链的分布式的实现。 本章之后的全部代码已经上传到github上面了,可以点击 这里 查看。在开始之前我们先总结一下我们...
2018-08-28 23:16:45
2105
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 golang重写区块链——0.5 区块链中钱包、地址和签名的实现
在上一章节中,我们把简单的用户定义的字节当做地址来使用,比如在上一 章我测试用到的zyj和dxn。在这一章节中我们要正真的去实现区块链中的地址。 大家应该还记得上一章中提到过区块链中的交易是地址与地址之间的,地址的背后才是我们人来操作,因此我们会发现一个问题,就是在上一章中的这些我们自定义的地址并没有什么意义,因为随便谁都可以使用,转移该地址中的getbalnace,但是现实中我们并不想...
2018-08-27 20:15:44
3027
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 golang重写区块链——0.4 链上交易(无地址版本)
区块链的作用就是要实现交易,一种无法篡改永久保存的交易。比特币区块链还没有像以太坊一样已经实现了账户的概念,比特币区块链上的交易双方是地址,地址背后才是人,人和地址不是一一对应的关系,一个人可以拥有很多比特币的地址。 ——注:底端有完整的代码,代码里面有详细的注解,可以直接看完整的代码,github端我随后会上传 在一笔交易中,是由输入和输出来形成的,首先我们重新创...
2018-08-26 15:24:23
1279
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 golang重写区块链——0.2 加入工作量证明pow
比特币使用的共识机制为工作量证明机制,此机制已经经历了数十年的验证了,虽然原理简单粗暴,但是不得不承认它的安全性与可靠性。下面将实现的是区块链中的pow机制:pow包package powimport ( "fmt" "crypto/sha256" "strconv" "bytes" "math/big" "go_code/A_golang_blockchain/...
2018-08-25 17:02:22
737
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 golang重写区块链——0.1 实现简单的链
众所周知go语言的天生的高并发性具有适合区块链技术的天然优势。起初的以太坊的底层代码所用的语言C++,java,ruby等有很多种,最终官方还是考虑使用go 语言的版本作为官方版本。可见go语言在区块链底层开发中是具有很大的优势的,也是从事区块链行业的人员必须掌握的一门编程语言。下面我通过go语言编写了一个简单的BlockChain,让大家能简单理解区块链的构成原理。1、区块包...
2018-07-23 20:27:28
1676
原创 求两个数额最大公约数的几种方法并对其优化
package mainimport "fmt"/* 使用辗转相除法求两个数的最大公约数。 思路:辗转相除法原理为 a 和 b的最大公约数等于 b 和 a%b的最大公约数 (a > b) , 依次类推把求a b 的最大公约数换算成较小的值来求*/func getGreatestCommonDivisorV1(a, b int) int { // 首先要保证 a &g...
2019-11-30 22:19:55
336
1
原创 判断一个单向链表中是否存在环
package mainimport "fmt"/* 题目: 判断一个单向链表中是否存在环 最优解思路:1. 使用两个指针,起点都从链表的头结点开始,第一个指针每一步走一个节点,第二个指针每一步走两个节点,如果存在环两个指针一定会相遇的。这类似于小学中学的追击问题:在一个环形跑道上两个运动员同一地点出发一个运动员速度快另一个速度慢,两个运动员一定会相遇。*/// 假设链表节点...
2019-11-30 22:10:06
787
原创 巧妙判断一个数是否为2的整数次幂
package mainimport "fmt"/* 如何判断一个数是否为2的整数次幂 思路1. 暴力破解:从1开始乘以2,循环并和目标值比较,当大约目标值则终止,显然此方法效率非常低下 思路2. 把乘以2改为移位运算,提高一点效率,还是没有解决算法的根本问题 思路3. 通过转换成二进制观察,为2的整数次幂的数字转换成2进制都是首位为1其他位都为0的数字,比如10,100,100...
2019-11-30 22:00:23
393
原创 求两个有序数组的中位数
要求: 给定两个大小为 m 和 n 的有序数组nums1 和nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为O(log(m + n))。例如:nums1 = [1, 3]nums2 = [2]则中位数是 2.0nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2 + 3)/2 = 2.5算法解析:中位数:将一个集合划分为两...
2019-11-30 21:39:56
293
原创 golang环形链表实现约瑟夫问题
约瑟夫问题:是一个出现在计算机科学和数学中的问题,在计算机编程算法中类似问题又称为约瑟夫环或者叫做“丢手帕问题”。约瑟夫问题的原理:n个人围成一圈,选择一个人开始报数,每过m次则当前报数的人则会被踢出圈,然后挨着的下一个人作为又一轮游戏的第一个报数的人,这样重复最后只会剩下一个人。例如: n = 6, m = 5,陆续被踢出圈的人的编号为:5,4,6,2,3,1.代码实现如下:...
2019-11-30 16:51:16
519
原创 给定一个字符串,请找出其中不含有重复字符的最长子串
package mainimport "fmt"/**给定一个字符串,请找出其中不含有重复字符的最长子串eg: 输入: "abcacabb" 输出: "abc"*/func getLongestString(ss string) string { storeMap := make(map[int]string) // key为保存的字符转最后一个字符在整个字符串中的index,...
2019-11-30 15:54:46
328
原创 三个水壶算法实现
三个水壶算法: 三个水壶的容积分别为8升,5升,3升,最开始第一个水壶装满了8升的水,每次倒水都只能倒满或者是倒空这两种情况,求出三个水壶中装有4升水的最优倒水。package mainimport "fmt"/** 三个水壶算法三个水壶的容积分别为8升,5升,3升最开始第一个水壶装满了8升的水每次倒水都只能倒满或者是倒空这两种情况求出三个水壶中装有4升水的最优倒水*/...
2019-11-30 14:50:35
1784
原创 实现稀疏数组
稀疏数组:把具有不同值的元素的行、列以及值记录到一个小规模的数组中,从而缩短程序的规模,也起到压缩数组的功能。代码实现如下: // 1. 创建一个11X11的二维数组,并初始化两个元素 var chessMap [11][11]int chessMap[1][2] = 1 chessMap[2][3] = 2 // 2. 打印出二维数组如下 for _, v := range ...
2019-11-19 21:23:49
207
原创 造币机制四
---本节内容--- 这节还是讨论一开始提出的一百人经济模型。就是说,每个人每天只需要一份食物,一份衣服,就可以生活。而当时的生产力只要五十个人就可以生产出来这些食物和衣服。其中二十五个人生产食物,每个人每天能够生产四份食物,将其中的三份出售给其它人,换回三份黄金,再用一份黄金购买一份衣服,这样有二份黄金的利润作为储蓄。另二十五个人生产衣服,也是一样,每天能够生产四份衣服,用...
2019-11-16 15:13:19
169
原创 造币机制三
---内容如下--- 造币机制一给出了一个基础的经济模型,造币机制二给出了避免金融危机的基本方法。本章继续讨论造币机制一种的简化的经济模型。因此,如果读者没有阅读造币机制一的经济模型的话,最好是去阅读之后再来看这篇内容,下面先对这个模型进行简单的回顾。 在我们构造的最简单的那个经济模型中,一百个人构成的社会,每个人只需要两种商品,食物和衣服,每天每人正常消耗一份...
2019-11-16 15:06:56
205
原创 造币机制二
如果没有看第一节的同学,建议先把第一节内容看了再看第二节。---内容如下--- 在第一节的时候,已经讲到了一个经济系统,在生产过剩的时候,就有人需要闲待着不干活。但是,如果这样的话,生产的人就会不高兴,正因为如此,就需要有一个生产黄金的公司。在第一节的经济模型中讲的是黄金,其实只是需要有类似黄金这种属性的商品就可以了。第一,它可以作为一个人的劳动证明,或者说,构成了一个人...
2019-11-16 15:01:49
203
原创 造币机制 一
首先声明一下本文并不是原创文章,本文整理了当年“强国论坛”里面一位网名叫做“数学”的网友所发表的观点言论。我个人认为他很有可能就是发明比特币的中本聪,在他的观点里面有太多是比特币核心思想,注意强国论坛是人民网在2005-2007年开放的一个论坛网站,比特币论文是2008年11月份发布,比特币网络2009年正式上线。下面分享的只是其中的第一节,一共有九节。后面我会按照顺序陆续发送到本公众号上分享...
2019-11-16 14:47:58
275
原创 漫谈区块链技术
在比特币诞生之初,还没有“区块链”这个词,在中本聪发布的比特币白皮书上只有“区块”和“链”的概念。在比特币问世七年之后,大家才开始意识到作为比特币底层技术的“链”其价值远大于比特币本身。区块链可以让人们在没有中央集权的情况下,对彼此的互相协作建立起信心。简单的来讲,区块链是一个创造信任的机器。 在人们刚接触区块链这种陌生的技术之初,会对区块链有各种各样的理解。其中...
2018-07-03 20:36:27
610
原创 区块链技术基础(笔记)
一、区块链本质上是一个对等网络(peer-to-peer)的分布式账本数据库。二、区块链本身其实是一串链接的数据区块,其链接指针是采用密码学哈希算法对区块头进行处理所产生的区块头哈希值。三、基本概念1、 数据区块: 比特币的交易会保存在数据区块中,大约每10分钟会产生一个区块,每个数据区块一般包括区块头(Header)和区块体(Body)两部分。 区块...
2018-07-03 01:01:02
13387
原创 区块链中的女巫攻击问题
解释一: 大规模的p2p系统面临着有问题的和敌对的节点的威胁,为了应付这种威胁,很多系统采用了冗余。然而,如果一个有恶意的实体模仿了多个身份,他就可以控制系统的很大一部分,破坏了系统的冗余策略。我们把这种模仿多个身份的攻击定义为女巫攻击(Sybil Attack)。解释二: 女巫攻击是在P2P网络中,因为节点随时加入退出等原因,为了维持网络稳定,同一份数据通常需要备份到多个分布式节点上,这就是...
2018-07-03 00:35:20
4174
翻译 Ganache CLI - 用于测试和开发的快速以太坊RPC客户端。
Ganache CLI 用于测试和开发的快速以太坊RPC客户端。 http://truffleframework.com/ganache注意:testrpc是现在的ganache-cli。 像使用testrpc一样去使用它。Welcome to Ganache CLI Ganache CLI是以太坊开发工具Truffle套件的一部分,是以太坊开发私有区块...
2018-07-02 23:48:20
9505
翻译 Truffle 框架安装与使用
Truffle 最受欢迎的以太坊开发框架。 http://truffleframework.com Truffle是以太坊的开发环境,测试框架和资产管道,旨在让以太坊开发者的生活更轻松。 用Truffle,你会得到: ...
2018-07-02 21:53:46
1628
原创 以太坊智能合约 之 授权投票选举合约
设置一个投票主持人,为每一个账户赋予投票权,账户可以把投票权让给其他账户进行代替投票。每一个提案都有一个短名称,提案通过提案数组的形式存在,在投票中,投票者只需输入提案的提案号就可以进行投票。pragma solidity ^0.4.0;//授权投票合约contract Ballot{ //声明一个结构类型,用于代表一个独立的投票人 struct Voter{...
2018-06-29 21:46:27
1314
转载 区块链中的网络设计
自从考了计算机三级网络技术之后就对点对点网络产生了浓厚的兴趣,在对p2p网络进行更深一步的研究之后,就接触了比特币,从而了解到了区块链这门技术,从此无法自拔。 区块链网络是去中心化的网络,是一个P2P的网络。在区块链的网络体系中是不存在中心化的服务器和各种层次结构,每一个节点都是对等的,各个节点共同提供网络服务。同时是客服端和服务器。一、节点的角色分工区块链P...
2018-06-27 11:48:16
6324
原创 在java中两个线程同时运行是怎么变化的
在线程运行中,两个线程同时运行的情况是很平常的,下面我用一个案例来说明一下两个线程同时运行时,线程状态的变化情况:代码如下:/* * 功能:两个线程同时运行是如何变化的 * 作者:zyj0813 * 案例:编写一个程序,该程序可以接受一个整数n,创建两个线程, * 一个线程计算从1+....+n并输出结果, * 另一个线程每隔一秒在控制台输出“我是一个线程,正在输出第i
2017-10-25 19:45:13
10243
原创 JAVA中的面板组件JPanel的应用
一、为什么要使用面板组件JPanel?在图形用户界面编程中,如果只是普通的组件布局,我们用基本的三种布局管理器(在我之前的博客中详细介绍了主要的三种布局管理器的使用,下面有文章的链接)就可以了,但是在比较复杂的布局要求时,就需要使用布局管理器的组合使用,这个时候就需要使用到面板组件JPanel。二、面板组件(JPanel)的使用JPanel:面板组件,非顶层容器。一个界面只可以有一
2017-10-22 18:34:23
44429
7
原创 java中的swing组件、主要三大布局管理器的应用
二、布局管理器--介绍1、概念:组件在容器(比如JFrame)中的位置和大小是由布局管理器来决定的。所有的容器都会使用一个布局管理器,通过它来自动进行组件的布局管理。2、种类:java共提供了五种布局管理器:流式布局管理器(FlowLayout)、边界布局管理器(BorderLayout)、网格布局管理器(GridLayout)、卡片布局管理器(CardLayout)、网格包布局管理器(GridBagLayout)。其中前三种是最常见的布局管理器。
2017-10-22 14:05:44
22007
1
原创 JAVA小程序--裁判评分系统
实现功能:n个评委打分,运动员的成绩是n个成绩去掉一个最高分和一个最低分,剩下的n-2个分数的平均分就是最后得分。使用一维数组实现打分功能,并找出打出最高分和最低分的裁判,打分最接近最后得分和与最后得分相差最大的裁判;详细代码和代码注解如下:/* * 功能:跳水比赛,评委打分。 * 运动员的成绩是n个成绩去掉一个最高分和一个最低分, * 剩下的n-2个分数的平均分就是最后得分。 * 使用一维数组实现打分功能,并找出
2017-10-22 10:53:15
6844
1
原创 通过JAVA编写一个简单的雇员管理系统小项目
代码注释比较详细,应该能帮助初学者很轻松的看懂;代码如下:(详细说明请看代码注解)/* * 项目:公司职员薪水管理系统 * 作者:zyj0813 * 项目需求: * 1、添加新员工 * 2、根据员工号显示该员工信息 * 3、显示所有员工信息 * 4、删除员工信息 * 5、统计公司的平均薪水 * 6、修改员工的薪水 * 7、退出系统 */packa
2017-10-21 21:35:08
7870
1
原创 JAVA的泛型特性和反射机制在泛型中的简单运用
1、泛型的基本概念:泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。java语言引入泛型的好处是安全简单。没有泛型的情况下,通过对类型Object的引用来实现参数的“任意化”、“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际操作类型可以预先知道的情况下进行的,对于
2017-10-21 18:14:51
207
原创 Java中集合类的使用、区别、总结
1、java中常用的集合类主要有以下几种List 结构的集合类:ArrayList类,LinkedList类,Vector类,Stack类Map结构的集合类:HashMap类,Hashtable类Set结构的集合类:HashSet类,TreeSet类Queue结构的集合类://对列结构Queue接口2、集合类的简单理解就是能动态的为我们添加和修改,为我们提供
2017-10-21 11:09:13
592
原创 JAVA--二分查找
1、查找在java中,我们常用的查找有两种:顺序查找、二分查找,下面主要介绍一下二分查找;2、二分查找的主要思想:首先查找的数组是一个有序数组,然后每次取数组的中间的值与要查找的数比较,如果比较的数大于(小于)中间的数,则在把中间数的右边(左边)剩下的数组作为一个数组来重复上次的操作,直到查到想要的数。JAVA代码如下:/* * 功能:二分法的实现 * 作者:zyj0813
2017-10-21 09:08:19
181
原创 JAVA中常见的四种排序--冒泡排序、选择排序、插入排序和快速排序 详解
1、排序的介绍排序是将一群数据,按照指定的顺序进行排列的过程。2、排序的分类内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序。包括(交换式排序、选择排序和插入排序)外部排序:数据量过大,无法加载到内存中,需要借助外部存储进行排序。包括(合并排序法和直接合并排序法)3、排序(Sorting)是数据处理中一种很重要的运算,同时也是很常见的运算,一般数据处理工作的25%的
2017-10-20 16:20:24
6078
2
原创 java面试题丢手帕问题 代码详解
1、约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。又称“丢手绢问题”.) 2、约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。 3、下面通过java代...
2017-10-20 11:13:58
1511
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人