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