作者@TechGuidex
背景
面试时间:3.6
面试岗位:C++开发
面试类型:实习
有很多首次参加校招或者实习的小伙伴,声哥提醒下注意两点:对于面试,保持松弛感和准备好八股文、熟悉好项目一样重要,有时候和面试官聊得来就体现在这种松弛感营造的氛围。对于笔试,前几次可以当作练练手,第一就是把往年的笔试真题自己练习下,出门刷笔经里已经准备好了,第二就是对于一些小细节留心,比如数据类型限制,据声哥不完全统计,每年笔试都会有一半的人栽在ACM输入和数据类型long long上,提前练习可以规避这些低级问题~
问题
- 自我介绍
- 介绍一下服务器项目的功用
- vector list deque介绍及区别
- 介绍std::forward以及std::move
- 说一下rpc啥啥啥(不懂)
- http头部有哪些字段
- UDP发送一个包,对端回复什么。
没理解啥意思,我说udp尽最大努力交付,没有超时重传等机制,要看具体业务逻辑。
然后面试官说什么端口,build啥的,我还是不太懂,就说内核会挑选一个端口,没必要绑定端口(当然也可以)。我估计没get到点。
- 讲解一下tcp发送syn的过程
- redis用的很熟吗(回不是很熟,哈哈)
- 有没有了解过音视频的编码
算法题
力扣15:三数之和
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
int n = nums.length;
Arrays.sort(nums);
List<List<Integer>> ans = new ArrayList<List<Integer>>();
// 枚举 a
for (int first = 0; first < n; ++first) {
// 需要和上一次枚举的数不相同
if (first > 0 && nums[first] == nums[first - 1]) {
continue;
}
// c 对应的指针初始指向数组的最右端
int third = n - 1;
int target = -nums[first];
// 枚举 b
for (int second = first + 1; second < n; ++second) {
// 需要和上一次枚举的数不相同
if (second > first + 1 && nums[second] == nums[second - 1]) {
continue;
}
// 需要保证 b 的指针在 c 的指针的左侧
while (second < third && nums[second] + nums[third] > target) {
--third;
}
// 如果指针重合,随着 b 后续的增加
// 就不会有满足 a+b+c=0 并且 b<c 的 c 了,可以退出循环
if (second == third) {
break;
}
if (nums[second] + nums[third] == target) {
List<Integer> list = new ArrayList<Integer>();
list.add(nums[first]);
list.add(nums[second]);
list.add(nums[third]);
ans.add(list);
}
}
}
return ans;
}
}
// VX公众号关注TechGuide 实时题库 闪电速递
比较简单,写了几行面试官说不写了直接说一下思路,说了下说可以了,我说还要考虑去重啥的,他说没有重复元素可以了。
总结
最后聊一些其他的实习相关的东西,感觉面试官人很好,没有为难人,不过感觉没怎么问简历上的东西和网络编程的东西,哈哈哈。已通知二面。