美团正式批二面服务器开发工程师

1.项目中如何实现IO多路复用的,能讲讲吗?
2.那select、poll、epoll又是如何实现一个主进程监听多个客户端呢?(底层实现
3.能说说同步阻塞、同步非阻塞、异步阻塞、异步非阻塞吗?(同步,异步与阻塞,非阻塞并没有关系
4.说说你是如何用小根堆实现的定时器,以及你为什么要用小根堆?(可以实现较为精确定时
5.进程和线程的区别?
6.进程的上下文切换相比于线程具体多了哪些开销呢?
7.线程同步机制有哪些?(互斥锁、自旋锁、条件锁、读写锁)
8.说说上述各个线程同步之前的区别?
9.有了互斥锁,为什么还要条件锁?(条件锁反复尝试上锁,但无需进行内核切换

手撕代码
求有n个元素的序列前k个最小的数。
(没调出来,难受)

快排实现:
class Solution {
public:
    vector<int> res;
    vector<int> quicksort(vector<int>& q, int l, int r, int k) {
        if (l >= r) {
            for (int i = 0; i <= l; ++i) res.push_back(q[i]);
            return res;
        }
        int i = l - 1, j = r + 1;
        int x = q[l + r >> 1];
        while (i < j) {
            do i++; while (q[i] < x);
            do j--; while (q[j] > x);
            if (i < j) {
                swap(q[i], q[j]);
            }
        }
        int sl = j - l + 1;
        if (sl >= k) return quicksort(q, l, j, k);  // Left
        else return quicksort(q, j + 1, r, k - sl); // Right
    }
    vector<int> getLeastNumbers(vector<int>& q, int k) {
        if (k == 0) return {};
        int n = q.size();
        return quicksort(q, 0, n - 1, k);
    }
};

堆排实现:
class Solution {
public:
    vector<int> getLeastNumbers(vector<int>& arr, int k) {
        priority_queue<int> q; // 默认是大根堆
        for (auto& x : arr) {
            q.push(x);
            if (q.size() > k) q.pop();
        }
        vector<int> res;
        while (q.size()) {
            res.push_back(q.top());
            q.pop();
        }
        return res;
    }
};

更新一下:二面已过,HR面等待通知。


#美团面试##面经##美团##秋招##Java##C/C++##校招#
全部评论
你是什么项目呢
点赞 回复
分享
发布于 2021-09-15 18:37
二面之后多长时间发通知?兄弟
点赞 回复
分享
发布于 2021-09-17 07:55
阿里巴巴
校招火热招聘中
官网直投
笔试a了几道题
点赞 回复
分享
发布于 2021-09-25 11:36

相关推荐

2 11 评论
分享
牛客网
牛客企业服务