<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[码墨]]></title><description><![CDATA[我是自己人生的导演，我的人生由自己设计。]]></description><link>https://blog.youkuaiyun.com/guidao13</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; guidao13]]></copyright><item><title><![CDATA[p2p网络中的NAT穿透]]></title><link>https://blog.youkuaiyun.com/guidao13/article/details/88930350</link><guid>https://blog.youkuaiyun.com/guidao13/article/details/88930350</guid><author>guidao13</author><pubDate>Sun, 31 Mar 2019 16:09:09 +0800</pubDate><description><![CDATA[一、p2p网络
1、简介
  p2p网络，即对等计算机网络，是一种在对等者（Peer）之间分配任务和工作负载的分布式应用架构，是对等计算模型在应用层形成的一种组网或网络形式。网络的参与者共享他们所拥有的一部分硬件资源（处理能力、存储能力、网络连接能力、打印机等），这些共享资源通过网络提供服务和内容，能被其它对等节点（Peer）直接访问而无需经过中间实体。在此网络中的参与者既是资源、服务和内容的提供...]]></description><category></category></item><item><title><![CDATA[MIT 6.824 分布式课程Lab2 2B 日志追加实现]]></title><link>https://blog.youkuaiyun.com/guidao13/article/details/88070273</link><guid>https://blog.youkuaiyun.com/guidao13/article/details/88070273</guid><author>guidao13</author><pubDate>Thu, 07 Mar 2019 14:38:05 +0800</pubDate><description><![CDATA[这部分主要实现附加日志部分，即一致性操作。主要涉及到完善Start()函数，完善附加日志请求AppendEntries RPC和回复AppendEntriesReply RPC结构，并实现附加日志过程函数。
一、AppendEntries和AppendEntriesReply结构
根据论文来完善AppendEntries结构：

附加日志请求AppendEntries RPC:
由领导人负责用来复...]]></description><category></category></item><item><title><![CDATA[MIT 6.824 分布式课程Lab2 2A Raft领导者选举和心跳机制]]></title><link>https://blog.youkuaiyun.com/guidao13/article/details/87623526</link><guid>https://blog.youkuaiyun.com/guidao13/article/details/87623526</guid><author>guidao13</author><pubDate>Thu, 28 Feb 2019 11:35:08 +0800</pubDate><description><![CDATA[一、Raft选主流程

当新集群启动的时候，所有的机器A、B、C的默认状态是Follower，所有的机器地址endpoint作为初始化参数传入进程。
如果收到心跳，则作为Follower开始工作，选主结束。如果超过一段随机选举超时时间后（在一定范围且大于心跳时间）， 开始发起Election。随机的目的是为了保证不要同时发起Election，在少数情况下可能会发生同时发起选举情况。
集群初始化时没...]]></description><category></category></item><item><title><![CDATA[MIT 6.824 分布式课程 Raft算法简介]]></title><link>https://blog.youkuaiyun.com/guidao13/article/details/86485861</link><guid>https://blog.youkuaiyun.com/guidao13/article/details/86485861</guid><author>guidao13</author><pubDate>Mon, 14 Jan 2019 23:50:00 +0800</pubDate><description><![CDATA[Raft 是一种为了管理复制日志的一致性算法。
复制状态机
一致性算法是从复制状态机的背景下提出的。在这种方法中，一组服务器上的状态机产生相同状态的副本，并且在一些机器宕掉的情况下也可以继续运行。复制状态机在分布式系统中被用于解决很多容错的问题。例如，大规模的系统中通常都有一个集群领导者，像 GFS、HDFS 和 RAMCloud，十分典型的使用一个单独的复制状态机去管理领导选举和存储配置信息并且...]]></description><category></category></item><item><title><![CDATA[Go语言经典排序算法实现]]></title><link>https://blog.youkuaiyun.com/guidao13/article/details/86430483</link><guid>https://blog.youkuaiyun.com/guidao13/article/details/86430483</guid><author>guidao13</author><pubDate>Sun, 13 Jan 2019 18:46:31 +0800</pubDate><description><![CDATA[常见排序算法分类
排序算法种类繁多。根据处理的数据规模与存储特点，可分为内部排序和外部排序：前者处理的数据规模不大，内存足以容纳；后者处理的数据规模较大，必须将数据存放于外部存储器中，每次排序的时候需要访问外存。根据输入的不同形式，分为脱机算法和在线算法：前者待排序的数据是以批处理的形式给出的；而在云计算之类的环境中，待排序的数据是实时生成的，在排序算法开始运行时，数据并未完全就绪，而是随着排序算...]]></description><category></category></item><item><title><![CDATA[Go语言队列实现]]></title><link>https://blog.youkuaiyun.com/guidao13/article/details/84594793</link><guid>https://blog.youkuaiyun.com/guidao13/article/details/84594793</guid><author>guidao13</author><pubDate>Wed, 28 Nov 2018 23:48:11 +0800</pubDate><description><![CDATA[一、队列结构特点
队列是一种可以实现“先进先出”的存储结构。你可以把它想象成排队买票，先来的先买，后来的人只能站末尾，不允许插队。先进者先出，这就是典型的“队列”。
队列最基本的操作是两个：入队 enqueue()，放一个数据到队列尾部；出队 dequeue()，从队列头部取一个元素。

二、Go语言队列实现
队列可以用数组来实现，也可以用链表来实现。用数组实现的栈叫作顺序栈，用链表实现的栈叫作链...]]></description><category></category></item><item><title><![CDATA[Go语言栈实现]]></title><link>https://blog.youkuaiyun.com/guidao13/article/details/84594728</link><guid>https://blog.youkuaiyun.com/guidao13/article/details/84594728</guid><author>guidao13</author><pubDate>Wed, 28 Nov 2018 23:39:07 +0800</pubDate><description><![CDATA[一、栈数据结构特点
栈是一种“操作受限”的线性表，只允许在一端插入和删除数据。
当某个数据集合只涉及在一端插入和删除数据，并且满足后进先出、先进后出的特性，我们就应该首选“栈”这种数据结构。
栈主要包含两个操作，入栈和出栈，也就是在栈顶插入一个数据和从栈顶删除一个数据。
二、Go语言实现栈
栈既可以用数组来实现，也可以用链表来实现。用数组实现的栈，我们叫作顺序栈，用链表实现的栈，我们叫作链式栈。
...]]></description><category></category></item><item><title><![CDATA[Go语言链表实现]]></title><link>https://blog.youkuaiyun.com/guidao13/article/details/84503902</link><guid>https://blog.youkuaiyun.com/guidao13/article/details/84503902</guid><author>guidao13</author><pubDate>Sun, 25 Nov 2018 22:43:54 +0800</pubDate><description><![CDATA[package linklist

import (
	&amp;quot;errors&amp;quot;
	&amp;quot;fmt&amp;quot;
)

type ListNode struct {
	data interface{}
	next *ListNode
}

type LinkList struct {
	head   *ListNode
	length uint
}

func NewLinkList() *LinkList {
	retu..]]></description><category></category></item><item><title><![CDATA[Go语言数组实现]]></title><link>https://blog.youkuaiyun.com/guidao13/article/details/84317799</link><guid>https://blog.youkuaiyun.com/guidao13/article/details/84317799</guid><author>guidao13</author><pubDate>Wed, 21 Nov 2018 13:58:04 +0800</pubDate><description><![CDATA[package array

import (
	&quot;errors&quot;
	&quot;fmt&quot;
)

type Array struct {
	data  []interface{}				//存储数组数据
	length   uint					//数组当前长度
}

func NewArray(capacity uint)*Array{
	if capacity == 0 {
		return nil
	}
...]]></description><category></category></item><item><title><![CDATA[AES 加密算法]]></title><link>https://blog.youkuaiyun.com/guidao13/article/details/84135099</link><guid>https://blog.youkuaiyun.com/guidao13/article/details/84135099</guid><author>guidao13</author><pubDate>Fri, 16 Nov 2018 10:34:04 +0800</pubDate><description><![CDATA[AES 高级加密标准（Advanced Encryption Standard），它是 DES 的进化版，加密强度更好，更难破解。
一、AES 算法总体结构
首先 AES 属于是分组加密的方式加密，算法执行时会把明文分成一组一组，每组长度都是 16 个字节，也就是 128 位，密钥的长度分为 128 位 192 位和 256 位；每组的加密算法都一样，所以我们就介绍一组加密的过程即可；这里以 12...]]></description><category></category></item><item><title><![CDATA[3DES加密算法]]></title><link>https://blog.youkuaiyun.com/guidao13/article/details/84134253</link><guid>https://blog.youkuaiyun.com/guidao13/article/details/84134253</guid><author>guidao13</author><pubDate>Fri, 16 Nov 2018 09:51:30 +0800</pubDate><description><![CDATA[一、3DES加密
DES是一个经典的对称加密算法，但也缺陷明显，即56位的密钥安全性不足，已被证实可以在短时间内破解。为解决此问题，出现了3DES，也称Triple DES，3DES为DES向AES过渡的加密算法，它使用3条56位的密钥对数据进行三次加密。为了兼容普通的DES，3DES并没有直接使用 加密-&amp;gt;加密-&amp;gt;加密 的方式，而是采用了加密-&amp;gt;解密-&amp;gt;加密 的方式。

...]]></description><category></category></item><item><title><![CDATA[深入理解 SHA 系列加密算法及Go语言运用]]></title><link>https://blog.youkuaiyun.com/guidao13/article/details/84107564</link><guid>https://blog.youkuaiyun.com/guidao13/article/details/84107564</guid><author>guidao13</author><pubDate>Thu, 15 Nov 2018 17:12:48 +0800</pubDate><description><![CDATA[SHA 是一系列的加密算法，有 SHA-1、SHA-2、SHA-3 三大类，而 SHA-1 已经被破解，SHA-3 应用较少，目前应用广泛相对安全的是 SHA-2 算法，这也是本篇文章重点要讲述的算法。
一、算法核心思想和特点
该算法的思想是接收一段明文，然后以一种不可逆的方式将它转换成一段密文，也可以简单的理解为取一串输入码，并把它们转化为长度较短、位数固定的输出序列即散列值的过程。
1. 单向...]]></description><category></category></item><item><title><![CDATA[MD5算法原理及Go语言运用与实现]]></title><link>https://blog.youkuaiyun.com/guidao13/article/details/84105795</link><guid>https://blog.youkuaiyun.com/guidao13/article/details/84105795</guid><author>guidao13</author><pubDate>Thu, 15 Nov 2018 16:00:08 +0800</pubDate><description><![CDATA[一、MD5 算法特性
MD5 属于 Hash 算法中的一种，它具有以下特性：

输入任意长度的信息，经过处理，输出为 128 位的信息（数字指纹）。
不同的输入得到的不同的结果（唯一性）。
根据 128 位的输出结果不可能反推出输入的信息（不可逆）。
可见继承了 Hash 算法的优良特点，用处很多，如登录密码、数字签名等。

二、Go语言使用MD5算法
func digest(data []byt...]]></description><category></category></item><item><title><![CDATA[哈希（Hash）算法]]></title><link>https://blog.youkuaiyun.com/guidao13/article/details/84104526</link><guid>https://blog.youkuaiyun.com/guidao13/article/details/84104526</guid><author>guidao13</author><pubDate>Thu, 15 Nov 2018 15:05:37 +0800</pubDate><description><![CDATA[一、什么是 Hash 算法
散列算法（Hash Algorithm），又称哈希算法，杂凑算法，是一种从任意文件中创造小的数字「指纹」的方法。与指纹一样，散列算法就是一种以较短的信息来保证文件唯一性的标志，这种标志与文件的每一个字节都相关，而且难以找到逆向规律。因此，当原有文件发生改变时，其标志值也会发生改变，从而告诉文件使用者当前的文件已经不是你所需求的文件。
Hash 算法能将将任意长度的二进制...]]></description><category></category></item><item><title><![CDATA[密码学基础]]></title><link>https://blog.youkuaiyun.com/guidao13/article/details/84038412</link><guid>https://blog.youkuaiyun.com/guidao13/article/details/84038412</guid><author>guidao13</author><pubDate>Tue, 13 Nov 2018 23:37:21 +0800</pubDate><description><![CDATA[一、什么是密码学

密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律，应用于编制密码以保守通信秘密的，称为编码学；应用于破译密码以获取通信情报的，称为破译学，总称密码学。

在通信过程中，待加密的信息称为明文，已被加密的信息称为密文，仅有收、发双方知道的信息称为密钥。在密钥控制下，由明文变到密文的过程叫加密，其逆过程叫脱密或解密。
密码学专业术语

密钥：分为加密密钥和解密密钥。
...]]></description><category></category></item><item><title><![CDATA[Go语言TCP/UDP编程]]></title><link>https://blog.youkuaiyun.com/guidao13/article/details/84037778</link><guid>https://blog.youkuaiyun.com/guidao13/article/details/84037778</guid><author>guidao13</author><pubDate>Tue, 13 Nov 2018 22:41:02 +0800</pubDate><description><![CDATA[一、TCP/UDP协议
TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输，它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说，它是事先为所发送的数据开辟出连接好的通道，然后再进行数据发送；而UDP则不...]]></description><category></category></item><item><title><![CDATA[Go语言TCP网络编程(详细)]]></title><link>https://blog.youkuaiyun.com/guidao13/article/details/83998589</link><guid>https://blog.youkuaiyun.com/guidao13/article/details/83998589</guid><author>guidao13</author><pubDate>Mon, 12 Nov 2018 20:56:01 +0800</pubDate><description><![CDATA[一、序言
Golang的主要 设计目标之一就是面向大规模后端服务程序，网络通信这块是服务端 程序必不可少也是至关重要的一部分。在日常应用中，我们也可以看到Go中的net以及其subdirectories下的包均是“高频+刚需”，而TCP socket则是网络编程的主流，即便您没有直接使用到net中有关TCP Socket方面的接口，但net/http总是用到了吧，http底层依旧是用tcp soc...]]></description><category></category></item><item><title><![CDATA[走迷宫问题广度优先算法实现]]></title><link>https://blog.youkuaiyun.com/guidao13/article/details/83246738</link><guid>https://blog.youkuaiyun.com/guidao13/article/details/83246738</guid><author>guidao13</author><pubDate>Sun, 21 Oct 2018 22:56:25 +0800</pubDate><description><![CDATA[走迷宫问题
迷宫是许多小方格构成的矩形，在每个小方格中有的是墙（用1表示），有的是路（用0表示）。走迷宫就是从一个小方格沿上、下、左、右四个方向到邻近的方格，当然不能穿墙。
问题描述
实现生成迷宫（从文本中读取数据生成），输出迷宫（图案方式），探索迷宫路径（最短路径），输出迷宫路径（图案方式)。
输入的文件内容格式为：
6 5
0 1 0 1 1
0 0 1 1 1
1 0 0 1 1
0 1 0...]]></description><category></category></item><item><title><![CDATA[以太坊p2p网络子协议开发框架运用]]></title><link>https://blog.youkuaiyun.com/guidao13/article/details/82990489</link><guid>https://blog.youkuaiyun.com/guidao13/article/details/82990489</guid><author>guidao13</author><pubDate>Tue, 09 Oct 2018 23:12:32 +0800</pubDate><description><![CDATA[以太坊的peer to peer (go-ethereum/p2p)模块能够让你便捷地在p2p网络上开发任何应用。这个p2p 包采用现代化的模块设计，能够很容易地在其之上扩展自己的额外通信协议。
开始一个p2p服务需要你先从构造一个p2p.Server{}实例开始：
import &amp;amp;amp;quot;github.com/ethereum/go-ethereum/crypto&amp;amp;amp;quot;
import &amp;amp;amp;quot;github.com..]]></description><category></category></item><item><title><![CDATA[以太坊p2p网络(六)：以太坊peer的连接和消息处理]]></title><link>https://blog.youkuaiyun.com/guidao13/article/details/82983195</link><guid>https://blog.youkuaiyun.com/guidao13/article/details/82983195</guid><author>guidao13</author><pubDate>Tue, 09 Oct 2018 15:32:29 +0800</pubDate><description><![CDATA[当TCP连接池跟一个节点进行rlpx握手，建立加密连接后，接下来会触发server.run 函数的addpeer管道传递消息，在server.run()函数里面捕获这个消息，进而创建一个peer实例，创建一个协程单独处理这个节点，进行业务层面的后续处理。
func (srv *Server) run(dialstate dialer) {
//连接池管理协程，负责维护TCP连接列表
    //在...]]></description><category></category></item></channel></rss>