phphot

php,apache,mysql,linux

排序:
默认
按更新时间
按访问量

系统程序员成长计划-分离用户界面与内部实现(一)

系统程序员成长计划-分离用户界面与内部实现(一)用户界面就是与用户交互的接口,通常包括输入和输出(显示)两个部分。用户使用键盘等输入设备把数据输入给程序,程序做相应处理后,输出结果到显示器或其它设备上。所谓的内部实现(也称为内部逻辑)就是负责数据处理的这一部分功能,它占的比例最大,其实现也最复杂。...

2009-07-16 17:31:00

阅读数:15171

评论数:10

系统程序员成长计划-文本处理(三)

系统程序员成长计划-文本处理(三)管道过滤器(Pipe-And-Filter)模式按照《POSA(面向模式的软件架构)》里的说法,管道过滤器(Pipe-And-Filter)应该属于架构模式,因为它通常决定了一个系统的基本架构。管道过滤器和生产流水线类似,在生产流水线上,原材料在流水线上经一道一道...

2009-07-06 17:21:00

阅读数:991

评论数:2

系统程序员成长计划-文本处理(二)

Builder模式前面我们学习了状态机,并利用它来解析各种格式的文本数据。解析过程把线性的文本数据转换成一些基本的逻辑单元,但这通常只是任务的一部分,接下来我们还要对这些解析出来的数据进一步处理。对于特定格式的文本数据,它的解析过程是一样的,但是对解析出来的数据的处理却是多种多样的。为了让解析过程...

2009-06-26 11:16:00

阅读数:801

评论数:2

系统程序员成长计划-文本处理(一)

系统程序员成长计划-文本处理(一)状态机(1)o 有穷状态机的形式定义有穷状态机是一个五元组 (Q,Σ,δ,q0,F),其中:Q是一个有穷集合,称为状态集。Σ是一个有穷集合,称为字母表。δ: Q xΣQ称为状态转移函数。q0 是初始状态。F 是接受状态集。教科书上是这样定义有穷自动机的,这个形式...

2009-06-12 14:10:00

阅读数:1032

评论数:0

系统程序员成长计划-像机器一样思考(三)

系统程序员成长计划-像机器一样思考(三)hello world的密秘hello world是最经典的入门程序,该程序因Brian Kernighan 和DennisRitchie编写的《C语言程序设计》(The C Programming Language)而广泛流传。helloworld同样也是...

2009-05-31 21:38:00

阅读数:929

评论数:0

系统程序员成长计划-像机器一样思考(二)

谁在call我-backtrace的实现原理显示函数调用关系(backtrace/callstack)是调试器必备的功能之一,比如在gdb里,用bt命令就可以查看backtrace。在程序崩溃的时候,函数调用关系有助于快速定位问题的根源,了解它的实现原理,可以扩充自己的知识面,在没有调试器的情况下...

2009-05-24 10:38:00

阅读数:868

评论数:0

系统程序员成长计划-内存管理(四)

惯用手法 《POSA(面向模式的软件架构)》中根据模式粒度把模式分为三类:架构模式、设计模式和惯用手法。其中把分层模式、管道过滤器和微内核模式等归为架构模式,把代理模式、命令模式和出版-订阅模式等归为设计模式,而把引用计数等归为惯用手法。这三类模式间的界限比较模糊,在特定的情况下,有的设计模式可以...

2009-05-08 23:24:00

阅读数:561

评论数:0

系统程序员成长计划-内存管理(三)

内存管理器在前面学习共享内存的时候,我们重新实现了循环队列,两个实现的不同之处只是在于内存分配和释放上。对比一下 fifo_ring_create的实现:第一种实现用malloc分配内存。FifoRing* fifo_ring_create(size_t length){ FifoRing*...

2009-04-29 02:13:00

阅读数:708

评论数:0

系统程序员成长计划-内存管理(二)

线程局部存储(TLS) 同一个进程中的多个线程,它们的内存空间是共享的(栈除外),一个线程对内存的修改,对所有线程都有效。这是一个优点也是一个缺点。说它是优点,线程间的数据交换快捷高效。说它是缺点,一个线程死掉了,其它线程也性命不保。 在unix下,大家一直都对线程不太感兴趣,直到很晚以后才引入真...

2009-04-29 02:10:00

阅读数:730

评论数:0

系统程序员成长计划-内存管理(一)

共享内存 大家都知道,进程的地址空间是独立的,它们之间互不影响。比如同样地址为0xabcd1234的内存,在不同的进程中,它们的数据是完全不同的。这样做的好处有:首先是每个进程的地址空间变大了,让编写程序更为容易。其次是一个进程崩溃了,不会影响其它进程,提高了系统的稳定性。 要做到进程的地址空间独...

2009-04-29 02:07:00

阅读数:709

评论数:0

系统程序员成长计划-工程管理(四)

应用程序前面我们创建的helloworld是一个应用程序工程,它很简单,只使用了标准C的函数。现在我们要建立一个应用程序工程,它将使用前面所写的libbase函数库。o目录结构最顶层目录名用模块名称,这里用appdemo。源文件放在模块下的src子目录里,即appdemo/src。o 创建源文件在...

2009-04-18 17:25:00

阅读数:710

评论数:0

系统程序员成长计划-工程管理(三)

系统程序员成长计划-工程管理(三)函数库现在我们用automake来管理我们前面所建立的函数库,这是一个基础的函数库,我们就把它命名为base吧。o 目录结构base 根目录base/src 源代码目录o 创建Makefile模板base/Makefile.am内容为:SUBDIRS=srcbas...

2009-04-18 17:24:00

阅读数:673

评论数:0

系统程序员成长计划-工程管理(二)

HelloWorldautomake比起IDE要复杂很多,这里我们先写一个Hello World例子,明白其中的基本概念后,再用它来管理实际的工程。o目录结构最顶层目录名用模块名称,这里是helloworld。源文件放在模块下的src子目录里,即helloworld/src。这是惯例。有多个子模块...

2009-04-06 01:38:00

阅读数:561

评论数:0

系统程序员成长计划-工程管理(一)

到目前为止本书的上半部分已经完成了。在上半部分中,我们学习了基本的数据结构、算法和设计思想。在进行深入学习之前,我们把前面所写的代码整理成一个通用的函数库,这个函数可能在以后的工作中用得着。前面我们写的Makefile非常简单,大概类似下面的内容:all: gcc -Wall -g -DDA...

2009-04-06 01:37:00

阅读数:951

评论数:0

系统程序员成长计划-算法与容器(三)

前面我们通过容器接口抽象了双向链表和动态数组,这样队列的实现就不依赖于具体的容器了。但是作为队列的使用者,它仍然要在编译时决定使用哪个容器。队列的测试程序就是队列的使用者之一,它的实现代码如下: Queue* queue = queue_create(linear_container_dli...

2009-03-27 01:26:00

阅读数:617

评论数:0

系统程序员成长计划-容器与算法(二)

容器用来存储数据,算法用来处理数据。容器有多种,算法的种类更多,两者的组合数目就数不胜数了。如果同样的算法要为每种容器都写一遍,写的时候单调不说,维护起来也很困难。所以我们一直在寻找让算法独立于容器的方法,让同一种算法能适用于所有(或多种)的容器。在开始的时候,我们通过foreach遍历函数+回调...

2009-03-27 01:25:00

阅读数:590

评论数:0

系统程序员成长计划-容器与算法(一)

前面我们通过组合的方法,用双向链表实现了队列。大家已经看到,它的实现非常简单。有的读者可能会问了:你说过双向链表和动态数组都有各自的适用范围,在有的情况下,用双向链表合适,在有的情况下,用动态数组合适。你用双向链表实现了队列,是不是有必要用动态数组再实现一次呢?如果对栈同样如此,那是不是做了太多重...

2009-03-27 01:24:00

阅读数:829

评论数:0

系统程序员成长计划-组合的威力(四)

哈希表前面我们已经体会到了组合的威力,用短短几十行代码就搞定了队列和栈。现在轮到哈希表了,在此之前已经有几位读者向我抱怨,哈希表太难写了!其实哈希表也很简单,前面我们说了队列和栈只不过是链表或者数组的特殊情况而已,哈希表当然不再是链表或者数组的特殊情况了,但是我们同样可以用组合的方式来实现它。简单...

2009-03-27 01:20:00

阅读数:639

评论数:0

系统程序员成长计划-组合的威力(三)

栈栈是一种后进先出(LIFO, last in firstout)的数据结构,与队列的先进先出(FIFO)相比,这种规则似乎不太公平,计算机可不管这个。事实上,栈是最重要的数据结构之一:没有栈,基于下推自动机的编译器不能工作,我们只能写汇编程序。没有栈,无法实现递归/多级函数调用,程序根本就无法工...

2009-03-27 01:18:00

阅读数:748

评论数:0

系统程序员成长计划-组合的威力(二)

队列队列是一种很常用的数据,操作系统用队列来管理运行的进程,驱动程序用队列来管理要传输的数据包,GUI框架用队列来管理各种GUI事件。队列是一种先进先出(FIFO, First in Firstout)的数据结构,数据只能从队列头取,向队列尾追加。队列的名称很形象的表达了它的意义,就像排队上车一样...

2009-03-27 01:17:00

阅读数:645

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭