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