(转)面试中的Singleton

Singleton 经常在面试中谈到,转一篇挺有意思的文章: 面试中的Singleton

引子

“请写一个Singleton。”面试官微笑着和我说。 “这可真简单。”我心里想着,并在白板上写下了下面的Singleton实现:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
class Singleton
{
public:
    static Singleton& Instance()
    {
        static Singleton singleton;
        return singleton;
    }
private:
    Singleton() { };
};

C++中线程安全且高效的singleton

Singleton是一个非常常用的设计模式,几乎所有稍大的程序都会用到它。所以构建一个线程安全,并且高效的singleton很重要。既然要讨论这个主题,我们就先来定义一下我们的需求:

  • Lazy initialization。只有在第一次使用的时候才需要初始化出一个singleton对象。这使得程序不需要考虑过多顺序耦合的情况。同时也避免了启动时初始化太多不知道什么时候才会用到的东西。
  • 线程安全。多个线程有可能同时调用singleton。如果只需要单线程,那实在没什么需要讨论的。
  • 高效。因为singleton会被反复调用,如果效率低的话浪费太大了。
  • 通用。适合现有的各种平台,以及未来可能出现的平台。 有了这些需求,我们就可以开始讨论如何构造这么一个singleton。下面以C++为基础来解析这个问题。

x86 boot

CF卡上引导VxWorks的三种方法 方法一. 直接引导: 引导扇区 » bootrom.sys » VxWorks 这种方法最快,但要求bootrom.sys保持连续性(可用chkdsk

X86 汇编备忘

x86汇编语言主要有两个语法分支: AT&T和Intel。我们平常接触到的GNU系的工具(包括GCC,OBJDUMP等)都是使用AT&T语法

AT&T Intel 注释
寄存器 %eax eax
立即数 $5 5
指令后缀 movl mov 操作数长度4
操作数方向 movl $5, %eax mov eax,5
寻址1 var [var] 寄存器直接寻址
寻址2 0x8(%eax) [eax + 0x8] 段+偏移寻址
寻址3 %segreg:disp(base,index,scale) segreg:[base+index*scale+disp] 间接寻址

虚拟软盘

3.5寸1.44M软盘的结构:2面、80道/面、18扇区/道、512字节/扇区。 所以其扇区总数 = 2 * 80 * 18 = 2880;存储容量 = 1474560B 创建虚拟软

EDK II

These are instructions for setting up EDK II build environment on Ubuntu, and building OVMF images for use with qemu.

ubuntu14.04安装后配置

之前一直使用Archlinux,但安装在Mac OSX的parallels desktop虚拟机中,这种滚动更新的方式经常会带来一些问题,比如Xorg的版本升级太快导致parallels tools不支持。所以准备换一个长期支持版的ubuntu,这个parallels官方的支持应该会及时一些。这里记录一下ubuntu 14.04安装之后的配置。

字节对齐

在C/C++中,字节对齐指的是数据在内存中的位置是否对齐,如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cp

Migrate From Octopress to Hexo

hexo出自台湾大学生tommy351之手,是一个基于Node.js的静态博客程序

Hexo is Better than Octopress

  • Simple and Quick

    hexo n #写文章 hexo g #生成 hexo d #部署 # 可与hexo g合并为 hexo d -g