网易初级游戏研发工程师一面(90min)
1、手撕LFU页面置换算法(讲思路并手撕O(1))
2、激光导航怎么解决误差累积
3、多态怎么实现的
4、虚函数结构(讲讲虚函数表是什么,子类的内存结构是怎样的)
5、STL容器和算法
6、迭代器的分类
7、泛型模板编程了解多少
8、C++内存泄漏(智能指针)
9、快速排序的时间和空间复杂度分析(最好,最坏,平均时间复杂度,空间复杂度),给一串数字,问你第一次快排后的结果
10、解决Hash冲突的方法(开放地址,拉链。。。)
11、TCP三次握手四次挥手 、TCP和UDP的区别
12、解释Socket字段(四元组)
13、网络编程的流程(有写过post,get。。。。吗)
14、Socket的阻塞与非阻塞
15、线程和进程的区别
16、进程调度的方法
17、进程开销为什么会大
18、虚拟内存和物理内存
进程开始要访问一个地址,它可能会经历下面的过程:
每次我要访问地址空间上的某一个地址,都需要把地址翻译为实际物理内存地址
所有进程共享这整一块物理内存,每个进程只把自己目前需要的虚拟地址空间映射到物理内存上
进程需要知道哪些地址空间上的数据在物理内存上,哪些不在(可能这部分存储在磁盘上),还有在物理内存上的哪里,这就需要通过页表来记录
页表的每一个表项分两部分,第一部分记录此页是否在物理内存上,第二部分记录物理内存页的地址(如果在的话)
当进程访问某个虚拟地址的时候,就会先去看页表,如果发现对应的数据不在物理内存上,就会发生缺页异常
缺页异常的处理过程,操作系统立即阻塞该进程,并将硬盘里对应的页换入内存,然后使该进程就绪,如果内存已经满了,没有空地方了,那就找一个页覆盖,至于具体覆盖的哪个页,就需要看操作系统的页面置换算法是怎么设计的了。
页表的工作原理
我们的cpu想访问虚拟地址所在的虚拟页(VP3),根据页表,找出页表中第三条的值.判断有效位。 如果有效位为1,DRMA缓存命中,根据物理页号,找到物理页当中的内容,返回。
若有效位为0,参数缺页异常,调用内核缺页异常处理程序。内核通过页面置换算法选择一个页面作为被覆盖的页面,将该页的内容刷新到磁盘空间当中。然后把VP3映射的磁盘文件缓存到该物理页上面。然后页表中第三条,有效位变成1,第二部分存储上了可以对应物理内存页的地址的内容。
缺页异常处理完毕后,返回中断前的指令,重新执行,此时缓存命中,执行1。
将找到的内容映射到告诉缓存当中,CPU从告诉缓存中获取该值,结束。
19、静态链接库和动态链接库