- 博客(11)
- 收藏
- 关注
原创 设计模式之单例模式
定义单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在现实生活中,windows系统下的任务管理器就是典型的单例模式的应用。单例模式的定义决定了其在实现单例模式时须满足以下三个条件:构造函数私有化; 自行创建唯一实例,并向用户公布返回该实例的接口; 定义一个唯一对象。通用代码class Singleton3{public: static Sing...
2018-08-03 19:25:22
127
原创 设计模式之适配器模式
定义适配器模式将一个接口转换成为客户想要的另一个接口,它使接口不兼容的哪些类可以一起工作。比如电脑电源适配器的设计原理就是一个典型的适配器模式,电脑电源作为客户调用电源线接口,电源线作为适配器(公)连接插座(母适配器)取得电。类与对象的关系Target(目标抽象类):定义客户要用的特定领域的接口 Adapter(适配器):调用另一个接口,作为一个转换器;(公接口) Adap(适配器...
2018-07-31 19:09:39
128
原创 设计模式之中介者模式
定义中介者模式定义一个对象,该对象封装了其他多个对象之间如何相互作用。中介者使得多个对象之间不需要显式的相互调用。举个现实生活中的例子来说,房屋中介大家都不陌生,很多情况下我们租房子不会与屋主直接沟通,而是找中介,然后中介与屋主协商,这里的房屋中介就相当于一个中介者对象,它负责协调租房者和屋主的行为。类和对象的关系Mediator(抽象中介者):定义一个接口用于与各同事对象之间通信;...
2018-07-31 17:11:11
163
原创 设计模式之访问者模式
访问者模式是23中GoF模式的一种,属于行为型设计模式,它让你定义一个类的新操作而无需改变它操作的这些成员类。现实生活中,收银员收银计费就属于访问者模式。比如,当顾客在超市选择了香蕉、面包、酒放在购物车中,然后到收银台交钱。那么收银员就是一个访问者,他要访问购物车内顾客选择的每一种商品,购物车就作为对象结构类(ObjectStructure),它里面的商品都需要一个accept操作,接收收银员...
2018-07-30 20:00:08
151
原创 无名管道和有名管道的联系与区别
联系:通信数据只存在于内存缓冲页面中;都是半双工通信;区别:无名管道是无名的,有名管道是有名的;无名管道只能用于父子进程或兄弟进程之间的通信,而有名管道可用于任意两进程之间通信;无名管道是无形的,即无名管道的 inode 结构不是在磁盘上存储的,而是临时生成的,而有名管道的 inode 结点在磁盘上。...
2018-06-25 19:26:48
5570
1
原创 进程间通信之有名管道
相对于无名管道而言,有名管道当然是有名字的,这样就可以使任何进程通过文件名或路径名与该管道挂钩。所以,有名管道可用于任意两进程之间的通信。 就有名管道和无名管道的实现来说,主要是在打开方式上有所不同,管道文件一旦打开(建立),以后两者对管道文件的读、写和关闭操作相同。int open (const char *path, int flags);那么,下面就来说一说有名管道的...
2018-06-25 19:18:07
262
原创 进程间通信之无名管道
无名管道,顾名思义,就是没有名字的管道,用于实现父子进程或兄弟进程之间的通信。实际上,内核创建无名管道的过程主要就是创建一个匿名文件的过程,内核会分配一个页面用作管道的缓冲区,即管道文件,它并不出现在磁盘或其他文件系统存储介质上,而只存在于内存空间,其他进程也无从访问这个文件。所以,所谓管道文件实质上只是一个用作缓冲区的内存页面,只是把它纳入了文件系统的机制,借用了文件系统的各种数据结...
2018-06-25 17:34:58
435
原创 面试题——正则表达式的匹配
今天看到这样一个题,实现字符串的模式匹配,具体题目如下:请实现一个函数来匹配包括'.'和'*'的正则表达式,其中匹配是指字符串的所有字符匹配整个模式串。具体匹配规则如下:模式串中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配。经过简单的分析,我们可以很容易想到利...
2018-05-15 21:38:59
886
原创 C/C++中作为函数参数的 i++ 与 ++i
C/C++中作为函数参数的 i++ 与 ++i平时写代码时,经常会遇到自加自减运算,我们知道这种自加自减运算有两种形式,一种就是我们所谓的前置++(或- -)(例如:++i),另一种是后置++(或- -)(例如: i++)。那么这两者的区别是什么呢? 为简单起见,我们以 i++ 和++i 为例,说明两者的区别: i++ 是先取 i 的值,再进行自加运算;而++i是先做自加运算,再取 i 的值。我们
2017-10-24 15:34:57
3284
2
原创 Linux中与信号量有关的函数调用 semget, semop, semctl
信号量是一种用于对多个进程访问的临界资源进行控制的一种机制。简单来说,信号量的实质是一个整型计数器,当信号量为非负值时,它表示可供访问的临界资源的单元个数;当信号量的值为负时,它表示等待临界资源的进程数。与信号量有关的系统调用函数有三个,下面将分别介绍。1.**semget** : 信号量集的获取或创建 函数原型:int semget (key_t key, int nsem
2017-10-06 14:45:52
1399
原创 如何利用前序遍历序列和中序遍历序列非递归的创建二叉树
说到二叉树的创建,我们一般会想到用递归的方法,因为利用递归写的代码看起来很简洁,但是递归的使用也同样存在效率不够高的问题。所以这里我们要说的是如何利用前序遍历序列和中序遍历序列非递归的创建二叉树。思想:利用两个栈实现(当然也可以用一个栈,这里针对自己的数据类型),一个栈s用来存放树的各个结点,另一个栈isindex用来存放第一个栈中元素对应于中序序列中的下标。首先,我们先将根结点(即前序序列中的
2017-09-21 21:05:11
2872
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人