美团面试-2020-11-11

这次面试主要分为三部分:

1、介绍项目

2、基础知识

3、现场写代码

第一部分:

介绍项目,这部分会问的很详细,包括:线程模型、架构、数据交互、网络,如何查找内存泄漏。

第二部分:

select和epoll区别(https://www.cnblogs.com/aspirant/p/9166944.html),边缘触发、水平触发,惊群(这个词没听过),如何创建线程,线程之间的通信方式,sleep函数为啥会耗时(具体有哪些方式)。

第三部分:

(1)内存拷贝,但是可能存在src和dest重叠的情况,需要分别讨论。

void *memmove(void* dest, void* src, int count) {
    if (src == dest) return dest;
    void *tmp = dest;
    
    if (src > dest || (int*)dest + count < src) {
        int i = 0;
        while(i < count) {
            *((char*)dest+i) = *((char*)src+i);
            i++;
        }
    } else {
        while(count--) {
            *((char*)dest+count) = *((char*)src+count);
        }
    }
    return tmp;
};

 

 

(2)给定无序数组,找到前k大的数。

#include <iostream>
#include <random>
#include <queue>
using namespace std;


void getValue(vector<int>arr, int k) {
    if(k >= arr.size()) return ;
    priority_queue<int, vector<int>, greater<int>> pq;
    for (int i = 0; i < k; i++) {
        pq.push(arr[i]);
    }

    for (int i = k; i < arr.size(); ++i) {
        if (pq.top() < arr[i]) {
            pq.pop();
            pq.push(arr[i]);
        }
    }
    
    while(pq.size()) {
        cout << pq.top() << endl;
        pq.pop();
    }
    return ;
}


int main() {
    vector<int> arr = {1,2,3,4,5};
    getValue(arr, 3);
    
    return 0;
}

 

posted @ 2020-11-11 22:43  小海哥哥de  阅读(133)  评论(0编辑  收藏  举报