2019.8.22 网易互娱游戏研发工程师

一面,45分钟
代码测试:size_t strlcpy(const char* src, char* dest, size_t size); size表示目的缓冲区大小,把src拷贝到dest中,保证不溢出,并且目的缓冲区是一个完整的C串
自我介绍
由于简历中没有C/C++相关工程项目,先问了对C++基础是否了解,介绍一下继承时,构造函数/析构函数调用过程
malloc 和 new的区别
inline是否了解
C、C++的编译过程,链接方式(静态链接和动态链接,怎么用以及两者的区别)
C++有哪些区,各自在什么时候被用到?堆(malloc),栈(函数、局部变量),静态/全局(静态、全局变量),自由存储区(new)、常量存储区(常量)
C++的STL容器用过哪些?map的底层实现是什么?介绍一下(红黑树,本质是一棵平衡二叉树,叶子节点是NULL并且记为黑色节点,根节点是黑色节点,红色节点的两端都是黑色节点,保证从任意一个节点到叶子节点,经过的黑色节点数目均相同,以此实现平衡,AVL树更严格)unordered_map 底层实现,哈希冲突时的解决方案(四种)
C++11的特性知道多少?auto、lambda、摒弃auto_ptr
智能指针了解多少?原理是什么?(unique、shared、weak,引用计数、weak计数)
static_cast, dynamic_cast了解多少?后者更安全,用于多态类型的转换
树,除了红黑树,还知道什么?树的中序遍历介绍一下?从小到大输出
怎么判断一个链表有环,怎么知道这个环的长度
C++和python的区别,说几个你认为的区别,介绍一下按值传参和按引用传参
排序算法了解哪些?描述一下快排的过程,有哪些优化的方法
用过动态规划吗?写一下最长公共子序列/子串的状态转移方程
网络的知识了解吗?有几层?TCP和UDP在哪一层,有哪些区别?TCP为什么是可靠的?平时用过网络编程吗?用的是哪个方法?
进程和线程的区别,线程同步的方法?
死锁产生的四个条件?用过多线程编程吗?写过生产者消费者问题,介绍一下这个问题
要求一个数里面,bit为1 的位的个数(while(num) { res += (num & 1); num >>=1;}(一开始&1写了%,>>=写了除号,被指出来这两个方***比较慢,有没有更快的方法,于是改成了移位和求与运算))
topK问题有哪些解法
若产品A用了素材1,2,产品B用了素材1,3,由于两个都用了素材1,则将它们列为同一类产品
给定[1, 2, 3] [3, 4, 5] [6, 7, 8]类似的N个判断有多少类产品(如题所述为两类)
并查集可解
介绍自己的项目?论文内容
对图形学了解吗?引擎相关?
如果让你设计一个寻路系统你会怎么设计?回答了A*,介绍一下这个算法?由于地图可能很大,完整地存储这个地图会显得不合理,有没有什么办法优化一下?回答了可以用位来存地图,而不是用int或char来存;这个是可行的,除了这个之外,还能想到别的吗?想了会一下子想不起来,面试官提示,一般会把整个地图分成块,比如三角、多边形或者不规则的等等,由这个联想到实验室做的子区划分,聊了下这个东西,最后问有什么问题想问的吗

二面,60分钟
自我介绍
介绍一下你的简历里面你比较困难的项目,你论文的算法细节介绍一下
平时用哪几个语言多一些?C++和python
一道C++问题:
struct Person
{
int id;
int age;
string name;
string data;
};
实现两个函数string serialize(Person a) 和 Person unserialize(string s),即从Person转换为一个字符串或从字符串提取出Person类各成员
当时想到了计网里面的帧,帧开始符结束符那边,在每个成员的开始和结尾插入两个不同的定界符,若name 和 data中也出现了定界符,则再插入一遍,在unserialize时,遇到两个定界符则删除其中一个,然后20分钟只写了一个serialize被打断,把思路讲了一遍

第二题:
二叉树,每个节点包含一个值(0或1)和一个运算符(| 或 &),父节点的值由子节点的值加上父节点的运算符决定,如父节点运算符为|,两个子节点为0和1,则父节点的值为1
求出一组叶子节点的值,使得父节点值为1,只要思路即可
由于只要一组解,那就直接深搜
基于上述问题,假设已经得到了一组解,你要改变某几个叶子节点,使得根节点变为0,最小需要改变几个叶子节点?时间复杂度是多少?回答了一个广搜的办法,一个根节点的变化,只可能有三种情况,因此到叶子节点最多有3^(lgn)的复杂度(感觉不是很满意…)

第三题:
一条直线,直线上有很多点,点的坐标和速度都告诉你,如何判断最早发生碰撞的两个点以及他们碰撞的点?

第四题:
一个坐标系中有很多怪物,选择一个纵坐标,比如选择y=1,则在y=1这条直线上水平移动,要把所有怪都消灭,若怪在(a, b),则消灭它需要|y-b|的体力,判断最少需要多少体力,把所有怪都消灭?回答了一下,只要求最中间的点的位置就可以了,举了两个点、三个点的情况,面试官表示答案是对的,能否证明?回答是否可以用反证法?

看到研究生主要做人工智能,为什么会想来做游戏研发?父母怎么看待你做游戏研发?对offer的选择上会考虑哪些因素?薪资有什么要求?地点?

二面结束大概七点多,约了网易朋友一起吃晚饭,结果刚点完菜,HR面了。。。
都不知道问了啥 自己怎么回的。。。
大概20多分钟吧。。。
感谢互娱!终于上岸了!!!