网易互娱 游戏研发 暑期实习面试面经 (2)

答:添加的情况没遇到过,不太清楚,但感觉应该也不太行。(个人感觉,一般来说添加是需要满足某种情况才进行添加,但是在迭代过程中进行添加,会导致迭代器需迭代的元素不断增加,如果操作不当可能会陷入死循环)。

C++ 结构体对齐

本以为结构体对齐很简单的,然而。。我天真了 - -

面试官:那接下来问问 C++ 方面的内容,了解过结构体的对齐吗?

答:了解过, balabalabala。。。。

面试官:那来算一下这个结构体的大小吧

struct Node { short a; long b; char c; char d; int e; int f; short i; short j; long k; };

网易互娱 游戏研发 暑期实习面试面经

答:(算就算吧),算了一会儿,算出来一个 34 字节

面试官:怎么得出来的

答:首先 short 占 2 字节, 然后 long 占 8 字节, 后面加起来总共是 22 字节,对齐一下就是 24 字节,加起来总共 34 字节。(后来验证了下,发现自己错了 orz)

面试官:你确定这里第一个 short 只占 2 字节吗?

答:balabalabala。。。(我还觉得自己很对,后来下来验证了下发现自己错了 orz)

面试官:这里操作系统是怎么读取数据的?一次能读两个字节吗?

答:(这里我已经懵逼了)emmmmm。。。不太清楚。。我记得这里应该是读取一个起始位置 + 偏移量来获取这个数据。

面试官:下去之后有兴趣再去了解了解吧

这里开始补充,发现 mingw64 long只占 4 个字节???

/* * @Description: * @Author: 妄想 * @Date: 2020-05-29 16:42:59 * @LastEditTime: 2020-05-29 16:54:49 * @LastEditors: 妄想 */ #include<iostream> #include<stdio.h> using namespace std; struct Node { short a; long long b; char c; char d; int e; int f; short i; short j; long long k; }; // 2 + 8 + 22 // 34 int main(){ printf("%d\n", sizeof(Node)); printf("%d %d %d %d %d %d %d %d %d\n", &Node::a, &Node::b, &Node::c, &Node::d, &Node::e, &Node::f, &Node::i, &Node::j, &Node::k); printf("char:%d, short:%d, int:%d, long:%d, long long:%d\n", sizeof(char), sizeof(short), sizeof(int), sizeof(long), sizeof(long long)); return 0; }

看一下输出

网易互娱 游戏研发 暑期实习面试面经

这个 long 只占 4 字节有点迷,没办法,就先改成 long long 吧。

可以发现,变量 b 的起始位置是 8 而不是 2,e 的起始位置是 20 而不是 18。

查了下相关博客:

结构体中元素需被放置在自身对齐大小的整数倍的位置上

如果结构体的大小不是所有元素中最大对齐大小的整数倍,则结构体对齐到最大元素对齐大小的整数倍,填充空间放置到结构体末尾

排序算法

面试官:接下来问问算法方面的东西吧,说一说快排的流程。

答:(很尴尬。。。已经很久没有接触过排序算法了,近期准备面试也没看过排序方面的东西,所以想了一段时间,好歹还是想起来了) balabalabala。。。。

面试官:那时间复杂度呢?

答:最差 \(O(n^2)\) ,平均 \(O(n\log n)\)

面试官:什么情况下最差呢?

答:数组完全逆序排序的时候

面试官:那怎么选取主元能使得快排的性能最好呢?

答:(这个之前在算法导论上看到过,然而已经忘了。。。想了想,如果说每次划分正好在数组的正中间,那么可达一个较优的情况所以就答了中位数)

算法题

写了道链表翻转,结果很尴尬,忘了将翻转后的链表最后一个元素的 next 设置为空,导致一直超时 orz 。。。。。过程中边 debug 边跟面试官讨论,最后改出来了。。害,太久没手写过数据结构了,这么一道简单的题还写出 bug。。。哭了

提问

问了下想到网易做游戏开发需要学些什么(毕竟当年是想做游戏开发才选的计算机,而且大一刚入学的目标就是网易游戏,虽然后来搞了近两年机器学习。。),面试官说是并没有太指望应届生有游戏开发相关的知识,要求就是基础要扎实,能够做到他们交给我们的东西我们能学会。(不说了,接着补基础去了。。。)

小节

一次体验极好的面试,总共面了一个小时多一点,过程中有答不上来的地方面试官会慢慢引导自己,结束之后感觉好像答的还不错,梳理一下发现问题还是有点多 orz。。面试之前看了不少网易游戏研发的面经,照着面经准备了几天,发现被问到的面经上都没出现,真就全靠平时积累。。。看来还有好多地方需要补一补。。说是一周内会出结果,只能看命了。。

从三月份开始投算法岗,一直到之前改投开发岗,挂了无数次,看着周围一些同学都拿了不少 offer,压力有点大。。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwgfgy.html