码墨

我是自己人生的导演,我的人生由自己设计。

p2p网络中的NAT穿透

一、p2p网络 1、简介   p2p网络,即对等计算机网络,是一种在对等者(Peer)之间分配任务和工作负载的分布式应用架构,是对等计算模型在应用层形成的一种组网或网络形式。网络的参与者共享他们所拥有的一部分硬件资源(处理能力、存储能力、网络连接能力、打印机等),这些共享资源通过网络提供服务和内容...

2019-03-31 16:09:09

阅读数 71

评论数 0

MIT 6.824 分布式课程Lab2 2B 日志追加实现

这部分主要实现附加日志部分,即一致性操作。主要涉及到完善Start()函数,完善附加日志请求AppendEntries RPC和回复AppendEntriesReply RPC结构,并实现附加日志过程函数。 一、AppendEntries和AppendEntriesReply结构 根据论文来完善A...

2019-03-07 14:38:05

阅读数 74

评论数 0

MIT 6.824 分布式课程Lab2 2A Raft领导者选举和心跳机制

一、Raft选主流程 当新集群启动的时候,所有的机器A、B、C的默认状态是Follower,所有的机器地址endpoint作为初始化参数传入进程。 如果收到心跳,则作为Follower开始工作,选主结束。如果超过一段随机选举超时时间后(在一定范围且大于心跳时间), 开始发起Election。随机...

2019-02-28 11:35:08

阅读数 55

评论数 0

MIT 6.824 分布式课程 Raft算法简介

Raft 是一种为了管理复制日志的一致性算法。 复制状态机 一致性算法是从复制状态机的背景下提出的。在这种方法中,一组服务器上的状态机产生相同状态的副本,并且在一些机器宕掉的情况下也可以继续运行。复制状态机在分布式系统中被用于解决很多容错的问题。例如,大规模的系统中通常都有一个集群领导者,像 GF...

2019-01-14 23:50:00

阅读数 116

评论数 0

Go语言经典排序算法实现

常见排序算法分类 排序算法种类繁多。根据处理的数据规模与存储特点,可分为内部排序和外部排序:前者处理的数据规模不大,内存足以容纳;后者处理的数据规模较大,必须将数据存放于外部存储器中,每次排序的时候需要访问外存。根据输入的不同形式,分为脱机算法和在线算法:前者待排序的数据是以批处理的形式给出的;而...

2019-01-13 18:46:31

阅读数 47

评论数 0

Go语言队列实现

一、队列结构特点 队列是一种可以实现“先进先出”的存储结构。你可以把它想象成排队买票,先来的先买,后来的人只能站末尾,不允许插队。先进者先出,这就是典型的“队列”。 队列最基本的操作是两个:入队 enqueue(),放一个数据到队列尾部;出队 dequeue(),从队列头部取一个元素。 二、Go...

2018-11-28 23:48:11

阅读数 131

评论数 0

Go语言栈实现

一、栈数据结构特点 栈是一种“操作受限”的线性表,只允许在一端插入和删除数据。 当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,我们就应该首选“栈”这种数据结构。 栈主要包含两个操作,入栈和出栈,也就是在栈顶插入一个数据和从栈顶删除一个数据。 二、Go语言实现栈 栈既可...

2018-11-28 23:39:07

阅读数 60

评论数 0

Go语言链表实现

package linklist import ( "errors" "fmt" ) type ListNode struct { data interface{} ...

2018-11-25 22:43:54

阅读数 44

评论数 0

Go语言数组实现

package array import ( "errors" "fmt" ) type Array struct { data []interface{} //存储数组数据 length uint ...

2018-11-21 13:58:04

阅读数 25

评论数 1

ECC 椭圆曲线加解密算法

随着计算机性能的提高,部分算法已经不再安全,但是道高一尺魔高一丈,加密算法也在不断的进步和演化,通常的方法是增加密钥长度,越长越安全,确实也管用,但是性能同样也有损失,本篇要介绍的 ECC 椭圆曲线加密算法就是一种密钥长度增加不多,但是密码强度增加很多的算法,比 RSA 强多了,像比特币,以太坊中...

2018-11-18 23:53:54

阅读数 234

评论数 0

AES 加密算法

AES 高级加密标准(Advanced Encryption Standard),它是 DES 的进化版,加密强度更好,更难破解。 一、AES 算法总体结构 首先 AES 属于是分组加密的方式加密,算法执行时会把明文分成一组一组,每组长度都是 16 个字节,也就是 128 位,密钥的长度分为 12...

2018-11-16 10:34:04

阅读数 40

评论数 0

3DES加密算法

一、3DES加密 DES是一个经典的对称加密算法,但也缺陷明显,即56位的密钥安全性不足,已被证实可以在短时间内破解。为解决此问题,出现了3DES,也称Triple DES,3DES为DES向AES过渡的加密算法,它使用3条56位的密钥对数据进行三次加密。为了兼容普通的DES,3DES并没有直接使...

2018-11-16 09:51:30

阅读数 77

评论数 0

深入理解 SHA 系列加密算法及Go语言运用

SHA 是一系列的加密算法,有 SHA-1、SHA-2、SHA-3 三大类,而 SHA-1 已经被破解,SHA-3 应用较少,目前应用广泛相对安全的是 SHA-2 算法,这也是本篇文章重点要讲述的算法。 一、算法核心思想和特点 该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段密文,...

2018-11-15 17:12:48

阅读数 75

评论数 0

MD5算法原理及Go语言运用与实现

一、MD5 算法特性 MD5 属于 Hash 算法中的一种,它具有以下特性: 输入任意长度的信息,经过处理,输出为 128 位的信息(数字指纹)。 不同的输入得到的不同的结果(唯一性)。 根据 128 位的输出结果不可能反推出输入的信息(不可逆)。 可见继承了 Hash 算法的优良特...

2018-11-15 16:00:08

阅读数 24

评论数 0

哈希(Hash)算法

一、什么是 Hash 算法 散列算法(Hash Algorithm),又称哈希算法,杂凑算法,是一种从任意文件中创造小的数字「指纹」的方法。与指纹一样,散列算法就是一种以较短的信息来保证文件唯一性的标志,这种标志与文件的每一个字节都相关,而且难以找到逆向规律。因此,当原有文件发生改变时,其标志值也...

2018-11-15 15:05:37

阅读数 1396

评论数 0

密码学基础

一、什么是密码学 密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学;应用于破译密码以获取通信情报的,称为破译学,总称密码学。 在通信过程中,待加密的信息称为明文,已被加密的信息称为密文,仅有收、发双方知道的信息称为密钥。在密钥控制下,...

2018-11-13 23:37:21

阅读数 25

评论数 0

Go语言TCP/UDP编程

一、TCP/UDP协议 TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端...

2018-11-13 22:41:02

阅读数 60

评论数 0

Go语言TCP网络编程(详细)

一、序言 Golang的主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不可少也是至关重要的一部分。在日常应用中,我们也可以看到Go中的net以及其subdirectories下的包均是“高频+刚需”,而TCP socket则是网络编程的主流,即便您没有直接使用到net中...

2018-11-12 20:56:01

阅读数 111

评论数 0

走迷宫问题广度优先算法实现

走迷宫问题 迷宫是许多小方格构成的矩形,在每个小方格中有的是墙(用1表示),有的是路(用0表示)。走迷宫就是从一个小方格沿上、下、左、右四个方向到邻近的方格,当然不能穿墙。 问题描述 实现生成迷宫(从文本中读取数据生成),输出迷宫(图案方式),探索迷宫路径(最短路径),输出迷宫路径(图案方式)。 ...

2018-10-21 22:56:25

阅读数 2245

评论数 0

以太坊私有网络集群搭建

一、安装geth客户端 geth是以太坊的官方客户端,它是一个命令行工具,提供很多命令和选项,可以运行以太坊节点、创建和管理账户、发送交易、挖矿、部署智能合约等。 geth客户端可使用三种方法进行安装: 源码编译安装 直接下载可执行文件 一、源码编译安装 在前面Go语言学习笔记...

2018-10-17 22:28:08

阅读数 97

评论数 0

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