原创 MIT 6.824 分佈式課程Lab2 2B 日誌追加實現

這部分主要實現附加日誌部分,即一致性操作。主要涉及到完善Start()函數,完善附加日誌請求AppendEntries RPC和回覆AppendEntriesReply RPC結構,並實現附加日誌過程函數。 一、AppendEntri

原创 MIT 6.824 分佈式課程Lab2 2A Raft領導者選舉和心跳機制

一、Raft選主流程 當新集羣啓動的時候,所有的機器A、B、C的默認狀態是Follower,所有的機器地址endpoint作爲初始化參數傳入進程。 如果收到心跳,則作爲Follower開始工作,選主結束。如果超過一段隨機選舉超時時間

原创 MIT 6.824 分佈式課程 Raft算法簡介

Raft 是一種爲了管理複製日誌的一致性算法。 複製狀態機 一致性算法是從複製狀態機的背景下提出的。在這種方法中,一組服務器上的狀態機產生相同狀態的副本,並且在一些機器宕掉的情況下也可以繼續運行。複製狀態機在分佈式系統中被用於解決很多

原创 Go語言經典排序算法實現

常見排序算法分類 排序算法種類繁多。根據處理的數據規模與存儲特點,可分爲內部排序和外部排序:前者處理的數據規模不大,內存足以容納;後者處理的數據規模較大,必須將數據存放於外部存儲器中,每次排序的時候需要訪問外存。根據輸入的不同形式,分

原创 Go語言隊列實現

一、隊列結構特點 隊列是一種可以實現“先進先出”的存儲結構。你可以把它想象成排隊買票,先來的先買,後來的人只能站末尾,不允許插隊。先進者先出,這就是典型的“隊列”。 隊列最基本的操作是兩個:入隊 enqueue(),放一個數據到隊列尾

原创 Go語言棧實現

一、棧數據結構特點 棧是一種“操作受限”的線性表,只允許在一端插入和刪除數據。 當某個數據集合只涉及在一端插入和刪除數據,並且滿足後進先出、先進後出的特性,我們就應該首選“棧”這種數據結構。 棧主要包含兩個操作,入棧和出棧,也就是在棧

原创 Go語言鏈表實現

package linklist import ( "errors" "fmt" ) type ListNode struct { data interface{} next *ListNode } type LinkL

原创 Go語言數組實現

package array import ( "errors" "fmt" ) type Array struct { data []interface{} //存儲數組數據 length uint /

原创 哈希(Hash)算法

一、什麼是 Hash 算法 散列算法(Hash Algorithm),又稱哈希算法,雜湊算法,是一種從任意文件中創造小的數字「指紋」的方法。與指紋一樣,散列算法就是一種以較短的信息來保證文件唯一性的標誌,這種標誌與文件的每一個字節都相

原创 3DES加密算法

一、3DES加密 DES是一個經典的對稱加密算法,但也缺陷明顯,即56位的密鑰安全性不足,已被證實可以在短時間內破解。爲解決此問題,出現了3DES,也稱Triple DES,3DES爲DES向AES過渡的加密算法,它使用3條56位的密

原创 ECC 橢圓曲線加解密算法

隨着計算機性能的提高,部分算法已經不再安全,但是道高一尺魔高一丈,加密算法也在不斷的進步和演化,通常的方法是增加密鑰長度,越長越安全,確實也管用,但是性能同樣也有損失,本篇要介紹的 ECC 橢圓曲線加密算法就是一種密鑰長度增加不多,但

原创 深入理解 SHA 系列加密算法及Go語言運用

SHA 是一系列的加密算法,有 SHA-1、SHA-2、SHA-3 三大類,而 SHA-1 已經被破解,SHA-3 應用較少,目前應用廣泛相對安全的是 SHA-2 算法,這也是本篇文章重點要講述的算法。 一、算法核心思想和特點 該算法

原创 AES 加密算法

AES 高級加密標準(Advanced Encryption Standard),它是 DES 的進化版,加密強度更好,更難破解。 一、AES 算法總體結構 首先 AES 屬於是分組加密的方式加密,算法執行時會把明文分成一組一組,每組

原创 MD5算法原理及Go語言運用與實現

一、MD5 算法特性 MD5 屬於 Hash 算法中的一種,它具有以下特性: 輸入任意長度的信息,經過處理,輸出爲 128 位的信息(數字指紋)。 不同的輸入得到的不同的結果(唯一性)。 根據 128 位的輸出結果不可能反推出輸入的

原创 密碼學基礎

一、什麼是密碼學 密碼學是研究編制密碼和破譯密碼的技術科學。研究密碼變化的客觀規律,應用於編制密碼以保守通信祕密的,稱爲編碼學;應用於破譯密碼以獲取通信情報的,稱爲破譯學,總稱密碼學。 在通信過程中,待加密的信息稱爲明文,已被加密