腾讯天美工作室-游戏客户端开发实习-一二面面经
第二次面腾讯的游戏客户端了,上次参加了光子的客户端开发公开课后,不幸倒在了二面。这次依然投的光子,但是最后是天美来约的。
我用过Unity和UE4,其中对UE4相对更了解一些。熟悉的语言是C++。
没有图形学背景,好在他们招游戏逻辑部分的实习生,不要求图形学。
一面
先做了自我介绍。之后先问了我选择做游戏开发的理由,然后开始依次问UE4、C++和数据结构的基础知识,最后手撸一道编程题。
UE4:
- 你觉得Unity和UE4有什么区别。开始瞎扯。
- UE4中都认识哪些类。我把我能记起来的类都列举了一遍,从UObject、AActor、UActorComponent到AGameMode、AGameState。
- 怎么学习UE4的。说了知乎专栏insideUE4,还有通过看教程做了一个简单的射击游戏DEMO。
- 在学习过程中有没有深入去了解某个模块,比如网络、动画、物理之类的。没有深入去了解,但是展开讲了一下我对网络同步和RPC的了解。
C++:
- 函数调用中参数传递有传值、传指针和传参,它们有什么区别。这个简单,还额外提了一嘴新特性右值引用。
- 函数调用参数传递时底层是怎么做的。我当时不清楚这个问题问的是什么,没答上来。
- 我前面提到了右值引用,问我知不知道移动语义。我知道std::move(),但是我不知道这个就是移动语义,当时没答上来。
- 堆空间和栈空间分别是什么,哪个空间更大,哪个访问更快。这个答上来了。
- 类的生命周期相关函数。我只知道构造函数和析构函数。
- 深拷贝和浅拷贝。知识盲区,没答上来。
- 多态的意义及其实现。这个准备充分,答得比较好。
- 如果给指针分配了空间但是忘了释放会发生什么。内存泄漏。
- C++有什么机制防止内存泄漏。智能指针,讲了shared_ptr、unique_ptr和weak_ptr的原理。
- 有没有用过lambda表达式。大概讲了一下它的语法,讲了它的内联特性。
- 内联和宏定义在使用上的区别。这个没问题。
- 内联函数和普通调用比有什么优势。这个也简单。
- 对模板类的了解。这个只知道个大概原理,并例举了C++的一些模板类,幸好没往深了问。
- 介绍一下你用过的模板类。从stack、vector一直讲到unordered_map,这个真挺累的。
- stack、queue、vector、list、map、unordered_map实现增删改查的时间复杂度分别是多少。说了好多,也不知道中间有没有说错。
- vector的扩容机制以及优化方法。说出了扩容机制,但是没答上来优化方法。
- 哈希表在发生冲突的时候会怎么做。我只答上来了拉链法。
- 哈希表在什么情况下效率会很低。我直觉的回答了当发生大量冲突的时候,但是考官说哈希表发生冲突的概率是很低的,应该是哈希表扩容时,会把所有元素重新哈希一遍。
数据结构和算法:
- 什么是平衡二叉树。没问题。
- 平衡树和红黑树有什么区别。没问题。
- 罗列一下你了解的排序算法并介绍原理。讲了插入排序、选择排序、冒泡排序、桶排序、快速排序、归并排序和堆排序以及原理,讲起来挺累的。
- 基于比较的排序算法理论最低的时间复杂度是多少。我一开始说了O(n),考官提醒我是基于比较的排序,桶排序不基于比较,我改成了O(nlogn)。
- 什么是稳定的排序和不稳定的排序。我一开始以为是指时间复杂度的稳定,考官提示我是原数组中有相同元素时的稳定和不稳定,我才答对。
- 有没有用过一些其它的算法比如贪心、动态规划。我说我以前参加过竞赛,这些算法包括一些图论数论的算法都有一定了解。
手撕代码:
- 删掉一个有序数组中重复的数字,并返回处理完后的数组长度(要求不能使用额外的数组空间)。这题还是比较友好的,在Leetcode里应该属于简单难度。
问完基础知识,考官让我简单介绍了一下我做过的一些其它项目,并没有深问(主要是没时间了)。
最后,考官问了我是否会读博,并介绍了他们目前正在做的项目。然后直接告诉我一面通过了,让我再查漏补缺一下准备二面。
全程大约一个小时。
二面
心情复杂,不愧是大厂,完全不按套路出牌,打了我个措手不及。
这次二面我本以为会以问项目为主,结果是以数学为主,把我这个读了研以后再也没碰过数学的人干懵了。
数学题:
- 有一根木棍,随便砍两刀看成三条,能组成三角形的概率是多少。哎,其实是很简单的解不等式再画图的题,但是一上来我就有点懵,一直自己跟自己绕。最后被提醒了两次才做出来。
- 有两颗玻璃球和一栋一百层的楼,如何最高效地确定哪层是能让玻璃球不碎的临界层。蛮经典的题,以前还写过。但是前面已经让我很懵了,记忆是空白,最后也没有给出标准的答案。
手撕代码:
- 有一个数字三角形,请返回从顶部到底部数字和最大的路径。简单的动态规划。此处略找回了一些自信。
闲聊:
- 玩过什么游戏。
- 最喜欢什么游戏。答了Minecraft和老滚5。
- 喜欢这两款游戏的理由。闲扯,这里氛围就比较轻松了。
- 学习技术的过程中有没有加入过一些专业论坛或者交流群。
- 你觉得大学和研究生期间什么课最难。
- 反问。
啥也不说了,信心已经没了一半。
大家有时间也要看看数学题啊。
全程大约50分钟。
如果还能有三面,我再继续更新。
三面已过,但是隔得有点久,已经忘了当时的问题了。已约HR面。
#实习##面经##游戏客户端开发工程师##腾讯#