新鲜出炉的面经,面试官迟到了几分钟,不会是早餐没吃完吧(bushi),这次居然没有录音,吐了,每次录音都会有幺蛾子。
先自我介绍一下
为什么投游戏公司
那先问一下基础的吧,遍历相同长度的数组和链表哪个更快?为什么?
- 答:和CPU缓存有关,数组是内存连续的所以CPU缓存命中率会高,所以遍历数组会更快。
- 问:为什么遍历数组,CPU缓存命中率会高?
- 答:CPU缓存机制具体我不太了解,我知道一般内存是以页位单位,也就是4k,如果是内存连续的话,读取一页就会包含很多数据,这一页会被CPU缓存下来。那么下次在读取就可以命中缓存。而链表CPU不连续,不容易命中缓存。
- 现在有5个线程,这5个线程运行效率是5个线程基准效率,那我现在换成10个线程,这10个线程运行效率低于10个线程基准效率,这是为什么?
- 答:可能和线程上下文有关、或者是临界资源资源竞争有关。
- 问:能详细说说资源竞争嘛?
- 答:(拿多线程累加问题举例子)
- 问:那为什么5个线程的运行效率是5个线程的基准效率呢?
- 答:和CPU核心数有关,可能这台主机有5个CPU核心数。
- 结构体内存对齐规则?32位?64位?(我举了好多例子- -)
- 答:(应该是按照前一个变量和当前变量的最高字节数对齐--,然后最大对齐字节数不能超过操作系统位数,不知道是不是,怕说错,举了很多例子)
- 问:假如有一个结构体,第一个是char,第二个是一个sizeof为1M的资源,那这个结构体有多大?
- 答:1M多4字节。
- 为什么要有内存对齐的一个操作呢?
- 答:应该是方便CPU寄存器读取。
- 为什么不能无限递归?
- 答:栈的空间大小是有限的,我查了一下我的linux栈大小是8M,如果无限递归会开辟新的栈空间,会导致栈溢出。
- 问:解决办法是什么?
- 答:可以优化一下递归深度,如果可以的话最好能把递归改成迭代,实在不行就调整一下栈的空间大小。
- 问:怎么调整栈大小?
- 答:不会。。我没操作过。
- 能谈一下调用函数的底层实现嘛?
- 答:底层应该会有个符号,我们可以根据名字调用这个符号,就可以拿到一个函数入口,之后我们需要保存旧的栈的现场信息,然后开辟一个新的栈,同时将CPU的PC指针进行切换。
- 问:那传参是怎么实现的?
- 答:不会(突然不记得了)
- 执行一个函数,栈内存一般储存那些东西?
(现在复盘发现他在引导我上一个问题,hhh传参是储存在新的栈空间的)
- 答:不会,只说了会储存变量、函数应该不会储存在栈空间。(其实一个函数栈里面还储存了回调函数、形参之类的)
————————————
C++相关,常规八股。
说一下虚函数,为什么要有虚函数?
虚函数要注意的地方有哪些?
构造函数可以是虚函数嘛?为什么?
析构函数可以是虚函数嘛?一定要是虚函数吗?为什么?不是虚函数会有什么问题?
反问
- 咱们公司是对底层系统知识要求比较高吗?
- 我看我投递的是服务端岗位嘛。
- 答:我们不分服务端客户端。
- 问:客户端上手不是很容易吧hhh
- 答:不难啊
- 咱们公司培养体系是怎样的?
- 你对我的表现能做个评价嘛?或者对我的表现能有什么建议嘛?
总结
计组知识都忘关了--。。感觉疯狂问计组,我大二学的计组都忘光了。。。
之前面了一家公司也985,感觉没得挑哈哈哈。
许愿二面。
一周后
收到感谢信,凉了。
#面经##秋招##23届秋招笔面经##剑心互娱#