前言
前段时间公司一直在搞以太坊,现阶段在做EOS,总结之前以太坊开发的相关知识,同时汇总了各方以太坊面试题,梳理在此,以备不时之需,需要的朋友请自取,哈哈。
智能合约
基本概念、Solidity开发语、去中化 应用DApp、web3.js开
发库等。
以太坊
问:以太坊的有价通证叫什么?
答:以太(ETH:Ether)
问:Wei和以太有什么区别?
答:Wei是一个面额,像美分到美元或便士到磅。 1 ETH
=10^18 Wei
问:以太坊的平均出块时间是多少?
答:约14秒
问:以太坊的平均块大小是多少?
答:约2KB,实际值取决于具体情况。
问:以太坊是否支持脚本? 如果是这样,支持什么类型的脚
本?
答:是的。 它支持智能合约
问:你如何得到以太?
答:有多种法:
1.成为一名矿工
2.其他货币换取
3.使用以太Faucet,例如
4.接受别人的赠送
问:以太从哪里来的?
答:在2014年预售中⾸次创建了6000万个。另外,在挖出新块
时也会生成以太。
问:什么是节点?
答:一个节点本质上是⼀台连接到⽹络的计算机,它负责处理交
易。
问:你熟悉多少种以太坊网络?
答:有三种类型的网络 - 实时网络(主),测试网络(如
Ropsten和Rinkeby)和私有网络。
问:与以太坊网络交互的几式有哪些?
答:可以使用电子钱包或DApp
问:你可以“隐藏”一个以太坊交易吗?
答:不可以。所有交易对每个人都是可见的。
问:交易记录在哪里?
答:在公共账本上。
问:这些网络的ID是什么?
答:Live(id = 1),Ropsten(id = 3),Rinkeby(id =
4),Private(由开发人员分配)
问:我可以在Rinkeby测试⽹络中挖⼀些以太,然后转移到Live
网络吗?
答:不可以。不能在不同的以太坊⽹络之间传递以太。
问:为什么需要私有网络?
答:有很多原因,但主要是为了数据隐私、分布式数据库、权限
控制和测试。
问:简单地解释下工作量证明。
答:它实际上是矿工为了证明自己的工作量并验证交易而对一个
计算密集型问题的求解。
问:以简单的方式解释权益证明。
答:区块的创建者是根据节点所持有的财富和股权随机选择的。
它不是计算密集型的。
问:以太坊使用什么共识模式?
答:截止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。
问:选项-datadir有什么作用?
答:它指定了区块链的存储位置。
问:什么是geth的“快速”同步,为什么它更快?
答:快速同步会将事务处理回执与区块一起下载并完整提取最新
的状态数据库,而不是重新执⾏所有发生过的交易。
问:选项--testnet是做什么的?
答:它将客户端连接到Ropsten网络。
问:启动geth客户端会在屏幕上输出大量文字,应该如何减少输
出信息?
答:可以将--verbosity设置为较低的数字(默认值为3)
问:如何将自定义javascript文件加载到geth控制台中?
答:通使用--preload选项传入js文件的路径。
问:geth客户端的帐户存储在哪里?
答:在keystore目录中。
问:为了进行交易,需要对账户进行什么操作?
答:必须先解锁该账户 - 可以传入账户地址或账户序号来解
锁。 也可以使用--password选项传入一个密码文件, 其中包
含每个账户的密码。
问:你提到了一些有关账户序号的内容。 什么因素决定账户的
序号?
答:添加帐户的先后顺序。
智能合约和Solidity
问:什么是智能合约?
答:这是用多种语言编写的计算机代码。 智能合约存在于以太
坊网络上,它们根据预定规则执行动作,规则是由 参与者在这
些合约中商定的。
问:智能合约可以使用哪些语言编写?
答:Solidity,这是最常用的语言,也可以使用Serpent和LLL。
问:什么是Metamask?
答:Metamask是可以帮助用户在浏览器中与以太坊网络进
行交互的工具
问:Metamask使用哪个以太坊节点?
答:它使用infura.io
问:访问智能合约的状态是否免费?
答:是的,查询状态不是交易。
问:为什么需要gas?
答:由于矿工在他们的机器上执行合约代码,他们需要gas来覆
盖执行合约代码的成本。
问:是不是gas的价格决定了交易什么时候被处理?
答:即是,也不是。 gas价格越高,交易成功的可能性就越大。
尽管如此,gas价格并不能保证更快的交易处理。
问:交易中的gas使用量取决于什么?
答:这取决于合约所用的存储量、指令(操作码)的类型和数
量。 每个EVM操作码都对应⼀个固定的gas工量。
问:交易费是如何计算的?
答:gas用量*gas价格(由调用方指定gas价格)
问:如果智能合约的执行成本低于调于方指定的gas用量,用户
是否得到退款?
答:是的
问:如果智能合约的执行成本高于指定的gas用量,会发生什么
情况?
答:用户不会得到退款,并且一旦所有的gas用完,执行就会停止,合约也不会改变。
问:粗略的说,EVM有哪些组成部分?
答:内存区域、堆栈和执行引擎。
问:什么是Remix?
答:开发,测试和部署合约的在线⼯具。 适合快速构建和测试
轻量级合约,但不适合更复杂的合约。
问:在Remix中,可以连接哪些节点?
答:可以使用Metamask连接到公共节点、也可以链接到使用
Geth搭建的本地节点,或者在Javascript VM中模拟的内存节
点。
问:什么是DApp,它与App有什么不同?有什么不同?
答:App通常包含一个客户端,这个客户端会与一些中心化的资
源(由一个组织拥有)进行通信, 通常客户端通过一个中间层
连接到中心化的数据层,如果中心化的数据层中的信息丢失,不
能很轻松地恢复。 DApp表示去中心化应用程序。 DApps通过
智能合约与区块链⽹络进行交互。 DApp使用的数据驻留在合约
实例中。 中心化数据可能比去中心化数据更容易受到破坏。
DApps和web3
问:DApp的前端是否局限于某些技术或框架?
答:不受限制。可以使⽤任何技术来开发DApp的前端,比如
HTML,CSS,JS,Java,Python...
问:前端用什么库连接后端(智能合同)?
答:Web3.js库。
问:在DApp的前端需要哪些东西才能与指定的智能合约进行交
互?
答:合约的ABI和字节码。
问:ABI有什么作用?
答:ABI是合约的公开接⼝描述对象,被DApps用于调用合约的
接⼝。
问:字节码有什么作用?
答:节点上的EVM只能执行合约的字节码。
问:为什么要使用BigNumber库?
答:因为Javascript不能正确处理⼤数。
问:.call和.send有什么区别?
答:.send发送交易并支付费用,而.call查询合约状态。
问:这样发送1个以太对吗:
.send({value:1})?
A:不对,这样发送的是1 wei。 交易中总是以wei为单位。
问:那么为了发送1个以太,我必须将这个值乘以10^18?
答:可以使用
web3.utils.toWei(1,'ether')。
网友评论