腾讯微信团队面经

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大的数

(65条消息) 面试题:从n个数中找出第K大的数_暴躁的猴子的博客-CSDN博客

posted @ 2023-03-13 16:32  heisse  阅读(38)  评论(0编辑  收藏  举报