摘要: 摘要 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 冒泡排序 1 func BubbleSort(vector []int) { 2 fmt.Println("BubbleSort") 3 fmt. 阅读全文
posted @ 2016-06-29 11:17 borey 阅读(537) 评论(0) 推荐(0) 编辑
摘要: 思路:初步查看很难一眼分析出表达式是什么含义,我们不妨举例分析一下,假设 n = 5,二进制表示为101,那么 n-1 = 4,二进制表示为100, 5 & 4 = 101 & 100 = 100 = 4 != 0,下面我们来看更多的例子 我们会发现要使表达式等于0,n-1必须使得n的n-1都向高位 阅读全文
posted @ 2016-06-29 11:14 borey 阅读(1907) 评论(0) 推荐(0) 编辑
摘要: 思路一: 计算出n!= nValue,然后 nValue % 10 == 0 则nCount自增1,nValue /= 10 直到条件为否,最后nCount就是我们想要的结果,代码如下: 代码简洁易懂,看上去还不赖,但是这里要考虑一个问题就是在求n!整数溢出了怎么办? 显然我们使用_int64也同样 阅读全文
posted @ 2016-06-29 11:12 borey 阅读(2676) 评论(0) 推荐(0) 编辑
摘要: 思路: 递归思想。我们有n张牌,不妨先假设有一个洗牌函数shuffle(....),能完美的洗出n-1张牌 。拿第n张牌来打乱前面n-1的洗牌顺序,从而得到n张牌的最终结果。 代码如下: 输出结果: 从结果来看上去很完美,剩下就是要在随机函数上做文章了,如果有一个完美的随机数发生器,那么这就是一个完 阅读全文
posted @ 2016-06-29 11:07 borey 阅读(9728) 评论(0) 推荐(0) 编辑
摘要: tcp关闭连接不区分客户端和服务端,哪一端口可以主动发起关闭连接请求。所以为了描述方便,描述中的“主动方”表示主动发起关闭连接一方,“被动方”表示被动关闭连接一方。 1. tcp关闭连接状态转换 上图是tcp连接主动关闭端的状态转换图: (1)应用层调用close函数发起关闭连接请求 (2)发送FI 阅读全文
posted @ 2016-06-29 11:04 borey 阅读(14270) 评论(1) 推荐(0) 编辑
摘要: 1,原子操作 通常cpu的最小执行单元是一条指令,是不会被打断的。我们把单条指令的操作成为是原子的,但是像自增或自减这样的操作由几条指令组成,是非原子操作。window提供了一些专门的原子操作的API: 2,同步与锁 a,二元信号量(线程间共享) b,互斥量(mutex) c,临界区(Critica 阅读全文
posted @ 2016-06-29 10:54 borey 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 函数: (1)int shmget(key_t key, int size, int shmflg),开辟或使用一块共享内存。 (2)void *shmat(int shmid, const void *shmaddr, int shmflg), 将参数shmid所指向的共享内存与当前进程连接。当使 阅读全文
posted @ 2016-06-29 10:48 borey 阅读(279) 评论(0) 推荐(0) 编辑
摘要: 前言: 消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向其中按照一定的规则添加新消息;对消息队列有读权限的进程则可以从消息队列中读走消息 函数: 1.创建新消息队列或取得已存在消息队列 原型: 参数: key:可以认为是一个端口号,也 阅读全文
posted @ 2016-06-29 10:45 borey 阅读(468) 评论(0) 推荐(0) 编辑
摘要: semget semget函数创建一个新的信号量或是获得一个已存在的信号量键值。 第一个参数key是一个用来允许不相关的进程访问相同信号量的整数值。所有的信号量是为不同的程序通过提供一个key来间接访问的,对于每一个信号量系统 生成一个信号量标识符。信号量键值只可以由semget获得,所有其他的信号 阅读全文
posted @ 2016-06-29 10:36 borey 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 1,signal-ANSI C信号处理 signal是ANSI C实现的信号处理函数,signum表示信号ID,常用的信号有: handler参数有3种: a)SIG_IGN,表示忽略该信号 b)SIG_DFL,表示捕捉到某信号采用系统默认的处理方式,查看signal(7) c)自定义信号处理函数, 阅读全文
posted @ 2016-06-29 10:31 borey 阅读(317) 评论(0) 推荐(0) 编辑
摘要: FIFO又被称为命名管道,未命名的管道只能在两个相关的进程之间使用,而这两个相关的进程还要有一个共同创建了它们的祖先进程,但是FIFO,不相关的进程之间也能交换数据。 FIFO是一种文件类型。通过stat结构的st_mode成员的编码可以知道文件是否是FIFO类型,在linux下查看自己创建的FIF 阅读全文
posted @ 2016-06-29 10:28 borey 阅读(461) 评论(0) 推荐(0) 编辑
摘要: 管道是UNIX系统IPC的最古老的形式,所有的UNIX系统都提供此通讯机制。管道有以下两种局限性: 1, 历史上,它们是半双工的(即数据只能在一个方向上流动)。现在某些系统提供了全双工管道,但是为了最佳的移植性,我们不应预先假定系统支持全双工管道。 2,管道只能在具有公共祖先的两个进程之间使用。通常 阅读全文
posted @ 2016-06-29 10:24 borey 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 1,非对称加密RSA: (1)乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。 (2)甲方获取乙方的公钥,然后用它对信息加密。 (3)乙方得到加密后的信息,用私钥解密。 2,使用CryptoPP实现RSA: CryptoPP是一套非常完整的加密解密开源解决方案,如何使 阅读全文
posted @ 2016-06-29 10:18 borey 阅读(4942) 评论(0) 推荐(0) 编辑
摘要: linux下存储时间常见的有两种存储方式,一个是从1970年01月01日 0:00:00到现在经过了多少秒,一个是用一个结构来分别存储年月日时分秒的。time_t 这种类型就是用来存储从1970年到现在经过了多少秒,要想更精确一点,可以用结构struct timeval,它精确到微妙。 而直接存储年 阅读全文
posted @ 2016-06-29 10:13 borey 阅读(1156) 评论(0) 推荐(0) 编辑