MIT6824笔记七 链式复制

这节课主要介绍了链复制的基本思想以及链复制的改进(Chain Replication with Apportioned Queries,CRAQ)。

CRAQ通过引入版本机制以及clean/dirty状态机制来改进多个节点的分散读。当数据首次到达中间节点时,该数据会被标识为dirty;当数据达到tail节点时,数据标识为clean,并进行反向传播,使之前的节点也将该数据标识为clean。

论文:https://pdos.csail.mit.edu/6.824/papers/craq.pdf

阅读更多

MIT6824笔记五 Raft

Raft是一个分布式共识算法/协议,即让多台机器达成一致的算法。

Raft将共识问题分解为三部分:Leader选举、Log复制以及安全性设置(一致性设置)。

由于实验2完整复现了Raft协议,这里只挑一些重点讲。复现时应该着重考虑:节点崩溃又上线、不可靠网络。

阅读更多

链表总结

链表的题目多涉及指针操作,需要画图显示步骤,不然容易搞混。

常用的套路有:

  • 双指针(前驱后继指针、快慢指针、奇偶指针)
  • 虚拟头节点(好处:需要前驱节点时,总能找到前驱节点。比如在删除头节点时,我们可以找到头节点的前驱。)
阅读更多

Redis学习篇

Redis是一款用C编写的基于内存的非关系数据库,实际开发中,Redis用作缓存数据库,用来减轻后端数据库的压力。Redis全称为:Remote Dictionary Server(远程数据服务)。

Redis官网::http://redis.io/

在线尝试:https://try.redis.io/

咱认为,学习Redis的最佳方式是从项目开始。先学一点数据结构Redis的终端命令,然后再接入SpringBoot快速上手项目使用。学完基本数据使用后,再探究其原理。

阅读更多

设计模式学习

设计模式大致分为三类。

  • 创建者模式:提供一种创建对象的方式,同时隐藏了创建对象的逻辑。而不是直接使用new创建对象。
  • 结构型模式:结构型模式更加关注对象与对象之间的关系与组合,旨在构建灵活可复用的类和对象结构。
  • 行为型模式:关注类或对象之间的通信、协作、职责分配。旨在对象间的责任分配和算法封装。

记住所有的设计模式是愚蠢的,关注自己所在领域常用设计模式,语言框架中默认使用的设计模式。

阅读更多

Git快速入门

Git是一个版本控制工具,通常配合远程代码仓库多人协作开发。上手Git并不难,用过之后就会觉得真香。我入门的方式就是给一个项目提Pull Request。

git学习思路:单链 -> 树 -> 多棵树

  1. 本地版本控制(利用状态机的思想学习Git)

  2. 分支版本控制(利用树的思想)

  3. 远程仓库控制(两颗树之间的对应!)

最后学习学习git相关的配置文件,git就算简单入门了。

推荐阅读:https://www.progit.cn/#_pro_git

在线Git闯关-图形化学GIt:https://learngitbranching.js.org/?locale=zh_CN

阅读更多