面试复盘 | 腾讯IEG光子工作室一面凉经

面试问题

8月10日 大约1小时

游戏开发相关问题

  1. 自我介绍
    本科做了安卓,暑期实习游戏开发,研究生做java web项目。
    其中暑期游戏开发的视频在这里:https://www.bilibili.com/video/BV12W411R7gc/
    后面大多都是针对游戏开发问的。
  2. 你觉得做游戏开发和你研究生做的web项目有什么区别?
    游戏开发设计的自由度更高,web项目受甲方知识约束,需求比较死板,难以沟通。
  3. 你们游戏的服务器是什么框架,怎么实现的?
    pb,是公司提供的***版的一段代码,我们只需要在里面填充。
  4. 如何保证两两玩家的连接?
    两种思路,一是以服务器为中心,建立房间匹配机制。二是以其中一个玩家的客户端作为俩玩家之间的交互服务器,它只向游戏服务器汇报战果。
  5. 服务器端如何检测玩家作弊?(你这个游戏是2p v e的,假如是pvp的话,比如DNF)
    第一,不符合物理引擎的位移视为作弊,例如突然跳的很高,跑的很快。
    第二,完美操作的视为作弊,因为人对视觉听觉是有延迟的,对方刚进入视线不可能毫秒级反映。
  6. 如果让你做这种双人合作闯关游戏,你选择tcp还是udp,为什么?
    tcp,tcp更稳定。
  7. 你说要用tcp,tcp在你这种强连接中的一般比较慢,为什么?
    校验重传/流量控制/拥塞控制/资源消耗大
  8. 假如有1000个人在线的平台,怎么保证性能?
    模仿redis,以网络情况较好的20名玩家客户端做环形的集群服务器,并设置哨兵。
  9. 你说的将玩家客户端做集群服务器,那这个玩家掉线了怎么办?
    切换到其他存活的玩家。并作主从复制。
  10. 你说的将玩家客户端做集群服务器,万一两两玩家作弊怎么办?
    服务器选择客户端对用户来说是透明的,想作弊的玩家刚好遇到的概率很低。

    八股文环节

  11. I/O多路复用是为了解决什么问题?
    单进程监听多个I/O端口。
  12. 说一下select/poll/epoll的区别?
    参考网上的答案很多balabala。
  13. 让你选,你会选哪个?
    优先选择epoll,除非不支持。
  14. 什么时候发生粘包?
    单个应用的报文过小,或者切分后溢出一个小段,和其他报文的一块发。
  15. 如何拆包?
    在tcp包里描述包的长度。或者定长,用0填充剩余部分,但这样做会造成资源损耗。
    (还有种方法是设置特殊分隔符,我没答上来。)

    项目环节

  16. 讲一下你的项目,你收获了什么?
  17. 讲一下你的论文,如何实现的ETL?
  18. 如何考虑你的ETL性能?需要多久?
    先报了自己电脑的配置,然后说了时间,讲了下应用的场景,一般不会频繁ETL,为了性能考虑,一方面是前端设置限制输入文件大小,另一方面是比较耗时的ETL执行函数进行加锁。
  19. 你的项目说了前台监控显示服务器的cpu/流量大小,这是怎么实现的?
    CPU/硬盘/内存占有是通过java调用linux的shell执行top等命令获得的。流量大小是java取的HTTPRequest对象的报文长度获得的。
    面试官提醒我流量大小也可以通过linux调用获得。

    项目延申到linux命令

  20. 假如cpu占用过多,如何排查哪一段代码出现了问题?
    top命令,查看占用过多的是否是我的应用,如果是我的应用,通过jvm的机制去查过堆/栈/方法区等信息,定位到代码。
  21. 如何查看当前运行进程?
    我只说了ps,面试官好像非常不满意。
  22. 说一下你知道的linux命令。
    mv cp cd ...
  23. 假如一个文件里有很多行url,如何快速替换其中指定的url,用linux命令实现?
    find命令查找到行,然后随机读写替换。面试官不满意。

    反问环节

  24. 游戏开发的加班情况。

总结

我投腾讯时并没有选部门,被分配到游戏开发部门有点措手不及,可能是看我建立上有过游戏开发经历吧,但那都是三年前的事了,好多忘了。
对于游戏开发的场景题确实都是现场想的,从来也没看到过类似面经。
后面对linux的提问挺深的,可能要具体实操过回答上参数吧,我只记住了些命令名。
第二天就挂了,反馈很快。
大佬们觉得我答的不好的地方,请指点下啊,或者有这种游戏场景题的面经推荐些啊~

补充答的不好的问题

  1. 应该用grep命令做筛选,vi替换。或者sed命令sed -e "s/var2/g" filename。平时应该多练练牛客的shell编程https://www.nowcoder.com/activity/oj?tab=2。命令不能光靠背,要动手实践。
  2. 检测玩家作弊,面试后我还想到了
    基于机器学习的方法判断和作弊玩家数据的相似度。
    对于关键性操作基于区块链建立共识机制。
  3. 如何选择select poll epoll?
    select支持率最高,可移植性好,而且响应时间精度是毫秒级的,poll和epoll是微秒级的,如果对时间精度要求高选择select。其他选epoll。
#面试复盘##面经##校招##腾讯##游戏研发工程师#
全部评论
不是一面时间越久,代表着面试官越想要你吗?像我们这种小菜鸡,最多半个小时面试官就想着面下一个了
1 回复 分享
发布于 2021-08-16 12:26
你投的是后端岗位吗,同样是光子我感觉我面的巨水...可能是我投的客户端的原因吧
点赞 回复 分享
发布于 2021-08-15 11:58
靠 看起来大佬答的没什么毛病 为什么凉了呢
点赞 回复 分享
发布于 2021-08-15 13:34
总结的好详细
点赞 回复 分享
发布于 2021-08-16 12:23
感谢楼主分享,祝找到好offer
点赞 回复 分享
发布于 2021-08-16 12:27
没有撕代码吗?
点赞 回复 分享
发布于 2021-08-16 14:50
啊啊啊find命令是用来检索若干个文件中符合要求的文件的,而不是用来检索某个文件中的某一行的,应该用| grep
点赞 回复 分享
发布于 2021-08-16 14:54
为什么游戏研发会问linux呀
点赞 回复 分享
发布于 2021-08-20 10:17

相关推荐

10-24 11:10
山西大学 Java
若梦难了:哥们,面试挂是很正常的。我大中厂终面挂,加起来快10次了,继续努力吧。
点赞 评论 收藏
分享
评论
13
46
分享
牛客网
牛客企业服务