区块链软件是 the 现在的热门话题. 它正在扰乱我们对经济的看法, technology, 甚至社会结构也是如此, 机会无处不在. 你怎么知道当你找到了一个很好的匹配你的区块链项目?
作为面试官, 您可能意识到区块链开发专家需要对可用技术有广泛的了解. 您知道,他们应该能够判断在特定的业务上下文中使用哪些解决方案.
你也知道,如果你想雇佣适合你项目的人,你需要更具体的说明.
但在我们进入区块链面试问题之前, 并不是每个负责招聘区块链开发人员的人都知道自己在做什么, 所以我们在下一节中提供一个温和的介绍. 如果你已经熟悉区块链的基础知识,可以跳过它.
什么时候开始的?
自古以来,人们就一直在进行交易.
但这很复杂. 如果你需要一条面包, 但是面包师需要一种新工具,而你无法提供, what then? 随着经济的增长,这种方法很快变得极其无效.
金钱改变了一切, 使我们能够提取产品的价值,并将其投入到材料中 生产难,但交换容易. Now, 即使你没有面包师需要的任何东西,你也可以买一条面包——你只是用货币转移价值.
区块链技术和金钱之间有什么联系? 如果你想用钱, 你需要就足够多的人接受的特定类型或类型的货币达成一致,以有效地运行一个经济体. 他有足够的权力将一种货币强加给许多人?
Royalty. In the past, 铸币由国王或王后批准, 谁保证你可以在他们统治的土地上使用货币——每个人都被迫接受它. 许多地方的君主政体转变为其他政府体制, 与此同时, 银行诞生了. 尽管如此,这种经典的方法需要一个中央权威机构来生产支付手段.
在21世纪初, 中本聪(Satoshi Nakamoto)希望创造一种可以在没有任何中央机构的情况下签署的货币. 要解决的一个问题是如何确定事务是否发生,以及它在时间轴中的发生顺序. 这个问题,被称为 分布式的共识,并不是在所有情况下都能解决. 但数字货币只是一个特例,而中本聪能够解决这个问题.
当我们创造一种货币, 我们需要有一种方法来知道谁是一枚硬币的当前所有者,以及它的运动历史. 银行历来使用账本追踪此类细节. 比特币是一种数字化的分布式账本,每个人都可以验证所有的币操作.
如果我们想要使用这样的分布式账本, 有一些问题需要解决:谁可以在这本书中作条目? Supposing just anyone is allowed, 我们如何防止有人在同一时间使用同一枚硬币进行两个不同的操作而作弊?
后一个问题叫做 双支出 也被比特币解决了. 要被网络所接受,是有一些条件的. 每个事务都需要放入一个块中, 一个节点需要利用它的计算能力来解决一个相关的数学难题, called its proof of work.
After that, 一个区块可以在整个区块链网络中广播——但这并不意味着它已经被接受了. 当传输块时, 每个接收到它的节点都可以决定将这个块附加到其扩展的链上. (这是比特币的默认行为,它保证了我们可以达成共识.)然后节点可以开始挖掘一个新的区块,链接到这个最新添加的区块作为它的前一个区块. 当特定数量的节点将该区块添加到它们的链上时,我们可以说交易被接受.
面试区块链个开发者
现在您已经对区块链技术有了一个概述, 以下是每个区块链应用程序开发人员在面试中都应该能够清楚回答的一些问题.
区块链是什么?
区块链是一种分布式数据结构, 以不断增长的记录列表的形式(尽管它也可以表示为树),其中每个节点都通过密码学与另一个节点连接.
核心概念是块. 它的基本形式包括三个方面:
- 时间戳,表示块的创建
- 前一个块的哈希(哈希是固定大小的摘要, 哪里有小的输入变化, 输出有显著变化)
- 实际的块数据
块数据包含尚未包含在其他挖矿块中的所有操作. 它们必须是被矿工接受的, 验证交易不违反网络的任何条件或规则. 在大多数情况下,单个块中可以包含的数据量有一个上限.
区块链是不可变的:在任何块中进行更改, 您需要重新计算所有后续块的哈希值——这是不可行的.
区块链挖矿是什么?
挖矿是在工作量证明系统中向区块链添加新区块的过程. 要添加一个新块,使用 miner Node需要执行一些详尽的计算操作——但是这个操作很容易验证.
For example, 他们需要计算一些魔法数字(需要由矿工找到)与区块头的连接的SHA256哈希值,这样哈希值最终会以特定数量的零结束. (这个数字的零被称为证明 difficulty.)
无许可区块链和有许可区块链的区别是什么?
在无许可的区块链中,每个人都可以加入并成为共识过程的一部分. 任何流行的公共区块链都可以被视为未经许可.
在一个许可的地方, 还有一个额外的授权层, which is used to control which nodes have access to which part of the blockchain; e.g.,可能有一组固定的节点,它们是唯一允许创建新块的节点.
有一些解决方案可以看作是混合方法. 例如,J.P. Morgan 's Quorum是以太坊的一个分支,其中网络的一部分是私有的,其余部分是公共的.
什么是创世块?
创世区块是任何区块链的第一个区块. 它是唯一不包含引用前一个块的散列的块. 在许多实际的解决方案中,这个块本身是硬编码在软件中.
分布式系统中的共识是什么?
这种共识是分布式系统节点之间关于系统状态的协议. 这是一个很难的计算机科学问题,没有通解, 仅针对特定用例进行了解决, like bitcoin.
什么是加密货币?
加密货币是一种数字资产,可以用作现有法定货币的替代品. 加密货币技术的目标之一是消除对批准交易的中央机构的要求.
最著名的区块链实现有哪些?
第一个广泛应用的是比特币,由中本聪创建并于2009年1月推出. 从那时起,许多不同的应用程序得到了宣传.
以太坊提供了一个运行的解决方案 聪明的合同 并于2015年7月推出. 这就产生了DApps-i的概念.e., 分布式应用程序, 有时被称为“ĐApps”——进入主流, 数字代币被分发给了很多人.
在过去的两年中,许多公司,如英特尔、IBM和J.P. 摩根开始(或支持)研究私有网络, 它可以由任何公司运行,并可用于实现特定的业务需求(如公司内部操作的内部分类帐).
他们的支持催生了Hyperledger这样的解决方案, R3 Corda, and Quorum, 一个由J.P. Morgan. 这些解决方案可以处理许多公共网络无法支持的用例. For example, 他们有更好的交易吞吐量, 额外的安全层, 以及特定的共识算法.
什么是“工作量证明”?
在工作量证明系统中,消息的发送方(或某种事务的创建者)需要执行艰苦的工作来签署操作. 从经济角度来说,他们需要承担成本. 但是这个过程 verification 这项工作既简单又快速,所以每个人都可以在很短的时间内完成.
这种方法最初用于hashcash算法——后来被用作比特币的核心挖掘功能——以消除垃圾邮件发送者. 发送电子邮件, 发送方首先需要从特定的输入数据中计算SHA1哈希,这样它将包含特定数量的零.
该难度级别的建立使得现代计算机大约需要一秒钟来完成哈希, 但对于垃圾邮件发送者, 谁需要同时发送数千条消息, 这将带来非常高的经济成本, 让垃圾邮件业务无利可图.
出于类似的原因,比特币也采用了这种方法. 一个主要的区别在于解决谜题的目标时间. 当你挖比特币的时候, 它需要消耗足够的资源来保证一个新块不会创建得太快——这可能会导致许多孤儿块, 并且必须挖掘更多的区块来确认交易. 与hashcash的原始电子邮件上下文不同, on average, 每十分钟就会签署一个新的比特币区块.
如果我们给网络增加更多的能量,这个谜题就会变得更难. 因此,经济成本正在增长. (实际上,每隔2016个区块,难度级别就会发生变化.)
为什么我们需要在区块链中使用公钥加密?
我们使用密码学来验证特定交易的发送者/创建者. 没有加密, 每个操作都可以很容易地重新分配,然后网络就可能被破坏.
交易使用发送方的私钥进行签名,并包含接收方的地址. 例如,在比特币中,公钥就是这样一个地址. 在广播之后, 每个人都可以使用他们的公钥来验证发送者, 哪些是可以通过网络使用的.
什么是智能合约?
智能合约是作为纸质合约的数字替代品而诞生的.e., 双方或多方之间的协议),条款的执行无需任何第三方中间人.
最流行的智能合约实现可以在以太坊中找到. 在以太坊的背景下, 智能合约是一个简单的计算机程序, 在特定地址存在的, 每当事务被发送到该地址时,都会执行该命令. 该代码必须在网络的每个节点上运行:所有节点需要就区块链的状态达成共识.
因此,对于相同的输入数据和状态,每个程序都需要返回完全相同的结果. 它可以被看作是一个有两个输入的数学函数($S$, the state; and $I$, 输入数据)和恰好一个输出($NS$, 新州):
$F(S, I) \到NS$
优秀区块链开发者应具备哪些技能?
区块链发展是一个非常广泛的话题, 因此,在寻找区块链开发人员之前,有必要确定确切的需求. 这一点尤其正确,因为仍然有很多工作岗位 far outnumber 高质量区块链专家, 即使许多专业人士将他们的注意力转向了“区块链”的职业.
区块链市场由几个相关类型的区块链专家组成:
- 区块链工程师
- 智能合约开发者
- DApp开发者
- 份白皮书的作者
- ICO顾问
区块链工程师
如果你需要实现一个全新的区块链网络, 然后你需要找一个有扎实计算机科学背景的人, 网络开发经验, 以及低水平的编程技能.
这个人应该对现有的区块链解决方案有很好的了解——他/她应该能够浏览现有项目的源代码,并解释其中使用的大多数方法.
请记住,这种项目可能很困难,需要多个开发人员来处理. 在大多数情况下,使用现有的开源解决方案更安全. 如果在现有项目的上下文中没有实现特定业务需求的选项, 这样就更容易定义项目的哪些部分需要重写. 例如,您可以从项目的其余部分受益,但可以自定义其共识算法- e.g.、工作证明、权益证明或授权证明——视需要而定.
智能合约开发者
在许多情况下,您不需要从头开始实现一个全新的区块链解决方案. 也就是说,您有特定的业务需求,希望将其纳入现有的区块链中.
智能合约开发人员应该了解特定区块链解决方案的内部原理. 目前,支持智能合约的最流行的解决方案是 Ethereum. 但也有其他的解决方案,比如 Hyperledger Fabric和Sawtooth-当您的业务案例应该在私有网络中得到支持时,可以使用它.
该角色在公共网络中非常重要, 在没有硬分叉的情况下,没有办法从网络中删除无效联系人. 有许多已知的安全问题,这些问题有时会导致财务损失. 每个从事智能合约工作的开发人员都应该尽可能多地了解这些问题,并应该能够编写解决方案.
重要的是,他们的解决方案甚至可以在不可变的(公共)环境中实现. 模块化的水平应该很高, 智能合约之间的连接应该能够动态变化. For example, 具体合同的地址不固定, 所以如果出现问题, 开发人员只需将此地址指向一个具有单个事务的新地址.
这些问题在私有网络中有时不那么严重. But still, in some cases, 你不能保证每个节点都是公平的, 开发人员应该能够处理由于网络的限制而引起的这种情况.
DApp开发者
In a nutshell, DApp可以被看作是想要使用你的区块链系统的用户界面. 它是一个应用程序(在大多数情况下, 基于web的),它提供了与一组允许的业务操作交互的机会. DApp最关键的部分是“链下”(i.e.即区块链之外的所有东西)和区块链本身.
每个来自区块链的事件都需要由DApp正确处理,DApp还应该实时反映区块链的当前状态. Also, 在需要将一段数据推入区块链的情况下, DApp开发人员需要知道如何实现这一点.
开发人员的角色是创建(或维护)一个通信协议,用于在区块链和链下之间传输数据. 需要记住的一件重要的事情是,每一笔交易(特别是在公共链中)都需要一段时间才能让用户看到结果. 开发者应该善于让应用在UI/UX中流畅地反映这一事实, 这样用户就知道他/她需要等待一段特定的时间.
份白皮书的作者
白皮书是一种混合文档,它试图以普通读者都能理解的方式推销项目的技术方面.
在区块链的世界里, 每个项目都希望有自己的白皮书——白皮书的质量可以用来评价项目本身. 没有优秀的白皮书,就没有成功的ICO.
这个角色很难填补,因为作家需要同时生活在两种上下文中, 具有业务和技术方面的专业知识. 他或她需要创建一个文档,其中以显示潜在业务利益的方式展示硬技术方面.
ICO顾问
一些ICO项目经理会在区块链工程师中寻找顾问. 但区块链工程师是知道如何解决低级问题的人. For ICOs, 公司需要一个能够建立网站的人, 创建智能合约, 然后发布到公共网络上. 他们不需要建立一个新的, 私有网络, 或者为特定的区块链网络编写源代码. 这就是为什么DApps开发人员通常更适合作为ICO项目的初始顾问.
新的技术,新的面试标准
区块链技术是最近最热门的话题, 但它还是新鲜的, 有经验的专家也不多. 了解您的项目需要什么以及什么类型的人可以处理它是至关重要的. 我们希望本指南已经为您准备好了寻找最好的区块链开发人员的任务!