1. 变量 变量的赋值用 等号, 但是等号间不能有空格 foo=42 # sets foo to 42 引用变量的值, 用 $ 符号 echo $foo # prints 42 2. 数组 给数组赋值 foo[0]="one" foo[1]="two" echo ${foo[1]} # prints "two" 换种...
经典 TWO-PHASE COMMIT PROTOCOL
本文详细描述经典的 TWO-PHASE COMMIT PROTOCOL(后面简称 2PC 协议)。 注意:本文只描述了经典的 2PC。没有描述 2PC 的各种变种和优化。 为了更好的理解,先描述一下无故障时协议怎么工作。 然后再对协议运行过程中可能碰到的各种故障进行讨论,说明在这些故障的场景下,怎么处理这些故障来保证协议的正确性。 一 经典 2PC 协议无故障时的工作流程...
Java 异常实践总结
本文对异常处理的种类进归纳, 试图总结出一种好的异常处理的实践方法 为了更好的描述异常处理方法, 先把项目分成两大类, 当工作在不同的项目时, 程序员需要站在不同的位置上来采用合适的异常处理方法. 一, 应用程序中的异常处理 主要是指程序员是在开发一个被用户使用的程序, 例如, 一个桌面软件, 一个web应用服务器, 或者一个网络应用服务器. 这类程序的工作就是要帮助用户完成一个任务...
分布式系统中 Unique ID 的生成方法
本文主要介绍在一个分布式系统中, 怎么样生成全局唯一的 ID 一, 问题描述 在分布式系统存在多个 Shard 的场景中, 同时在各个 Shard 插入数据时, 怎么给这些数据生成全局的 unique ID? 在单机系统中 (例如一个 MySQL 实例), unique ID 的生成是非常简单的, 直接利用 MySQL 自带的自增 ID 功能就可以实现. 但在一个存在多个 Shard...
Java GC 调优
序 关于 Java GC 已经有很多好的文档了, 比如这些: 1 2 但是这里还是想再重点整理一下 Java GC 日志的格式, 可以作为实战时的备忘录. 同时也会再整理一下各种概念 一, JDK 6 提供的各种垃圾收集器 先整理一下各种垃圾收集器. 垃圾收集器: 新生代收集器: Serial, ParNew, Parallel Scavenge (MaxGCPaus...
Vim Notes
非插入模式下 英文句号 (.): 重复上一个动作 s: 删除当前字符, 并进入插入模式 f (字符): 跳到当前行下一个字符处. 英文分号 (;): 继续 f(字符) 的动作 cw: 删除当前单词 db: 删除当前单词 dw: 删除当前单词 daw: 删除当前单词 ctrl - e: 锁住光标...
Git Notes
1. 新建远端 Git 仓库 先取好库的名字 (例如: myfirstrepo), 然后在 GitHub 等 Git 服务上建立新的 repository (参考具体服务帮助) 在 GitHub 上新建好库以后, 在本地新建目录 myfirstrepo. 然后执行 git init 然后 新建 README.md AUTHORS 文件. 提交到本地库的 master 分支上面...
Linux Page Cache and Buffer Cache
〇, 目的 Linux Kernel 为存取速度慢的 Block 设备提供了两种比较通用的 Cache 机制: Page Cache: 为以页 (Page) 为单位的操作提供 Cache Buffer Cache: 为以块 (Block) 为单位的操作提供 Cache 本文的目的就是介绍这两种 Cache 的相关知识. (待)
Linux 内存管理
本文简单介绍 Linux Kernel 怎么管理内存. 包含内核物理内存管理和用户空间内存管理两大部分. 1. Page Frame Linux Kernel 以物理 Page (即 Page Frame) 为基本单位来进行物理内存管理. 而对不同的 Architecture, Page Frame 的大小也不一样, 不过一般的 32 位的 Architecture 的 Page Fra...
Basic Paxos
Paxos Made Simple 论文 Notes。 一. 算法背景 Paxos 算法是用来解决什么问题? 先看一个场景: 一个日志收集系统,需要从多个不同的机器上收集日志。 最简单的实现方式是,找一台中心服务器,所有的日志生产机器作为客户端,不断的把日志发送到中心服务器,中心服务器存放所有收集到的日志。 但这种实现方式有一个问题,中心服务器是一个单点,一旦中心服务器发生故障,整...