區塊鏈兄弟社區,區塊鏈技術專業問答先行者,中國區塊鏈技術愛好者聚集地
作者:Vitanov
來源:Medium
原文連結:https://medium.com/@i6mi6/the-ultimate-collection-of-ethereum-solidity-and-smart-contracts-interview-questions-ef610d250012
著權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
本文約5400字+,閱讀(觀看)需要31分鐘
問:以太坊的價值標誌是什麼?
答:(ETH)
問:魏和ETH有什麼區別?
答:魏是一個面額,像美分到美元或便士到磅。1 ETH =10魏
問:以太坊的平均阻擋時間是多少?
答:14秒
問:以太坊的平均街區大小是多少?
答:大約2KB。
問:以太坊是否支持腳本?如果是這樣,什麼類型的腳本?
答:是的。它支持智能合同
問:你如何得到ETH?
答:有幾種方法:
1.成為礦工
2.交易其他貨幣
3.乙太網水龍頭,如https://faucet.metamask.io
4.從他人那裡接收Ethers
問:ETH從哪裡來?
答:在2014年預售中首次創建了6000萬個。另外,在開採塊時創建了ETH。
問:什麼是節點?
答:一個節點本質上是一臺連接到網絡的計算機,它處理事務。
問:你熟悉多少個以太坊網絡?
答:有三種類型的網絡 - 實時網絡(主),測試網絡(如Ropsten和Rinkeby)和專用網絡。
問:什麼是與網絡互動的一些方式?
答:您可以使用電子錢包或DApp
問:你可以「隱藏」一項交易嗎?
答:不可以。所有交易對每個人都是可見的。
問:交易記錄在哪裡?
答:在公共帳本上。
問:這些網絡的ID是什麼?
答:Live(id = 1),Ropsten(id = 3),Rinkeby(id = 4),Private(由開發人員分配)
問:所以我可以在林克比中挖掘一些Ethers並將它們轉移到Live網絡,對吧?
答:不,你不能在網絡之間傳輸乙太網。
問:你為什麼要有私人網絡?
答:有很多原因,但主要是因為數據隱私,分布式資料庫,權限控制和測試。
問:您如何輕鬆查看有關交易和區塊的詳細信息?
答:使用像etherscan.io或live.ether.camp這樣的區塊鏈探索器
問:私有網絡怎麼樣?
答:您可以使用開源瀏覽器客戶端(如https://github.com/etherparty/explorer)
問:區塊鏈的共識是什麼?
答:遵循特定協議(如以太坊)驗證交易(創建塊)的過程。
問:區塊鏈中兩種常用的共識模型是什麼?
答:工作證明和利益證明。
問:以簡單的方式解釋工作證明。
答:這實際上是礦工為了生成工作證明和驗證交易而必須解決的難題。
問:以簡單的方式解釋股權證明。
答:該塊的創建者是通過財富和年齡(股份)隨機選擇的。它不是計算密集型的。
問:以太坊使用什麼共識模式?
答:截至2018年初,它使用工作證明,但它將切換到股權證明。
問:你怎麼能用Ethers?
答:使用錢包或geth cli
問:什麼是用來籤署交易?
答:用戶的私鑰。
問:丟失私鑰後你能恢復你的以太坊帳戶嗎?
答:可以,你可以用你的12字助記符。
問:有哪些方法可以連接到節點?
答:IPC-RPC,JSON-RPC和WS-RPC。
問:那麼Geth是什麼?
答:Geth是以太坊cli客戶端。
問:連接到geth客戶端的默認方式是什麼?
答:默認情況下啟用IPC-RPC,每個其他RPC都被禁用。
問:你知道什麼geth API?
答:Admin,eth,web3,礦工,網絡,個人,調試和txpool。
問:您可以使用哪些RPC通過網絡連接到geth客戶端?
答:您可以使用JSON-RPC和WS-RPC通過網絡連接到geth客戶端。IPC-RPC只能連接到同一臺機器上的geth客戶端。
問:如果你通過選項 - rpc哪些RPC被啟用?
答:JSON-RPC。
問:哪些RPC API默認啟用?
答:eth,web3和net。
問:如何為JSON RPC啟用管理API?
答:通過使用選項 - rpcapi
問:選項 - datadir有什麼作用?
答:它指定了區塊鏈的存儲位置。
問:什麼是geth的「快速」同步,為什麼它更快?
答:與其一次處理整個區塊鏈一個連結並重播所有發生的事務,快速同步會將事務處理回執與區塊一起下載並提取整個最近的狀態資料庫。
問:測試網是做什麼的?
答:它將客戶端連接到Ropsten網絡。
問:啟動geth客戶端會在屏幕上轉儲大量輸出。你會如何減少噪音?
答:通過將詳細程度設置為較低的數字(默認值為3)
問:如何使用IPC-RPC將一個geth客戶端連接到另一個客戶端?
答:首先啟動一個geth客戶端,複製它的管道位置,然後使用同一個datadir啟動另一個geth客戶端並傳遞 - 附加到管道位置。
問:如何將自定義javascript文件加載到geth控制臺中?
答:通過傳遞 - 預加載和文件的路徑。
問:geth客戶帳戶存儲在哪裡?
答:在密鑰庫目錄中。
問:為了進行交易,您與帳戶有什麼關係?
答:您必須解鎖該帳戶 - 通過傳遞帳戶地址或索引解鎖。您也可以指定一個 - 密碼文件,其中所有密碼都駐留在每個帳戶中。
問:你提到了一些有關索引的內容。什麼決定了帳戶指數?
答:您添加帳戶的順序。
問:是否可以使用geth挖掘?
答:是的,通過 - 我的選擇。
問:什麼是「etherbase」?
答:這是接收採礦獎勵的帳戶,它是索引0的帳戶。
問:那麼什麼是智能合約?
答:這是用多種語言編寫的計算機代碼。智能合約存在於網絡上。他們執行規則並執行行動,由參與者在這些合同中進行談判。
問:智能合約可以寫入哪些語言?
答:Solidity,這是最常用的語言,Serpent和Lisp Like Language
問:智能合同用例的例子?
答:賣方 - 買方的場景,買方在智能合約中存入資金,賣方看到存款並發送貨物,買方收到貨物並放行付款。
問:什麼是Metamask?
答:Metamask是一款可以幫助您輕鬆在瀏覽器中與以太坊網絡進行互動的工具
問:Metamask使用哪個節點?
答:它使用infura.io
問:Metamask不支持什麼?
答:採礦和合同部署。
問:執行合同是否免費?
答:不,調用合約方法是一個交易。
問:訪問智能合同狀態是否免費?
答:是的,查詢狀態不是交易。
問:誰執行合同?
答:礦工。
問:為什麼在智能合約上調用方法會花費金錢?
答:一些方法不會修改合約的狀態,也沒有其他邏輯,除了返回一個值以外,都是免費的。
除了將ETH作為付款之外,調用改變國家花費的方法也是因為它們需要gas來執行。
問:更確切地說為什麼會有氣體?
答:由於礦工在他們的機器上執行合同代碼,他們必須通過執行調用者請求的代碼來承擔他們的成本。
問:交易處理時,gas價格是否確定?
答:是,不是。gas價格越高,交易開採的可能性就越大。儘管如此,天然氣價格並不能保證更快的交易處理。
問:交易中的gas使用量取決於什麼?
答:這取決於存儲量,指令的類型和數量(可選代碼)。每個EVM可選代碼都有一個固定數量的氣體。
問:交易費是如何計算的?
答:使用的氣體*gas價格(由主叫方指定)
問:如果智能合同的執行成本低於指定的gas,用戶是否得到退款?
答:是的
問:如果智能合同的執行成本高於指定的天然氣,會發生什麼情況?
答:用戶沒有得到退款,並且一旦所有的氣體用完並且合同沒有改變,執行就會停止。
問:誰支付智能合同調用?
答:調用合同的用戶。
問:節點運行智能合同代碼的是什麼?
答:EVM - 以太坊虛擬機。EVM遵循作為以太坊協議一部分的EVM規範。EVM只是節點上的一個進程。
問:為了運行智能合同,EVM需要什麼?
答:它需要合約的字節碼,它是通過編譯Solidity等更高級別的語言生成的。
問:更高級別的EVM部分有哪些?
答:內存區域,堆棧和執行引擎。
問:什麼是混音?
答:開發,測試和部署合同的在線工具。快速構建和測試輕量級合同非常好,但不適合更複雜的合同。
問:在混音中,您可以連接哪些節點?
答:您可以使用Metamask,使用Geth中的本地節點以及Javascript VM中的模擬內存節點連接到公共節點。
問:什麼是DApp,為什麼它與普通應用程式不同?
答:應用程式通常由一個客戶端與一些集中資源(由一個組織擁有)通信組成。
有一個中間層連接到一個集中的數據層。如果集中數據層中的信息丟失,則無法恢復(輕鬆)。
DApp表示分散式應用程式。DApps通過智能合同與網絡進行交互。他們使用的數據駐留在合同實例中。
集中式數據可能比分散式更容易受到損害。
問:DApp的前端是否局限於任何技術/框架?
答:不可以。你可以使用任何你想要的東西,比如HTML,CSS,JS,Java,Python,這個名單還在繼續。
問:前端用於連接後端(智能合同)的是什麼?
答:Web3 API庫。
問:為了與來自DApp的合同進行交互,您需要什麼?
答:合同的ABI和字節碼。
問:ABI用於什麼?
答:ABI是DApps用於調用合同的合同的公共接口的描述。
問:什麼是字節碼?
答:每個節點上的EVM需要字節碼才能執行合同代碼。
問:為什麼要使用BigNumber庫?
答:因為Javascript不能正確處理大數字。
問:為什麼有必要始終檢查web3提供程序是否設置在Web DApp代碼的開頭?
答:因為Metamask注入它並用自己的覆蓋其他web3。
問:為什麼要使用版本web3 js 1.x而不是0.2xx?
答:主要是因為它的異步調用使用承諾而不是回調,這在javascript世界中是首選。
問:如何在web3 1.x中列出帳戶?
答:web3.eth.getAccounts。
問:.call和.send有什麼區別?
答:.send發送交易並支付費用,而.call查詢合同狀態。
問:發送一個這樣的以太「.send({value:1})」好嗎?
答:不,你派1個。交易總是與wei一起工作。
問:所以為了發送1個乙醚,我必須將這個值減10?
答:您可以使用util方法web3.utils.toWei(1,'ether')
問:調用「.send()」時需要指定什麼?
答:您必須指定「發件人」是發件人地址。其他一切都是可選的。
問:web3.eth.sendTransaction()的唯一功能是將ethers發送到特定的地址,這是否正確?
答:不,您也可以調用合約方法。
問:您是否知道以太坊的可擴展性解決方案?
答:2層協議。可能的解決方案是狀態通道和血漿。
問:Solidity是靜態的還是動態的?
答:它是靜態類型的,這意味著類型在編譯時已知。
問:與Solidity中的Java「Class」相當的功能是什麼?
答:這是合同。
問:什麼是合同實例?
答:合同的一個實例是區塊鏈上已部署的合同。
問:給我一些Java和Solidity之間的區別。
答:Solidity支持多重繼承,但不支持重載。
問:你必須在Solidity文件中首先指定什麼?
答:Solidity編譯器的版本,指定為^ 0.4.8。這是必要的,因為它可以防止在與其他版本編譯時引入的不兼容性錯誤。
問:合同包含什麼?
答:它主要由存儲變量,函數和事件組成。
問:那裡有哪些類型的功能?
答:有一個構造函數,回退函數,修改合同狀態的常量函數和函數。
問:如果我將多個合約定義放入單個Solidity文件中,我會得到什麼錯誤?
答:將多個合約定義放入單個Solidity文件是完全正確的。
問:兩種合同可以進行交互的方式有哪些?
答:合同可以調用,創建和繼承其他合同。
問:當您嘗試使用多個合同部署文件時會發生什麼?
答:編譯器只會部署該文件中的最後一個合同,而所有其他合同都將被忽略。
問:如果我有一個龐大的項目,我需要將所有相關合同保存到一個文件中嗎?
答:您可以使用導入語句導入文件,
導入「./MyOtherContracts.sol」;
問:我只能導入本地文件嗎?
答:您還可以使用HTTP(甚至可以從Github)導入文件,
導入「 http://github.com/ <owner> / <回購> / <文件路徑>」
問:EVM的內存分成了哪些部分?
答:它分為存儲,內存和Calldata
問:解釋存儲
答:將其視為資料庫。每個合同管理自己的存儲變量。它是一個鍵值數據存儲(256位鍵值)。就每次執行使用的氣體而言,讀取和寫入成本更高。
問:解釋記憶
答:這是一個臨時存儲。一旦執行結束,數據就會丟失。您可以像數組和結構一樣分配複雜的數據類型。
問:解釋卡爾達塔
答:它可以被認為是一個調用堆棧。它是臨時的,不可修改的,它存儲EVM執行數據。
問:哪些變量分別存儲在存儲區和內存區?
答:狀態變量和局部變量(它們是對狀態變量的引用)存儲在存儲器中。函數參數位於內存區域中。
問:看看下面的代碼,並解釋代碼的哪一部分對應於哪個內存區域:
合同MyContract {
//第1部分
uint count;
uint [] totalPoints;
函數localVars(){
//第2部分
uint [] localArr;
//第3部分
uint [] memory memoryArr;
// part 4
uint [] pointer = totalPoints;
}
}
答:
第1部分 - 存儲。
第2部分 - 存儲(陣列大小指向相同的位置counter)
第3部分 - 內存。
第4部分 - 參考存儲。
文章發布只為分享區塊鏈技術內容,版權歸原作者所有,觀點僅代表作者本人,絕不代表區塊鏈兄弟贊同其觀點或證實其描述。