章炎的主页

Table of Contents

1 index

我叫章炎{dirtysalt}{dirlt}.我是一名软件工程师,现在在百度{Baidu}的基础架构部{Infrastructure}工作,主要负责基础组件,开发工具以及分布式系统。 可以从我的linkedin里面看到我做过的projects。感觉自己对各方面都感兴趣,不过现在关注的主要是:

  • 内存管理(Memory Management)
  • 单机存储系统(Storage)
  • 网络编程框架(Network Programming)
  • 程序设计语言和设计模式(Programming Language and Design Pattern)
  • 计算机系统(Compute System)
  • 分布式实践(Distributed System)

我想找到自己最爱的编程语言,然后快速地写出有用的程序。(现在自认为还没有做到这点,what a shame!)

感谢xuchaoqian同学提供给我的空间,让我可以在上面把自己写的东西分享出来,他的空间是 http://xuchaoqian.com/ ,他是一位伟大的工程师。我也将主页内容同步到了SAE上。

1.1 APUE

Unix环境高级编程(Advanced Programming Unix Environment),W. Richard Stevens的神作。笔记里面没有包含书最后的几个部分,比如终端,打印机等,因为我觉得可能大家都不太需要这个东西了。 我还尝试将一些跨章节的概念整合到一起,这样比较容易从总体把握Unix编程环境。同时在后面补充了一些Linux上面特定内容以及系统工具,这个在真正开发Linux程序时候非常有用。

1.2 UNP

Unix网络编程(Unix Network Programming),W. Richard Stevens的又一神作。笔记里面只是对于TCP原理有比较详细讨论,这部分笔记也包含了TCP Illustrated v1里面和TCP相关的章节内容。 对于编程方面也着重TCP socket使用。希望大家可以理解,毕竟在大部分应用场景下面我们选用TCP模型更多,并且TCP里面有很多非常琐碎的知识。

1.3 DBMS

DBMS(database management system)现在正在研究。打算首先阅读一下数据库系统基础教程(A First Course in Database Systems by Jeffrey D. Ullman),然后看看 另外一本也是Jeffrey D. Ullman写的数据库系统实现(Database System Implementation).主要是了解DBMS方面的理论和大致实现,之后会稍微结合现有数据库实现阅读代码(MySQL/PostgreSQL).

1.4 SIMD

SIMD(Single Instruction Muitple Data)单指令多数据。这个笔记其实是Intel Reference Manual中关于SIMD指令的总结。里面包含了一些理解SIMD指令需要的知识,以及对SIMD指令进行了分类。 遗憾的是里面没有什么过多的例子,毕竟这个是结合场景来使用的。

1.5 DesignPattern

将书<Design Patterns: Elements of Reusable Object-Oriented Software>中要表达的思想按照自己的意思整理出来(后面可能会添加一些自己的"设计模式"吧:)。 不过我倒是觉得没有必要在使用中刻意地去拼凑使用某种模式,相反应该让模式渗入到自己的思想中去,指导自己写出更加优美更加可维护的代码,而不用在意"我使用了哪种模式". 然后现在我开始逐渐认同一个观点,那就是"设计模式是语言表达能力存在缺陷的一种表现".

1.6 Compress

  • snappy google的开源压缩解压库。在满足一定压缩比率的条件下着重提升压缩和解压速度。
  • lzf redis使用的开源压缩解压库。轻量(两个文件)可以很容易地独立纳入项目。

1.7 Memory Management

  • tcmalloc google的开源线程缓存内存分配器,解决多线程下面内存分配效率问题。

1.8 Storage

  • leveldb google的开源kv存储系统。支持billion级别的数据量,适合于写少读多的情况。当时阅读的时候是从github上面clone下来的,可能还存相当多的bug.TODO(dirlt):更深入的阅读.
  • Redis 内存存储系统,支持丰富的数据类型以及相应的计算(支持持久化)。外围包装网络访问接口(并且提供了丰富的客户端),可以比较方便地在分布式系统内或者是环境下面使用.

1.9 Network Programming

  • itachi 自己两天时间写完的异步网络编程框架,当然有很多地方需要改进,但是内核基本稳定了。并且在上面做了asocket封装,编写网络程序非常方便。TODO(dirlt):是否需要专门写篇文章介绍
  • libev 开源的事件触发器。被认为是更高效的libevent.itachi这个项目开始想自己编写事件触发器,但是发现工作比较琐碎枯燥,所以底层还是选择使用libev.
  • hpserver 开源的网络编程框架。可以当做一个入门级的网络编程框架阅读。这个是我最开始阅读的网络编程框架(1st).
  • nmstl 开源的网络编程框架。一个很早期的作品,代码十分简洁。主要是内部实现了SEDA的思想。这个是我第二个阅读的网络编程框架(2nd).
  • muduo 开源的网络编程框架。作者理想中的网络编程框架实现,里面有很多mina/netty的影子。这个是我三个阅读的网络编程框架(3rd).
  • kylin baidu in-house的异步编程框架。linsd的神作,通过阅读这个框架的代码让我理解了异步编程模型。这个是我第四个阅读的网络编程框架(4th).
  • zeromq 开源的消息传输系统。颠覆我们思考和编写网络通信程序的方式。TODO(dirlt):只是阅读了文档和API,可以考虑阅读一下代码.
  • ACE 开源的网络编程框架。非常重量级,也被人诟病为学术产物而不是适合生产实践。TODO(dirlt):只是有大概的了解,有待更深入的研究.

1.10 Computer System

  • 位置无关代码 分析了一下PIC位置无关代码内部的原理以及和动态库之间的关系。通过阅读<深入理解计算机系统>并且结合实际的例子总结出来的。
  • GCC内嵌汇编 如何编写GCC内嵌汇编,以及一些关于GCC内嵌汇编的文章,主要是参考了GCC Manual。但是相信里面有一些理解还是模糊的。
  • 字符编码 介绍了GB2312/GBK/GB18030/Unicode/UTF16/UTF32/UTF8这几种字符编码格式。还是觉得UTF8在设计以及实现上都是更加合理的选择。
  • 构建系统 在实现baidu in-house的构建工具comake2之前,做过构建系统的调研总结出来的。在语法表达上面(非常重要)借鉴了SCons,考虑了其他构建系统提供的功能。
  • OProfile OProfile(系统级profiler)的原理和应用。不过说实话没有分析过源代码(或者是自己技术背景不行)终究觉得对这个东西理解不够深入,而且自己也仅仅是使用OProfile功能的子集。
  • SWIG C/C++多语言扩展接口生成器,使用起来非常方便(至于生成的代码没有看过效率如何).个人觉得比较适合quick & dirty的方案。

1.11 Distributed System

  • StreamBase 在实现baidu in-house的分布式实时流式计算系统之前,调研的商用流式计算系统。没有办法获得源代码只能够从文档中猜测其内部实现以及参考其提供的功能与接口。

Author: dirtysalt1987@gmail.com

Date: 2012-05-11 13:55:38 CST

HTML generated by org-mode 7.02 in emacs 22