我在Salira的800天(2009.5.20~2011.7.29)-三.研究与学习篇

本博客(http://blog.csdn.net/livelylittlefish )贴出作者(阿波)相关研究、学习内容所做的笔记,欢迎广大朋友指正!

Content
零.序
一.感谢篇
二.工作篇
三.研究与学习篇
1. 研究与学习回顾
(1) glibc代码研究
(2) STL代码研究
(3) boost::lexical, boost::multi_index_container子库的研究
(4) Linux kernel代码研究
(5) Nginx-1.0.4代码分析
(6) 数学、智能、思维相关问题研究与学习
2. 研究与学习结果
3. 研究与学习心得
四.总结篇

全文在线阅读

三.研究与学习篇

1. 研究与学习回顾

(1) glibc代码研究

主要是针对<程序员的自我修养-链接、装载与库>这本书所做的研究与学习,重点关注如下问题。

  • 编译、链接过程
  • 目标文件格式
  • 可执行文件的装载过程
  • 静态链接过程,符号解析与重定位
  • 动态链接步骤与实现
  • Linux共享库的创建、安装、版本
  • 堆与栈、堆的分配算法
  • 函数调用栈分析
  • 运行库如何实现C++全局构造和析构
  • ...
  • POSIX线程库

关于该专题,笔者已经完成的文章如下,其他文章有待继续整理。

  • <Is glibc or uclibc thread-safe>
  • <glibc及其与gcc的关系简介>
  • <gcc, glibc, binutils间的关系>

(2) STL代码研究

研究对象是SGISTL3.3,GCC-4.1.2自带的STL这两个版本。尤其对其中的List,heap,queue,deque,vector,set, map,rbtree等数据结构设计和实现有较深入的研究,并通过例子跟踪调试,并动手实现大部分的数据结构。

笔者希望能整理出关于该专题的文章,让自己不忘这些经典数据结构的设计技巧和实现方法。

(3) boost::lexical, boost::multi_index_container子库的研究

对boost的overview及boost::multi_index_container子库的原理、使用进行了比较深入的研究,可参考如下文章,共计14篇文章,且该专题也是“重构”的一个非常好的例子。

  • Boost简介
  • Boost库的命名规则
  • Win32平台Boost的编译方法
  • Linux平台Boost的编译方法
  • Win32平台如何配置才能使用Boost、ACE、CppUnit
  • Boost组件multi_index_container实例(1)
  • Boost组件multi_index_container实例(续2)
  • Boost组件multi_index_container实例(续3)
  • Boost组件multi_index_container实例(续4)
  • Boost组件multi_index_container实例(续5)
  • Boost组件multi_index_container实例(后续)
  • Boost组件multi_index_container组合查询实例(1)
  • Boost组件multi_index_container组合查询实例(续2)
  • Boost组件multi_index_container组合查询实例(续3)

该专题的研究主要是为了DePON1.5系统中QoS模块重构,其中对MIBTable数据结构的修改,先采用了boost::multi_index_container,于是研究了一下该子库的使用方法;由于该设计不能很好的反映table间的关系,故后来改用链表(模板)来表示数据集本来的物理关系。

(4) Linux kernel代码研究

主要关注以下几个方面,先从其基本原理,基本设计思想入手,然后逐个深入分析,并写成文章。这是笔者的目标。

  • 内核数据结构
  • 中断及中断处理
  • 系统调用原理及其实现
  • 进程管理、进程调度、进程地址空间
  • IPC通信、内核同步方法
  • 虚拟文件系统
  • 内存管理
  • 页面缓存和页回写
  • 内核调试

关于LinuxKernel方面的研究,笔者希望继续坚持研究,坚持原创。这将是笔者未来3年内学习重点。笔者坚信,对内核的深刻理解一定会让很多工作事半功倍。

(5) Nginx-1.0.4代码分析

目前还处在Nginx的数据结构分析阶段,已经完成pool,List,array,queue,hash数据结构的分析,可参考如下文章。

  • nginx-1.0.4源码分析—模块及其初始化
  • nginx-1.0.4源码分析—内存池结构ngx_pool_t及内存管理
  • nginx-1.0.4源码分析—数组结构ngx_array_t
  • nginx-1.0.4源码分析—链表结构ngx_list_t
  • nginx-1.0.4源码分析—队列结构ngx_queue_t
  • nginx源码分析—hash结构ngx_hash_t(v1.0.4)

笔者研究Nginx的目的是希望能该中学习其作者优秀的设计方法和实现技巧,同时也为了给自己竖立一个短期目标,充实自己的业余时间。

(6) 数学、智能、思维相关问题研究与学习

如网络上流传甚广的砝码分盐问题等思维问题的思考、解决和总结。关于该问题,笔者从数学和计算机的角度对其进行了全面的分析和解决,因太长,故分节如下。

  • 砝码分盐问题——从数学和计算机的角度分析(1)
  • 砝码分盐问题——从数学和计算机的角度分析(2)
  • 砝码分盐问题——从数学和计算机的角度分析(3)
  • 砝码分盐问题——从数学和计算机的角度分析(4)
  • 砝码分盐问题——从数学和计算机的角度分析(5)
  • 砝码分盐问题——从数学和计算机的角度分析(6)
  • 砝码分盐问题——从数学和计算机的角度分析(7)
  • 砝码分盐问题——从数学和计算机的角度分析(8)
  • 砝码分盐问题——从数学和计算机的角度分析(9)
  • 砝码分盐问题——从数学和计算机的角度分析(10)
  • 砝码分盐问题——从数学和计算机的角度分析(11)

合集请参考<砝码分盐问题——从数学和计算机的角度分析>(提供下载)。

其他问题,如奇阶幻方笔者从数学的角度分析其特性、解的通用性等,其他诸如中国余数定理、12球问题、13球问题、64球问题等知识、智能开发相关的问题。另外,网络上有个经典的面试题目,即阅读论文A Sorting Algorithm forPolynomial Multiplication并实现其中算法,该论文讲述多项式乘积算法及其优化,笔者为其实现了前两个算法,并完成相关文档。

笔者对这类问题的研究,目的是为了让自己能够保持活跃的思维,以养成深入思考问题本质的习惯。

2. 研究与学习结果

写这一节,我想我是可以自豪一下的。

工作和学习中使用Onenote2007做笔记,总计1600页(大约三分之一是工作笔记)。其中部分内容发到了blog上,希望能继续整理、发布。除此之外,笔者在平时的工作和学习中,养成了随身携带笔记的习惯,将自己的学习和思考、idea、工作计划、to-do-list、心得等随时记下,共计13.3本。

3. 研究与学习心得

此处记录笔者研究开源代码的方法。

读源码,有一项重要的任务,就是搞懂数据结构,包括逻辑结构和物理结构,搞懂对象间的关系,搞懂数据的流向。关于这一点,看参考Nginx-1.0.4源码分析的相关文章hash结构ngx_hash_t(v1.0.4)等。

此外,如下几个问题也应该考虑。

  • 了解业务流程,设计,和软件架构
  • 了解层次关系,如类层次、类关系、类依赖、类继承等
  • 了解数据结构及数据流向,对象内存结构(最好的方法是debug)
  • 若有日志系统,打开日志功能(日志记录执行过程,分析方便)
  • 还要会compile,debug,install等
  • 学习其设计模式,设计方法,实现技巧

你可能感兴趣的:(数据结构,工作,linux,算法,代码分析,sorting)