摘要:
软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大话设计模式》和《设计模式:可复用面向对象软件的基础》两本书。本文介绍装饰模式的实现。 职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。其思想很简单,考虑员工要求加薪。公司的管理者一共有三级,总经理、总监、经理.. 阅读全文
摘要:
刚开始看到这个模式并不是很理解,之后在网上看到别人的博客,才大致抓住了脉络。何谓抽象和实现分离:就是将一个实际的物件跟它的所具有的功能分离。《大话设计模式》中有对手机品牌和具体的手机应用进行桥接模式分析的例子。具体见http://www.cnblogs.com/jiese/p/3164940.html。附加的理解就是,某个抽象类的子类,与具有的实现形成了一个交叉的二维的关系。 阅读全文
摘要:
1、 管道概述及相关API应用1.1 管道相关的关键概念管道是Linux支持的最初Unix IPC形式之一,具有以下特点:管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程);单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。1.2管道的创建:#include 阅读全文
摘要:
一、什么是信号量为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域。临界区域是指执行数据更新的代码需要独占式地执行。而信号量就可以提供这样的一种访问机制,让一个临界区同一时间只有一个线程在访问它,也就是说信号量是用来调协进程对共享资源的访问的。信号量是一个特殊的变量,程序对其访问都是原子操作,且只允许对它进行等待(即P(信号变量))和发送(即V(信号变量))信息操作。最简单的信号量是只能取0和1的变量,这也是信号量最常见的一种形式,叫做二进制信号量。而可以取多个正整数的信号量被称为通用信 阅读全文
摘要:
网上看到有人对一道题目的求解,看了半天,没看明白。于是自己动手来做了一下。原文链接:http://www.cnblogs.com/justcxtoworld/p/3598791.html题目:描述:输入一串数字,找到其中包含的最大递增数。递增数是指相邻的数位从小到大排列的数字。如: 2895345323,递增数有:289,345,23, 那么最大的递减数为345。输入:输入一串数字,默认这串数字是正确的,即里面不含有字符/空格等情况输出:输出最大递增数样例输入:123526897215样例输出:2689#include #include using namespace std;long max 阅读全文
摘要:
总是觉的学习东西有点猴子掰玉米的感觉。今天就重新再掰一次吧。 Installation: 安装之前建议先安装virtualenv,这个东东是帮助你在多个python版本之间保持同步,不至于python版本变化了,项目就奔溃了。 某些程序猿的装备好些,可能用的是mac,自有类linux的安装方法。无奈本屌丝只能在win下来写写程序。所以只提供win的virtualenv安装方法: 到这里下载http://flask.pocoo.org/docs/installation/#windows-easy-install, 创建python 文件,拷贝distribute_setup.py的内... 阅读全文
摘要:
参考出处:http://www.cnblogs.com/skynet/archive/2010/10/30/1865267.html1、进程与线程 进程是程序代码在系统中的具体实现。进程是拥有所需资源和执行方案的集合。 线程是进程中划分出的可独立执行的一个控制流程。 两者区别: 每个进程有各自独立的地址空间。进程崩溃不会影响到其他进程。 所有线程共享同一进程的资源,除了局部变量和堆之外。线程的崩溃会导致所在进程的挂起。#include <stdio.h>#include <stdlib.h>#include <pthread.h>#include <e 阅读全文
摘要:
一、进程虚拟空间 linux所有的进程都运行在自己的虚拟地址空间中,每个进程都有自己的内存地址。在32位系统中,4GB的进程地址空间被分为用户空间和内核空间两个部分。用户空间占用0-3GB,内核空间范围是3-4GB。 每个进程都会占用如下的数据段: 1. 代码段 用于保存可执行文件的操作指令和程序定义的常量(const,字符常量等)。为了防止代码在运行时候被其他进程修改,代码段只读。多进程也可以共享代码段。 2. 数据段 数据段紧挨着代码段,分为初始化数据段和未初始化数据段(BSS)。此段中存放初始化的全局变量和静态变量,未初始化的全局变量则位于bss段。 3. 堆栈段... 阅读全文
摘要:
C调用python的实例。 1. 应用场景 c代码中需要数据库的支持,但是引入数据库十分的复杂且麻烦,所以考虑用python读取配置文件,然后将数据返回到C。 2.调用步骤 a, 添加必要的宏和python路径#define MS_NO_COREDLL#include "C:\Python27\include\python.h"#pragma comment(lib, "C:\\Python27\\libs\\python27.lib") b,初始化python解释器 Py_Initialize(); if ( !Py_IsInitialized() ) 阅读全文
摘要:
本来对面向对象理解就不深,拿到doubango的代码,感觉无从看起。 挑个通用的面向对象的实现的代码部分,来探究一下。比如,创建sip message的消息时,会调用tsip_message_create()函数,函数内容如下:tsip_message_t* tsip_message_create(){ return tsk_object_new(tsip_message_def_t, tsip_unknown);} 代码里面有两个重要部分, 1. tsip_message_def_t 是一个由sip模块自己定义的tsk_object_def_s对象。tsk_object_def_s是... 阅读全文