# 区块链面试题 1. 问:你认为区块链技术中的区块意味着什么? 区块链由所有金融交易的信息组成。一个块只不过是一个记录列表。当这些列表相互结合时,它们被称为区块链。例如,一个组织有100个分类账簿,其中的组合被称为区块链,单个分类账将被视为一个区块。 2. 问:为什么区块链是一种值得信赖的方法 有很多原因,区块链可以被信任。第一个原因是它与其他商业应用程序有良好的兼容性,因为它是开源的。其次是它的安全性,因为它是为了在线交易而开发的,所以开发人员在保证安全性的同时也特别关注它的数据同步。由于其拥有的业务类型无关,所以在选择的时候区别链很容易地被考虑。 3. 问:区块链中是否有可能从网络中删除一个或多个区块? 当然可以,如果只考虑该在线分类帐的特定部分的时候。借助默认选项和过滤器,可以轻松完成此任务,而不需要付出太多。 4. 问:你对区块链了解多少? 这是一种实际上为比特币设计的技术,后来因为监控和记录网络上所有金融交易而带来的多种好处而获得了大量的推广。这是一种值得信赖的方法,目前情况下有很多组织正在使用它。由于一切都是十分安全的,并且它是一种开源方式,所以从长远来看,它可以轻松获得大家的信任。 5. 问:区块链方法如何识别区块? 在线分类帐中的每个块基本上都包含一个哈希指针,该指针指向它之前的块并形成链接,块中包含交易数据和时间戳。 6. 问:你认为一个区块的安全性究竟是什么? 网络上的所有用户都不能修改块。因此它提供了极好的安全级别。除此之外,每个区块都使用加密技术进行保护,这是另一项措施。因此,不需要担心块中存在的数据的安全性和安全性。 7. 问:在组织中使用区块链技术是否有网络特定的条件? 使用它没有特定的条件。但是,网络必须是有关协议下的对等网络。它实际上很简单地验证了新块,并帮助组织在不投资第三方应用程序的情况下保持同步。 8. 问:什么是加密?它在区块链中的作用是什么? 数据安全始终很重要。加密基本上是一种帮助组织保持数据安全的方法。在这种技术中,数据在被发送者发送到网络之前被编码或者在一定程度上被改变。唯一的接收器可以理解如何对其进行解码。在区块链中,这种方法很有用,因为它增加了区块的整体安全性和真实性,并有助于保护区块的安全。 9. 问:一旦写入数据块后,是否可以修改数据? 不,这是不可能的。如果需要进行任何修改,组织只需删除所有其他块的信息。这是因为没有其他方法,数据在使用这种方法时必须非常谨慎。 10. 问:区块链中可以保存哪些类型的记录?有什么限制吗? 区块链方法中没有任何类型记录的限制。目前,世界各地的许多组织正在使用这种方法,事实是医疗交易记录,与组织相关的事件,管理活动,交易处理,身份管理以及文件记录都是常见的可以使用区块链的记录类型。而且记录保存并不仅限于这些应用程序。 11. 问:什么是双重支出? 这是与数字货币有关的主要问题之一。 事实上,这是一个数字通证被多次使用的条件,因为通证通常由易于克隆的数字文件组成。它只会导致通货膨胀,组织不得不承受巨大的损失。 区块链技术的主要目标之一是尽可能地消除这种方法。 12. 问:解释盲签名的重要性以及它如何有用? 它实际上是一种数字签名形式,密码学的一个重要组成部分,其中所有信息在实际考虑或签署之前都是盲目的。 这是经过验证的方法,通常在作者和签署方都不同的隐私相关协议中考虑。 数字货币设计是最常见的例子之一。 13. 问:什么是密钥分享?区块链技术有什么好处吗? 众所周知的事实是,数字交易中的安全问题非常重要。密钥分享是一种类似的方法。在区块链技术中,这是一种将密钥密或个人信息划分为不同单元并将其发送给网络上的用户的方法。原始信息只能在分配了密钥的参与者同意将他们与其他人结合在一起时才能结合使用。它可以在区块链技术中提供多种与安全相关的好处。 14. 问:超级账本是什么?区块链支持吗? 超级账本只不过是一种特殊的账本,为给人们提供服务的企业而设计。没有严格的服务上限,企业可以通过超级账本进行管理。区块链拥有专门用于处理超级账本的算法。事实上,它减少了许多与此相关的问题。 15. 问:命名区块链项目实施中涉及的步骤? 这个过程共涉及六个步骤,它们是: 1.需求识别 2.筛选并确认需求 3.区块链项目开发 4.安全性的可行性研究 5.实施 6.控制和监测项目 16. 问:你所知道区块链的好处是什么? 它鼓励安全的在线交易,这是它最大的好处之一。基本上,作为一个密切关注所有交易记录的分布式分散账本,它不会让记录被任何人改变,这增强了安全性。除此之外,参与者和企业主可以始终确保最终的成本审计。区块链始终可以保证的一件事是每个区块或单元只能传输一次,这样可以消除双重支出问题。 17. 问:将区块链数据库中存在的两种记录命名为? 这些记录是块记录和交易记录。这两个记录都可以轻松访问,最好的方式是可以将它们彼此集成,而无需遵循复杂的算法。 18. 问:你了解的信息威胁有哪些? 目前情况下信息面临很多威胁。由于互联网在线交易的增加,许多黑客已经变得活跃,正在采用新方法来破解包含财务信息的数据和服务器。主要的威胁是软件攻击,身份盗窃,信息勒索以及破坏。除此之外,特洛伊木马,蠕虫和病毒也是麻烦的创造者。 19. 问:信息泄漏对组织可能造成什么挑战? 信息泄露可以极大地降低组织的声誉。除此之外,这可能是组织承受巨大损失的原因。许多未能实施安全协议来保证其数据安全的组织已经失去了客户的信任,并且正在努力争取再次获得相同的声誉。如果不关注在线交易安全,任何组织的总体利润可降低80%。 20. 问:有那些可以使用区块链技术的组织? 可以考虑这种方法的商业类别没有严格的上限。事实上,几乎所有的企业都在进行在线或财务交易,而这些交易需要他们顺利的执行完整的流程。大型公司,金融机构,私营企业,政府部门乃至国防组织都可以非常轻松地信任这项技术。 21. 问:什么是信息处理?与此相关的关键挑战是什么? 这些信息通常在网络上共享。在通过网络实际发送之前,需要将其改变为适合频道标准的格式(频道是发送者和接收者之间的链接)。在发送端和接收端进行信息转换所做的工作通常被认为是信息处理。信息处理所面临的最大挑战就是在这段时间保护它。另一个挑战是处理批量信息会对性能造成限制。 22. 问:BIP代表什么? 这意味着比特币改善建议。 23. 问:区块链中的哪些关键原则有助于消除需要遵循的安全威胁? 是的,在时间方面需要遵循一些原则。他们是: 1.审计 2.保护应用程序 3.确保测试和类似的方法 4.数据库安全 5.连续性计划 6.数字劳动力培训 所有这些原则都是基本的,并且易于实施。它们有助于使交易记录有用。 24. 问:区块链技术的基础是什么? 它使信息能够在用户之间分发而不被复制。 25. 问:区块链是不可破坏的分类账吗? 根据开发商的说法,区块链分类帐不能损坏。 26. 问:什么是安全策略? 安全策略定义了系统上确切需要确保的内容。它根据一些核心协议绑定网络用户,他们都必须同意并遵循以提高整体安全性。当涉及到组织的信息或财务记录时,多个安全策略的实施不止一个。 27. 问:在确保交易记录时,您将如何处理风险管理? 它基本上是一个查找组织的财务记录的威胁和所有漏洞的过程。对付这种做法最好的办法是立即采取正确的对策。另一种方法是注意备份计划。根据信息的价值,可以简单地考虑购买新风险管理软件等更多方法。信息的主要风险来自黑帽黑客。 28. 问:请列出区块链中用户可以考虑的普通类型的分类帐? 这些是: 1.集中式分类账 2.分散式分类帐 3.分布式分类帐 29. 问:区块链分类账与普通分类账的区别? 第一个,其实最主要的区别是区块链是一个可以非常容易分散的数字分类帐。这种方法出错的几率远远低于普通分类账中的错误率。普通账本就是用手或人工努力准备的,而区块链自动执行所有任务。你只需要以适当的方式配置它,并遵循所有的指导原则。 30. 问:分布式数字分类帐用于在BlockChain中记录交易。系统依赖于什么? 它依赖于网络节点。 31. 问:陷门函数的功能是什么,为什么它是区块链所需要的? 一个陷门函数是在一个方向上容易计算但难以在相反方向的计算,除非你有特殊的信息。陷门函数是必不可少的公共密钥加密,所以他们常用在blockchain发展代表思想的地址和私有密钥。 32. 问:比特币实现中的交易和块是如何加密的? 比特币块不以任何方式加密:每个块都是公开的。阻止修改和保证数据完整性的是一个称为块哈希的值。块的内容是使用在比特币的一种特殊Hash函数来处理,它的实现和得到的值包含在区块链中。 33. 问 :解释为什么区块链需要通证。 代币/通证用于实现状态之间的变化。当有人做交易时,这是一种状态的改变,代币从一个地址移到另一个地址。除此之外,交易可以包含额外的数据和状态的变化来改变数据,来做这一个不变的定义区块链的唯一途径。从技术上讲,区块链不需要代币为其主要业务,但没有他们,其他方式需要引进管理链状态和验证交易。 34. 问:对等网络(P2P)网络中对等体是如何工作的? 当一个新的节点启动时,它对网络一无所知,因为没有中央服务器。通常开发人员提供可信节点的列表,这些节点直接写入可用于初始对等点发现的代码中。 35. 问:如何验证检查一个块是有效的? 网络上的每个完整节点都进行块验证。当一个新的块被宣布时,接收它的每个节点都会执行一个检查列表。两个最重要的检查是工作证明(如果一个块提供足够的工作要包含在链中)和所有事务的有效性(每个事务必须是有效的)。 36. 问:一个ScriptPubKey是什么?解释如何使用P2SH地址就可以了。 一个是所谓的锁定ScriptPubKey脚本。它出现目的是阻止交易的输出,在输出过程中必须满足。 P2SH是一种特殊类型的地址,代替复杂的锁定脚本的hash值。当一个试图花费输出的交易稍后显示时,除了解锁脚本之外,它还必须包含与哈希匹配的脚本。 37. 问:使用脚本,编写一个redeem script脚本,允许用户仅在用户知道魔术数字1234567时才使用输出。 OP_EQUALVERIFY scriptPubKey: 1234567 OP_EQUALVERIFY scriptSig: 1234567 38. 问:使用脚本,编写一个redeem script脚本,允许任何人在一次老化后最少花费30天的时间。 scriptPubKey: "30d" OP_CHECKSEQUENCEVERIFY OP_VERIFY scriptSig: empty 39. 问:什么是挖矿? 挖矿是在区块链网络达成共识的过程。挖矿有两个目的。首先,它在生成的块中创建新的代币。其次,它通过向网络提供工作证明,包括分布式计费中的交易;也就是说,证明所生成的块是有效的。 40. 问:什么是软分叉? 在分类帐中的块包括以建立最长链的方式,即具有最大累积难度的链。分叉是有两个候选块竞争形成最长的区块链,两个矿工发现工作问题的证明方法在很短的时间内没有同步对方的情况。造成网络分割,因为某些节点得到块从矿工#1和而另外一些得到矿工#2。 分叉通常在一个块中得到解决,因为这种情况再次发生的概率变得非常低,因为下一个块出现,所以很快有一个新的最长链,将被认为是主要的。 (注:这种叉不同于硬叉,这是一些开发商决定创建一个不向后兼容的改变到区块链协议,导致两个永远不同区块链。) 41. 区块链的本质 区块链是什么?一句话,它是一种特殊的分布式数据库。 首先,区块链的主要作用是储存信息。任何需要保存的信息,都可以写入区块链,也可以从里面读取,所以它是数据库。 其次,任何人都可以架设服务器,加入区块链网络,成为一个节点。区块链的世界里面,没有中心节点, 每个节点都是平等的,都保存着整个数据库。你可以向任何一个节点,写入/读取数据,因为所有节点最后都会同步,保证区块链一致。 42. 区块链的最大特点 分布式数据库并非新发明,市场上早有此类产品。但是,区块链有一个革命性特点。 区块链没有管理员,它是彻底无中心的。其他的数据库都有管理员,但是区块链没有。如果有人想对区块链添加审核,也实现不了,因为它的设计目标就是防止出现居于中心地位的管理当局。 正是因为无法管理,区块链才能做到无法被控制。否则一旦大公司大集团控制了管理权,他们就会控制整个平台,其他使用者就都必须听命于他们了。 但是,没有了管理员,人人都可以往里面写入数据,怎么才能保证数据是可信的呢?被坏人改了怎么办?请接着往下读,这就是区块链奇妙的地方。 43. 区块 区块链由一个个区块(block)组成。区块很像数据库的记录,每次写入数据,就是创建一个区块。 每个区块包含两个部分。 区块头(Head):记录当前区块的元信息 区块体(Body):实际数据 区块头包含了当前区块的多项元信息。 生成时间 实际数据(即区块体)的 Hash 上一个区块的 Hash ... 这里,你需要理解什么叫 Hash,这是理解区块链必需的。 所谓 Hash 就是计算机可以对任意内容,计算出一个长度相同的特征值。区块链的 Hash 长度是256位,这就是说,不管原始内容是什么,最后都会计算出一个256位的二进制数字。而且可以保证,只要原始内容不同,对应的 Hash 一定是不同的。 举例来说,字符串123的 Hash 是a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0(十六进制),转成二进制就是256位,而且只有123能得到这个Hash。 因此,就有两个重要的推论。 推论1:每个区块的 Hash 都是不一样的,可以通过 Hash 标识区块。 推论2:如果区块的内容变了,它的 Hash 一定会改变。 44. Hash 的不可修改性 区块与 Hash 是一一对应的,每个区块的 Hash 都是针对"区块头"(Head)计算的。 Hash = SHA256(区块头) 上面就是区块 Hash 的计算公式,Hash 由区块头唯一决定,SHA256是区块链的 Hash 算法。 前面说过,区块头包含很多内容,其中有当前区块体的 Hash(注意是"区块体"的 Hash,而不是整个区块),还有上一个区块的 Hash。这意味着,如果当前区块的内容变了,或者上一个区块的Hash变了,一定会引起当前区块的 Hash 改变。 这一点对区块链有重大意义。如果有人修改了一个区块,该区块的 Hash 就变了。为了让后面的区块还能连到它,该人必须同时修改后面所有的区块,否则被改掉的区块就脱离区块链了。由于后面要提到的原因,Hash 的计算很耗时,同时修改多个区块几乎不可能发生,除非有人掌握了全网51%以上的计算能力。 正是通过这种联动机制,区块链保证了自身的可靠性,数据一旦写入,就无法被篡改。这就像历史一样,发生了就是发生了,从此再无法改变。 每个区块都连着上一个区块,这也是"区块链"这个名字的由来。 45. 采矿 由于必须保证节点之间的同步,所以新区块的添加速度不能太快。试想一下,你刚刚同步了一个区块,准备基于它生成下一个区块,但这时别的节点又有新区块生成,你不得不放弃做了一半的计算,再次去同步。因为每个区块的后面,只能跟着一个区块,你永远只能在最新区块的后面,生成下一个区块。所以,你别无选择,一听到信号,就必须立刻同步。 所以,区块链的发明者中本聪(这是假名,真实身份至今未知)故意让添加新区块,变得很困难。他的设计是,平均每10分钟,全网才能生成一个新区块,一小时也就六个。 这种产出速度不是通过命令达成的,而是故意设置了海量的计算。也就是说,只有通过极其大量的计算,才能得到当前区块的有效 Hash,从而把新区块添加到区块链。由于计算量太大,所以快不起来。 这个过程就叫做采矿(mining),因为计算有效 Hash 的难度,好比在全世界的沙子里面,找到一粒符合条件的沙子。计算 Hash 的机器就叫做矿机,操作矿机的人就叫做矿工。 46. 难度系数 读到这里,你可能会有一个疑问,人们都说采矿很难,可是采矿不就是用计算机算出一个Hash吗,这正是计算机的强项啊,怎么会变得很难,迟迟算不出来呢? 原来不是任意一个 Hash 都可以,只有满足条件的 Hash 才会被区块链接受。这个条件特别苛刻,使得绝大部分 Hash 都不满足要求,必须重算。 原来,区块头包含一个难度系数(difficulty),这个值决定了计算 Hash 的难度。举例来说,第100000个区块的难度系数是 14484.16236122。 区块链协议规定,使用一个常量除以难度系数,可以得到目标值(target)。显然,难度系数越大,目标值就越小。 Hash 的有效性跟目标值密切相关,只有小于目标值的 Hash 才是有效的,否则 Hash 无效,必须重算。由于目标值非常小,Hash 小于该值的机会极其渺茫,可能计算10亿次,才算中一次。这就是采矿如此之慢的根本原因。 区块头里面还有一个 Nonce 值,记录了 Hash 重算的次数。第 100000 个区块的 Nonce 值是274148111,即计算了 2.74 亿次,才得到了一个有效的 Hash,该区块才能加入区块链。 47. 难度系数的动态调节 就算采矿很难,但也没法保证,正好十分钟产出一个区块,有时一分钟就算出来了,有时几个小时可能也没结果。总体来看,随着硬件设备的提升,以及矿机的数量增长,计算速度一定会越来越快。 为了将产出速率恒定在十分钟,中本聪还设计了难度系数的动态调节机制。他规定,难度系数每两周(2016个区块)调整一次。如果这两周里面,区块的平均生成速度是9分钟,就意味着比法定速度快了10%,因此难度系数就要调高10%;如果平均生成速度是11分钟,就意味着比法定速度慢了10%,因此难度系数就要调低10%。 难度系数越调越高(目标值越来越小),导致了采矿越来越难。 48. 区块链的分叉 即使区块链是可靠的,现在还有一个问题没有解决:如果两个人同时向区块链写入数据,也就是说,同时有两个区块加入,因为它们都连着前一个区块,就形成了分叉。这时应该采纳哪一个区块呢? 现在的规则是,新节点总是采用最长的那条区块链。如果区块链有分叉,将看哪个分支在分叉点后面,先达到6个新区块(称为"六次确认")。按照10分钟一个区块计算,一小时就可以确认。 由于新区块的生成速度由计算能力决定,所以这条规则就是说,拥有大多数计算能力的那条分支,就是正宗的比特链。 49. 总结 区块链作为无人管理的分布式数据库,从2009年开始已经运行了8年,没有出现大的问题。这证明它是可行的。 但是,为了保证数据的可靠性,区块链也有自己的代价。一是效率,数据写入区块链,最少要等待十分钟,所有节点都同步数据,则需要更多的时间;二是能耗,区块的生成需要矿工进行无数无意义的计算,这是非常耗费能源的。 因此,区块链的适用场景,其实非常有限。 不存在所有成员都信任的管理当局写入的数据不要求实时使用挖矿的收益能够弥补本身的成本如果无法满足上述的条件,那么传统的数据库是更好的解决方案。 目前,区块链最大的应用场景(可能也是唯一的应用场景),就是以比特币为代表的加密货币。下一篇文章,我将会介绍比特币的入门知识。 50. 参考链接 1.How does blockchain really work? by Sean Han 2.Bitcoin mining the hard way: the algorithms, protocols, and bytes, by Ken Shirriff ###### tags: `区块链`