摘要: 信号量是一个计数器,通常在内核中实现,用于多个进程对共享数据对象的同步访问。使用信号量的头文件是#include <sys/sem.h> 信号量的使用规则: 若信号量为正,则进程可使用该资源。 若信号量为0,则进程阻塞等待,并将进程插入等待队列,直到该信号量的值大于0从等待队列中执行进程请求。 加锁 阅读全文
posted @ 2018-04-17 21:04 IvanB.G.Liu 阅读(2215) 评论(0) 推荐(0) 编辑
摘要: 上次面试被问到用三个线程循环打印一串字符串,当时没答好,现在一想其实挺简单的,只要用条件变量就好了。使用C++11的标准线程语法,用一个int变量控制条件变量的wait()阻塞等待时机,用notify_all()唤醒条件变量。 具体的代码如下,3个线程分别打印ABC,循环10次: 运行结果如下: 阅读全文
posted @ 2018-03-29 17:12 IvanB.G.Liu 阅读(4526) 评论(0) 推荐(1) 编辑
摘要: 1. 定义: LRU算法,也就是最近最少使用算法,是一种用于操作系统缺页置换的算法,大概的思想是:操作系统维护一个页面单链表,新进入的页面和链表中被访问的页面移到链表头,链表满需要置换时从链表尾移除页面。 2. 程序代码: 实现LRU算法,维护一张链表,将新来的节点、访问到的节点都插入到链表的头部, 阅读全文
posted @ 2018-03-27 11:29 IvanB.G.Liu 阅读(457) 评论(0) 推荐(0) 编辑
摘要: 首先,来看这样一个问题:在一个元素很多的集合中,判断某个元素是否在这个集合中。例如:有两个URL集合,每个集合中有1亿个URL字符串,每个字符串64字节,判断两个结合中重复的URL个数。如果使用Hash的方法,将所有的URL都存入hash表中,那么至多需要的内存是:2*1*10^8*64=12.8G 阅读全文
posted @ 2018-03-26 20:12 IvanB.G.Liu 阅读(316) 评论(0) 推荐(0) 编辑
摘要: 在LintCode上刷题,刷到一道atoi,以为很简单,轻松写完后发现测试用例简直丧心病狂。 也许是刚开始的思路就被局限了,于是硬着头皮走上“添砖加瓦”的道路(其实就是加点if-else),最后成功AC,代码如下: 阅读全文
posted @ 2018-03-20 16:24 IvanB.G.Liu 阅读(394) 评论(0) 推荐(0) 编辑
摘要: 定义: 全文本搜素是MyISAM存储引擎才具有的功能,主要针对长文本进行良好程度搜索。它的主要功能大概有:快速高效地搜索指定列,而且能提供一种智能化的结果,有查询扩展搜索和布尔文本搜索功能。 使用方法: (1)启动全文本搜索:在创建表时,加入FULLTEXT(字段),例子如下: CREATE TAB 阅读全文
posted @ 2018-03-17 17:35 IvanB.G.Liu 阅读(597) 评论(0) 推荐(0) 编辑
摘要: 1. STL中hashtable的实现: 首先,STL中hashtable是实现hash_map和hash_set的底层。它解决冲突的方式是开链法,每个放置索引值的节点称为桶节点(也就是该索引值的头结点),桶节点里放着一个value值,一个指向下一个节点的next指针。 此外,还维护了一个vecto 阅读全文
posted @ 2018-03-17 17:28 IvanB.G.Liu 阅读(492) 评论(0) 推荐(0) 编辑
摘要: 1.定义: 大端模式(Big Endian):数据的高字节,保存在内存的低地址中;数据的低字节,保存在内存的高地址中。 小端模式(Little Endian):数据的高字节,保存在内存的高地址中;数据的低字节,保存在内存的低地址中。 2. 判断操作系统是大端还是小端: bool IsBigEndia 阅读全文
posted @ 2018-03-17 17:20 IvanB.G.Liu 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 前些日子研究了一下字符串匹配算法,突发奇想自己设计了一种新的字符串匹配算法,因为是基于BM的思想,所以暂且叫他BMY算法吧。传统的BM算法是基于坏字符规则和好后缀规则,从后向前的匹配字符串,每次发现失配时,会比较坏字符表和好后缀表,哪个对应的跳跃值大就用哪个跳跃值,这样的跳跃幅度比KMP算法要大很多 阅读全文
posted @ 2018-03-13 22:08 IvanB.G.Liu 阅读(3914) 评论(0) 推荐(1) 编辑
摘要: 1. 定义: 分支限界算法是按照广度优先的方式对解空间树(状态空间树)进行搜索,从而求得最优解的算法。在搜索的过程中,采用限界函数(bound function)估算所有子节点的目标函数的可能取值,从而选择使目标函数取极值(极大值或者极小值)的节点作为扩展结点(如果限界值没有超过目前的最优解,则剪枝 阅读全文
posted @ 2018-03-03 12:36 IvanB.G.Liu 阅读(6089) 评论(1) 推荐(1) 编辑