先说说学历之类的硬性条件,方便同样经历的人做参考:
学历:齐鲁工业大学,也不是很清楚是二本还是三本,总之普通的本科。和公司前辈们聊过这种学历投大公司能不能被捞挺看运气的。
ACM 铜牌一块(只是有的面试官会稍微提一嘴,没感到很有用的样子)
实习经历 腾讯一段 (硬通货)
三个项目,基本上反映了我的技能栈:
乞丐版的 C++ web server
乞丐版的 TCP 协议原型
乞丐版的 os 内核
总结
本人记性不是很好,所以可能有些题忘记了没写上。不过每一轮都是若干提问 + 一道 算法题,每轮都是 40min ~ 60min。因为部门是真·底层(虚拟化、操作系统、网络栈),很多问题一开始像是八股,但到最后都会引导到“你有没有看过Linux 源码里这一块儿是怎么实现的?”。
算法题都是部门人自己出的,没遇到LeetCode原题,但也不是很难。
正文
12 投,13 收到预约提醒,约了 16 号的
一面
计网:
“我看你写了个 TCP 原型,那我们来聊聊 TCP 吧”
TCP 四次握手
TIME_WAIT 2MSL
拥塞控制
TCP 有哪几种关闭的情况。
TCP 里的 RTT 和 RTO 怎么测量的?
有看过 Linux 内核怎么实现 TCP 的吗?
有看过 TCP 的 RFC 文档吗?
socket 编程:
说说 SELECT POLL EPOLL 的区别
操作系统:
我这个内核是怎么做的?
那你讲讲 Linux 里 page fault 是怎么实现的?
子问题 1:Linux 下中断的触发流程
子问题 2:Linux 怎么确定是谁出发的 page fault
子问题 3:page fault 判断线程没有访问内存的权限会发生啥
子问题 4:page fault 分配物理内存失败时会触发啥错误?
算法题:
给你几个数组,每个数组抽一个数,把所有组合情况列一下。 赤裸裸的 DFS, 秒了
面完当晚收到下一轮预约,约了 18 号的
二面
自我介绍
聊实习经历, 10 min
实习用的一致性哈希,这个一致性怎么理解?
聊项目, 10 min
你这个 TCP 里重排序用的什么数据结构?
有没有了解过 Linux 内核里用的啥结构?
讲讲你这个里面时怎么实现的流量控制?
socket 编程
聊聊 epoll 的 ET LT
算法题:
写个单生产者单消费者的 ring buffer
面完当晚收了预约,约了 22 号的
三面
C 语言
static 关键字
voiltile 关键字
预处理指令 if define 作用
gdb 调试
查看指针地址和值都用啥指令?
查看调用栈用啥指令?
怎么打断点?
还有些记不清了
操作系统
讲讲你的内核里怎么实现的多线程调度
讲讲 Linux 内核里怎么实现的多线程调度
讲讲虚拟地址怎么变成物理地址的
TLB 是什么东西?
32位和64位的区别?硬件和OS两方面谈谈。
大小端是啥?怎么判断?现在X86一般是哪个?
X86 的 cache 架构
你刚才说所有核心共享 L3 缓存,有没有了解过 NUMA?