原创 STL常用序列容器學習筆記

這裏簡要的記述一下STL常用容器的實現原理,要點等內容。 vector vector是比較常用的stl容器,用法與數組是非類似,其內部實現是連續空間分配,與數組的不同之處在於可彈性增加空間,而array是靜態空間,分配後不能動態擴

原创 分佈式系統:向量時鐘

Lamport時鐘存在的問題 使用Lamport時間戳,只是比較事件aaa和bbb各自的時鐘值C{a}C\{a\}C{a}和C{b}C\{b\}C{b},無法說明它們之間的關係。也就是說,C{a}<C{b}C\{a\}&lt

原创 比特幣挖礦及源碼分析

挖礦流程概述 比特幣挖礦,其實就是比特幣節點,對交易進行打包出塊,獲取記賬權的同時得到比特幣激勵。挖礦主要流程如下: 收集網絡上廣播的交易,進行驗證,加入到交易池中; 構造新塊——將交易池中的交易打包,選擇一條最長的區塊鏈,計算

原创 比特幣核心數據結構

我們學習計算機時曾經有這麼一個定義:程序=數據結構+算法,對於一個區塊鏈,我認爲從技術方面看與程序的定義類似,核心一個是共識算法,一個是核心數據結構,這兩點直接決定了這條區塊鏈工作運行原理。比特幣的共識算法,在這一篇哈希函數與比特

原创 Merkle樹

Merkle tree Merkle樹看起來非常像二叉樹,其葉子節點上的值通常爲數據塊的哈希值,而非葉子節點上的值,所以有時候Merkle tree也表示爲Hash tree,如下圖所示: 在構造Merkle樹時,首先要對數據塊

原创 2019年中總結

轉眼間,已經工作N年了,最大的感悟就是是基礎要紮實,一定要不斷的修習基礎,每重新學習一次,都會有新的感悟,再結合工作中實際的項目,思考一下,會有更深的理解。越是基礎的東西,越是精華,基礎的東西理解透了,再學習新的技術時理解的會非常

原创 Bloom過濾器

提出一個問題 在我們細述Bloom過濾器之前,我們先拋出一個問題:給你一個巨大的數據集(百萬級、億級…),怎麼判斷一個元素是否在此數據集中?或者怎麼判斷一個元素不在此數據集中? 思考這個問題的時候,最先想到的可能是哈希表,在數據集

原创 比特幣交易

理解交易對比特幣系統是如何工作的是非常重要的,可以說比特幣整個的工作流程就是圍繞着交易展開的。下面我們先敘述一下比特幣交易流程,在宏觀上對交易有個認識,後面會講一下交易數據結構,具體在程序中是怎麼定義的。下面先讓我們看一下比特幣交

原创 哈希表原理

哈希表是最常用的數據結構之一,對於其用法,大家都非常熟悉,這裏詳細探討一下其原理。哈希表的底層實際上是基於數組來存儲的,當插入鍵值對時,並不是直接插入該數組中,而是通過對鍵進行Hash運算得到Hash值,然後和數組容量取模,得到在

原创 【Rust】雙重循環break的問題

在單循環中使用break跳出循環,但如果遇到雙重循環或者更多重循環時怎麼辦呢?與其他語言類似,Rust使用標記標識跳出指定循環。如下所示: fn main() { let a = vec![1;5]; let b

原创 比特幣私鑰、賬戶與錢包

對於比特幣用戶來講,與它們最直接相關的就是比特幣中私鑰、賬戶及錢包了,這裏講述一下這三個概念及相關細節。在這之前,先簡單的敘述一下基本的公鑰密碼學知識。 公鑰密碼體制(Public-key cryptography) 公鑰密碼體制

原创 閃電網絡

閃電網絡屬於狀態通道技術範疇,是區塊鏈技術的一個發展方向之一,其核心思想是將本來在鏈上結算的交易在鏈下通過狀態通道維護中間態,並且在發生糾紛時回到鏈上仲裁。鏈上仲裁的公平性和安全性在博弈論上保證了鏈下交易的對手不會作惡。通過這種方

原创 【Rust】寫時複製Cow

寫時複製(Copy on Write)技術是一種程序中的優化策略,多應用於讀多寫少的場景。主要思想是創建對象的時候不立即進行復制,而是先引用(借用)原有對象進行大量的讀操作,只有進行到少量的寫操作的時候,才進行復制操作,將原有對象

原创 談談Libra

6月18日下午,Facebook發佈加密貨幣白皮書,正式推出加密貨幣項目Libra。我想最近一段時間,肯定大部分區塊鏈從業者都會關注這一項目,自己也不例外,在此,簡單的談一下Libra。 白皮書中講到Libra的使命是建立一套簡單

原创 代碼統計工具cloc

有時候我們需要統計一下代碼量,這時候就需要代碼統計工具,推薦cloc。安裝如下: npm install -g cloc # https://www.npmjs.com/package/c