6.824 lab1通关记录
6.824 lab1通关记录lab1终于过了,不是都说lab1巨简单🐎,鼠鼠感觉也不算特别简单。我看了一些博客,和其他人的实现,给我抄完了。🐀是废物
实验介绍实验具体需要先看看MapReduce论文,学习完论文后看需求文档,很多实验细节需求文档有给。
实验需求文档:lab1实验文档
实验中MapReduce论文:MapReduce论文
论文中文版:MapReduce论文中文版
(实验介绍大部分是从lab1实验文档里面拷贝下来的,直接看实验文档也行)
描述实现分布式mr,一个coordinator,一个worker(启动多个),在这次实验都在一个机器上运行。worker通过rpc和coordinator交互。worker向coordinator请求任务并执行,输出结果保存到磁盘。
简单的顺序MRlab给了一个简单的顺序MapReduce程序给我们学suo习。具体逻辑main/mrsequential.go中。执行以下命令,运行一个单词统计程序。
123456$ cd ~/6.5840$ cd src/main$ go build -buildmode=plugi ...
6.824学习
介绍6.824 是MIT开设的一门讲解分布式系统的课程。课程内容包括Golang语言的学习、分布式系统研究的动机、一致性协议算法、著名分布式系统软件论文讲解和一致性算法实现实验。这门课是一门实践性质比较强的课程。
不过听网上的人说,写完以后就只是对raft更熟悉一点,不知真假。最近也打算学习一下6.284了,希望能成功写完所有lab吧。
资源
课程官方网站
课程表
视频
任务表
lab1 ✔
6.824 lab1通关记录
lab2
lab3
lab4
iOS入火坑之:一文入门oc
oc初识介绍Objective-Objective-C是C语言的严格超集--任何C语言程序不经修改就可以直接通过Objective-C编译器,在Objective-C中使用C语言代码也是完全合法的。Objective-C被描述为盖在C语言上的薄薄一层,因为Objective-C的原意就是在C语言主体上加入面向对象的特性。
oc文件类型如下:
扩展名
内容类型
.h
头文件。头文件包含类,类型,函数和常数的声明。
.m
源代码文件。这是典型的源代码文件扩展名,可以包含 Objective-C 和 C 代码。
.mm
源代码文件。带有这种扩展名的源代码文件,除了可以包含Objective-C和C代码以外还可以包含C++代码。仅在你的Objective-C代码中确实需要使用C++类或者特性的时候才用这种扩展名。
类的实现
类的声明,还没有实现
12345678910// Fanser.h文件// 继承NSObject类@interface Fanser : NSObject { //成员变量 int age;}// 属性,方法声明@prop ...
一文了解Netty的使用
一文了解Netty的使用lshelloworld使用前需要导入netty依赖
12345<dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.79.Final</version></dependency>
hello-server
1234567891011121314151617181920212223public static void main(String[] args) { // ServerBootstrap是一个启动器,负责组装netty组件 new ServerBootstrap() .group(new NioEventLoopGroup()) // 选择 服务器的serverSocketChannel实现 .channel(NioServerSocketChannel ...
前缀和与差分
前缀和一维前缀和前缀和可以用来求数组中0 到 i 的所有数字之和。对于数组a,如果我们要创建一个数组,里面存储的是 a[0] 到 a[i] 的所有数字之和。我们只需要遍历 a, 令 a[i] = a[i] + a[i - 1]即可。
12345678class Solution { public int[] preSum(int[] a) { for (int i = 1; i < a.length; i++) { a[i] += a[i - 1]; } return a; }}
例题560. 和为 K 的子数组 - 力扣(Leetcode)
给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 。
示例 1:
12输入:nums = [1,1,1], k = 2输出:2
示例 2:
12输入:nums = [1,2,3], k = 3输出:2
其他例题525. 连续数组 - 力扣(L ...
单例模式
单例模式单例模式,属于创建类型的一种常见的软件设计模式。通过单例模式可以确保一个类在当前进程中只有一个实例。当然,根据需要,也可能时一个线程中的单例,比如线程上下文内使用同一个实例。
单例模式一共有两种方式:饿汉式,懒汉式
饿汉式所谓饿汉式就是在类加载的时候就进行初始化目标对象,以后去获取该的单例对象时就直接获取即可。
123456789class Singleton implements Serializable { private static final Singleton instance = new Singleton(); public static Singleton getInstance() { return instance; } public Object readResovle() { return instance; }}
需要设置为private,防止被别的类改动,破坏单例,但是private并不能防止通过反射破坏单例。
需要添加 fin ...
内存管理(二):高速缓存
高速缓存程序和数据是存储在磁盘中的,由于访问磁盘的速度非常慢,所以在程序执行的过程中,需要将磁盘中的程序和数据加载到内存中。这样可以将内存看成磁盘的cache
虽然说内存比磁盘快很多,但是对于现在的CPU来说,访问内存还是太慢了。所以CPU里面还有高速缓存。
分层
越往上层,读写速度越快,成本越高,容量越小
为何这种层次是可行的
从硬件上:较慢的存储设备比较快的存储设备更便宜
从软件上:一个编写良好的程序应该具备良好的局部性
时间局部性:一个数据第一次被访问后,很可能在不久以后再次被访问
空间局部性:一个数据被访问以后,那么程序很可能在不远的将来访问这个数据附近的数据
访问过程
如果就寄存器中没有数据,去L1中读取,
如果不命中,则从L2中读取数据到L1
如果L2也不命中,则到L3中读取到L2
如果L3也不命中,则到主存中读取到L3
主存依然不命中,则到磁盘中读取数据到主存
注:缓存不命中到下一层取数据时是以数据块的形式拿数据的,一般一个数据块是4KB,因为空间局部性
定位高速缓存中的数据缓存中的结构
将高速缓存分为S个组,一个组内有E个缓存行,一条缓存行包含:有 ...