面试常见汇总

topK问题

如果需要获取最大的K个值,可以建个小堆。否则,建大堆。

  • 首先读入前K个数据存入一个最小堆
  • 然后遍历后续的数据,对于每一个遍历的数据,都和堆顶元素(K个数据中最小的比较)。如果比堆顶数据小,则继续遍历后续的数据。如果比堆顶元素大,则删除堆顶元素,存入当前遍历到的数据,整个数据过程直到所有数据遍历完为止。
    TOPK问题

vector扩容

vs下的是1.5倍扩容,Linux下因为要考虑到和内存管理的伙伴算法兼容,所以采用2倍扩容的方式。如何高效的使用vector,尽量避免扩容呢?如果提前知道vector要存的数据个数,则可以使用reserve(n)函数来避免多次扩容所导致的效率低下。
常数个扩容,平均插入每个元素的复杂度是O(N)
倍数个扩容,平均插入每个元素的复杂度是O(1)
vector扩容

如果有40亿个QQ,如何存储

在这里,我们存储的目的主要是用于查询,所以我们可以使用位图存储某一个QQ存在与否的二值信息。大概消耗500M空间。
海量存储

谈谈多进程和多线程

讲一讲多线程多进程的优势和劣势

TCP的三次握手和四次挥手

TCP连接的建立和关闭

猜你喜欢

转载自blog.csdn.net/qq_35353824/article/details/108059353