MIT6.S081 调试xv6

之前学了一些gdb的使用,但是总不能实际上手操作,不如终端IDE可视化调试。这次由于Docker配置环境,不想再折腾连接IDE调试,于是学习GDB。

阅读更多

MIT6.S081 lab1 utilities

实验一的目的是熟悉系统调用以及有限的C标准库使用,借此实现一些经典的unix命令。

在其中碰到了一些bug,大多与字符串解析有关。只记录了几个有意思点的实验。

搭建环境 : docker+目录映射

阅读更多

滑动窗口法

滑动窗口是一种解题技巧,一句话说明就是维护一个窗口,不断滑动,更新答案。

滑动窗口适合的一维情况,比如数组、字符串;同时,拓展到二维也不是不可能。

根据问题求解的特性,可分为最小滑动窗口和最大滑动窗口两种解题模版。

阅读更多

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协议,这里只挑一些重点讲。复现时应该着重考虑:节点崩溃又上线、不可靠网络。

阅读更多

链表总结

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

常用的套路有:

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