0%

问题诞生

在一次代码review中,被老板喷了下为啥用switch而不用if;对此有点疑惑,当时的理由是:写switch会遗漏break,导致代码出现异常逻辑;当使用switch时,若break漏写的确会导致代码逻辑错误;但这理由并不充分,那么switch到底有啥优点呢?

下面我们探寻下switch的原理!

阅读全文 »

InnoDB体系架构

InnoDB是MySQL数据库中最常用的存储引擎,InnoDB的体系架构如下图所示:
InnoDB体系架构

InnoDB体系架构主要包含三部分:后台线程,缓冲池,文件。

阅读全文 »

前言

在操作系统出现之前,程序曾经存放在卡片上,计算机每读一张卡片,就运行一条指令,这个时候程序是直接从卡片到执行;但这种从外部存储媒介上直接执行指令的做法效率极低,且灵活性很差,一次只能一个卡片来处理;因此人们发明了内存存储器,来将需要运行的程序先行加载,再自动执行,从而提高效率和灵活性。
由于内存的出现,出现了“存储的程序”概念的出现,而存储的程序概念又导致计算机及软件系统的革命性变化,此后人们对内存的要求越来越高。

背景

理想的情况下,程序员或用户对内存的要求是:大容量,高速度和持久性。但程序员面临的物理现实却是一个由缓存、主存、硬盘等组成的内存架构。
缓存的特点:低容量、高速度、高价格;
主存的特点:中容量、中速度、中价格;
硬盘的特点:大容量、低速度、低成本;
这样的存储架构和程序员、用户的期望相差较大;要以现在的架构为程序员所需的内存抽象,需要一个巧妙有效的内存管理机制。

阅读全文 »

前言

计算机操作系统是一门“人造的”系统;处处都透露这人类的思考惯性,人性的哲学原理。从人类本身的处理角度去理解操作系统中线程的各种原理是很有必要的,会让你对线程的理解更加深刻。

背景

如我们所知,进程是一段运转的程序,是为了CPU上实现多道编程而发明的一个概念。在操作系统层面,进程是一系列计算机指令的聚合。当进程遇到阻碍时,比如用户输入等,会阻塞整个进程;后续跟输入无关的指令也得不到执行;因此,把进程中的指令分为几份不同的功能;每一份就是所谓的“线程”。
线程模型

基于上述的描述,我们对线程进行定义:线程就是在进程里一个单独的顺序控制流。至于进程把哪些指令切分成进程,后面文章再进行分析。下面我们开始养金鱼。

阅读全文 »

前言

如果世界上只有一种分布式一致性算法,那就是Paxos。Paxos是出了名的晦涩难懂。
Paxos有点类似2PC和3PC,但是它解决了这两种算法存在的问题。
先简要介绍下2PC和3PC的做法和缺陷:

阅读全文 »