腾讯日常实习面经
岗位:天美工作室-游戏客户端开发
时间轴:8.5 一面(后续待更新)
研一在读,开学研二,之前有面过一轮的腾讯日常实习,但最后挂在录用评估环节
一面(140min,牛客网面试)
(没错140min,7点15开始到9点半,面试结束后头晕加嗓子哑掉,后面半个小时基本考本能在面试了笑死)
前20分钟自我介绍加闲聊,由于正在上腾讯的暑期公开课,但突然收到面试邀请也很懵,因此和面试官多聊了一会,顺便解释了下简历已经过期半年了
算法题(40min)
聊完了简历之后八股没问就先抛上来三道算法题
- 合并两个有序链表,合并之后还要有序
- 实现二叉排序树,每次插入成功后返回父节点关键字值
- 给一个1000位以内的十进制数,将其转化为二进制然后按位逆序排列,再转换为新十进制数,并输出
做出两题,后面时间不够了
八股文(40min左右)
做完算法题之后,面试官说我们聊聊基础知识,也就是喜闻乐见的八股文环节
C++特性,如何实现多态等
C++虚函数相关:虚函数表内部原理实现,加入虚函数后是否会影响对象大小,影响的话增加了多少大小
智能指针相关:智能指针为了解决什么问题(内存泄漏),智能指针的引用计数和自动释放是怎么实现的,有没有看过源码,源码是如何实现上述功能的,野指针和内存泄漏的区别(这点没答上来,很难绷得住,问概念题是个什么操作)
STL相关:
map的原理,红黑树的原理,红黑树的优点在哪,红黑树的存放形式,如何插入节点(没有让说12种插入,还算人道)
编译内存相关:
- C++内存管理,分了多少段,在堆上和在栈上的区别,为什么要区分堆和栈,new和malloc的区别,
- 内存对齐,为什么会出现内存对齐问题,程序员为什么要关注内存对齐问题
图形学&引擎相关(40min)
聊完八股之后,面试官让我休息10min(可能他自己也要休息吧hhh),休息后和我聊聊项目相关,因为写过两个UE4和一个unity的项目,因此聊得都是这方面的话题
Unity和UE的区别:说了下Unity和UE的设计模式区别,语言角度:Unity用CS,UE用C++,写shader的方便程度,UE只要连连看还能实时调试还蛮方便的
讲一讲UE中自己比较熟悉的一部分,说了骨骼动画部分,如何实现ik,为什么有些游戏没有使用脚部ik
光照部分聊了兰伯特光照怎么在Unity实现的,还聊了聊基本的点乘叉乘,
碰撞部分聊了,平时用过哪些碰撞,球体碰撞的原理,多边形碰撞检测用什么算法(面之前刚看过闵可夫斯基算法hhh,小秀一波),如果运算效率较低,会出现胶囊体卡在墙中的情况如何解决
最后问了问我,在图形学和引擎领域广度上还算可以了,但深度上有没有什么探索,有没有产出(这点很惭愧一直在闭门造车,没有写博客的习惯,从此要改正了)
反问环节
项目组具体是哪个工作室,在做什么项目,如果我能进项目组,后续探索的方向上怎么选择(说是按照我的个人兴趣选择gameplay或者研究定制化引擎都可,但还说了一句要看组内的人员分配,这选择面可能就没那么广了吧hhh)
问了下后面还需要几轮面试,面试官说要再回去讨论下
第二天早起发现进入复式阶段,后续应该不会有这么久的面试了吧,复式后会来更新
二面(70min,腾讯会议面试)
这次面试的时间短了很多,面试官人也非常好,一些回答错误的地方会指引着回答正确,也有一部分问题和第一面重复,感觉发挥的不如第一次面试,可能会寄
闲聊&八股文(30min)
闲聊相关:
- 第一句先问我为什么想要加入游戏行业,为什么想要做游戏,怎样的学习经历
- 觉得架构师和普通的板砖程序员有什么区别(因为在聊的过程中我有提到过想在公司中学习如何提高代码质量,因此引出架构师),怎样的程序员才能成为架构师
- 期待在组内学到什么东西,如果实习中不能覆盖到自己感兴趣的部分会怎么做。
C++相关:
- 多态的实现形式,虚函数的实现形式,虚函数存放的位置,引出内存管理相关问题
- 内存管理为什么要区分堆和栈,其实和一面的内容有点重复,就不多赘述
- 在聊天框中发了一段代码,找出其中的问题:
void GetMemory( char *p ) { p = (char *) malloc( 100 ); } void Test( ) { char *str = NULL; GetMemory( str ); strcpy( str, "hello world" ); printf( str ); } int main() { Test(); }
这段脑抽一直在说strcpy的缺陷,却没有看到是指针传值,在函数结束后空间就会释放,面试官提示了之后才反应过来
- 第二段代码,内存对齐相关,也因此聊了为什么会出现内存对齐问题:
Struct S { int a; byte b; float c; byte d; byte e; } S s; sizeof(s) = ?
- 第三段代码,cache相关,聊了聊操作系统相关知识:
int array[3][1000]; int i, j; //遍历方式1 for(i = 0; i < 3; i++) { for(j = 0; j < 1000; j++) { printf("%d",array[i][j]); } } //遍历方式2 for(j = 0; j < 1000; j++) { for(i = 0; i < 3; i++) { printf("%d",array[i][j]); } } 哪种遍历方式更快?
图形学&引擎相关(30min)
聊项目,具体做了什么东西,认为Unity和UE之间的区别在哪,如果给我选择,在做什么项目的时候考虑Unity,什么时候会用UE
UE中怎么看待蓝图的,蓝图和C++的区别是什么
行为树和状态机之间的区别是什么,各自最好在什么时间使用。
渲染部分聊了聊基础的渲染管线,在顶点着色之前还有什么环节,
如何理解光栅化,光栅化是什么过程(这段因为比较靠后了聊得比较急,感觉没说清楚面试官就不怎么想继续了)
自己有实现过哪些渲染,讲了讲UE中的连连看
反问环节(10min)
问了下如果这一轮通过了,之后还有几轮面试,回答说至少hr面试会有的,有可能还有下一轮的技术面
最后结尾以让我自己说自己三个优点作为结束。
如果这次也能通过,会继续更新的,但这次的把握感觉比一面小了一些,祈祷能通过吧
#腾讯##腾讯实习##C/C++##C++工程师#