阿里巴巴历年笔试面试70题 [11-15]
2015-05-29 14:48
309 查看
11、死锁的条件。(互斥条件(Mutual exclusion):1、资源不能被共享,只能由一个进程使用。2、请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。3、非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。4、循环等待条件(Circular wait):系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。
处理死锁的策略:1.忽略该问题。例如鸵鸟算法,该算法可以应用在极少发生死锁的的情况下。为什么叫鸵鸟算法呢,因为传说中鸵鸟看到危险就把头埋在地底下,可能鸵鸟觉得看不到危险也就没危险了吧。跟掩耳盗铃有点像。2.检测死锁并且恢复。3.仔细地对资源进行动态分配,以避免死锁。4.通过破除死锁四个必要条件之一,来防止死锁产生。)
12、一个树被序列化为数组,如何反序列化。
from: http://m.blog.csdn.net/blog/yusiguyuan/42393991
假定二叉树如下所示:
则使用先序遍历,保存到文件中的内容如下:
序列化二叉树
先序遍历的代码可以完成序列化二叉树的工作,不管你信不信,反正我是信了。代码如下:
13、如何将100百万有序数据最快插入到STL的map里。
14、有两个线程a、b分别往一条队列push和pop数据,在没有锁和信号量的情况下如何避免冲突访问。
15、写一个函数,功能是从字符串s中查找出子串t,并将t从s中删除。
from: http://blog.csdn.net/xingfudage1986/article/details/6870942
处理死锁的策略:1.忽略该问题。例如鸵鸟算法,该算法可以应用在极少发生死锁的的情况下。为什么叫鸵鸟算法呢,因为传说中鸵鸟看到危险就把头埋在地底下,可能鸵鸟觉得看不到危险也就没危险了吧。跟掩耳盗铃有点像。2.检测死锁并且恢复。3.仔细地对资源进行动态分配,以避免死锁。4.通过破除死锁四个必要条件之一,来防止死锁产生。)
12、一个树被序列化为数组,如何反序列化。
from: http://m.blog.csdn.net/blog/yusiguyuan/42393991
假定二叉树如下所示:
_30_ / \ 10 20 / / \ 50 45 35
则使用先序遍历,保存到文件中的内容如下:
30 10 50 # # # 20 45 # # 35 # #
序列化二叉树
先序遍历的代码可以完成序列化二叉树的工作,不管你信不信,反正我是信了。代码如下:void SerializeBinaryTree(BinTree *p, ostream &out) //BinaryTree是二叉树结构体,typedef struct node BinaryTree. { if (!p) { out << "# "; } else { out << p->data << " "; SerializeBinaryTree(p->left, out); SerializeBinaryTree(p->right, out); } }
反序列化二叉树
从文件中读取二叉树结点并重构的方法与前面相似。采用先序遍历的思想每次读取一个结点,如果读取到NULL结点的标识符号“#”,则忽略它。如果读取到结点数值,则插入到当前结点,然后遍历左孩子和右孩子。void readBinaryTree(BinTree *&p, ifstream &fin) { int token; bool isNumber; if (!readNextToken(token, fin, isNumber)) //readNextToken读取文件下一个值,如果是数字返回true,否则返回false return; if (isNumber) { p = new BinTree; p->value = toekn; //newNode函数创建新结点,设定data为token,left和right初始化为NULL p->left = NULL; p->right = NULL; readBinaryTree(p->left, fin); readBinaryTree(p->right, fin); } }
13、如何将100百万有序数据最快插入到STL的map里。
14、有两个线程a、b分别往一条队列push和pop数据,在没有锁和信号量的情况下如何避免冲突访问。
15、写一个函数,功能是从字符串s中查找出子串t,并将t从s中删除。
from: http://blog.csdn.net/xingfudage1986/article/details/6870942
相关文章推荐