1.字节跳动并不会特别关心候选人使用什么编程语言,逻辑很简单,你Java特别厉害,那转Go语言肯定不难。当然,如果你觉得难,那大概率也通不过后面的面试。
2.在整个的面试流程中,至少会有3轮技术面,并且每一轮面试都会考算法。不管你是工程师,还是架构师。
3.为什么要考这么多算法?其实核心是看候选人是不是足够聪明。和Netflix一样,字节跳动招聘工程师的必要条件就是聪明。
4.怎么考算法呢?一般会分两步,第一步是直接让你说思路,第二步是让你直接上手写代码。字节跳动的算法题一般对应的是LeetCode中级模式,要通过面试,你肯定得花时间好好准备。
5.写算法代码的时候,你可以用白板,也可以用电脑,都行。常见的模式是给你20分钟时间,让你写出来某道题的解法。当然,肯定是越快做出来越好,这能说明你的熟练程度。
拜占庭共识算法有一个前提:安全节点数 R(eliable) 大于不安全节点数 E(vil)。而且理想情况下R方希望投票结果是统一的。
所以结合两个不等式
P >R/2 +E
P <R
得出
R >R/2 + E
这就可推测出
R + R/2 >R + E
(3/2) R >ALL(总节点数)
辣么 R >ALL(2/3)
所以当安全节点数 R(eliable) 大于总节点的(2/3)时,投出来的票才是可靠的
然后,祭出拜占庭投票的流程,以及算法模拟流程
其中D为发送请求端,R0 R1 R2 R3为服务端:
最后本来想自己写个实现的,但是Java实现太重量级了,贴个别人用Go语言实现的吧
https://github.com/bigpicturelabs/consensusPBFT