您当前的位置: 首页 >  linux

TechGuide

暂无认证

  • 3浏览

    0关注

    176博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

感受一下被Linux内核支配的恐惧....

TechGuide 发布时间:2021-10-08 09:55:33 ,浏览量:3

恭喜发现宝藏!微信搜索公众号【TechGuide】关注更多新鲜好文和互联网大厂的笔经面经。 作者@TechGuide【全网同名】 点赞再看,养成习惯,您动动手指对原创作者意义非凡🤝

面试部门 / 岗位:基础架构 / 后端开发 候选人简介

学历:齐鲁工业大学,也不是很清楚是二本还是三本,总之普通的本科。和公司前辈们聊过这种学历投大公司能不能被捞挺看运气的。

ACM 铜牌一块(只是有的面试官会稍微提一嘴,没感到很有用的样子)

实习经历腾讯一段 (硬通货)

三个项目,基本上反映了我的技能栈: 乞丐版的 C++ web server 乞丐版的 TCP 协议原型 乞丐版的 os 内核

一面(9.16)
  1. 自我介绍

  2. “我看你写了个 TCP 原型,那我们来聊聊 TCP 吧” 讲讲TCP 四次握手

  3. TIME_WAIT 2MSL

  4. 拥塞控制

  5. TCP 有哪几种关闭的情况。 项目里实现过,但当时没答上来。

分两种:1)普通的正常关闭 2)收到 RST 后非正常关闭,因为 TCP 本身作为可靠协议理应把数据都发完再关闭,非正常关闭的话则会把发送缓冲区的数据都给扬了直接强退。

  1. TCP 里的 RTT 和 RTO 怎么测量的?当时没答出来,下来搜索后发现有专门的算法的。

  2. 有看过 Linux 内核怎么实现 TCP 的吗?啊这,无。

  3. 有看过 TCP 的 RFC 文档吗?啊这,无。

  4. 说说 SELECT POLL EPOLL 的区别

  5. 操作系统:“我这个内核是怎么做的?”“它本身是别人做的教学用操作系统,我在之上加了点功能。就,懂得都懂。”

  6. 那你讲讲 Linux 里 page fault 是怎么实现的?(恰好我也实现过这方面的功能,所以基本接住了接下来的几个问题)

子问题 1:Linux 下中断的触发流程 子问题 2:Linux 怎么确定是谁出发的 page fault 子问题 3:page fault 判断线程没有访问内存的权限会发生啥 (查线程的 vmspace 发现这段内存没有被分配的话会触发 segment fault) 子问题 4:page fault 分配物理内存失败时会触发啥错误?(犹犹豫豫的说应该是内存不足之类的错误码吧)

算法题 给你几个数组,每个数组抽一个数,把所有组合情况列一下。 (赤裸裸的 DFS, 秒了)

反问 对应届生有什么建议:keep learn,多读代码,多读论文,保持编程的热情,保持新知识的输入

二面(9.18)
  1. 自我介绍

  2. 聊实习经历, 10 min

  3. 实习用的一致性哈希,这个一致性怎么理解?

  4. 聊项目, 10 min

  5. 你这个 TCP 里重排序用的什么数据结构?

  6. 有没有了解过 Linux 内核里用的啥结构?

  7. 讲讲你这个里面时怎么实现的流量控制?

  8. 聊聊 epoll 的 ET LT

算法题 写个单生产者单消费者的 ring buffer

反问 您作为面试官比较关注候选人哪些方面的能力:编程的热情、扎实的计算机基础知识,就网络、OS,然后有一定的算法基本功

三面(9.22)
  1. C 语言

  2. static 关键字

  3. voiltile 关键字

  4. 预处理指令 if define 作用

  5. gdb 调试

  6. 查看指针地址和值都用啥指令?

  7. 查看调用栈用啥指令?

  8. 怎么打断点?

  9. 讲讲你的内核里怎么实现的多线程调度

  10. 讲讲 Linux 内核里怎么实现的多线程调度

  11. 讲讲虚拟地址怎么变成物理地址的

  12. TLB 是什么东西?

  13. 32位和64位的区别?硬件和OS两方面谈谈。

  14. 大小端是啥?怎么判断?现在X86一般是哪个?

  15. X86 的 cache 架构

  16. 你刚才说所有核心共享 L3 缓存,有没有了解过 NUMA?(似乎是唯一一个没有答出来的问题)

算法题 “接下来我们来做个题吧” 我心里还说这轮怎么问的这么少,结果***来了:

面试官即兴发挥:“那你刚才讲了虚拟地址转物理地址转换过程,那现在来写个函数实现一下吧” “那虚拟地址结构,每个段多长怎么处理?” “你自己定义” “那每个页表项每个段的长度呢?” “你自己定义” “那页表查询失败呢?” “返回NULL,具体怎么算失败你自己定义”

结果写出来面试官看完后被屎一样的代码震惊了。 “你…看过 Linux 内存管理的代码吧?” “看过…一点点” “Linux 是这么定义页表项的?” “不是…” “Linux 里是这么判断页表项是否有效的?” “不是…”

反问 部门做啥的? 主要是虚拟化和操作系统 应届生进入这个部门的话可以针对性学习哪部分技术栈? 多看看 Linux 源码。

结局 25 号收到感谢信。

总结 本人记性不是很好,所以可能有些题忘记了没写上。不过每一轮都是若干提问 + 一道算法题,每轮都是 40min ~ 60min。因为部门是真·底层(虚拟化、操作系统、网络栈),很多问题一开始像是八股,但到最后都会引导到“你有没有看过Linux 源码里这一块儿是怎么实现的?”。 算法题都是部门人自己出的,没遇到 leetcode 原题,但也不是很难。第三面面试官即兴发挥让我写个虚拟地址转物理地址的函数,这种不按套路出牌的体验还是很新奇有趣的,虽然我把当年的知识忘了太多最后写的很烂就是了…

关注
打赏
1665329535
查看更多评论
立即登录/注册

微信扫码登录

0.2314s