Blockchain software is the hot topic right now. 它正在颠覆我们对经济的思考方式, technology, 甚至社会结构也是如此, 区块链的机会无处不在. 你怎么知道你什么时候找到了一个适合你的区块链项目?
As an interviewer, 您可能已经意识到,专业的区块链开发人员需要对可用技术有广泛的了解. 您知道他们应该能够分辨在特定的业务上下文中使用哪些解决方案.
你也知道,如果你要雇佣适合你项目的人,你需要更具体一些.
但在我们进入区块链面试问题之前, 并不是每个负责雇佣区块链开发人员的人都知道他们面临的是什么, 因此,我们将在下一节提供一个温和的介绍. 如果您已经熟悉区块链基础知识,可以跳过它.
When Did It Start?
自古以来,人们就一直在交易.
But it was complicated. If you needed a loaf of bread, 但面包师需要一种新工具,而你却无法提供, what then? 随着经济的增长,这种方法很快变得极其无效.
Money changed everything, 使我们能够提取产品的价值并将其放入一种材料中 hard to produce but easy to exchange. Now, 即使你没有面包师需要的任何东西,你也可以买一条面包——你只需用货币转移价值.
区块链技术和金钱有什么联系? If you want to use money, 你需要就一种或几种特定的货币达成一致,这种货币被足够多的人接受,以有效地运行经济. 他有足够的权力把一种货币强加给许多人?
Royalty. In the past, coinage was approved by a king or queen, 谁保证你可以在他们统治的土地上使用这种货币——每个人都被迫接受它. 许多地方的君主政体转变为其他政体, and in the meantime, banks were born. 尽管如此,这种经典的方法需要一个产生支付手段的中央机构.
In the early 2000s, 中本聪(Satoshi Nakamoto)希望创造一种可以在没有任何中央机构的情况下签署的货币. 要解决的一个问题是如何确定事务是否发生以及它在时间轴上以何种顺序发生. This problem, known as distributed consensus, cannot be solved in all cases. 但数字货币只是一个特例,中本聪能够解决这个问题.
When we create a currency, 我们需要有一种方法来知道谁是一枚硬币的当前所有者,以及它的运动历史. 银行历来使用分类帐来记录这些细节. 比特币是一种数字的分布式账本,每个人都可以验证所有的硬币操作.
如果我们想使用这样一个分布式账本, 有一些问题需要解决:谁可以在这本书中做一个条目? Supposing just anyone is allowed, 我们如何防止有人同时使用同一枚硬币进行两种不同的操作来作弊?
This latter problem is called double spending and also is solved by bitcoin. 要被网络接受,有一些条件. 每笔交易都需要放到一个区块中, 一个节点需要使用它的计算能力来解决一个相关的数学难题, called its proof of work.
After that, 一个区块可以通过整个区块链网络广播,但这并不意味着它已经被接受. When a block is transmitted, 接收它的每个节点都可以决定将该块附加到其最扩展的链上. (这是比特币的默认行为,这保证了我们可以达成共识.),然后节点可以开始挖掘一个新的区块,该区块链接到这个最新添加的区块,作为它的前一个区块. 我们可以说,当特定数量的节点将该块添加到它们的链中时,交易被接受.
Interviewing Blockchain Developers
现在您已经对区块链技术有了一个概述, 以下是每个区块链应用程序开发人员在面试中应该能够清楚回答的一些问题.
What is a blockchain?
区块链是一种分布式数据结构, 以不断增长的记录列表的形式(尽管它也可以表示为树),其中每个节点通过密码学与另一个节点连接.
The core concept is a block. 它的基本形式包括三个方面:
- 一个时间戳,表示一个块的创建
- 前一个块的散列(散列是固定大小的摘要), where for a small change of input, the output is changed significantly)
- The actual block data
块数据包含所有尚未包含在其他挖掘块中的操作. 它们必须被矿工接受, 验证交易不违反任何网络条件或规则. 在大多数情况下,单个块中可以包含的数据量有一个上限.
区块链是不可变的:在任何块中进行更改, 您需要重新计算所有后续块的哈希值—这是不可行的.
What is blockchain mining?
挖矿是在工作量证明系统中向区块链添加新块的过程. To add a new block, a miner Node需要执行一些详尽的计算操作,但这些操作很容易验证.
For example, 他们需要计算一些幻数(需要矿工找到)与区块头的连接的SHA256哈希值,以便哈希值以特定数量的零结束. (这个数字的零被称为证明 difficulty.)
无许可区块链和许可区块链之间的区别是什么?
在无权限的区块链中,每个人都可以加入并成为共识过程的一部分. 任何流行的公共区块链都可以被视为无需许可的.
In a permissioned one, 还有一个额外的授权层, which is used to control which nodes have access to which part of the blockchain; e.g.,可能有一组固定的节点,它们是唯一允许创建新块的节点.
有一些解决方案可以被视为混合方法. For example, J.P. 摩根的Quorum是以太坊的一个分支,其中一部分网络是私有的,其余部分是公开的.
What is the genesis block?
创世区块是任何区块链的第一个区块. 它是唯一不包含引用前一个块的散列的块. 在许多实际的解决方案中,这个块本身是硬编码在软件中的.
分布式系统中的共识是什么?
这种共识是分布式系统节点之间关于系统状态的协议. 这是一个没有通解的计算机科学难题, 只解决了特定用例的问题, like bitcoin.
What is cryptocurrency?
加密货币是一种数字资产,可以用作现有法定货币的替代品. 加密货币技术的目标之一是消除拥有批准交易的中央机构的要求.
最著名的区块链实现是什么?
第一个广泛实施的是比特币,由中本聪创建并于2009年1月推出. 从那时起,许多不同的申请都得到了宣传.
Ethereum provided a solution to run smart contracts and launched in July 2015. This brought the concept of DApps—i.e., distributed apps, 有时被格式化为“ĐApps”——进入主流, 数字代币被分发给许多人.
在过去的两年里,像英特尔、IBM和J.P. 摩根开始(或支持)研究私人网络, 它可以由任何公司运行,并可用于实现特定的业务需求(如公司内部操作的内部分类账)。.
他们的支持催生了像超级账本这样的解决方案, R3 Corda, and Quorum, 以太坊的企业级版本,由J.P. Morgan. 这些解决方案可以处理许多公共网络不支持的用例. For example, 它们有更好的事务吞吐量, additional security layers, and specific consensus algorithms.
What is “proof of work”?
在工作量证明系统中,消息的发送者(或某种交易的创建者)需要执行艰苦的工作来签署操作. 从经济意义上讲,他们需要承担成本. But the process of verification 这项工作既容易又快,所以每个人都能在很短的时间内完成.
这种方法最初用于hashcash算法(后来被用作比特币的核心挖掘功能),以消除垃圾邮件发送者. To send an email, 发送方首先需要从特定的输入数据中计算SHA1哈希值,这样它就会包含特定数量的零.
难度等级的建立使得一台现代计算机大约需要一秒钟才能完成哈希, but for spammers, 谁需要一次发送数千条信息, 这将带来非常高的经济成本, 使垃圾邮件业务无利可图.
出于类似的原因,比特币也采用了这种方法. 一个主要区别在于解决谜题的目标时间. When you mine a bitcoin, 它需要消耗足够的资源来保证新块不会创建得太快——这可能会导致许多孤立块, 并且必须挖掘更多的区块来确认交易. 与hashcash的原始电子邮件上下文不同, on average, 每十分钟就会有一个新的比特币区块被签署.
如果我们给网络增加更多的力量,这个谜题就会变得更难. So the economic cost is growing. (实际上,难度等级每2016个街区改变一次.)
为什么我们需要在区块链中使用公钥加密?
我们使用密码学来验证特定交易的发送者/创建者. Without encryption, 每个操作都可以很容易地重新分配,然后网络可能会损坏.
交易使用发送方的私钥进行签名,并包含接收方的地址. 例如,在比特币中,公钥就是这样一个地址. Then after broadcasting, 每个人都可以用他们的公钥来验证发送者, which is available through the network.
What is a smart contract?
智能合约是作为纸质合约的数字替代品而创建的.e., 两方或多方之间的安排),其中条款的执行可以在没有任何第三方中间人的情况下实现.
最流行的智能合约实现可以在以太坊中找到. In the context of Ethereum, 智能合约是一个简单的计算机程序, existing at a specific address, 每当交易被发送到该地址时,都会执行该操作. 代码必须在网络的每个节点上运行:所有节点都需要就区块链的状态达成共识.
因此,给定相同的输入数据和状态,每个程序都需要返回完全相同的结果. 它可以看作是一个有两个输入的数学函数($S$), the state; and $I$, 输入数据)和恰好一个输出($NS$), the new state):
$F(S, I) \to NS$
顶级区块链开发人员应该具备哪些技能?
区块链开发是一个非常广泛的话题, 因此,在聘请区块链开发人员之前,确定确切的需求是至关重要的. 这一点尤其正确,因为区块链仍然在工作 far outnumber high-quality blockchain experts, 尽管许多专业人士将重点转向区块链职业.
区块链市场由几种相关类型的区块链专家组成:
- Blockchain Engineers
- Smart Contract Developers
- DApp Developers
- White-paper Authors
- ICO Consultants
Blockchain Engineers
如果你需要实现一个全新的区块链网络, 然后你需要找一个有扎实的计算机科学背景的人, experience in network development, and low-level programming skills.
这个人应该对现有的区块链解决方案有很好的了解——他/她应该能够通读现有项目的源代码,并解释其中使用的大多数方法.
请记住,这种项目可能是困难的,需要多个开发人员来处理. 在大多数情况下,使用现有的开源解决方案更安全. 如果在现有项目的上下文中没有选择来实现您的特定业务需求, 这样就更容易定义项目的哪些部分需要重写. 例如,您可以从项目的其余部分中受益,但可以自定义其共识算法.g.、工作量证明、权益证明或权威证明——根据需要.
Smart Contract Developers
在许多情况下,您不需要从头开始实现全新的区块链解决方案. 也就是说,你有特定的业务需求,你想要适应现有的区块链.
智能合约开发人员应该了解特定区块链解决方案的内部原理. 目前,支持智能合约的最流行的解决方案是 Ethereum. But there are other solutions—like Hyperledger Fabric and Sawtooth-当您的业务案例需要在专用网络中支持时,可以使用它.
这个角色在公共网络中非常重要, 如果没有硬分叉就没有办法从网络中删除无效联系人. 有许多已知的安全问题,这些问题有时会导致经济损失. 每个从事智能合约开发的开发人员都应该尽可能多地了解这些问题,并且应该能够编写解决方案.
重要的是,它们的解决方案甚至可以在不可变(公共)环境中实现. 模块化的水平应该很高, 智能合约之间的连接应该能够动态变化. For example, 具体合同的地址不应固定, so if a problem occurs, 开发人员可以通过单个事务将此地址指向新地址.
这些问题在专用网络中有时不那么重要. But still, in some cases, 你不能保证每个节点都是公平的, 开发人员应该能够处理由于网络限制而产生的这种情况.
DApp Developers
In a nutshell, DApp可以被视为想要使用区块链系统的人的用户界面. It’s an application (in most cases, (基于web的),提供了与一组允许的业务操作交互的机会. DApp最关键的部分是“链下”(off-chain)之间的集成.e.(即给定区块链之外的所有东西)和区块链本身.
每个来自区块链的事件都需要由DApp正确处理,DApp还应该实时反映区块链的当前状态. Also, 在需要将数据推送到区块链的情况下, DApp开发人员需要知道如何实现这一点.
开发人员的角色是创建(或维护)一个通信协议,用于在区块链和脱链之间传输数据. 需要记住的一个重要事实是,每个事务(特别是在公共链中)在用户看到结果之前可能需要一些时间. 开发者应该熟练地让应用在UI/UX中流畅地反映这一事实, 这样用户就知道他/她需要等待一段时间.
White-paper Authors
白皮书是一种混合文档,试图以普通读者可以理解的方式出售项目的技术方面.
In the blockchain world, 每个项目都希望有自己的白皮书——白皮书的质量可以用来评价项目本身. 没有优秀的白皮书,就没有成功的ICO.
这个角色很难胜任,因为一个作家需要同时生活在两种环境中, 在商业和技术方面都有专长. 他或她需要创建一个文档,其中以展示潜在业务利益的方式呈现硬技术方面.
ICO Consultants
一些ICO项目经理将在区块链工程师中寻找顾问. 但区块链工程师是知道如何解决底层问题的人. For ICOs, 公司需要一个人谁是能够建立一个网站, create smart contracts, and publish them into a public network. They don’t need to set up a new, private network, 或者处理特定区块链网络的源代码. 这就是为什么DApps开发人员通常更适合作为ICO项目的初始顾问.
新技术,新面试标准
区块链技术是最近最热门的话题, but it’s still fresh, 而且经验丰富的专家也不多. 了解你的项目需要什么以及什么样的人可以处理它是至关重要的. 我们希望本指南能够帮助您找到最好的区块链开发人员!