C/C++腾讯日常实习面经

岗位:天美工作室-游戏客户端开发
时间轴:8.5 一面(后续待更新)
研一在读,开学研二,之前有面过一轮的腾讯日常实习,但最后挂在录用评估环节

一面(140min,牛客网面试)

(没错140min,7点15开始到9点半,面试结束后头晕加嗓子哑掉,后面半个小时基本考本能在面试了笑死)
前20分钟自我介绍加闲聊,由于正在上腾讯的暑期公开课,但突然收到面试邀请也很懵,因此和面试官多聊了一会,顺便解释了下简历已经过期半年了

算法题(40min)

聊完了简历之后八股没问就先抛上来三道算法题

  1. 合并两个有序链表,合并之后还要有序
  2. 实现二叉排序树,每次插入成功后返回父节点关键字值
  3. 给一个1000位以内的十进制数,将其转化为二进制然后按位逆序排列,再转换为新十进制数,并输出

做出两题,后面时间不够了

八股文(40min左右)

做完算法题之后,面试官说我们聊聊基础知识,也就是喜闻乐见的八股文环节

C++特性,如何实现多态等

C++虚函数相关:虚函数表内部原理实现,加入虚函数后是否会影响对象大小,影响的话增加了多少大小

智能指针相关:智能指针为了解决什么问题(内存泄漏),智能指针的引用计数和自动释放是怎么实现的,有没有看过源码,源码是如何实现上述功能的,野指针和内存泄漏的区别(这点没答上来,很难绷得住,问概念题是个什么操作)

STL相关:
map的原理,红黑树的原理,红黑树的优点在哪,红黑树的存放形式,如何插入节点(没有让说12种插入,还算人道)

编译内存相关:

  1. C++内存管理,分了多少段,在堆上和在栈上的区别,为什么要区分堆和栈,new和malloc的区别,
  2. 内存对齐,为什么会出现内存对齐问题,程序员为什么要关注内存对齐问题

图形学&引擎相关(40min)

聊完八股之后,面试官让我休息10min(可能他自己也要休息吧hhh),休息后和我聊聊项目相关,因为写过两个UE4和一个unity的项目,因此聊得都是这方面的话题

Unity和UE的区别:说了下Unity和UE的设计模式区别,语言角度:Unity用CS,UE用C++,写shader的方便程度,UE只要连连看还能实时调试还蛮方便的

讲一讲UE中自己比较熟悉的一部分,说了骨骼动画部分,如何实现ik,为什么有些游戏没有使用脚部ik

光照部分聊了兰伯特光照怎么在Unity实现的,还聊了聊基本的点乘叉乘,

碰撞部分聊了,平时用过哪些碰撞,球体碰撞的原理,多边形碰撞检测用什么算法(面之前刚看过闵可夫斯基算法hhh,小秀一波),如果运算效率较低,会出现胶囊体卡在墙中的情况如何解决

最后问了问我,在图形学和引擎领域广度上还算可以了,但深度上有没有什么探索,有没有产出(这点很惭愧一直在闭门造车,没有写博客的习惯,从此要改正了)

反问环节

项目组具体是哪个工作室,在做什么项目,如果我能进项目组,后续探索的方向上怎么选择(说是按照我的个人兴趣选择gameplay或者研究定制化引擎都可,但还说了一句要看组内的人员分配,这选择面可能就没那么广了吧hhh)
问了下后面还需要几轮面试,面试官说要再回去讨论下

第二天早起发现进入复式阶段,后续应该不会有这么久的面试了吧,复式后会来更新


二面(70min,腾讯会议面试)

这次面试的时间短了很多,面试官人也非常好,一些回答错误的地方会指引着回答正确,也有一部分问题和第一面重复,感觉发挥的不如第一次面试,可能会寄

闲聊&八股文(30min)

闲聊相关:

  1. 第一句先问我为什么想要加入游戏行业,为什么想要做游戏,怎样的学习经历
  2. 觉得架构师和普通的板砖程序员有什么区别(因为在聊的过程中我有提到过想在公司中学习如何提高代码质量,因此引出架构师),怎样的程序员才能成为架构师
  3. 期待在组内学到什么东西,如果实习中不能覆盖到自己感兴趣的部分会怎么做。

C++相关:

  1. 多态的实现形式,虚函数的实现形式,虚函数存放的位置,引出内存管理相关问题
  2. 内存管理为什么要区分堆和栈,其实和一面的内容有点重复,就不多赘述
  3. 在聊天框中发了一段代码,找出其中的问题:
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的缺陷,却没有看到是指针传值,在函数结束后空间就会释放,面试官提示了之后才反应过来

  1. 第二段代码,内存对齐相关,也因此聊了为什么会出现内存对齐问题:
Struct S
{ 
    int a;
    byte b;
    float c;
    byte d;
    byte e;
}

S s;
sizeof(s) = ?

  1. 第三段代码,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面试会有的,有可能还有下一轮的技术面
最后结尾以让我自己说自己三个优点作为结束。


如果这次也能通过,会继续更新的,但这次的把握感觉比一面小了一些,祈祷能通过吧

链接:https://www.nowcoder.com/discuss/1007557?source_id=discuss_experience_nctrack&channel=-1

来源:牛客网


更多程序员面试试题经验分享

Linux后台开发狮:2023秋招大厂经典面试题及答案整理归纳(1-20)校招必看!1 赞同 · 2 评论文章

猜你喜欢

转载自blog.csdn.net/m0_58687318/article/details/126311761