注:不允许直接转载。如要转载请私信我并表明转载意图和地址征得本人同意。
深夜睡不着,索性写一篇文章来总结一下今年找暑期实习的经历。
个人情况
本科就读于西南某双非,有一块ACM亚洲区域赛的铜奖,本科期间获得过国家奖学金等。
研究生就读于东部某985,期间主要从事云原生可观测性领域的工作(深度参与并与团队开源了一个开源项目,目前github star有300多)
三月份刚好遇到项目组很忙,手头有一个比较重要的任务急需完成,因此完全没空准备刷题和八股。甚至一度忘记要找暑期实习这件事,直到看到群里和学校论坛的同学们纷纷开始找暑期实习,因此自己也利用空闲时间制作了简历,投了腾讯、美团、阿里、华为这几家公司(后来投的比较晚的百度和字节,一直连面试邀约都没收到过)。
三月初在学校论坛遇到了前辈给内推了腾讯云,在毫无准备(没刷题没看八股)的情况下仓促展开面试……以下经历以公司为单位进行回忆。
腾讯云一面(3.10)
有两个前辈约了一个晚上的视频会议,主要就是简单聊了聊项目,然后问了一些网络问题(这个组好像是做网络的)
腾讯云二面(3.13)
很快约了二面,二面是组里的研发leader,主要针对项目细节做了一些提问。然后扔了两道算法题(目测两个mid),写完了面试官说“好的知道了”
然后第二天在内推学长那里得知挂了,二面面试官觉得方向并不够match。所幸的是因为是学长内推,很快催人释放了简历。
差不多释放完简历隔了两个小时左右,被腾讯的魔方工作室捞起来。
腾讯魔方工作室一面(3.15)
主要深挖了一些C++语法细节,比如空类占多少字节,还有一些犄角旮旯的C++操作。算法题是LRU。(由于完全没准备过刷题,写的还是有点生疏,不过最后写出来了,尴尬的是数据点通过了17/18)
腾讯魔方工作室二面(3.17)
问项目(20min)
算法题是给定一个整数n,求比n大的且相邻位不相等的最小整数(目测hard-?反正做出来了)
设计题1 实现share_ptr
设计题2 实现一个游戏全服排行榜,显示前1000名玩家,同时显示用户自己的排名,数据量在亿级。
讲讲内核定时器的实现
二面后面试官说我解决问题的能力蛮强的,但是过几天发现挂了。
腾讯云一面(3.22)
隔了几天又被腾讯云另外一个组捞起来了,面经记录如下:
描述浏览器访问百度的全过程,包括SNAT,DNAT
面试的时候网卡,问为什么会卡
输入域名如何知道端口的
TCP慢启动过程,如何做拥塞控制
TCP如何确定重传的数据包,比如发送1000个包,收到一部分ACK怎么办
客户端向服务端发起建立连接请求,如果服务端最大连接数满了,客户端会发生什么
如果curl一个服务端没有的端口,发生什么
如果一直发送数据包,用户进程不接收会发生什么,数据包会丢还是怎么样,缓冲区会溢出吗
了解tcpdump吗,tcpdump的原理是什么(从内核协议栈的角度讲)
对于netfilter IPTABLE过滤的数据包,tcpdump能否抓到,为什么(协议栈角度,答收包能,发包不能)
eBPF如何处理内核和用户态的通信
发现产生了大量的pagefault原因可能是什么
page cache什么时候会用到,具体过程
讲一讲进程线程
线程一般开销具体有多大
讲讲k8s的架构
k8s中deploy的实现原理,node挂掉会怎么办
namespace有哪些分类
k8s中为什么要有pod
ubuntu的镜像放到centos中跑为什么可以跑
两个容器进行通信,数据如何流转(从虚拟网卡聊到协议栈)
Golang中channel如果不初始化,往进写会发生什么
给了一段看不懂的Golang代码让我说啥意思
短时间内产生了大量的time wait可能是什么原因,该如何排查
感觉答得还可以吧,但是这一次泡池子泡了很久很久,一直没等到二面,差不多一两个星期流程结束的。
接下来是阿里的面试经历:三轮技术面+一轮笔试加面(因为笔试翻车只A了一道hh)+一轮HR面
一个小时左右,项目差不多聊了半小时
自我介绍
介绍一下Linux内核的eBPF技术
项目为什么要用CGO,以及CGO中需要注意的细节
项目中遇到的问题(讲了多核CPU资源竞争问题、内核协议栈、容器网络场景问题等)
项目的性能优化怎么做的(从数据结构设计、指令流水线优化、减少内存拷贝方面和面试官讲了讲)
项目中的ring buffer如何解决数据的头尾跨越问题
内存页中断的时机(项目提到)
CPU线程中断的时机(讲了3种类型,主动和被动让出,顺便补充讲了Linux内核cfs调度算法)
C++ map的特点,和其他容器的区别(底层实现之类的)
C++多态的底层实现原理(虚表的实现之类的)
C++智能指针的原理,项目怎么用的(引用计数、锁之类的)
C语言volatile问题,什么时候用(讲了原理,寄存器、内存不一致等)
C++ new空间分配失败会返回NULL吗
C++构造函数可以声明为虚函数吗
C++析构函数什么时候要声明为虚函数
socket通信时的阻塞和非阻塞区别,如何用
epoll wait
写一个二分算法,4分钟写完搞定
问项目(20min)
场景题,有非常多的广告,大概需要磁盘文件600个G才存的下,每个广告有id和点击量等,如何快速找到点击量最大的一些广告
二面完的当天晚上进行了笔试加面,差不多就是对于C++语法的考察,然后还有算法题
问项目(20min)(追问的细节也比较多,而且涉及一些极端场景怎么解决的问题)
红黑树实现
博客为啥很久没更新了
问笔试题现在做会做吗
项目做商业化时和竞争对手的优势在哪里,和各大云厂商的优势在哪里
还有一些记不清了
有些细节记不清了
做过最有成就感的事,具体说说
对导师的评价
遇到和同事的问题怎么解决
你认为自己有和别人不一样的特质吗,举例说说这种特质带给你了什么
你认为这种特质是怎么形成的
还投了哪些,选择offer时优先考虑什么
选择offer时女朋友的意见重要吗
阿里前后流程也有一个月多一点的样子,4.18晚上收到的offer call(因为4.18上午收到美团offer就去催了一下阿里)
接下来是美团,美团前前后后也经历了4场面试,第一场是3.30晚上
自我介绍
围绕项目问(20min)
怎么避免内存泄漏,在生产环境中遇到了内存泄漏怎么排查
C++如何处理高并发网络场景
C++多线程怎么做
如何做压力测试,你们的项目的压力极限是多少,怎么做的
C++ emplace_back原理
map和unordered_map底层实现,区别
向vector中插入一个对象的过程
vector溢出时如何拷贝类对象
移动构造怎么写
你们的项目是如何帮助开发人员排查网络问题的
算法题:编辑距离,两个字符串,第一个字符串修改,替换,删除的代价为a,b,c,求变换到str2的最小代价
美团感觉回答的很好,算法题也做出来了,但是一直没有等到二面,一周后进入人才库了。然后进入人才库没多久,被数据库研发部分捞起来了。
一上来面试官就问“我看到你上次美团面试的评价很不错,怎么终止流程了?”,答曰:“我也不知道。”
整体聊的还不错,上来面试官让写个二叉树层序遍历,然后问了一些项目问题,内核的知识等等。最后反问环节我问面试官说感觉跟贵部门不是很match,为什么捞我。面试官回答说校招生主要看基础。不过这个面试官特别好,说我跟操作系统部门match,就把我简历推给操作系统组了。
一面(4.11)(40min)
问项目(技术实现、业务场景、生产落地等)
TCP三次握手,四次挥手过程
二面(4.14)(40min)
自我介绍
问项目技术实现
项目落地遇到哪些问题
说说eBPF的缺点(堆栈、指令数限制,性能比内核模块差,可观测性相比传统APM的不足等等)
了解eBPF CO-RE吗,内核怎么做的,如果没有内核支持如何实现
了解namespace吗,有哪些namespace,分别展开讲讲
docker除了namespace和cgroup,还用了哪些技术
浏览器访问的网络行为过程
资源的同步问题怎么解决
互斥锁和自旋锁区别
毕设题目是啥,愿意跟着美团一起做毕设吗
手里有其他offer吗,选择的时候看重哪些
操作系统组果然很match,二面面试官表示我对内核eBPF技术的了解可能比他们一些同事还更深入(有点受宠若惊)。两轮面试基本100%都回答出来了,自我也感觉稳了。差不多等了两天,第二周周一的时候出现了乌龙,美团给我发感谢信了,把我吓一跳,然后去核实发现应该是海发的时候发错了。4.18上午接到美团HR电话,随后收到录用意向。