代码改变世界

[置顶]分布式系统理论 - 从放弃到入门

2017-01-01 02:45 by bangerlee, 5590 阅读, 收藏, 编辑
摘要: 随承载用户数量的增加和容灾的需要,越来越多互联网后台系统从单机模式切换到分布式集群。回顾自己毕业五年来的工作内容,同样有这样的转变。 毕业头两年负责维护运行在刀片机上的业务,在机房里拔插单板的日子是我逝去的青春。设备之间通过VCS组成冷备,但即使有双机软件保护,宕机、网络丢包等问题发生时业务仍会受影阅读全文

LeetCode编程训练 - 合并查找(Union Find)

2019-04-20 15:14 by bangerlee, 107 阅读, 收藏, 编辑
摘要: Union Find算法基础 Union Find算法用于处理集合的合并和查询问题,其定义了两个用于并查集的操作: Find: 确定元素属于哪一个子集,或判断两个元素是否属于同一子集 Union: 将两个子集合并为一个子集 并查集是一种树形的数据结构,其可用数组或unordered_map表示: F阅读全文

LeetCode编程训练 - 滑动窗口(Sliding Window)

2019-04-18 11:13 by bangerlee, 57 阅读, 收藏, 编辑
摘要: 滑动窗口基础 滑动窗口常用来解决求字符串子串问题,借助map和计数器,其能在O(n)时间复杂度求子串问题。滑动窗口和双指针(Two pointers)有些类似,可以理解为往同一个方向走的双指针。常用滑动窗口代码框架如下: 以"pwwkew"为例,以上滑动窗口执行过程图示如下: 相关LeetCode题阅读全文

LeetCode编程训练 - 拓扑排序(Topological Sort)

2019-04-16 11:38 by bangerlee, 166 阅读, 收藏, 编辑
摘要: 拓扑排序基础 拓扑排序用于解决有向无环图(DAG,Directed Acyclic Graph)按依赖关系排线性序列问题,直白地说解决这样的问题:有一组数据,其中一些数据依赖其他,问能否按依赖关系排序(被依赖的排在前面),或给出排序结果。 最常用解决拓扑排序问题的方法是Kahn算法,步骤可以概括为:阅读全文

LeetCode编程训练 - 位运算(Bit Manipulation)

2019-04-15 20:57 by bangerlee, 126 阅读, 收藏, 编辑
摘要: 位运算基础 说到与(&)、或(|)、非(~)、异或(^)、位移等位运算,就得说到位运算的各种奇淫巧技,下面分运算符说明。 1. 与(&) 计算式 a&b,a、b各位中同为 1 才为 1,否则为0,a&1和a%2效果一样;来看两道典型的题目,第1道计算整数二进制中 1 的位数: n=n&(n-1)代表阅读全文

LeetCode编程训练 - 回溯(Backtracking)

2019-04-13 21:04 by bangerlee, 41 阅读, 收藏, 编辑
摘要: 回溯基础 先看一个使用回溯方法求集合子集的例子(78. Subsets),以下代码基本说明了回溯使用的基本框架: 即回溯方法主要有以下四个步骤: 一些情况下需要对数据进行预先处理,或在第2步直接检查以决定是否抛弃当前路径,以避免过多地递归、带来时间损耗。换而言之,不满足条件的路径越早抛弃越好。 理解阅读全文

LeetCode编程训练 - 折半查找(Binary Search)

2019-04-12 11:39 by bangerlee, 156 阅读, 收藏, 编辑
摘要: Binary Search基础 应用于已排序的数据查找其中特定值,是折半查找最常的应用场景。相比线性查找(Linear Search),其时间复杂度减少到O(lgn)。算法基本框架如下: 以上查找范围的上下限 i 和 j 代表索引,算法过程可视化:Binary Search,STL中有序区间函数up阅读全文

分布式系统理论 - 从放弃到入门

2017-01-01 02:45 by bangerlee, 5590 阅读, 收藏, 编辑
摘要: 随承载用户数量的增加和容灾的需要,越来越多互联网后台系统从单机模式切换到分布式集群。回顾自己毕业五年来的工作内容,同样有这样的转变。 毕业头两年负责维护运行在刀片机上的业务,在机房里拔插单板的日子是我逝去的青春。设备之间通过VCS组成冷备,但即使有双机软件保护,宕机、网络丢包等问题发生时业务仍会受影阅读全文

分布式系统理论进阶 - Paxos变种和优化

2016-12-18 20:38 by bangerlee, 4201 阅读, 收藏, 编辑
摘要: 引言 《分布式系统理论进阶 - Paxos》中我们了解了Basic Paxos、Multi Paxos的基本原理,但如果想把Paxos应用于工程实践,了解基本原理还不够。 有很多基于Paxos的优化,在保证一致性协议正确(safety)的前提下,减少Paxos决议通信步骤、避免单点故障、实现节点负载阅读全文

分布式系统理论进阶 - Raft、Zab

2016-10-26 21:50 by bangerlee, 11320 阅读, 收藏, 编辑
摘要: 引言 《分布式系统理论进阶 - Paxos》介绍了一致性协议Paxos,今天我们来学习另外两个常见的一致性协议——Raft和Zab。通过与Paxos对比,了解Raft和Zab的核心思想、加深对一致性协议的认识。 Raft Paxos偏向于理论、对如何应用到工程实践提及较少。理解的难度加上现实的骨感,阅读全文

分布式系统理论基础 - 选举、多数派和租约

2016-08-21 21:11 by bangerlee, 6483 阅读, 收藏, 编辑
摘要: 选举(election)是分布式系统实践中常见的问题,通过打破节点间的对等关系,选得的leader(或叫master、coordinator)有助于实现事务原子性、提升决议效率。 多数派(quorum)的思路帮助我们在网络分化的情况下达成决议一致性,在leader选举的场景下帮助我们选出唯一lead阅读全文