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

區塊鏈社群HiBlock發表於2018-11-25

image

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

因此,在本指南中,我們將使你的生活更輕鬆。我們將向你展示如何精確定位和從人群中篩選的優秀的人才。

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

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

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

  • 去中心化的堅定信念:這些人認為去中心化將挽救人類。傳統公司不會僱傭這些人,因為他們相信社會,公司和政府等機構不應該去中心化。

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

  • 掌握經濟學:加密經濟學的後半部分是“經濟學”,因此專業開發人員也應該具備經濟和博弈論機制的良好知識。如果你正在建立區塊鏈平臺,則程式碼應確保所有參與者都受到經濟激勵。

  • 極度好奇:為了擁有如此龐大的知識基礎,這些人天生就非常好奇。這些人大多都是直到深夜還通過視訊,論壇,維基來了解特定問題。

所以,現在我們知道我們正在尋找的那種人。這就是為什麼說從頭開始瞭解一些以太坊基礎知識是有道理的。

我們為什麼這樣做?

因為每個以太坊開發者都應該完全熟悉這些概念。

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

相關文章