腾讯后台实习一面面经(已通过)

0. 自我介绍
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++工程师##面经#
全部评论
老哥你第一题的解法是O(N^2)的吧,面试官没要求O(N)吗? 应该用快排的partition来解决吧。 public static void swap(int[] arr, int i, int j) {     if (i == j) return;     arr[i] = arr[i] ^ arr[j];     arr[j] = arr[i] ^ arr[j];     arr[i] = arr[i] ^ arr[j]; } public static void partition(int[] arr) {     int less = -1;     int more = arr.length;     int l = 0;     while (l < more) {         if (arr[l] == 1) {             swap(arr, ++less, l++);         } else if (arr[l] == 0) {             swap(arr, --more, l);         } else {             l++;         }     } }
1
送花
回复
分享
发布于 2020-03-07 16:16
老哥撕代码是视频面试吗?还是写纸上拍照
1
送花
回复
分享
发布于 2020-03-07 16:28
滴滴
校招火热招聘中
官网直投
请问,有问项目吗
1
送花
回复
分享
发布于 2020-03-08 11:31
那道算法题可以看看这个解析,用循环不变量来证明正确性。具备可读性,能解决一类通用问题。https://leetcode.com/problems/sort-colors/discuss/532463/three-way-partition-c-solution-with-proof-and-readability
点赞
送花
回复
分享
发布于 2020-03-08 12:38
虚函数表指针是放在相应对象的栈内存里吗
点赞
送花
回复
分享
发布于 2020-03-07 15:30
大佬,你是投的暑期实习吗?现在已经开始面试了?
点赞
送花
回复
分享
发布于 2020-03-07 15:45
啥时候面的?
点赞
送花
回复
分享
发布于 2020-03-07 20:56
 好难啊,问一下是那个部门
点赞
送花
回复
分享
发布于 2020-03-07 21:14
楼主啥时候投递的啊
点赞
送花
回复
分享
发布于 2020-03-07 21:25
楼主投递多久收到面试通知啊
点赞
送花
回复
分享
发布于 2020-03-07 21:43
几十万个任务,怎么快速查询某个任务已经完成? 这个问题的解决方法是什么样的,麻烦请教一下
点赞
送花
回复
分享
发布于 2020-03-07 21:55
学习一个
点赞
送花
回复
分享
发布于 2020-03-07 22:37
腾讯qq空间暑期实习招聘~私信
点赞
送花
回复
分享
发布于 2020-03-07 23:55
想问一下楼主有面试有笔试吗
点赞
送花
回复
分享
发布于 2020-03-08 14:31
大佬,怎么使一个类不被继承呢?
点赞
送花
回复
分享
发布于 2020-03-09 16:49
索引那个走哪个?都不走还是只走a
点赞
送花
回复
分享
发布于 2020-03-11 11:29
二面过了没
点赞
送花
回复
分享
发布于 2020-03-26 14:25

相关推荐

点赞 评论 收藏
转发
11 101 评论
分享
牛客网
牛客企业服务