摘要: 我们需要实现一门简单的计算器语言,可以支持简单的加减法,比如类似js的语法 var id = 123 id = id + 456 var myid = id 执行完这段代码之后,myid的值会变成579,那么如何来实现这个简单的语言呢?我们需要实现一个简单的编译器来完成这个事情。 一个编译器的编译过 阅读全文
posted @ 2021-11-24 01:59 Anyou 阅读(204) 评论(0) 推荐(0)
摘要: raft是一种共识算法,各节点可以就指定值达成共识,达成共识后的值,就不再改变了。raft是基于论文 https://raft.github.io/raft.pdf,raft是paxos的一种实现,它简化了paxos的模型,增加了很多约束和限定条件,使得更容易在生产中落地,简要描述如下(摘自http 阅读全文
posted @ 2021-09-27 00:53 Anyou 阅读(980) 评论(0) 推荐(0)
摘要: 一致性hash算法是定义一个2^32长度的环,环的顺时针方向依次是0 1 2 ... 2^32-1,服务器节点分布于环上,可以通过一个散列函数对每一个服务器节点求hash值,hash值对应环上的位置,这些服务器节点组成集群,当需要把数据保存到集群时,可以用同一个散列函数对数据求hash值,如果has 阅读全文
posted @ 2021-05-08 23:22 Anyou 阅读(251) 评论(0) 推荐(0)
摘要: 红黑树具有以下5条性质: 树中的节点要么是红色要么是黑色 根节点是黑色 每一个叶子节点(Nil,空节点,实际不存储数据)都是黑色的 红色节点的两个孩子都是黑色的 对于每一个节点,从它出发到它的后代叶子节点的所有简单路径上,黑色节点的数量都是相同的 我们在向红黑树插入新节点的时候,因为要保证红黑树的性 阅读全文
posted @ 2021-04-30 01:29 Anyou 阅读(93) 评论(0) 推荐(0)
摘要: 提到红黑树,就不得不提到AVL树,AVL树又叫做平衡二叉树。这里平衡的意思是指二叉树左右两棵子树的高度之差不会超过1。因此,AVL树是一个最优的二叉排序树,平衡树的树高一直保持在log2N左右。所以每一个操作的时间复杂度都可保持在O(log2N)。但是AVL树在插入和删除节点的时候,为了维持自己的平 阅读全文
posted @ 2021-04-13 00:55 Anyou 阅读(135) 评论(0) 推荐(0)
摘要: 本文介绍软件设计的5大原则:开闭原则、依赖倒置原则、里氏替换原则、单一职责原则、接口隔离原则。 1. 开闭原则 开闭原则是指代码应该对扩展开放,对修改封闭。这个原则主要是用来描述,未来需求变化的时候,应该尽量不修改已有的类,而是通过增加新的类来解决。 如何来理解呢?比如我们有一个发送验证码的功能,一 阅读全文
posted @ 2021-02-23 00:23 Anyou 阅读(637) 评论(0) 推荐(0)