带你玩转区块链--区块链面试问题及答案-第四章【总结篇】

一、意义:

        通过区块链部分面试问题的总结,我们不仅仅能复习区块链相关的知识,还能更好的拥抱了解区块链在市场中的详细应用。废话不多说,开干,欧力给!!

二、内容

ps:问题的答案是我自己写的,可能阐述的不到位,有心人,可帮忙回答,在评论区留言。我会及时修改过来。

1.区块链是何如构成的?

区块链是由区块头和区块体构成。
区块头中存放了 版本号、上一级哈希,梅克尔根,当前哈希,时间戳,挖矿难度值,以及一个常数nonce,其中上一级哈希,当前哈希时间戳没有什么可说的,而梅克尔根是用来防止数据篡改的,nonce就是pow中要求出的那个值。

区块体中 就是存在各种交易数据的

2.比特币是如何防止篡改的?

说道比特币防篡改,就要谈一谈梅克尔根了。梅克尔根在区块头中是一个常量hash、
因为梅克尔根 是由交易+签名后两两做哈希,得到值,此值再次与其他两两做hash的值做hash运算,最终得到一个树状结构。树状结构最终的这个hash值 就是梅克尔根。由于梅克尔根与交易数据有上述关系,所以一旦交易数据被篡改,梅克尔根的值就会发生变化。而梅克尔根变化后,就会被全节点发现,一旦区块值对应不上,就会被剔除。所以想修改比特币数据,只能通过修改超过51%的区块节点,但这种代价是十分大的,几乎可以说是不可能,因为就形成了比特币难篡改的特性

3.pow是如何实现的?

所谓的pow就是工作量证明。
在工作量证明中,需要矿机端计算出一个值与难度值进行比较,若此哈希值小于难度值,则代表挖矿成功,此时该值就是区块头中的nonce,若大于则将nonce ++,继续循环。
该值是通过区块头中,前哈希,当前哈希,时间戳,等数据进行数据拼接,再进行hash256运算后进行bit.int赋值得到一个big.int值。

4.比特币之间是怎么通信的?

比特币是基于p2p进行网络通信的,举一个新节点加入的例子。
首先比特币源码中会写死一些DNS 种子地址,通过这些地址可以获取到其他节点的IP和端口,同时DNS Seeds也会记录你的IP和端口
新节点加入时,会向该全节点ip发送一个version握手协议,全节点通过version检测版本号和区块高度。
若不一致,则返回一个结果给新节点,新节点就会通过全节点提供的地址下载区块。这个过程是提供了很多下载地址的。
若一致,新节点则会将自己IP信息等发送给全节点 通过全节点进行广播,这样整个区块中就会发现有新的节点,同理该节点也会收到其他其他节点的信息,从而到达区块同步。

5.如何对于避免过度依赖DNS seeds(过度依赖全节点的解决方案)?

可以参考BitcoinJs的方法 ,每次都会使用不同的DNS seed取获取当前运行的节点。

6.比特币钱包是何如生成的?

7.UTXO是什么?比特币是何如实现交易和双花问题的?

先吃饭~~~等会写

你可能感兴趣的:(区块链开发)