摘要: 原文地址:http://blog.csdn.net/hackbuteer1/article/details/76228691、给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为)中。这样每个小文件的大约为300M。遍历文件b,采取和a相同的方式将url分别存储到1000个小文件(记为)。这样处理 阅读全文
posted @ 2013-09-05 17:00 xmuliushuo 阅读(177) 评论(0) 推荐(0)
摘要: 原文地址:http://hi.baidu.com/aixindan/item/af659113e4de696771d5e876题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1在栈顶。颠倒之后的栈为{5, 4, 3, 2, 1},5处在栈顶。分析:乍一看到这道题目,第一反应是把栈里的所有元素逐一pop出来,放到一个数组里,然后在数组里颠倒所有元素,最后把数组中的所有元素逐一push进入栈。这时栈也就颠倒过来了。颠倒一个数组是一件很容易的事情。不过这种思路需要显示分配一个长度为O(n)的数组,而且也没有充分利用递归的特性。我们再来考虑怎么递归。我们把栈{1, 2, 3, 4, 阅读全文
posted @ 2013-09-04 09:12 xmuliushuo 阅读(410) 评论(0) 推荐(0)
摘要: 忙等待就不说了。参考nachos虚拟操作系统,给出锁的实现:void Lock::Acquire(){ IntStatus oldLevel = interrupt->SetLevel(IntOff); // disable interrupts while (value == BUSY) { // Here we must use while. queue->Append((void *)currentThread); // put thread into the waitqueue. currentThread->Sleep(); } ... 阅读全文
posted @ 2013-09-03 20:03 xmuliushuo 阅读(303) 评论(0) 推荐(0)
摘要: 原文地址:http://blog.sina.com.cn/s/blog_4d3a41f401011bxd.html给定一个字符串的集合,格式如:{aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh}要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应输出{aaa bbb ccc ddd hhh},{eee fff}, {ggg}。(1)请描述你解决这个问题的思路;(2)请给出主要的处理流程,算法,以及算法的复杂度(3)请描述可能的改进。集合使用hash_set来表示,这样合并时间复杂度比较低。1. 给每个集合编号为0,1,2, 阅读全文
posted @ 2013-09-03 17:25 xmuliushuo 阅读(573) 评论(0) 推荐(0)
摘要: 内核编程与在用户层编程有什么区别?1)内核编程时既不能访问C库也不能访问标准的C头文件。2)内核编程时必须使用GNU C。3)内核编程时缺乏像用户空间那样的内存保护机制。4)内核编程时难以执行浮点运算。5)内核给每个进程只有一个很小的定长堆栈。内核栈的大小一般是两页,意味着32位机的内核栈是8KB。6)由于内核支持异步中断、抢占和SMP,因此必须时刻注意同步和并发。7)要考虑可移植性的重要性。什么是“写时拷贝”技术?写时拷贝是一种可以推迟甚至免除拷贝数据的技术,fork时内核并不复制整个进程地址空间,而是让父进程和子进程共享同一个拷贝。只有在需要写入的时候,数据才会被复制,从而使各个进程拥有各 阅读全文
posted @ 2013-09-02 10:27 xmuliushuo 阅读(1057) 评论(0) 推荐(0)
摘要: 原文地址:http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html作者:阮一峰日期:2013年8月17日半年前,我写了《计算机是如何启动的?》,探讨BIOS和主引导记录的作用。那篇文章不涉及操作系统,只与主板的板载程序有关。今天,我想接着往下写,探讨操作系统接管硬件以后发生的事情,也就是操作系统的启动流程。这个部分比较有意思。因为在BIOS阶段,计算机的行为基本上被写死了,程序员可以做的事情并不多;但是,一旦进入操作系统,程序员几乎可以定制所有方面。所以,这个部分与程序员的关系更密切。我主要关心的是Linux操作系统,它是目前 阅读全文
posted @ 2013-08-31 11:36 xmuliushuo 阅读(146) 评论(0) 推荐(0)
摘要: 原文地址:http://blog.csdn.net/beiyeqingteng/article/details/7475894问题:给一个数字,判断该数字是否是回文。比如 1221是回文,而123不是。分析:判断一个数字是否是回文,我们可以先把它转成字符串,然后根据回文“对称”的特性进行判断:查看第 x 个字符是否与第 n - x + 1 字符是否相等 (x 从1开始,n/2 结束, n 是指数字长度)。但是,这道题因为是数字,有一种更好的解法。即根据原始数字,通过数学方法构建出它的回文数字,如果原始数字大小等于回文数字大小,那么该数字是回文,否则不是。代码如下:bool isPalindro 阅读全文
posted @ 2013-08-30 18:17 xmuliushuo 阅读(262) 评论(0) 推荐(0)