如何招聘面試區塊鏈以太坊開發人才

image

對優質區塊鏈開發人員的需求很大,這是有充分理由的。區塊鏈和ICO領域在過去幾年中爆炸式增加。愈來愈多的人試圖進入並在該領域中揚名立萬。可是,爲了得到成功,他們擁有一支強大而健全的團隊相當重要。區塊鏈開發人員,更準確地說,以太坊開發人員是該團隊中最關鍵的組成部分。前端

所以,在本指南中,咱們將使你的生活更輕鬆。咱們將向你展現如何精肯定位和從人羣中篩選的優秀的人才。面試

在咱們僱用以太坊開發者以前,重要的是咱們要知道咱們僱用的是哪類人。算法

怎麼樣纔算是一個完美NB的以太坊開發者?編程

在以太坊開發者精湛的技能中,最重要的是要知道將最優秀的與其餘人區分開的基本品質是什麼?優秀的開發人員必須不只僅是具備區塊鏈編碼技能的開發人員。咱們並非說只熟悉編碼就沒有價值,可是,若是你須要一個合適的開發人員來建立一個帝國。那麼,你正在尋找的一些主要品質是什麼?數組

  • 去中心化的堅決信念:這些人認爲去中心化將挽救人類。傳統公司不會僱傭這些人,由於他們相信社會,公司和政府等機構不該該去中心化。網絡

  • 掌握密碼學:區塊鏈開發人員須要掌握加密經濟學。加密經濟學,密碼學和經濟學分爲兩部分。這就是爲何偉大的以太坊開發人員應該對密碼學有一種不懈的好奇心。架構

  • 掌握經濟學:加密經濟學的後半部分是「經濟學」,所以專業開發人員也應該具有經濟和博弈論機制的良好知識。若是你正在建立區塊鏈平臺,則代碼應確保全部參與者都受到經濟激勵。app

  • 極度好奇:爲了擁有如此龐大的知識基礎,這些人天生就很是好奇。這些人大多都是直到深夜還經過視頻,論壇,維基來了解特定問題。編程語言

因此,如今咱們知道咱們正在尋找的那種人。這就是爲何說從頭開始瞭解一些以太坊基礎知識是有道理的。ide

咱們爲何這樣作?

由於每一個以太坊開發者都應該徹底熟悉這些概念。

1

什麼是以太坊?

這是以太坊網站定義的方式:

以太坊是一個區中的平臺,運行智能合約:徹底按照程序方式運行的應用程序,沒有任何停機,審查,欺詐或第三方干擾的可能性。這些應用程序運行在定製的區塊鏈上,這是一個很是強大的共享的全局基礎架構,能夠轉移價值並體現財產的全部權。

但簡單來講,以太坊計劃成爲將來的終極軟件平臺。若是將來是去中心化的,而且dAPP變得司空見慣,那麼以太坊必須成爲它的前沿和中心。

雖然比特幣是區塊鏈技術的第一個應用,但它仍然只是一種貨幣。以太坊帶來了區塊鏈技術可能實現的所有應用範圍。

正如以太坊聯合創始人Gavin Wood博士所說:

比特幣首先是一種貨幣;這是區塊鏈的一個特殊應用。可是,它遠非惟一的應用程序。舉一個相似狀況的過去例子,電子郵件是互聯網的一種特殊用途,而且確定有助於推廣它,但還有不少其餘的應用。

2

以太坊採礦如何工做?

截至目前,以太坊正在使用比特幣正在使用的相同的工做量證實(Proof-of-Work)。然而,以太坊很快計劃轉向權益證實(Proof-of-stake),他們將使用Casper協議來實現這一轉變。

那麼權益證實和工做量證實之間有什麼區別?這其實是你能夠問人們你可能會面試的事情。瞭解工做量證實和權益證實的工做原理絕對相當重要。

**工做量證實:**這是大多數加密貨幣如以太坊和比特幣迄今爲止遵循的協議。這意味着礦工經過使用專用硬件經過「挖礦」來挖掘加密貨幣。

**權益證實:**該協議將使整個挖掘過程成爲虛擬的。在這個系統中,咱們有驗證器而不是礦工。它的工做方式是,做爲一個驗證器,你首先必須把你的一些以太鎖做爲賭注。完成後,你將開始驗證塊,這基本上意味着若是你看到任何你認爲能夠附加到區塊鏈的塊,你能夠經過下注來驗證它。當塊被追加時,你將得到與你投資的比例成比例的獎勵。可是,若是你在錯誤或惡意區塊上下注,你投入的股份將被剝奪。

爲了實現「權益證實」,以太坊將使用Casper一致性算法。一開始,它將是一個混合風格的系統,其中大多數交易仍將是工做量證實,而每100個交易將成爲權益證實。這樣作意味着,它將提供真實世界在以太坊平臺上來測試驗證。但這對於以太坊意味着什麼?這個協議的優勢是什麼?讓咱們來看看:

image

權益證實的優勢

  • 下降總體能源消耗和貨幣成本:世界範圍比特幣礦工每小時花費約50,000美圓用電。那是天天120萬美圓,每個月3600萬美圓,每一年約4.5億美圓!只是把最重要的放在那些數字和浪費的電量上。經過使用「權益證實」,你將使整個過程徹底虛擬化,並切斷全部這些成本。

  • 沒有ASIC優點:因爲整個過程將是虛擬的,所以不依賴於誰擁有更好的設備或ASIC(專用集成電路)。

  • 使51%的攻擊更難:51%的攻擊發生在一羣礦工得到超過世界散射能力的50%時。使用權益證實能夠抵消這種攻擊。

  • 無惡意驗證者:任何將資金鎖定在區塊鏈中的驗證人都會確保他們不會向鏈中添加任何錯誤或惡意的區塊,由於這意味着他們投入的所有股權將被剝奪。

  • 塊建立:更快地建立更新的塊和整個過程。

  • 可伸縮性:經過引入「分片」概念使區塊鏈可擴展(稍後將詳細介紹)。

儘管以前有過各類簡單的權益證實實施,但Casper與其餘方式的區別在於,它激勵了誠實的礦工並懲罰了不誠實的礦工。若是你已經將你的賭注置於惡意區塊上,那麼賭注將被取走。它將懲罰任何不遵照規則的人。

這是Vitalik解釋它的方式:

想象一下,100我的坐在圓桌旁。一我的有一堆文件,每一個文件都有不一樣的交易歷史。第一個參與者拿起一支筆並籤一張,而後將其傳遞給下一個作出相似選擇的人。若是每一個參與者簽署了大多數參與者最終簽署的交易歷史記錄,則每一個參與者只能得到1美圓。若是你在一個頁面上簽名並稍後簽署另外不應籤的一頁,那麼你的房子就會被燒燬。而後他補充說,這多是正確簽署的好動力!

3

什麼是智能合約?

智能合約是自動化合約。它們是自動執行的,而且在其代碼上寫入特定指令,這些指令在特定條件下執行。

image

你能夠在咱們的其餘文章中瞭解有關智能合約的更多信息。

智能合約是以太坊生態系統中的任務完成的方式。當有人想要在以太坊完成特定任務時,他們會與一個或多我的簽定智能合約。

智能合約是一系列指令,使用編程語言solidity編寫,它基於IFTTT邏輯(即IF-THIS-THEN-THAT邏輯)工做。基本上,若是完成了第一組指令,則執行下一個函數,而後執行下一個函數並繼續重複,直到合約結束。

理解這一點的最好方法是想象一臺自動售貨機。你採起的每一個步驟都像下一步執行自身的觸發器。它有點像多米諾骨牌效應。那麼,讓咱們來看看在與自動售貨機交互時你將採起的步驟:

  • 第1步:你給自動售貨機一些錢。

  • 第2步:按下與所需產品對應的按鈕。

  • 第3步:該產品出來,你收起它。

如今看看全部這些步驟並考慮一下。若是前一個步驟沒有執行,其餘任何步驟都還能夠工做嗎?這些步驟中的每一步都與前一步驟直接相關。還有一個要考慮的因素,它是智能合約的一個組成部分。你能夠看到,在與自動售貨機的整個交互過程當中,你(請求者)僅與機器(提供商)合做。絕對沒有第三方參與。

那麼,如今,若是它在以太坊網絡中發生,那麼這筆交易將如何?

假設你剛剛從以太坊網絡中的自動售貨機購買了一些東西,那麼步驟將如何?

  • 第1步:你給自動售貨機一些錢,這由以太坊網絡中的全部節點記錄,而且交易在分類賬中更新。

  • 第2步:按下與你想要的產品對應的按鈕,並在以太坊網絡和分類賬中更新記錄。

  • 第3步:產品出來,你收集它,這將由全部節點和分類賬記錄。

你經過智能合約進行的每筆交易都將由網絡記錄和更新。這樣作是由於它讓每一個參與合約的人都對他們的行爲負責。它經過使整個網絡能夠看到每一個動做來消除人類的惡意。

好的,直到如今咱們已經涵蓋了以太坊是什麼,什麼是採礦,什麼是智能合約。若是你的候選人不能使人滿意地回答這些問題,那就讓他們在那一瞬間離開。已經不值得你再花時間。

4

掌握智能合約代碼

顯然,這應該是全部偉大的開發人員的菜。你能夠確定地瞭解開發人員的專業知識的一種方法是讓他們解釋特定合約的工做原理。在這裏,咱們將向你展現兩個solidity代碼。你能夠經過他們運行此代碼並要求他們將其分解並向你解釋每一個步驟中發生的狀況。

代碼示例1

代碼和解釋來自toptal。

pragma solidity 0.4.18;import "./Vehicle.sol";

contract VehicleOwner {
   address public owner;
   mapping(bytes32 => address) public vehicles;    event NewVehicleAdded(address indexed newVehicle, uint256 timestamp);    function VehicleOwner() public {
       owner = msg.sender;
   }    /**
   * @dev Throws if called by any account other than the owner.
   */
   modifier onlyOwner() {
       require(msg.sender == owner);
       _;
   }    function createNewVehicle(string model, string make, bytes32 vin) public onlyOwner {
       address newVehicle = new Vehicle(model, make, vin);
       vehicles[vin] = newVehicle;
       NewVehicleAdded(newVehicle, now);
   }
}

讓咱們一行一行地瞭解這些代碼都幹了些什麼。

代碼:pragma solidity 0.4.18;

分析:指定使用的編譯器的版本。在這兒是0.4.18

代碼:import「./Vehicle.sol」;*

分析:導入用於表明新車輛的智能合約。

代碼:contract VehicleOwner {

分析:聲明車主合約。

代碼:

address public owner;
mapping(bytes32 => address) public vehicles;

分析:這是咱們充實合約的地方。第一個變量調用全部者owner並表示建立VehicleOwner合約的任何給定實例的以太坊。

第二個稱爲vehicles車輛,將用於存儲車主擁有的車輛清單,經過將其合約地址分配給提供的車輛識別號碼。

代碼:

function VehicleOwner() public {
owner = msg.sender;
}

分析:看看該函數與合約的名稱是什麼?這是由於這個特定的函數是一個構造函數。它惟一的功能是將調用該函數的地址指定爲合約全部者。

代碼:

modifier onlyOwner() {require(msg.sender == owner);_;
}

分析:使用此函數修飾符確保只有合約全部者才能訪問合約。

看到_?這產生了稍後應用修改器modifier的函數體。

代碼:

function createNewVehicle(string model, string make, bytes32 vin) public onlyOwner {
address newVehicle = new Vehicle(model, make, vin);
vehicles[vin] = newVehicle;
NewVehicleAdded(newVehicle, now);
}

分析:這在區塊鏈上建立了一個新合約,這是一種新車輛的表明。車輛合約的構造函數接收三個屬性:model,make和vin,後者可用於識別特定車輛。

建立新合約將返回其新分配的地址。在函數中,使用車輛的映射,咱們將給定的vin綁定到該地址。最後,該函數廣播一個新事件,傳入地址和當前時間戳。

代碼示例2

contract BasicIterator
{
address creator; // reserve one "address"-type spotuint8[10] integers; // reserve a chunk of storage for 10 8-bit unsigned integers in an arrayfunction BasicIterator(){
creator = msg.sender;
uint8 x = 0;//Section 1: Assigning valueswhile(x < integers.length) {
integers[x] = x;  
x++;
} }function getSum() constant returns (uint) {
uint8 sum = 0;
uint8 x = 0;//Section 2: Adding the integers in an array.while(x < integers.length) {
sum = sum + integers[x];
x++;
}return sum;
}// Section 3: Killing the contractfunction kill(){if (msg.sender == creator)
{
suicide(creator);
}
}

}

那麼,讓咱們來分析吧。

第1節:賦值

在第一步中,咱們賦值一個名爲「integers」的數組,該數組接收10個8位無符號整數。咱們這樣作的方式是經過while循環。讓咱們來看看while循環中發生了什麼。

while(x < integers.length) {integers[x] = x;x++;
}

請記住,咱們已經爲整數x賦值「0」。while循環從0變爲integers.length。Integers.length是一個返回數組最大容量的函數。所以,若是咱們肯定一個數組將有10個整數,arrayname.length將返回一個值10。在上面的循環中,x的值從0到9(<10)並將其自身的值賦給整數數組也是如此。所以,在循環結束時,「integers」將具備如下值:

0,1,2,3,4,5,6,7,8,9。

第2節:添加數組內容

在getSum()函數內部,咱們將添加數組自己的內容。它的方式是經過重複上面相同的while循環並使用變量「sum」來添加數組的內容。

第3節:終止合約

此功能終止合約並將合約中的剩餘資金髮回給合約建立者。

所以,這應該可讓你更好地瞭解solidity合約看起來是什麼樣子的以及你應該從那裏得到什麼樣的代碼細分類型。

5 以太和gas有什麼區別?

這是你的開發人員應該熟悉的另外一個核心概念。

以太是生態系統中的主要標記。這是激勵玩家完成智能合約的動力。

gas是知足特定合約所需的燃料量。

當有人提交智能合約時,它具備預先肯定的gas價值。合約執行時,合約的每一步都須要必定量的氣體來執行。

這可能致使兩種狀況:

  • 所需的gas超過設定的極限。若是是這種狀況,則合約狀態將恢復到原始狀態,而且全部氣體都用完了。

  • 所需gas小於設定的極限。若是是這種狀況,那麼合約就完成了,剩餘的gas將交給合約制定者。

如下是顯示Wei的平均gas價格的圖表。

image

gas是以太坊的生命線。

以太坊的全部交易均由礦工驗證。基本上,他們必須手動將每一個交易放入他們爲了驗證交易而挖掘的塊中。爲了換取他們的服務,他們收取了必定的交易費用。

一般,優先考慮高gas費的智能合約,由於礦工有機會在那裏收取更高的費用。與比特幣相比,收取的費用只是象徵性的。

此圖表比較了比特幣與以太坊的交易費用。

image

實際上,正如你所看到的,在0.01以太的這次交易中,僅收取0.00000000000002以太的gas做爲交易費用<$0.000001。

image

因此,正如你所看到的,以太坊的礦工只收取很是象徵性的交易費用。顯然收取交易費是礦工的次要角色,他們的主要工做是......好吧......挖礦!

6

問題和解答

提煉全部這些知識,讓咱們對你能夠提出的一些具體問題。

1.問題:合約構造函數是如何定義的? 解答:構造函數被定義爲一個函數,其名稱與合約徹底相同。

2.問題:在以太坊中記錄的事件在哪裏?它們的目的是什麼? 解答:日誌是合約發出的事件。這些是其交易收據的一部分以及在以太坊虛擬機(EVM)上執行的LOG opcodes操做碼的結果。這些事件主要用於與前端通訊或做爲廉價的數據存儲。由於交易的返回值只是交易的hash,區塊鏈須要一些時間來達成共識並驗證交易,經過將它們挖掘到新塊中。經過發出事件並使前端收聽(觀察)這些事件,實現了有效的通訊。

3.問題:mappings映射是什麼? 解答:映射等同於其餘編程語言中的字典或映射。它就是鍵值存儲。

4.問題:修飾語purpose of modifiers的目的是什麼? 解答:顧名思義,他們修改使用它們的功能。可是,在執行函數以前必須知足修飾符的條件。若是不是,那麼修飾符會拋出錯誤。

5.問題:以太坊庫libraries是什麼? 解答:以太坊庫有助於隔離總體邏輯。它們是一組使用以太坊虛擬機(EVM)在區塊鏈上使用的軟件包。全部庫均可以在智能合約中部署和連接。它們能夠經過DELEGATECALL調用。

6.問題:爲何在智能合約上調用方法須要花錢? 解答:當調用方法時,它們會改變區塊鏈的狀態。因爲操做須要gas,所以須要花錢。

哪裏能夠找到優秀的開發人員?

在像LinkedIn和谷歌這樣的「傳統地方」很難找到優秀的開發者。可是,Reddit,GitHub等是尋找這些開發人員的好地方。

另外,還有一件事。因爲這是一個利基人才市場,你應該對他們可能在你的城市甚至你本身的國家的事實持開放態度。應該爲遠程工做作好準備,特別是若是你正在尋找優秀開發者。

這多是一種痛苦,但這是「質量超過數量」的必須面對的狀況之一。

7

結論

當你面試以太坊開發人員時,你必須記住一件事。他們沒有必要完全回答全部問題。重要的是他們的熱情以及他們是否可以專門回答與他們的工做和角色有關的問題。

不管如何,本指南應該幫助你瞭解特別的區塊鏈開發人員。最後一句忠告,請不要和開發人員的質量妥協。請記住,質量永遠賽過數量。

內容來源:公衆號-區塊鏈兄弟

原文發佈於:博客園 

做者: malii2

課程推薦

image

相關文章
相關標籤/搜索