大寄特寄。
1. 自我介绍。
2. 介绍一下在项目中做的工作。
3. 讲一下项目中这个用户级中断处理程序的流程。
4. 讲一下内核态软件中断和硬件中断处理流程有什么不同。(没懂,不太会)
5. 讲一下知道哪些类型的中断。
6. 内核有哪几个子系统。(答了内存管理,文件系统,进程调度)
7. 这个物理页面大小怎么选择的?为什么要选择4KB大小的页面?(答了为了减少读写少量字节时的开销)
8. 问了具体例子,假如一个用户进程分别需要申请1KB,4KB,5KB的内存,内核如何处理?(答了内核会把申请的内存大小圆整成页面大小的整数倍,然后修改进程页表将物理页框直接映射给进程)
9. 追问,按照这样分配的话,那假设一个进程直接将内核管理的所有剩余空间都申请了,那么其他进程再申请时没有空间就无法运行了?(刚开始没明白想问什么,后面才明白了是想问物理页面的懒分配策略,进程申请内存时不实际给它分配物理页框,只有需要读写时再实际分配)
10. 看你这个项目都是用C实现的,对C++了解么,平时都用C++干什么?
11. C++相比C多了哪些机制?(答了类的层次结构,虚函数实现动态多态,模板实现静态多态,构造析构实现的RAII,引入了移动语义的C++值类别)
12. C++里类的三大特性(继承、封装、多态)了解过么,分别讲讲他们的意思是什么。(答了封装是为了抽象,简化设计,只提供必要的功能接口,继承和多态为了实现代码复用和分离接口和实现)
13. 讲讲C++里封装的数据结构,你用过哪些?(答了vector,array,queue,priority_queue,deque,pair,map,unordered_map,set)
14. 讲讲对于这些封装起来的数据结构,你一般什么时候会用到它们?
15. 做一道题,实现拷贝一个链表,但是链表的每个节点是另一个链表的表头。(刚开始用迭代的方法写,没来得及写完,给面试官讲了思路,面试官说了可以用递归的方式来做,于是才想到了递归实现的简单办法,令人感叹)
16. 刚才说到了递归的思想,讲讲递归算法有哪几个环节?(答了递归算法需要逐渐将问题的规模缩小,并且需要有递归基础)
17. 就聊到这里,你还有没有什么比较擅长但是没有问到的东西?(答了会CUDA C,会OpenGL,有图形学基础,但是跟岗位无关就没有写)
18. 没有反问环节,大概率凉凉了。