背景
區(qū)塊鏈面試是一個挺新的話題骏令,主要得益于區(qū)塊鏈行業(yè) 2018 年成為風(fēng)口行業(yè)耳标,不僅曝光度激增而且人才市場火爆趋惨,而我在年后也是接觸了許多來參加面試的候選人,大部分是沒有區(qū)塊鏈從業(yè)經(jīng)驗的榜轿,為此我當(dāng)時寫了一篇《尋找適合戀愛的區(qū)塊鏈工程師》,從面試官的角度來講了如何尋找一個合格的候選人朵锣。
從經(jīng)歷來看谬盐,這個行業(yè)非常之新興,并且人才也相當(dāng)匱乏诚些。作為我針對面試寫的第二篇文章飞傀,我決定從一個從技術(shù)的角度來詳盡闡述要成為一個區(qū)塊鏈專家所必備的技術(shù)。
前言
說到技術(shù)诬烹,我所指的主要還是研發(fā)砸烦。由于我負(fù)責(zé)的是技術(shù)崗,因此我對于技術(shù)上要求會比較嚴(yán)格(嚴(yán)格并不等于高)绞吁,簡單來說就是幢痘,基礎(chǔ)知識需要十分扎實。許多過來參加區(qū)塊鏈工程師面試的同學(xué)家破,大部分人給我的印象是颜说,看過一點介紹區(qū)塊鏈知識的書籍,問一點淺顯的知識是能夠答得上來汰聋,但是稍微具體一點的门粪,就會變得含糊不清了。在我看來烹困,區(qū)塊鏈所要求的知識并非什么特殊的或者新興的知識玄妈,除了密碼學(xué)領(lǐng)域的知識需要專門了解之外,其他知識和技能幾乎都是一些比較通用的網(wǎng)絡(luò)開發(fā)核心知識韭邓,如果是從事網(wǎng)絡(luò)服務(wù)端相關(guān)開發(fā)的措近,可能會對這部分知識比較熟悉。
由于區(qū)塊鏈整個行業(yè)涉及到的范圍非常廣泛女淑,下到各種基礎(chǔ)設(shè)施瞭郑,上到各種上層應(yīng)用,它們對技能的要求范圍是不一樣的鸭你。根據(jù)我的經(jīng)驗屈张,大致把區(qū)塊鏈開發(fā)分為兩個大的部分:技術(shù)層和應(yīng)用層擒权,以便候選人根據(jù)自己以往的專業(yè)技能背景選擇自己合適的領(lǐng)域。
一阁谆、核心層
核心層是區(qū)塊鏈最下面的一層碳抄,這一層是底層技術(shù)與基礎(chǔ)設(shè)施的開發(fā)。我們可以把這一層比作操作系統(tǒng)的內(nèi)核场绿,而應(yīng)用層則是在操作系統(tǒng)之上構(gòu)建各種軟件剖效。比如我們最常見的比特幣網(wǎng)絡(luò),它的核心技術(shù)就來源于它的共識機制(POW)焰盗,當(dāng)然璧尸,對于大部分鏈來說,共識的原理都是其最核心的部件熬拒。要構(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)
關(guān)于這部分內(nèi)容詳細(xì)介紹崇堵,可以參見我的系列文章之《區(qū)塊鏈核心技術(shù):分布式理論》。
2)專業(yè)經(jīng)驗
專業(yè)經(jīng)驗則是指對目前最主流的區(qū)塊鏈項目的掌握程度客燕,比如 Bitcoin鸳劳,Ethereum 等,了解賬戶模型也搓,智能合約等等赏廓,而且涵紊,不僅是它們的運行原理,而且能在它們的基礎(chǔ)上持續(xù)改進(jìn)幔摸、開拓以及創(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)知識
- 密碼學(xué)(公鑰/私鑰任斋,ECDSA,RSA耻涛,哈希算法)废酷,簽名,多重簽名抹缕,盲簽名等等
- 以太坊協(xié)議 ERC20 ERC721 ERC223 ERC875
- 比特幣(P2SH 地址澈蟆,交易腳本等)
這部分內(nèi)容可以詳見我的系列文章之《區(qū)塊鏈核心技術(shù):專業(yè)經(jīng)驗》。
3)技術(shù)準(zhǔn)備
最后卓研,技術(shù)能力則是一項通用能力趴俘,是網(wǎng)絡(luò)編程,內(nèi)存控制奏赘,操作系統(tǒng)寥闪,編解碼,密碼學(xué)磨淌,異步編程等等開發(fā)功底的一個綜合考核疲憋。它是一個日積月累的能力,扎實的技術(shù)背景可以讓我們快速適應(yīng)區(qū)塊鏈底層的開發(fā)伦糯。
為此柜某,我列舉了一些比較核心的研發(fā)能力和技術(shù)準(zhǔn)備:
- 數(shù)據(jù)結(jié)構(gòu)(二叉樹嗽元,trie 樹,數(shù)組喂击,結(jié)構(gòu)體/類 等等)
- 算法(回溯/遞歸剂癌,字符串編碼,排序翰绊,搜索等等)
- 鎖(原子鎖佩谷,互斥鎖/自旋鎖),死鎖檢測监嗜,內(nèi)存泄露檢測
- 多線程編程(共享內(nèi)存谐檀,線程/進(jìn)程/協(xié)程),用戶態(tài)/內(nèi)核態(tài)
- 同步裁奇、異步桐猬,阻塞/非阻塞,多路復(fù)用 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 通信,負(fù)債均衡等等
這部分內(nèi)容可以想見我的系列文章之《區(qū)塊鏈核心技術(shù):技術(shù)準(zhǔn)備》躺涝。
2厨钻、應(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)進(jìn)行交互蜈敢,因此辜荠,并不需要我們對區(qū)塊鏈底層技術(shù)達(dá)到非常專業(yè)的掌握。但是需要我們對區(qū)塊鏈的核心概念有了解抓狭,以便我們能與鏈的開發(fā)者能在同一語言上進(jìn)行溝通而不至于誤解伯病。
當(dāng)然,應(yīng)用層的開發(fā)對技術(shù)的要求也是共同的,它雖然沒有核心層對技術(shù)能力要求的那么高午笛,但是其更加側(cè)重對創(chuàng)新和落地
我會通過分析幾個典型區(qū)塊鏈應(yīng)用惭蟋,來展示思路而不是技術(shù)本身在應(yīng)用層所展現(xiàn)的強大能量和生命力。
這部分內(nèi)容可以詳見我的系列文章值《區(qū)塊鏈核心技術(shù):編寫應(yīng)用》