上海恺英网络科技有限公司面试题

来源:互联网 发布:网络综艺点击量排行榜 编辑:程序博客网 时间:2024/04/24 05:34
1.多线程同步与互斥的几种方式?
答:临界区、互斥锁、信号量、事件
2.接第一题,互斥锁与信号量的区别?
答:(1)互斥锁用于线程的互斥,信号量用于线程的同步。  
这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。  
互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问     者对资源的访问顺序,即访问是无序的。 
同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情     况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许     多个访问者同时访问资源。
   (2)互斥锁值只能为0/1,信号量值可以为非负整数。  
也就是说,一个互斥量只能用于一个资源的互斥访问,它不能实现多个资源的多线程互斥问题。信号量可以实现多个同类资源的多线程互斥和同步。当信号量为单值信号量时,也可以完成一个资源的互斥访 问。
   (3)互斥量的加锁和解锁必须由同一线程分别对应使用,信号量可以由一个线程释放,另一个线程得到。
3.常见容器的迭代器失效的情况?(引起迭代器失效的原因是内存发生了改变)
答:vector:(内部数据结构是数组)
1.当插入(push_back)一个元素后,end操作返回的迭代器肯定失效。
2.当插入(push_back)一个元素后,capacity返回值与没有插入元素之前相比有改变,则需要重新加载  整个容器,此时first和end操作返回的迭代器都会失效。
3.当进行删除操作(erase,pop_back)后,指向删除点的迭代器全部失效;指向删除点后面的元素的  迭代器也将全部失效。
    deque:(内部数据结构是数组)
1.在deque容器首部或者尾部插入元素不会使得任何迭代器失效。
2.在其首部或尾部删除元素则只会使指向被删除元素的迭代器失效。
3.在deque容器的任何其他位置的插入和删除操作将使指向该容器元素的所有迭代器失效。
   List/set/map:(List内部数据结构是双向环状链表、set/map内部数据结构是平衡检索二叉树即红黑树)
1.删除时,指向该删除节点的迭代器失效,其他情况不会失效。
4.map的实现机制是什么?为什么使用这种方式?
答:map的实现是基于红黑树(是一种平衡检索二叉树)的,查找的速度比较快,比一般的平衡二叉树性能       要高。查找使用的是二分查找法。
5.给你一个二叉树的根节点,编程实现求该二叉树的结点数
6.游戏中宠物的攻击力的实时排名,例如更换一件装备或增加一件装备,排名的变化(考察的排序的策略)