腾讯后台实习一面面经(已通过)
0. 自我介绍
1. 先撕代码
输入
[-1, 0, 1, 1, -1]
输出
所有的1放前面,所有的0放后面。
[1, 1, -1, -1, 0]
2. 几十万个任务,怎么快速查询某个任务已经完成?
bitmap
13. 数据库mysql索引机制,B+树
14. (a, b, c)建立索引,where a = 1 and c = 3,哪些走索引?最左匹配原则
15. 对什么技术感兴趣?
16. 有没有看过一些框架源码?我说打算看nginx
17. 有什么想问的?
18. 请在官网继续关注后续流程。
#腾讯##实习##C++工程师##面经#
1. 先撕代码
输入
[-1, 0, 1, 1, -1]
输出
所有的1放前面,所有的0放后面。
[1, 1, -1, -1, 0]
#include <iostream> #include <vector> using namespace std; void printVector(const vector<int>& nums) { for (int i : nums) { cout << i << " "; } cout << endl; } void mysort(vector<int>& nums) { int n = nums.size(); for (int i = n - 1; i >= 0; --i) { if (nums[i] == 0) { int j = i + 1; while (j < n && nums[j] != 0) { swap(nums[j], nums[j - 1]); ++j; } } } for (int i = 0; i < n; ++i) { if (i > 0 && nums[i] == 1) { int j = i - 1; while (j >= 0 && nums[j] != 1) { swap(nums[j], nums[j + 1]); --j; } } } } int main(int argc, char* argv[]) { vector<int> nums = { -1, 0,1,1,-1 }; mysort(nums); printVector(nums); return 0; }后来查到更快的方法,Leetcode 75 三色旗问题
void sortColors(vector<int>& nums) { int r1 = -1; int r2 = -1; for (int i = 0; i < nums.size(); ++i) { if (nums[i] >= -1 && nums[i] != 0) { ++r2; swap(nums[i], nums[r2]); if (nums[r2] == 0) { ++r1; swap(nums[r1], nums[r2]); } } } }
还有快排的partition也可以解决
void partition(vector<int>& nums) { int n = nums.size(); int i = 0; int left = 0, right = n - 1; while (i < right) { if (nums[i] == 1) { swap(nums[i++], nums[left++]); } else if (nums[i] == 0) { swap(nums[i], nums[right--]); } else { ++i; } } }
2. 几十万个任务,怎么快速查询某个任务已经完成?
bitmap
3. 怎么设计随机打乱的算法?
4. 散列冲突怎么解决?
5. C++多态了解吗? 6. 虚函数机制,虚函数表指针放在哪个位置?
7. 怎么使一个类不能继承?
8. Linux IO模型有哪些?
9. Linux虚拟内存分布,物理内存分配。 10. malloc原理,malloc(100k)发生什么?
11. Linux 进程间通信有哪些?挑一个熟悉的说说
12. TCP和UDP区别,TCP如何实现可靠传输?13. 数据库mysql索引机制,B+树
14. (a, b, c)建立索引,where a = 1 and c = 3,哪些走索引?最左匹配原则
15. 对什么技术感兴趣?
16. 有没有看过一些框架源码?我说打算看nginx
17. 有什么想问的?
18. 请在官网继续关注后续流程。
#腾讯##实习##C++工程师##面经#