这次面试主要分为三部分:
1、介绍项目
2、基础知识
3、现场写代码
第一部分:
介绍项目,这部分会问的很详细,包括:线程模型、架构、数据交互、网络,如何查找内存泄漏。
第二部分:
select和epoll区别,边缘触发、水平触发,惊群(这个词没听过),如何创建线程,线程之间的通信方式,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; }