腾讯游戏客户端开发实习生二面面经

  • 1.看你简历里面写做过一些小游戏,那么请问如果让你参与研发一款爆款的游戏,你觉得哪些地方会比较有挑战性呢?

从服务器的压力,游戏的性能要求,画面渲染等ji方面讲了游戏的难点。

  • 2.既然你说到了既然你说到了游戏性能,那问一下游戏的性能能从哪些地方优化?

从代码和渲染两方面进行了回答,即CPU和GPU

  • 3.算法课上过吧,我们来做个小题目

手撕了二分查找和堆排序

  • 4.怎么算出二叉树的深度?

之前没做过,临时想按照层序遍历来计算

  • 5.了解平衡二叉树吗?

不了解

  • 3.extern C知道吗?有什么作用?

把代码块按照C语言的标准进行编译

  • 4.你说到了编译,那你知道C语言的编译原理嘛?和C++有什么区别呢?

学校没教过...囧

  • 5.那我不问编译原理了,问问网络、操作系统吧

  • 6.死锁的四个条件?

说了其中的两个,实在是编不出了

  • 7.如何避免死锁?

通过加锁解锁,或者不使用多线程,游戏开发的话unity也不推荐我们使用多线程

  • 8.说到协程,知道协程的原理吗?底层是怎么实现的?

协程本质上也还是单线程,不过它是非阻塞的,我一般在延时调用的时候用到(其实底层怎么实现确实不太了解)

  • 9.为什么unity中很少用多线程?多线程和协程都是非阻塞的,两者的优劣?

多线程会对资源频繁进行加锁,可能会影响效率。(回答的不太对,面试官也没直接否认,实际上是因为因为大多数游戏引擎是主循环结构, 逻辑更新和画面更新的时间点要求有确定性, 如果在逻辑更新和画面更新中引入多线程, 就需要做同步而这加大了游戏的开发难度)

  • 9.讲讲unity的内存分配机制?

从引擎和C#两个方面进行了回答。

  • 10.说到死锁会因为资源抢占引起,说说unity有哪些资源?

不太确定资源到底是指什么,就把cpu,内存,游戏对象,场景,gpu,resources都说了。

  • 11.说一说unity是怎么管理resources的?

resources里面的资源会在打包的时候都加进去,resources会在场景加载的时候读入,然后扯了点动态加载。(实际上进入游戏只是会加载res的索引信息,不会全部加载入内存,答错)

  • 12.讲讲TCP和UDP?两者的优劣?

讲了TCP的重传和拥塞控制,然后开始说自己做过的网络游戏小demo

  • 13.为什么项目里会混合使用TCP和UDP呢?怎么实现的?

项目相关,讲了大概思路

  • 13.TCP和UDP的下面一层是什么?网络层之间的数据具体是怎么发送的?详细过程是什么样的?

网络层主要是实现的不同IP之间的通信,具体实现不了解(又没有回答出来)

  • 14.有什么想问的?