腾讯一面
腾讯一面 2022.3.16 45分钟
1.协程项目20-30min (什么是协程、协程调度器的实现、有栈协程和无栈协程、协程调度汇编代码的实现、协程和线程的区别、对称协程和非对称协程)
然后面试官根据我说的协程切换汇编代码,发现了我项目存在的问题(信号和浮点数没能被处理)
2.在讲协程和线程的区别之后,又问进程和线程的区别,然后就开始给面试官讲进程和线程创建的源码流程.
然后他又问我线程共享进程的哪些资源,我就给他讲了copy_process里面分配资源的流程,包括像files_struct、fs_struct、sighand_struct、sigpend、mm_struct等等它们里面的内容和作用.然后还有vm_area_struct结构体以及mmap的底层实现.然后又被他抓住了我的一些错误....
3.项目中定时器的实现(我把定时器的各个实现方案都给说了出来,然后分析的各自的优缺点).
3.select poll和epoll之间的区别(我巴拉巴拉的一大堆,最后他直接说最本质的区别,然后在他的提示下我把poll和epoll之间的区别说出来了,但是select和poll之间最本质的区别是真不知道,我猜了也没对).
4.进程调度的过程,context_switch函数的实现,抢占式调度的原理、调度点等等,还有进程在切换的时候,如何防止TLB失效.
这里我记得内核开中断的时候是会进行检测的呀,他说一定不会,我说我看的源码中明明会呀.然后经过一番争论之后,我还是屈服了(虽然我到现在依然认为我是对的,但没办法,面试的时候得唯唯诺诺呀)
反问环节
对我的评价 ---挺好的,实习生够用了.
部门使用的技术栈是go还是C++ --搞linux内核开发,写汇编的 (是我班门弄斧了....)
一共有几面 --不清楚