构造函数不能声明为虚拟函数,因为对象的虚拟函数表的指针其实是在构造函数内编译器添加完成的代码,所以在构造函数执行之前无法访问到虚拟函数表的。
14.合并两个有序链表
类似归并排序,两个指针归并即可。
15.100亿条记录的文本文件,取出重复数最多的前10条
类似top k算法,无法全部读入内存的top k算法是利用容量为k的最大堆,达到线性时间的top k算法。
首先利用hash table预处理每个元素出现的次数,然后利用次数执行top k算法。
16.设计一个双向链表,并且提供一个可根据值删除元素的函数
STL中的list底层及为双链表实现。
17.二叉树的多种遍历算法实现
18.有读和写的两个线程和一个队列,读线程从队列中读数据,写线程往队列中写数据
生产者和消费者模型:
使用信号灯和互斥量。
semaphore mutex = 1; semaphore fillCount = 0; semaphore emptyCount = BUFFER_SIZE; procedure producer() { while(true) { item = produceItem(); down(emptyCount); down(mutex); putItemIntoBuffer(item); up(mutex); up(fillCount); } } procedure consumer() { while(true) { down(fillCount); down(mutex); item = removeItemFromBuffer(); up(mutex); up(emptyCount); consumeItem(item); } }