腾讯微信团队面经
1.智能指针
2.智能指针是多线程安全的吗
是。shared_ptr的引用次数加减操作内部自动加锁解锁,是线程安全的
3.map的底层结构
是红黑树和哈希表
4红黑树和哈希表的区别
红黑树是有序的,Hash是无序的,根据需求来选择。
红黑树占用的内存更小(仅需要为其存在的节点分配内存),而Hash事先就应该分配足够的内存存储散列表(即使有些槽可能遭弃用)。
红黑树查找和删除的时间复杂度都是O(logn),Hash查找和删除的时间复杂度都是O(1)。
如果只需要判断Map中某个值是否存在之类的操作,当然是Hash实现的要更加高效。
如果是需要将两个Map求并集交集差集等大量比较操作,就是红黑树实现的Map更加高效。
5.算法,二叉树的最大深度
6.这样实现在多线程下安全吗
7.这样实现的时间复杂度和空间复杂度
8进程和线程的区别以及协程
协程最快是因为不需要进入内核进行切换
根本区别:进程是操作系统进行资源分配的最小单元,线程是操作系统进行运算调度的最小单元。
从属关系不同:进程中包含了线程,线程属于进程。
开销不同:进程的创建、销毁和切换的开销都远大于线程。
拥有资源不同:每个进程有自己的内存和资源,一个进程中的线程会共享这些内存和资源。
控制和影响能力不同:子进程无法影响父进程,而子线程可以影响父线程,如果主线程发生异常会影响其所在进程和子线程。
CPU利用率不同:进程的CPU利用率较低,因为上下文切换开销较大,而线程的CPU的利用率较高,上下文的切换速度快。
操纵者不同:进程的操纵者一般是操作系统,线程的操纵者一般是编程人员。
9.哪些排序是稳定的
快速排序、希尔排序、堆排序、直接选择排序不是稳定的排序算法。
基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法。
10.算法 第k大的数