MIT6.S081 调试xv6

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

阅读更多

MIT6.S081 lab1 utilities

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

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

搭建环境 : docker+目录映射

阅读更多

二分法

二分法的框架好写,但正确的二分法难写。

私以为:二分法的精髓在于,每次迭代时,保留答案存在的区间或者丢弃答案不存在的区间,从而缩小查找范围。

需要注意的是:保留答案存在的区间时,需要避免无限循环;二分区间状态转移的一致性。

题单:https://leetcode.cn/studyplan/binary-search/

阅读更多

滑动窗口法

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

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

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

阅读更多

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

阅读更多