BoundedBuffer C++ implementation 本文讲述了 BoundedBuffer 的 C++ 实现,而 BoundedBuffer 常常用于生产者和消费者模式中 在 boost 库的 circular_buffer文档中讲述了如何使用 circular_buffer来构建BoundedBuffer[1],我基于 boost 库的例子做了个改写,代码如下 1234567891011121314151617181920212223242526 2021-09-29 C++ #C++ #interview
为什么不应该在构造和析构函数中调用虚函数 其实这来自于 《Effective C++》 Rule 09: Never call virtual functions during construction or destruction 这一点主要是因为构造函数和析构函数比较特殊 12345678910111213141516171819202122232425262728#include & 2021-09-14 #C++ #Effective C++ #构造函数 #析构函数 #虚函数
Is KMP always faster? 本文比对了 KMP 以及 C++ string 的find方法在检查 a 是否为 b 子串这一问题上的效率。 尽管字符串长度已经达到了 104 这一量级,但是在 test case 数量为 105 时,KMP 表现仍没有find好. 首先,毫无疑问,从时间复杂度上分析,KMP 确实胜于 find的暴力匹配,但是 KMP 会在 build next table 上花费比较多的时间,在字符串长度仍 2021-09-07 #C++ #KMP #algorithm
How https work? 讲 https 的文章其实已经挺多了,在这里不赘述了,可以参考 Cloudflare 官网上的这篇文章[1]以及 The First Few Milliseconds of an HTTPS Connection[2] 在这里主要是讲讲在 TLS 中为什么需要 Client Random 以及 Server Random. 导言首先先从 https 如何防止 MITM(Man-In-The-Mi 2021-09-02 #https
Consistency and consensus Introduction在分布式系统中我们提到的 consistency 不同于 ACID 的 consistency (或者说是 correctness), 它描述了在 replicated database 中我们在某一时刻在不同的节点看到的数据状态应该是怎么样的。 在最为理想的情况下,如果系统提供的是强一致性的保证,针对某一个数据项的更新操作成功后,那么所有的用户都可以立刻读取到更新后的值。 2021-07-31 #Distributes System #consistency #ACID
DDIA-transaction学习 ACID Atomicity: All-Or-Nothing. Transaction 涉及到的多个操作要么一同完成,要么什么都没有做,不能处于 half-finished 的状态。因为各种各样的 fault (比如crash、network connection interruption 以及 disk fail 等问题)可能会导致事务中的操作并没有全部完成,atomicity 为数据库的状态提 2021-07-25 #Distributed System #transaction
2PC and 3PC 本文主要记述在学习 2PC 和 3PC 时的一些思考 2PC关于 2PC 网上有许多文章介绍,在这里不做赘述。下面提几个关键点以及其和 3PC 的联系 对于分布式事务而言,其也要保证 Atomicity,即 All-Or-Nothing,其要存在一个 Commit Point。在这之前事务视作失败(Nothing),在这之后事务视作成功(All)。2PC 中,Coordinator 在 Vote 2021-07-18 #Distributed System #2PC #3PC
关于git rebase 昨天师兄让我基于他的例子用技术栈重写监控脚本时,需要从 master 获取最新的提交。之前在学校也有过一些使用 git 进行团队协作的经历,所以出于习惯使用了(MyBranch)$ git merge master 。使用 git log 检查提交记录时发现 log 非常混乱,师兄提醒我说从 master 获取时最好使用git rebase,因为这个大库有很多人在开发,master 分支异常活跃, 2021-07-09 #git
LVS负载均衡 负载均衡方案服务器集群对外提供服务时,我们希望请求尽可能平均地分散到各台机器上,有一些负载均衡的解决方案 DNS基于 DNS 的负载均衡实现比较简单,成本低:当 DNS 请求到达 DNS Server 解析域名时,Server 可以根据一些调度策略(按地域、按运营商等等)回复 Client 集群中任意一台服务器的 IP 地址,客户端接下来的请求在 TTL 所指定的时间内将一直发送到此服务器进行处理 2021-07-08 #负载均衡
Windows上使用docker-compose搭建本地伪zookeeper集群 系统环境为 Windows Prerequisites开启 Hyper-V确保你开启了 Hyper-V,可以使用管理员身份运行 PowerShell 或者 Terminal,输入命令 bcdedit /set hypervisorlaunchtype auto并进行重启,注意虚拟机软件 VMWARE 以及 VirtualBox 一些版本与 Hyper-v 存在冲突,如果想要使用它们,需要关闭 Hy 2021-07-04 #zookeeper