前言
前段時間公司一直在搞以太坊祝辣,現(xiàn)階段在做EOS,總結(jié)之前以太坊開發(fā)的相關(guān)知識切油,同時匯總了各方以太坊面試題蝙斜,梳理在此,以備不時之需澎胡,需要的朋友請自取孕荠,哈哈。
智能合約
基本概念滤馍、Solidity開發(fā)語岛琼、去中化 應(yīng)用DApp、web3.js開
發(fā)庫等巢株。
以太坊
問:以太坊的有價通證叫什么槐瑞?
答:以太(ETH:Ether)
問:Wei和以太有什么區(qū)別?
答:Wei是一個面額阁苞,像美分到美元或便士到磅困檩。 1 ETH
=10^18 Wei
問:以太坊的平均出塊時間是多少?
答:約14秒
問:以太坊的平均塊大小是多少那槽?
答:約2KB悼沿,實際值取決于具體情況。
問:以太坊是否支持腳本骚灸? 如果是這樣糟趾,支持什么類型的腳
本?
答:是的甚牲。 它支持智能合約
問:你如何得到以太义郑?
答:有多種法:?
1.成為一名礦工
2.其他貨幣換取
3.使用以太Faucet,例如
4.接受別人的贈送
問:以太從哪里來的丈钙?
答:在2014年預(yù)售中?次創(chuàng)建了6000萬個非驮。另外,在挖出新塊
時也會生成以太雏赦。
問:什么是節(jié)點劫笙?
答:一個節(jié)點本質(zhì)上是?臺連接到?絡(luò)的計算機,它負責(zé)處理交
易星岗。
問:你熟悉多少種以太坊網(wǎng)絡(luò)填大?
答:有三種類型的網(wǎng)絡(luò) - 實時網(wǎng)絡(luò)(主),測試網(wǎng)絡(luò)(如
Ropsten和Rinkeby)和私有網(wǎng)絡(luò)俏橘。
問:與以太坊網(wǎng)絡(luò)交互的幾式有哪些栋盹?
答:可以使用電子錢包或DApp
問:你可以“隱藏”一個以太坊交易嗎?
答:不可以。所有交易對每個人都是可見的例获。
問:交易記錄在哪里汉额?
答:在公共賬本上。
問:這些網(wǎng)絡(luò)的ID是什么榨汤?
答:Live(id = 1)蠕搜,Ropsten(id = 3),Rinkeby(id =
4)收壕,Private(由開發(fā)人員分配)
問:我可以在Rinkeby測試?絡(luò)中挖?些以太妓灌,然后轉(zhuǎn)移到Live
網(wǎng)絡(luò)嗎?
答:不可以蜜宪。不能在不同的以太坊?絡(luò)之間傳遞以太虫埂。
問:為什么需要私有網(wǎng)絡(luò)?
答:有很多原因圃验,但主要是為了數(shù)據(jù)隱私掉伏、分布式數(shù)據(jù)庫、權(quán)限
控制和測試澳窑。
問:簡單地解釋下工作量證明斧散。
答:它實際上是礦工為了證明自己的工作量并驗證交易而對一個
計算密集型問題的求解。
問:以簡單的方式解釋權(quán)益證明摊聋。
答:區(qū)塊的創(chuàng)建者是根據(jù)節(jié)點所持有的財富和股權(quán)隨機選擇的鸡捐。
它不是計算密集型的。
問:以太坊使用什么共識模式麻裁?
答:截止2018年初箍镜,它使用工作量證明,但今后將切換到權(quán)益
證明煎源。
問:用什么來對交易進行簽名鹿寨?
答:用戶的私鑰。
問:丟失私鑰后還能恢復(fù)以太坊賬戶嗎薪夕?
答:可以,可以使用助記詞組赫悄。
以太坊節(jié)點軟件(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详拙。
問:選項-datadir有什么作用?
答:它指定了區(qū)塊鏈的存儲位置蔓同。
問:什么是geth的“快速”同步饶辙,為什么它更快?
答:快速同步會將事務(wù)處理回執(zhí)與區(qū)塊一起下載并完整提取最新
的狀態(tài)數(shù)據(jù)庫斑粱,而不是重新執(zhí)?所有發(fā)生過的交易弃揽。
問:選項--testnet是做什么的?
答:它將客戶端連接到Ropsten網(wǎng)絡(luò)珊佣。
問:啟動geth客戶端會在屏幕上輸出大量文字蹋宦,應(yīng)該如何減少輸
出信息?
答:可以將--verbosity設(shè)置為較低的數(shù)字(默認值為3)
問:如何將自定義javascript文件加載到geth控制臺中咒锻?
答:通使用--preload選項傳入js文件的路徑冷冗。
問:geth客戶端的帳戶存儲在哪里?
答:在keystore目錄中惑艇。
問:為了進行交易蒿辙,需要對賬戶進行什么操作?
答:必須先解鎖該賬戶 - 可以傳入賬戶地址或賬戶序號來解
鎖滨巴。 也可以使用--password選項傳入一個密碼文件思灌, 其中包
含每個賬戶的密碼。
問:你提到了一些有關(guān)賬戶序號的內(nèi)容恭取。 什么因素決定賬戶的
序號泰偿?
答:添加帳戶的先后順序。
智能合約和Solidity
問:什么是智能合約蜈垮?
答:這是用多種語言編寫的計算機代碼耗跛。 智能合約存在于以太
坊網(wǎng)絡(luò)上,它們根據(jù)預(yù)定規(guī)則執(zhí)行動作攒发,規(guī)則是由 參與者在這
些合約中商定的调塌。
問:智能合約可以使用哪些語言編寫?
答:Solidity惠猿,這是最常用的語言羔砾,也可以使用Serpent和LLL。
問:什么是Metamask?
答:Metamask是可以幫助用戶在瀏覽器中與以太坊網(wǎng)絡(luò)進
行交互的工具
問:Metamask使用哪個以太坊節(jié)點姜凄?
答:它使用infura.io
問:訪問智能合約的狀態(tài)是否免費政溃?
答:是的,查詢狀態(tài)不是交易檀葛。
問:為什么需要gas玩祟?
答:由于礦工在他們的機器上執(zhí)行合約代碼,他們需要gas來覆
蓋執(zhí)行合約代碼的成本屿聋。
問:是不是gas的價格決定了交易什么時候被處理空扎?
答:即是,也不是润讥。 gas價格越高转锈,交易成功的可能性就越大。
盡管如此楚殿,gas價格并不能保證更快的交易處理撮慨。
問:交易中的gas使用量取決于什么?
答:這取決于合約所用的存儲量脆粥、指令(操作碼)的類型和數(shù)
量砌溺。 每個EVM操作碼都對應(yīng)?個固定的gas工量。
問:交易費是如何計算的变隔?
答:gas用量*gas價格(由調(diào)用方指定gas價格)
問:如果智能合約的執(zhí)行成本低于調(diào)于方指定的gas用量规伐,用戶
是否得到退款?
答:是的
問:如果智能合約的執(zhí)行成本高于指定的gas用量匣缘,會發(fā)生什么
情況猖闪?
答:用戶不會得到退款,并且一旦所有的gas用完肌厨,執(zhí)行就會停止培慌,合約也不會改變。
問:粗略的說柑爸,EVM有哪些組成部分吵护?
答:內(nèi)存區(qū)域、堆棧和執(zhí)行引擎表鳍。
問:什么是Remix馅而?
答:開發(fā),測試和部署合約的在線?具进胯。 適合快速構(gòu)建和測試
輕量級合約,但不適合更復(fù)雜的合約原押。
問:在Remix中胁镐,可以連接哪些節(jié)點?
答:可以使用Metamask連接到公共節(jié)點、也可以鏈接到使用
Geth搭建的本地節(jié)點盯漂,或者在Javascript VM中模擬的內(nèi)存節(jié)
點颇玷。
問:什么是DApp,它與App有什么不同就缆?有什么不同帖渠?
答:App通常包含一個客戶端,這個客戶端會與一些中心化的資
源(由一個組織擁有)進行通信竭宰, 通晨战迹客戶端通過一個中間層
連接到中心化的數(shù)據(jù)層,如果中心化的數(shù)據(jù)層中的信息丟失切揭,不
能很輕松地恢復(fù)狞甚。 DApp表示去中心化應(yīng)用程序。 DApps通過
智能合約與區(qū)塊鏈?絡(luò)進行交互廓旬。 DApp使用的數(shù)據(jù)駐留在合約
實例中哼审。 中心化數(shù)據(jù)可能比去中心化數(shù)據(jù)更容易受到破壞。
DApps和web3
問:DApp的前端是否局限于某些技術(shù)或框架孕豹?
答:不受限制涩盾。可以使?任何技術(shù)來開發(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ù)嗽上。
問:.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')棚赔。