腾讯 光子工作室游戏开发实习一面(半凉经)
春招实习刚面试完,本来八股和项目答得都还行,结果手撕代码环节极其惨烈,应该凉了(为半个月肝项目没刷算法付出惨痛代价),记录一下。
背景:学了一个多月unity,写了一个第一次人称FPS的3d项目,有大半年acm经历,无奖;
一面:90min+
一:首先问项目,大概30min,从设计上如何实现到具体用了哪些类和函数,都讲了一边;
问有哪些关键技术点,答:用了一个继承单例类的泛型对象池,管理子弹和弹孔之类的频繁产生和销毁的对象,提高效率;
二:开始常规八股 30min
1:讲讲虚函数是什么,纯虚函数是什么,虚函数表是一个对象一个吗,,虚函数表什么时候生成的,运行前产生还是运行后产生;
2: 哪些函数不能是虚函数;
3:菱形继承是什么,有什么问题,怎么解决,又追问虚继承为什么能够解决菱形继承带来的问题(没答上来);
4:问我项目有用到协程,协程和线程有什么区别,为什么协程比线程效率高;
5:内存对齐是什么,为什么要有内存对齐,讲完后给了一个具体类,里面有一些数据成员,让算这个类大小;
6:new 和malloc有什么区别,底层怎么实现的(没答上来);
7:五大内存分区都是什么;
8:网络的同步机制有什么,讲讲帧同步和状态同步异同和优缺点,讲讲upd可靠化,又问了一些具体的游戏用的哪种同步;
9:问了unity的物理系统是怎么运作的,问材质,没答上来,我说unity我只会一些gameplay方面的就没再问unity方面的东西;
三:手撕代码 30min
给一个链表,每个节点都是数字,有重复,要自己处理链表的建立和输入,定义一个旋转操作:从一个节点进行旋转就是把这个节点之前的的部分和尾部相接,形成一个新的链表,求旋转后产生的字典序最小的链表;
四:其他及反问
1:会不会lua,还会啥解释型语言,会不会ue4;
2:能实习多长时间,考研了吗;
反问:
1:如果能过去实习,做什么项目;
2:您对我有什么建议
答:加强代码以及编程能力,要有良好的命名习惯;(估计凉凉)
总结:比较常规,但比较注重深度,会看你到底会不会某个知识,而不是停留在表面,也比较注重编程能力(再也不敢半个月不碰算法题了);
2.24 upd:还是初试,不知道还有没有复试
二面 (60min)
提问: 上次面试你觉得哪些地方做得不好;
一:八股 (30min)
1:讲讲内存五大分区,除了堆和栈,其他区保存什么数据;
2:静态多态和动态多态,讲讲地址早绑定,地址晚绑定,回答下重载和多态;
3:讲讲栈和堆的区别,效率,大小,存储的数据类型;
4:基本变量存在哪里,创建类的对象时是存在堆上的吗?栈上能不能保存类对象,如果栈上能存,那类里的指针变量也是存在栈里的吗?
5:重载函数什么时候编译,多态什么时候编译,为什么,重载函数编译后在内存的哪个区,虚函数表存哪个区;
7:一亿数据top10000,怎么做;
8:讲讲你知道的排序算法;为什么快排比堆排块(答堆排破坏局部性,chache命中率低),归并和快排哪个快,为什么;
9:讲讲chache原理,问内存换入cache的最小数据是多少字节(忘了);
10:项目中遇到哪些问题,如何解决;
二 手撕代码 (30min)
1:POJ 1700
2:两个栈实现队列,封装成一个queue类;
总结:
1:这面答得也一般,面试官反响也一般,同样挖得比较深,可能是光子的风格吧,知识要彻底搞懂才能应对;
2:算法一定要好,一白遮百丑;