0%

摘要

GFS是一个可以支持上千个机器和硬盘,上百用户同时访问的文件系统

介绍

问题或现象 解决办法
机器错误 持续监控,错误发现,错误处理,自动恢复
文件过大 设计IO操作和block大小
大部分文件写为append而不是overwrite 只优化append保证性能和原子性
引入GFS特有文件读写方式 复用部分文件系统API

设计概述

假设
  • 系统通过廉价机器组成
  • 日常处理GB级的文件
  • 写大部分为append
  • 多个用户看到的同一个文件必须相同
  • 保证高频使用的准确性
接口

GFS不使用类似于POSIX的标准API

架构

Read more »

记得小学阅读课上,我在读一本悬疑小说并写到了读后感作业中,结果第二天就被老师批评,并以“开卷有益”这个成语来教导我说,你这种书以后少读读。当时,我就觉得老师这种说法一定是错的,但限于那时的表达能力和逻辑能力并不能给出完整的反驳,现写下此文以表述自己的想法。
“以后少读读”这句话一直在我脑海中,我不理解曾几何时,书之间也有了贵贱之分,难道读四大名著的就是好学生,读《福尔摩斯》的就是差学生吗?“开卷有益”指的是读书总有好处,并非告诉我们先对于书是否有益有了定性之后再去读。老师说的这些话显然是没有道理的。
那她又是出于什么原因这样说呢?说到底,四个字,功利主义。什么书对于学习有帮助那就是有益的,没帮助就是浪费时间。我们中的很多人从小被灌输这样一个观念:只有努力学习才能上好大学,只有上好大学才能找到好工作,才能有幸福的生活。曾经我也认为这句话是对的,为了以后能开心地生活现在必须努力学习。但真的是这样吗?从学校到工作到生话并非完全是后者依赖前者的先序关系,其中某一环节的丢失并不一定能影响到之后的生活。这种观点只是指出人生中几个重要结点,并对每一个结点提出要求。上了好大学能就能仕途一帆风顺,有了好工作真能天天开开心心享受生活?不尽然。
前段时间,“鸡娃”一度成为社会热点问题,家长给孩子报了各种补课班,兴趣班,以求孩子能领先他人一步。我想,他们也许都是上文观点的拥趸,生怕自己孩子因为没补课而落后其他同学。其实,我小时候也是个“鸡娃”,从幼儿园开始补课直到高中毕业,周末只是换了个地方上课。现在看来,报那么多班其实未必有用,现在的我也只是刚从普通大学毕业,过着平淡的生话。每个人学习能力不同,那假设补课班是有用的,能让所有上课的孩子成绩提升,考上好大学,但那之后呢,补课班除了能培养出优秀的做题家外并不会给孩子带来什么。
好大学并不是人生的终点,拥有幸福快乐的人生也不是名校生的特权,否则怎么会有某大学投毒案,某大学弑母案呢?这一切的一切都是功利主义在作祟,他们认为人生只需要为那几个重要结点去准备就行了,达到目的则视为成功,在他们的眼中,世界是线性的,必须要完成一个个小目标,追求利益最大化,否则就是失败。但他们不知道的是人生并不是一蹴而就的,阶段性的成功并不意味着什么。事物之间也在不断变化发展,幸福的人生并不是公式化的结果,在这之中更重要的是我们对为人处世的态度,以及对于个人,社会,以及世界的看法,这会贯穿人的一生,而非学校,工作等短暂的光环。
冯友兰先生将人生分为四种境界:自然镜界,功利境界,道德境界和天地境界。你我皆为凡人,虽难以达到“敬天爱人,天人合一”,但也不应在功利境界一直徘徊,为了眼前的利益患得患失。“开卷”何必“有益”,看自己想看的书,做自己想做的事,何必要按照公式走完自己的人生呢。

Read more »

第二章 C++基础——指针

指针是一个变量,其存储的是值的地址,而不是值本身

使用常规变量时,值是指定的量,而地址是派生量,而指针相反

OOP强调的是在运行阶段(而不是编译阶段)进行决策,提供了灵活性,对于内存管理也更加高效

初始化指针

1
2
int* ptr_a;
double* ptr_b;

初始化时必须指定所指元素类型,因为对所有指针来说其都是代表一个初始地址,但从该初始地址读多少字节则由指针类型判断

指针也是作为变量存储,只不过其内存空间存的是地址。指针p1,p2有各自的地址&p1,&p2。长度为4B(32位)或8B(64位)。p1,p2表示存储的所指向元素的地址。*p1表示指向元素的值。
image.png

指针注意事项

在C++中创建指针时,计算机将分配用来存储地址的内存,但不会分配用来存储指针所指向的数据的内存(指向不确定)。另外,一定要在对指针提取(*)之前,将指针初始化为一个确定的、适当的地址。

Read more »

基本内置类型

算术类型

类型 含义 最小尺寸
bool 布尔 未定义
char 字符 8位
short 短整型 16位
int 整型 16位
long 长整型 32位
long long 长整型 64位
float 单精度浮点数 6位有效数字
double 双精度浮点数 10位有效数字
long double 扩展精度浮点数 10位有效数字

类型转换

  1. 当一个算术表达式中既有无符号数又有int值时,int会被转换为无符号数
  2. 当从无符号数中减去一个值时,不管这个值是不是无符号数,都必须保证结果不为负(否则为取模后值)

变量

变量声明于定义的关系

变量声明(declaration)定义了变量的类型和名字,定义(definition)在声明外还申请存储空间

如果只想声明,可在变量名前添加关键字extern

变量只能被定义一次,但是可以多次声明

Read more »

const限定符

const对象一经创建后其值不能再改变,所以const对象必须初始化

1
const int i = 1;

默认情况下,const对象仅在文件内有效。若需在不同文件使用同一const对象,则const变量不管是声明还是定义都添加extern关键字,这样只需定义一次就可以了

1
extern const int bufSize;

const的引用

用于声明引用的const都是底层const,引用本身已默认为顶层const(无法改变指向)

const型变量只能由const型引用(底层const)

不能把普通引用绑定到字面值上,需用底层const

非const型变量可以由const型引用,但不可通过引用修改被引用变量值

Read more »

当执行throw时,throw后的语句都不执行,控制权转移到与之对应的catch模块

退出catch后,catch模块中的局部变量将会销毁

当异常处理完毕后,异常对象将被销毁

1
2
3
4
5
6
7
try{
//...
}catch (exception_a){
//...
}catch (exception_b){
//...
}

捕捉catch(对于每个catch执行下述步骤)

  1. 判断是否是精确匹配
  2. 派生类向基类转换(仅引用和指针类型)
  3. (…)匹配所有

其中一个被捕捉,跳过下面的catch

重新抛出

一条catch语句通过重新抛出的稻作将异常传递给另一个catch语句

1
throw;
Read more »

static全局变量

static变量只能在当前文件访问,其他文件不能通过extern访问

static局部变量

定义时创建,程序结束时销毁,修改了生命周期,作用域不变

static类

static对象的构造在main函数前执行,析构在main函数结束后

static成员变量

存在于所有对象且保持一致,可在其他文件访问

不能在初始化列表初始化

需在类外定义,因为class内语句都是声明

Read more »

面试题汇总

C++

基础知识

C 和 CPP 区别是什么

C C++
编程范式 面向过程 面向对象
函数重载
引用

C++编译过程

预处理:展开include和define

编译:转化为汇编代码

汇编:转化为二进制机器码

链接:将目标和其需要的库链接成可执行文件

Read more »

第五章 面向对象编程(二)

引用的其他用法

引用作为成员变量

函数返回引用,可以将返回值做左值

拷贝构造

通过类的其他对象初始化当前对象(有默认拷贝构造方法,成员对成员的拷贝,可能发生对象的嵌套拷贝)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//During call by value
void roster(Person){};
Person child("Ruby");
roster(child); // call copy ctors

// During initialization, call copy ctor
Person baby_a("Fred");
Person baby_b = baby_a;
Person baby_c(baby_a); // same as above

//During function return
Person captain(){
Person player("George");
return player;
}

T::T(const T&)

建议每个类提供默认构造函数,拷贝构造函数,虚函数

其他

Read more »

模版函数(template function)为声明不是定义,在使用时根据输入类型定义

使用模版时,不会使用隐式类型转换

类模版里的每个函数都是函数模版,需要在声明前加上template

1
2
3
4
5
template <typename elemType>
class BinaryTree{
private:
BTnode<elemType> *_root;
}
Read more »