從2017年開始,區(qū)塊鏈逐步成為互聯(lián)網(wǎng)的風口浪尖。曝光度的激增帶來了人才市場的火爆,我陸陸續(xù)續(xù)接觸了許多來參加面試的候選人,大部分是沒有區(qū)塊鏈從業(yè)經(jīng)驗的。
作為專業(yè)方向是分布式系統(tǒng)理論并且從事相關(guān)行業(yè) 5 年多的研發(fā)架構(gòu)師,我想從面試官的角度來闡述要想要掌握區(qū)塊鏈核心技術(shù)所需要的一些知識和技能。希望能給到加入這個新興行業(yè)的同學,一些啟發(fā)。
說到技術(shù),我所指的主要還是研發(fā)。由于我負責的是技術(shù)崗,因此對于技術(shù)上要求會比較嚴格(嚴格并不等于高),簡單來說,基礎(chǔ)知識需要十分扎實。許多過來參加區(qū)塊鏈工程師面試的同學,大部分人給我的印象是,看過一點介紹區(qū)塊鏈知識的書籍,問一點淺顯的知識是能夠答得上來,但是稍微具體一點的,就會變得含糊不清了。
在我看來,區(qū)塊鏈所要求的知識并非什么特殊的或者新興的知識,除了密碼學領(lǐng)域的知識需要專門了解之外,其他知識和技能幾乎都是一些比較通用的網(wǎng)絡(luò)開發(fā)核心知識。
由于區(qū)塊鏈行業(yè)涉及到的范圍非常廣泛,從各種基礎(chǔ)設(shè)施,到各種上層應(yīng)用,它們對技能的要求范圍是不一樣的。根據(jù)我的經(jīng)驗,大致把區(qū)塊鏈開發(fā)分為兩個大的部分:技術(shù)層和應(yīng)用層,以便候選人根據(jù)自己以往的專業(yè)技能背景選擇自己合適的領(lǐng)域。

一、技術(shù)層
技術(shù)層是區(qū)塊鏈最下面的一層,這一層主要工作是底層技術(shù)與基礎(chǔ)設(shè)施的開發(fā)。我們可以把技術(shù)層比作操作系統(tǒng)的內(nèi)核,應(yīng)用層則是在操作系統(tǒng)之上構(gòu)建各種軟件。比如我們最常見的比特幣網(wǎng)絡(luò),它的核心技術(shù)就來源于它的共識機制(POW)。當然,對于大部分鏈來說,共識的原理都是其最核心的部件。要構(gòu)建這樣的共識機制,還需要更加底層的技術(shù)支持,比如網(wǎng)絡(luò)通信、數(shù)據(jù)存儲、加密安全等等。所以,這一層對于技術(shù)的內(nèi)涵要求比較高,這里的技術(shù)是一項綜合的能力,我把它總結(jié)為三個部分:理論基礎(chǔ)、專業(yè)經(jīng)驗以及技術(shù)能力。
1)理論基礎(chǔ)
理論基礎(chǔ)主要是指分布式系統(tǒng)理論,如果是專業(yè)出身(比如計算機專業(yè)-分布式系統(tǒng)方向),或者有過從事過分布式數(shù)據(jù)庫、網(wǎng)絡(luò)等相關(guān)的經(jīng)驗,那么可能會對這一部分相對了解或熟悉。熟悉并深入理解分布式網(wǎng)絡(luò)的特點和各種算法,是能夠在區(qū)塊鏈領(lǐng)域大有作為的前提之一。
這里,我簡單列舉需要掌握的一些分布式系統(tǒng)核心概念:
· 全序/偏序,因果順序
· 物理時鐘/邏輯時鐘
· 兩階段算法(2PC)/三階段算法(3PC)
· Safety && Liveness
· FLP 不可能定理
· Paxos/Multi-paxos
· Raft/Multi-Raft
· CAP 理論
· 副本一致性、強/弱、最終一致性
· 簡單哈希/一致性哈希
· Base/ACID、分布式 ID 等等
· BFT(Byzantine Fault Tolerance)
2)專業(yè)經(jīng)驗
專業(yè)經(jīng)驗則是指對目前最主流的區(qū)塊鏈項目的掌握程度,比如 Bitcoin、Ethereum 等,不僅要了解它們的運行原理,賬戶模型、智能合約等,而且要能在它們的基礎(chǔ)上持續(xù)改進、開拓以及創(chuàng)新,比如對側(cè)鏈的輕節(jié)點、分布式存儲、擴容方案等有一定的理解等。
為此,我也做了一個列表,主要展示對區(qū)塊鏈的專業(yè)經(jīng)驗的一些要求:
· 目前區(qū)塊鏈主流共識算法之間的差異(比如 PBFT、 POW 等原理與區(qū)別)
· 聯(lián)盟鏈、公鏈及私鏈之間的區(qū)別及適用場景
· 針對區(qū)塊鏈的攻擊方式:51%算力攻擊、Sybil 攻擊、Eclipse 攻擊、DDos 攻擊
· P2P 網(wǎng)絡(luò)通信模式(Gossip、Totem、DHT 等)
· Merkle Tree 數(shù)據(jù)結(jié)構(gòu)
· Bitcoin UTXO 模型,以太坊轉(zhuǎn)賬流程(GAS 計算、Nonce 值等等)
· 以太坊智能合約的編寫,Solidity 相關(guān)知識
· 密碼學(公鑰/私鑰、ECDSA、RSA、哈希算法)、簽名、多重簽名、盲簽名等等
· 以太坊協(xié)議:ERC20、ERC721、ERC223、ERC875
· 比特幣(P2SH 地址、交易腳本等)
3)技術(shù)準備
技術(shù)能力則是一項通用能力,是對網(wǎng)絡(luò)編程、內(nèi)存控制、操作系統(tǒng)、編解碼、密碼學、異步編程等開發(fā)功底的一個綜合考核。它是一個日積月累的能力,扎實的技術(shù)背景可以讓我們快速適應(yīng)區(qū)塊鏈底層的開發(fā)。
為此,我列舉了一些比較核心的研發(fā)能力和技術(shù)準備:
· 數(shù)據(jù)結(jié)構(gòu)(二叉樹、trie 樹、數(shù)組、結(jié)構(gòu)體/類 等等)
· 算法(回溯/遞歸、字符串編碼、排序、搜索等等)
· 鎖(原子鎖、互斥鎖/自旋鎖)、死鎖檢測、內(nèi)存泄露檢測
· 多線程編程(共享內(nèi)存、線程/進程/協(xié)程)、用戶態(tài)/內(nèi)核態(tài)
· 同步、異步、阻塞/非阻塞、多路復用 I/O
· 異步編程/響應(yīng)式編程范式、事件驅(qū)動
· 網(wǎng)絡(luò)編程:TCP/IP/UDP 協(xié)議、time_wait 狀態(tài)、socket/select/epoll、C10k 問題等
· 服務(wù)器編程:熟悉 Linux 編程、系統(tǒng)資源(如:cpu/io、disk、usage等)
· HTTP 協(xié)議、RPC 通信、負債均衡等等

二、應(yīng)用層
應(yīng)用層是區(qū)塊鏈最重要的一層,也是區(qū)塊鏈行業(yè)能蓬勃和持續(xù)發(fā)展的力量來源。應(yīng)用層主要涉及的是區(qū)塊鏈產(chǎn)品,我們常見的有比如:數(shù)字錢包(imToken)、分布式交易所(Cosmos、bitshare)、瀏覽器插件(MetaMask)、區(qū)塊鏈游戲(CryptoKitties、FOMO3D)、保險產(chǎn)品等等。
開發(fā)這些應(yīng)用級別的產(chǎn)品,通常是與底層的區(qū)塊鏈系統(tǒng)進行交互,因此并不需要對區(qū)塊鏈底層技術(shù)達到非常專業(yè)的掌握。但需要我們對區(qū)塊鏈的核心概念有了解,以便能與鏈的開發(fā)者在同一語言上進行溝通而不至于誤解。
當然,應(yīng)用層的開發(fā)對技術(shù)的要求也是共同的。它雖然沒有技術(shù)層對技術(shù)能力要求的那么高,但是其更加側(cè)重對創(chuàng)新和落地。
之后,我會通過分析一些常見的區(qū)塊鏈應(yīng)用,來展示思路而不是技術(shù)本身在應(yīng)用層所展現(xiàn)的強大能量和生命力。
作為區(qū)塊鏈行業(yè)中的一員,我深深感受到區(qū)塊鏈技術(shù)對互聯(lián)網(wǎng)世界的重大意義,它不僅帶來的是技術(shù)上的創(chuàng)新,而且對未來的經(jīng)濟關(guān)系、行業(yè)分工都有著巨大的價值潛力。當然現(xiàn)在,區(qū)塊鏈技術(shù)還處在改變世界的早期階段,沒有一個大規(guī)模的應(yīng)用是其一個硬傷。但是我們也看到,各種區(qū)塊鏈創(chuàng)新項目在這波浪潮中如雨后春筍般冒出來,許多頂尖的人才都在致力于解決當前區(qū)塊鏈項目的去中心化、安全性和可擴展性這個所謂的“不可能三角”,甚至已經(jīng)有項目處在領(lǐng)先的位置。所以,我們不僅需要找準自己的目標和方向,更需要夯實技能,爭取成為區(qū)塊鏈領(lǐng)域中有分量的一員。