5 码墨

尚未进行身份认证

我要认证

没有命中注定的结局,只有不够努力的过程。

等级
TA的排名 5w+

p2p网络中的NAT穿透

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

2019-03-31 16:09:09

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

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

2019-03-07 14:38:05

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

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

2019-02-28 11:35:08

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

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

2019-01-14 23:50:00

Go语言经典排序算法实现

常见排序算法分类排序算法种类繁多。根据处理的数据规模与存储特点,可分为内部排序和外部排序:前者处理的数据规模不大,内存足以容纳;后者处理的数据规模较大,必须将数据存放于外部存储器中,每次排序的时候需要访问外存。根据输入的不同形式,分为脱机算法和在线算法:前者待排序的数据是以批处理的形式给出的;而在云计算之类的环境中,待排序的数据是实时生成的,在排序算法开始运行时,数据并未完全就绪,而是随着排序算...

2019-01-13 18:46:31

Go语言队列实现

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

2018-11-28 23:48:11

Go语言栈实现

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

2018-11-28 23:39:07

Go语言链表实现

package linklistimport ( "errors" "fmt")type ListNode struct { data interface{} next *ListNode}type LinkList struct { head *ListNode length uint}func NewLinkList() *LinkList { retu..

2018-11-25 22:43:54

Go语言数组实现

package arrayimport ( "errors" "fmt")type Array struct { data []interface{} //存储数组数据 length uint //数组当前长度}func NewArray(capacity uint)*Array{ if capacity == 0 { return nil }...

2018-11-21 13:58:04

ECC 椭圆曲线加解密算法

随着计算机性能的提高,部分算法已经不再安全,但是道高一尺魔高一丈,加密算法也在不断的进步和演化,通常的方法是增加密钥长度,越长越安全,确实也管用,但是性能同样也有损失,本篇要介绍的 ECC 椭圆曲线加密算法就是一种密钥长度增加不多,但是密码强度增加很多的算法,比 RSA 强多了,像比特币,以太坊中使用的就是 ECC,咱们每个人的身份证中使用的也是 ECC。一、为什么叫椭圆曲线首先回忆一下直线方...

2018-11-18 23:53:54

AES 加密算法

AES 高级加密标准(Advanced Encryption Standard),它是 DES 的进化版,加密强度更好,更难破解。一、AES 算法总体结构首先 AES 属于是分组加密的方式加密,算法执行时会把明文分成一组一组,每组长度都是 16 个字节,也就是 128 位,密钥的长度分为 128 位 192 位和 256 位;每组的加密算法都一样,所以我们就介绍一组加密的过程即可;这里以 12...

2018-11-16 10:34:04

3DES加密算法

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

2018-11-16 09:51:30

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

SHA 是一系列的加密算法,有 SHA-1、SHA-2、SHA-3 三大类,而 SHA-1 已经被破解,SHA-3 应用较少,目前应用广泛相对安全的是 SHA-2 算法,这也是本篇文章重点要讲述的算法。一、算法核心思想和特点该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段密文,也可以简单的理解为取一串输入码,并把它们转化为长度较短、位数固定的输出序列即散列值的过程。1. 单向...

2018-11-15 17:12:48

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

一、MD5 算法特性MD5 属于 Hash 算法中的一种,它具有以下特性:输入任意长度的信息,经过处理,输出为 128 位的信息(数字指纹)。不同的输入得到的不同的结果(唯一性)。根据 128 位的输出结果不可能反推出输入的信息(不可逆)。可见继承了 Hash 算法的优良特点,用处很多,如登录密码、数字签名等。二、Go语言使用MD5算法func digest(data []byt...

2018-11-15 16:00:08

哈希(Hash)算法

一、什么是Hash算法散列算法(HashAlgorithm),又称哈希算法,杂凑算法,是一种从任意文件中创造小的数字「指纹」的方法。与指纹一样,散列算法就是一种以较短的信息来保证文件唯一性的标志,这种标志与文件的每一个字节都相关,而且难以找到逆向规律。因此,当原有文件发生改变时,其标志值也会发生改变,从而告诉文件使用者当前的文件已经不是你所需求的文件。Hash算法能将将任意长度的二进制...

2018-11-15 15:05:37

密码学基础

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

2018-11-13 23:37:21

Go语言TCP/UDP编程

一、TCP/UDP协议TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;而UDP则不...

2018-11-13 22:41:02

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

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

2018-11-12 20:56:01

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

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

2018-10-21 22:56:25

以太坊私有网络集群搭建

一、安装geth客户端geth是以太坊的官方客户端,它是一个命令行工具,提供很多命令和选项,可以运行以太坊节点、创建和管理账户、发送交易、挖矿、部署智能合约等。geth客户端可使用三种方法进行安装:源码编译安装直接下载可执行文件一、源码编译安装在前面Go语言学习笔记章节中详细介绍了Go语言开发环境的搭建,搭建好Go语言开发环境之后,我使用的是ubuntu系统搭建,通过git c...

2018-10-17 22:28:08

查看更多

勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!