您好,登錄后才能下訂單哦!
這篇文章主要講解了“以太坊區塊鏈技術面試題有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“以太坊區塊鏈技術面試題有哪些”吧!
問:以太坊的有價通證叫什么?
答:以太(ETH:Ether)
問:Wei和以太有什么區別?
答:Wei是一個面額,像美分到美元或便士到磅。 1 ETH =10^18 Wei
問:以太坊的平均出塊時間是多少?
答:大約14秒
問:以太坊的平均塊大小是多少?
答:大約2KB,實際值取決于具體情況。
問:以太坊是否支持腳本? 如果是這樣,支持什么類型的腳本?
答:是的。 它支持智能合約
問:你如何得到以太?
答:有幾種方法: 1.成為一名礦工
2.用其他貨幣換取
3.使用以太Faucet,例如 https://faucet.metamask.io
4.接受別人的贈送
問:以太從哪里來的?
答:在2014年預售中首次創建了6000萬個。另外,在挖出新塊時也會生成以太。
問:什么是節點?
答:一個節點本質上是一臺連接到網絡的計算機,它負責處理交易。
問:你熟悉多少種以太坊網絡?
答:有三種類型的網絡 - 實時網絡(主),測試網絡(如Ropsten和Rinkeby)和私有網絡。
問:與以太坊網絡交互的方式有哪些?
答:可以使用電子錢包或DApp
問:你可以“隱藏”一個以太坊交易嗎?
答:不可以。所有交易對每個人都是可見的。
問:交易記錄在哪里?
答:在公共賬本上。
問:這些網絡的ID是什么?
答:Live(id = 1),Ropsten(id = 3),Rinkeby(id = 4),Private(由開發人員分配)
問:我可以在Rinkeby測試網絡中挖一些以太,然后轉移到Live網絡嗎?
答:不可以。不能在不同的以太坊網絡之間傳遞以太。
問:為什么需要私有網絡?
答:有很多原因,但主要是為了數據隱私、分布式數據庫、權限控制和測試。
問:你如何輕松查看有關交易和區塊的詳細信息?
答:使用區塊鏈瀏覽器,如etherscan.io或live.ether.camp
問:私有網絡的交易和區塊信息怎么查看呢?
答:可以使用開源瀏覽器客戶端,例如https://github.com/etherparty/explorer
問:區塊鏈的共識是什么?
答:遵循特定協議(如以太坊)驗證交易(創建塊)的過程。
問:區塊鏈中兩種常用的共識模型是什么?
答:工作量證明(POW)和權益證明(POS)。
問:簡單地解釋下工作量證明。
答:它實際上是礦工為了證明自己的工作量并驗證交易而對一個計算密集型問題的求解。
問:以簡單的方式解釋權益證明。
答:區塊的創建者是根據節點所持有的財富和股權隨機選擇的。 它不是計算密集型的。
問:以太坊使用什么共識模式?
答:截至2018年初,它使用工作量證明,但今后將切換到權益證明。
問:怎么挖以太幣?
答:使用錢包或geth客戶端。
問:用什么來對交易進行簽名?
答:用戶的私鑰。
問:丟失私鑰后還能恢復以太坊賬戶嗎?
答:可以,可以使用助記詞組。
問:有哪些方法可以連接到一個以太坊節點?
答:IPC-RPC、JSON-RPC和WS-RPC。
問:那么Geth是什么?
答:Geth是以太坊的客戶端。
問:連接到geth客戶端的默認方式是什么?
答:默認情況下啟用IPC-RPC,其他RPC都被禁用。
問:你知道geth的哪些API?
答:Admin、eth、web3、miner、net、personal、shh、debug和txpool。
問:你可以使用哪些RPC通過網絡連接到geth客戶端?
答:可以使用JSON-RPC和WS-RPC通過網絡連接到geth客戶端。 IPC-RPC只能連接到同一臺機器上的geth客戶端。
問:如果啟動geth時使用了-rpc選項,哪些RPC會被啟用?
答:JSON-RPC。
問:哪些RPC API是默認啟用的?
答:eth、web3和net。
問:如何為JSON RPC啟用Admin API?
答:使用-rpcapi選項。
問:選項-datadir有什么作用?
答:它指定了區塊鏈的存儲位置。
問:什么是geth的“快速”同步,為什么它更快?
答:快速同步會將事務處理回執與區塊一起下載并完整提取最新的狀態數據庫,而不是重新執行所有發生過的交易。
問:選項--testnet是做什么的?
答:它將客戶端連接到Ropsten網絡。
問:啟動geth客戶端會在屏幕上輸出大量文字,應該如何減少輸出信息?
答:可以將--verbosity設置為較低的數字(默認值為3)
問:如何使用IPC-RPC將一個geth客戶端連接到另一個客戶端?
答:首先啟動一個geth客戶端,復制它的管道位置,然后使用同一個datadir啟動另一個geth客戶端并使用--attach 選項傳入管道位置。
問:如何將自定義javascript文件加載到geth控制臺中?
答:通使用--preload選項傳入js文件的路徑。
問:geth客戶端的帳戶存儲在哪里?
答:在keystore目錄中。
問:為了進行交易,需要對賬戶進行什么操作?
答:必須先解鎖該賬戶 - 可以傳入賬戶地址或賬戶序號來解鎖。 也可以使用--password選項傳入一個密碼文件, 其中包含每個賬戶的密碼。
問:你提到了一些有關賬戶序號的內容。 什么因素決定賬戶的序號?
答:添加帳戶的先后順序。
問:是否可以使用geth進行挖礦?
答:可以,使用--mine選項開啟。
問:什么是“etherbase”?
答:這是接收挖礦獎勵的帳戶,它是序號為0的帳戶。
問:什么是智能合約?
答:這是用多種語言編寫的計算機代碼。 智能合約存在于以太坊網絡上,它們根據預定規則執行動作,規則是由 參與者在這些合約中商定的。
問:智能合約可以使用哪些語言編寫?
答:Solidity,這是最常用的語言,也可以使用Serpent和LLL。
問:你能舉出一個智能合約的用例嗎?
答:賣方-買方應用場景:買方在智能合約中存入款項,賣方看到存款并發送貨物,買方收到貨物并 放行付款。
問:什么是Metamask?
答:Metamask是一個可以幫助用戶在瀏覽器中與以太坊網絡進行交互的工具
問:Metamask使用哪個以太坊節點?
答:它使用infura.io
問:Metamask不支持什么?
答:挖礦和合約部署。
問:執行合約是否免費?
答:不,調用合約方法是一個交易,因此需要支付費用。
問:訪問智能合約的狀態是否免費?
答:是的,查詢狀態不是交易。
問:誰執行合同?
答:礦工。
問:為什么調用智能合約的方法需要付費?
答:有些方法不會修改合約的狀態,也沒有其他邏輯,只是返回一個值,這樣的方法是可以免費調用的。 調用那些改變合約狀態的方法則需要付費,因為它們需要gas來執行。
問:為什么需要gas?
答:由于礦工在他們的機器上執行合約代碼,他們需要gas來覆蓋執行合約代碼的成本。
問:是不是gas的價格決定了交易什么時候被處理?
答:即是,也不是。 gas價格越高,交易成功的可能性就越大。 盡管如此,gas價格并不能保證更快的交易處理。
問:交易中的gas使用量取決于什么?
答:這取決于合約所用的存儲量、指令(操作碼)的類型和數量。 每個EVM操作碼都對應一個固定的gas用量。
問:交易費是如何計算的?
答:gas用量*gas價格(由調用方指定gas價格)
問:如果智能合約的執行成本低于調用方指定的gas用量,用戶是否得到退款?
答:是的
問:如果智能合約的執行成本高于指定的gas用量,會發生什么情況?
答:用戶不會得到退款,并且一旦所有的gas用完,執行就會停止,合約也不會改變。
問:誰支付智能合約的調用費用?
答:調用合約的用戶。
問:節點在什么上面運行智能合約代碼?
答:EVM - 以太坊虛擬機。 EVM遵循EVM規范,該規范是以太坊協議的組成部分。 EVM只是節點上的一個進程。
問:為了運行智能合同,EVM需要什么?
答:它需要合約的字節碼,是通過編譯Solidity等更高級別的語言編寫的合約來生成字節碼。
問:粗略的說,EVM有哪些組成部分?
答:內存區域、堆棧和執行引擎。
問:什么是Remix?
答:開發,測試和部署合約的在線工具。 適合快速構建和測試輕量級合約,但不適合更復雜的合約。
問:在Remix中,可以連接哪些節點?
答:可以使用Metamask連接到公共節點、也可以鏈接到使用Geth搭建的本地節點,或者在Javascript VM中模擬的內存節點。
問:什么是DApp,它與App有什么不同?有什么不同?
答:App通常包含一個客戶端,這個客戶端會與一些中心化的資源(由一個組織擁有)進行通信, 通常客戶端通過一個中間層連接到中心化的數據層,如果中心化的數據層中的信息丟失,不能很輕松地恢復。 DApp表示去中心化應用程序。 DApps通過智能合約與區塊鏈網絡進行交互。 DApp使用的數據駐留在合約實例中。 中心化數據可能比去中心化數據更容易受到破壞。
問:DApp的前端是否局限于某些技術或框架?
答:不受限制。可以使用任何技術來開發DApp的前端,比如HTML,CSS,JS,Java,Python...
問:前端用什么庫連接后端(智能合同)?
答:Web3.js庫。
問:在DApp的前端需要哪些東西才能與指定的智能合約進行交互?
答:合約的ABI和字節碼。
問:ABI有什么作用?
答:ABI是合約的公開接口描述對象,被DApps用于調用合約的接口。
問:字節碼有什么作用?
答:節點上的EVM只能執行合約的字節碼。
問:為什么要使用BigNumber庫?
答:因為Javascript不能正確處理大數。
問:為什么需要檢查在Web DApp代碼的開始部分是否設置了web3提供器(Provider)?
答:因為Metamask會注入一個web3對象,它覆蓋其他的web3設置。
問:為什么要使用web3.js版本1.x而不是0.2x.x?
答:主要是因為1.x的異步調用使用Promise而不是回調,Promise目前在javascript世界中 是處理異步調用的首選方案。
問:如何在web3 1.x中列出賬戶?
答:web3.eth.getAccounts
問:.call和.send有什么區別?
答:.send發送交易并支付費用,而.call查詢合約狀態。
問:這樣發送1個以太對嗎:.send({value:1})
?
A:不對,這樣發送的是1 wei。 交易中總是以wei為單位。
問:那么為了發送1個以太,我必須將這個值乘以10^18?
答:可以使用web3.utils.toWei(1,'ether')
。
問:調用.send()
時需要指定什么?
答:必須指定from
字段,即發送賬戶地址。 其他一切都是可選的。
問:web3.eth.sendTransaction()
的唯一功能是將以太發送到特定的地址,這個說法是否正確?
答:不對,也可以用它調用合約方法。
問:你是否知道以太坊的可擴展性解決方案?
答:2層協議。可能的解決方案是狀態通道(state channels
)和Plasma。
問:Solidity是靜態類型的還是動態類型的語言?
答:它是靜態類型語言,這意味著類型在編譯時是已知的。
問:Solidity中與Java“Class”類似的是什么?
答:合約。
問:什么是合約實例?
答:合約實例是區塊鏈上已部署的合約。
問:請說出Java和Solidity之間的一些區別。
答:Solidity支持多重繼承,但不支持重載。
問:你必須在Solidity文件中指定的第一件事是什么?
答:Solidity編譯器的版本,比如指定為^ 0.4.8。 這是必要的,因為這樣可以防止在使用其他版本 的編譯器時引入不兼容性錯誤。
問:合約中包含什么?
答:主要由存儲變量、函數和事件組成。
問:合約中有哪些類型的函數?
答:有構造函數、fallback函數、修改合約狀態的函數和只讀的constant函數。
問:如果我將多個合約定義放入單個Solidity文件中,我會得到什么錯誤?
答:將多個合約定義放入單個Solidity文件是完全正確的。
問:兩個合約之間交互的方式有哪些?
答:一個合約可以調用另一個合約,也可以繼承其他合約。
問:當你嘗試使用部署一個包含多個合約的文件時會發生什么?
答:編譯器只會部署該文件中的最后一個合約,而忽略所有其他合約。
問:如果我有一個大項目,我需要將所有相關的合約保存到一個文件中嗎?
答:不需要。可以使用import語句導入其他合約文件,例如import "./MyOtherContracts.sol";
。
問:我只能導入本地合約文件嗎?
答:還可以使用HTTP協議導入其他合約文件,例如從Github導入:import "http://github.com/owner/repo/path_to_file";
。
問:EVM的內存分成了哪些部分?
答:它分為Storage、Memory和Calldata。
問:請解釋一下Storage。
答:可以把它想象成一個數據庫。 每個合約管理自己的Storage變量。 它是一個鍵-值數據庫(256位鍵值)。 就每次執行使用的gas而言,在Storage上讀取和寫入的成本更高。
問:請解釋一下Memory。
答:這是一個臨時存儲區。 一旦執行結束,數據就會丟失。 可以在Memory上分配像數組和結構這樣復雜的數據類型。
問:請解釋一下Calldata 。
答:可以把calldata視為一個調用堆棧。 它是臨時的、不可修改的,用來存儲EVM的執行數據。
問:哪些變量存儲在Storage,那些變量存儲在Memory?
答:狀態變量和局部變量(它們是對狀態變量的引用)存儲在Storage區域, 函數參數位于Memory區域。
問:看看下面的代碼,并解釋代碼的哪一部分對應于哪個內存區域:
contract MyContract { // part 1 uint count; uint[] totalPoints; function localVars(){ // part 2 uint[] localArr; // part 3 uint[] memory memoryArr; // part 4 uint[] pointer = totalPoints; } }
答: 第1部分 - Storage
第2部分 - Storage
第3部分 - Memory
第4部分 - Storage
問:這樣做對嗎:
function doSomething(uint[] storage args) internal returns(uint[] storage data) {…}
答:可以,可以強制將函數的參數設置為Storage存儲。 在這種情況下,如果沒有傳遞存儲引用,編譯器 會報錯。
原文:以太坊開發面試題及答案
感謝各位的閱讀,以上就是“以太坊區塊鏈技術面試題有哪些”的內容了,經過本文的學習后,相信大家對以太坊區塊鏈技術面試題有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。