网易互娱 游戏研发 实习 一面凉经
打字太麻了,用的语音输入法,下面有的地方可能发音不标准会有错误。
投的所有大厂基本凉凉,各种大厂简历都没过,笔试机会也没有,中厂四十多个,没有一个面试的。 直到今天的网易互娱的面试。 还有一个明天的阿里的面试,虽然能进实习的机会渺茫,但还是想试试。
因为人比较喜欢游戏,所以投的游戏研发的实习。然而最后问面试官才得知原来这个实习计划要比校招难,最后面试官建议我明年投校招试试。和面试官交流的挺愉快。
另外第1次面试,没想到面试官上线还有开门关门的声音,这平台真有意思 。就是发起连线的时候声音贼大,给我吓了一大跳。
代码:
开始先是半个小时的手撕代码。给定一个大小为n的数组,找寻一个三元组ijk(数组下标) ,满足条件为 从0~i-1的和 等于 i+1~J-1的和 等于 J+1~K-1的和 等于 K+1~N-1的和 。从来没见过的题目,完全没有思路,直接懵逼10分钟,后来有了一个穷举的思路,上手写,到了时间没写完直接放弃,聊天框里问时间不够了,能直接说思路吗?然后吓了我一跳的连线就来了,面试官也没有问我思路,开面。 下面写了一些我的回答,有些可能是错的。 建议大家看个问题就行了。问得很密集,还很多。
面:
全程基本在问C加加和操作系统。有的地方突然想起来了,所以序号不是严格的。
1.虚函数的底层实现原理。
虚函数表在构造函数的时候分配空间并在实例化调用的时候去表里面查函数地址进行调用。
2. New的三种使用方法。
我嘟囔唔哇唔哇半天, 然后说不知道。自己在使用的时候只用过int * 一个指针(栈)=new一个堆上的空间。 他问我是不是只知道这种用法,但不知道名字。我说是。
3.类型转换 Dynamic cast和static cast的区别。
静态的是在编译的时候进行的类型转换,dynamic是在运行的时候进行的转换,其他的不了解了,因为从来没用过。(这时候我还以为这玩意儿就像int和double的转换一样,然后他提了一下说父类子类,我才想起来这玩意儿不是用来转数据类型的,给我混到了)
4.操作系统学过吗?说一下进程的状态。
进程有运行阻塞等5种状态(忘了哪5种了),运行的时候,比如他所分配的时间片到了,或者是CPU内存等资源没有分配过去,就会阻塞并挂起。
4.讲一下进程之间的通信方式。
共享内存,管道通信,信号量。
4.太少了吧,忘了是吧,讲一下啥是右值
简单来看就是等号右边的东西。可以是表达式或者是变量,嗯,在用的时候可以赋值给等号左边的东西。
4.讲一下右值引用的使用方式。
比如说我们想对一个变量取别名,我们就用引用,这样她俩就是同一个东西,另外是可以在函数里,比如我们想传递一个参数啊,如果用引用进去的话,函数对该变量的操作都可以保留下来。
(感觉答非所问)
5.智能指针
Shared point, unique point, weak point.
6. Weak point干嘛用的?
用来引用计数,监控sharepoint用的。
7.如果weak point指向的那个share point被删除了,并且在原来的空间分配了新的数据,那weak point还有用吗?
应该没用吧? 智能指针发明出来就是为了智能化管理内存的,如果这样能用的话,我感觉像是一个bug,所以应该不能用。(感觉用不了,但是真不知道怎么说)
7.你这不是从程序的角度来讲,是从反推法是吧,哈哈
(摊手)这个还真不太清楚,因为从来没写过。我都是直接写指针的。
8. STL了解过哪些?
Vector map unordered map.
9.那你知道这些的底层实现吗?
只看过vector的。
10. 讲一下vector的底层。
嗯,一共有三个指针,一个指向开头,一个指向结尾,另外一个指向容量的边界。扩容的时候是先新建一个连续的内存,然后把老内存空间的数据复制过去,再把老内存空间的东西都删掉。
11.如果我需要缩容怎么办?
啊这难道不能直接resize吗?
12.不是resize是缩容。
嗯,那就新建一个连续内存,然后把老内存空间的数据复制过去,再把多余的数据给删掉? (没有回应,不知道对不对,可能答非所问?)
13.讲一下迭代器失效。
啊哦嗯嗯嗯(没听过这玩意儿),那个我不是太清楚迭代器失效是啥意思?(学校也不教啊,iterator的用法都是自己摸索的,专业术语越多我越麻)
14.就是一个容器的interator会有一些情况会失效。
啊,嗯,比如说,一个vector如果这个指针指向了末尾,然后我又让他加加了,那取出来的值就会失效,是这个意思吗?
15.是的,多举几个例子。
啊,那就vector resize了,然后我又没有把迭代器重置,那可能会失效?
16.继续
那就,如果我这个地方的,嗯,数据都delete了,但是迭代器没有重置,那可能会失效?
17.排序算法知道哪些越多越好。
冒泡插入选择希尔桶快牌归并基数堆
18.说一下希尔排序。
希尔排序基于的思想就是在插入排序,嗯这个插入排序还有个特点是在数据趋向于有序的时候插入排序的算法,时间效率会比较高,然后希尔排序就是娶了个步长然后,把这个我先排一下,先排几轮,然后再进行插入排序,这个混合起来就是希尔排序。
19.讲一下缺页中断。
那当操作系统需要一个页的时候,但是他没有在cache里找到他就会去硬盘上寻找这个页,这个过程就叫缺页中断,然后这个因为缺页所以会有一些进程缺页置换算法。
20.讲一下液面调度算法有哪些?
厄先进先出是最简单的,就是哪个先进哪个出,然后还有Lru之类的
21.这也太少了吧,是不是忘了?讲一下lru算法。
(*巴拉巴拉讲一堆)
22.优化一下LRU算法
直接给变大,这样可以多装几个页?这个真不知道。
23.有一个双xxf&!?@?(没听过的名字),是lru算法的变种。嗯,讲一下红黑树的旋转吧。
红黑树我忘了,有点复杂。
24.说一下自旋锁
就是那个可以锁的那个,首先他是一个锁,所以他可以锁(废话)。然后他那自旋的意思就是在访问一个资源或者文件的时候,如果没有权限,就一直在比如一个while循环里面访问和一直获取,因为这个过程像自选所以叫自选所。
25.说一下僵尸进程。
厄因为进程之间是有父子关系的,如果父进城一直没有退出,那紫禁城就叫僵尸进城。(正确答案:一个进程使用fork创建子进程,如果子进程退出,而父没有调用wait或waitpid获取子的状态信息,那么子进程的进程描述符仍然会保存在系统中,这种进程称为僵尸进程)
【开放题】打开你那个共享白板
讲一下你遇到过的最印象深刻的算法。
*画图花了一分钟,画了4个棱形。
昨天做的那个雷火的笔试题用了个bfs+二分的,一开始我用的DP,我感觉做不出来也不知道怎么做,结束了以后去看了一下,知道原来可以用BFS加二分查找,因为普通的穷举会超时,感觉还挺妙的。
既然你提到了DP,那给我讲一下DP是个啥
*(讲了一大段我感觉很基础的玩意儿,什么穷举会超时重复计算之类的,然后每次都取两个路径的最优,这样跑一遍,到最后就是最优解。面试官也不给点反馈,我讲的到底咋样啊)
【聊了下个人经历和职业规划】
【反问】#网易互娱##实习#
投的所有大厂基本凉凉,各种大厂简历都没过,笔试机会也没有,中厂四十多个,没有一个面试的。 直到今天的网易互娱的面试。 还有一个明天的阿里的面试,虽然能进实习的机会渺茫,但还是想试试。
因为人比较喜欢游戏,所以投的游戏研发的实习。然而最后问面试官才得知原来这个实习计划要比校招难,最后面试官建议我明年投校招试试。和面试官交流的挺愉快。
另外第1次面试,没想到面试官上线还有开门关门的声音,这平台真有意思 。就是发起连线的时候声音贼大,给我吓了一大跳。
代码:
开始先是半个小时的手撕代码。给定一个大小为n的数组,找寻一个三元组ijk(数组下标) ,满足条件为 从0~i-1的和 等于 i+1~J-1的和 等于 J+1~K-1的和 等于 K+1~N-1的和 。从来没见过的题目,完全没有思路,直接懵逼10分钟,后来有了一个穷举的思路,上手写,到了时间没写完直接放弃,聊天框里问时间不够了,能直接说思路吗?然后吓了我一跳的连线就来了,面试官也没有问我思路,开面。 下面写了一些我的回答,有些可能是错的。 建议大家看个问题就行了。问得很密集,还很多。
面:
全程基本在问C加加和操作系统。有的地方突然想起来了,所以序号不是严格的。
1.虚函数的底层实现原理。
虚函数表在构造函数的时候分配空间并在实例化调用的时候去表里面查函数地址进行调用。
2. New的三种使用方法。
我嘟囔唔哇唔哇半天, 然后说不知道。自己在使用的时候只用过int * 一个指针(栈)=new一个堆上的空间。 他问我是不是只知道这种用法,但不知道名字。我说是。
3.类型转换 Dynamic cast和static cast的区别。
静态的是在编译的时候进行的类型转换,dynamic是在运行的时候进行的转换,其他的不了解了,因为从来没用过。(这时候我还以为这玩意儿就像int和double的转换一样,然后他提了一下说父类子类,我才想起来这玩意儿不是用来转数据类型的,给我混到了)
4.操作系统学过吗?说一下进程的状态。
进程有运行阻塞等5种状态(忘了哪5种了),运行的时候,比如他所分配的时间片到了,或者是CPU内存等资源没有分配过去,就会阻塞并挂起。
4.讲一下进程之间的通信方式。
共享内存,管道通信,信号量。
4.太少了吧,忘了是吧,讲一下啥是右值
简单来看就是等号右边的东西。可以是表达式或者是变量,嗯,在用的时候可以赋值给等号左边的东西。
4.讲一下右值引用的使用方式。
比如说我们想对一个变量取别名,我们就用引用,这样她俩就是同一个东西,另外是可以在函数里,比如我们想传递一个参数啊,如果用引用进去的话,函数对该变量的操作都可以保留下来。
(感觉答非所问)
5.智能指针
Shared point, unique point, weak point.
6. Weak point干嘛用的?
用来引用计数,监控sharepoint用的。
7.如果weak point指向的那个share point被删除了,并且在原来的空间分配了新的数据,那weak point还有用吗?
应该没用吧? 智能指针发明出来就是为了智能化管理内存的,如果这样能用的话,我感觉像是一个bug,所以应该不能用。(感觉用不了,但是真不知道怎么说)
7.你这不是从程序的角度来讲,是从反推法是吧,哈哈
(摊手)这个还真不太清楚,因为从来没写过。我都是直接写指针的。
8. STL了解过哪些?
Vector map unordered map.
9.那你知道这些的底层实现吗?
只看过vector的。
10. 讲一下vector的底层。
嗯,一共有三个指针,一个指向开头,一个指向结尾,另外一个指向容量的边界。扩容的时候是先新建一个连续的内存,然后把老内存空间的数据复制过去,再把老内存空间的东西都删掉。
11.如果我需要缩容怎么办?
啊这难道不能直接resize吗?
12.不是resize是缩容。
嗯,那就新建一个连续内存,然后把老内存空间的数据复制过去,再把多余的数据给删掉? (没有回应,不知道对不对,可能答非所问?)
13.讲一下迭代器失效。
啊哦嗯嗯嗯(没听过这玩意儿),那个我不是太清楚迭代器失效是啥意思?(学校也不教啊,iterator的用法都是自己摸索的,专业术语越多我越麻)
14.就是一个容器的interator会有一些情况会失效。
啊,嗯,比如说,一个vector如果这个指针指向了末尾,然后我又让他加加了,那取出来的值就会失效,是这个意思吗?
15.是的,多举几个例子。
啊,那就vector resize了,然后我又没有把迭代器重置,那可能会失效?
16.继续
那就,如果我这个地方的,嗯,数据都delete了,但是迭代器没有重置,那可能会失效?
17.排序算法知道哪些越多越好。
冒泡插入选择希尔桶快牌归并基数堆
18.说一下希尔排序。
希尔排序基于的思想就是在插入排序,嗯这个插入排序还有个特点是在数据趋向于有序的时候插入排序的算法,时间效率会比较高,然后希尔排序就是娶了个步长然后,把这个我先排一下,先排几轮,然后再进行插入排序,这个混合起来就是希尔排序。
19.讲一下缺页中断。
那当操作系统需要一个页的时候,但是他没有在cache里找到他就会去硬盘上寻找这个页,这个过程就叫缺页中断,然后这个因为缺页所以会有一些进程缺页置换算法。
20.讲一下液面调度算法有哪些?
厄先进先出是最简单的,就是哪个先进哪个出,然后还有Lru之类的
21.这也太少了吧,是不是忘了?讲一下lru算法。
(*巴拉巴拉讲一堆)
22.优化一下LRU算法
直接给变大,这样可以多装几个页?这个真不知道。
23.有一个双xxf&!?@?(没听过的名字),是lru算法的变种。嗯,讲一下红黑树的旋转吧。
红黑树我忘了,有点复杂。
24.说一下自旋锁
就是那个可以锁的那个,首先他是一个锁,所以他可以锁(废话)。然后他那自旋的意思就是在访问一个资源或者文件的时候,如果没有权限,就一直在比如一个while循环里面访问和一直获取,因为这个过程像自选所以叫自选所。
25.说一下僵尸进程。
厄因为进程之间是有父子关系的,如果父进城一直没有退出,那紫禁城就叫僵尸进城。(正确答案:一个进程使用fork创建子进程,如果子进程退出,而父没有调用wait或waitpid获取子的状态信息,那么子进程的进程描述符仍然会保存在系统中,这种进程称为僵尸进程)
【开放题】打开你那个共享白板
讲一下你遇到过的最印象深刻的算法。
*画图花了一分钟,画了4个棱形。
昨天做的那个雷火的笔试题用了个bfs+二分的,一开始我用的DP,我感觉做不出来也不知道怎么做,结束了以后去看了一下,知道原来可以用BFS加二分查找,因为普通的穷举会超时,感觉还挺妙的。
既然你提到了DP,那给我讲一下DP是个啥
*(讲了一大段我感觉很基础的玩意儿,什么穷举会超时重复计算之类的,然后每次都取两个路径的最优,这样跑一遍,到最后就是最优解。面试官也不给点反馈,我讲的到底咋样啊)
【聊了下个人经历和职业规划】
【反问】#网易互娱##实习#