近期拿到了一个腾讯的offer,记录一下面试过程。

我找的内推,面试的流程如下:

上传内推简历,接着马上被HR转到项目组里面,一个小时左右面试官电话过来约面,接着电话面,然后去科兴面,最后HR面,OFFER到手。

总的来说腾讯的面试流程还是挺简洁的,听说有人面了很多很多面,我没有遇到这种情况,不过最后给offer时间间隔太久了,一周半才确认。

两轮技术面试都是在问帧同步相关的问题,所以就一起写了,也是对帧同步做一个总结吧。(PS:其实我简历很多其他方向也很希望面试官能问到啊...)

由于时间比较久了 所以面试的问题可能不是特别准确。

PS。A并不是我面试的时候说的,因为并不可能在面试的情况下说出那么完善的逻辑,而是回来复盘之后,才想起来然后整理出来的。

Q:帧同步如何解决不同步的问题?

A:https://blog.csdn.net/nxshow/article/details/88382085

Q:帧同步怎么做到流畅的战斗?

A:

首先,定义一下流畅的战斗,流畅的战斗并不是代表着游戏的帧数一定要多高多高,而是说游戏的帧数在某一个帧数范围内小规模的变动,例如稳定在30帧这样。

对于单机游戏来说,如果要保证稳定在30帧,每一帧的逻辑、渲染等耗时不能高于33MS,所以需要小心的规划每一个函数的使用,采用分帧执行、算法优化等手段优化卡顿点。

而对于帧同步来说,不仅仅需要完成单机游戏的优化、还要针对网络波动进行针对的优化。我们知道,网络传输无法保证每一次传输的延迟都是一定的,有时候10MS就能完成一次传输,有时候1000MS才能完成一次传输,那么客户端如何保证网络传输不稳定的情况下,逻辑帧的运行还是相对稳定的呢?下面是给到的两种解决方案。

  1. 收到逻辑帧消息之后,不立即去播放,而是存着,播放使用固定的延迟进行播放,表现上就是玩家每次进行操作的时候,并不是马上生效的,而是有一小段固定延迟,这样网络在我们设置的延迟内波动的话,玩家是感受不出来卡顿的。但是缺点也很明显,每一个玩家都会有一段延迟。
  2. 另外一个处理方式就是,逻辑和表现进行分离,表现帧由玩家和逻辑帧进行驱动,逻辑帧卡顿并不影响表现帧,表现帧由玩家进行控制播放,一旦收到了新的逻辑帧,立即去做校验,如果说表现帧的播放轨迹和逻辑帧有出入,立即进行纠正。如果说新的逻辑帧并没有和表现帧有差异,但是表现帧相对逻辑帧差距很大,例如逻辑帧才到100帧,表现帧就已经到了200帧,这时候就对输入进行限制,比如移动速度放慢等操作。等待逻辑帧追上表现帧。对于其他玩家,采用AI预测的方式进行预测,一旦预测结果与新收到的逻辑帧不一致,就立即回退;同时,随着逻辑帧和表现帧的差距越来越大,相应的减缓预测的效果,最终停止预测。如果说逻辑帧突然来了一大波,应该适当的进行加速播放逻辑帧,尽量去追上表现帧。

Q:帧同步环境下如何做网络流量优化?

A:网络流量的优化,实际上就是网络包大小、数量的优化;首先,尽量去减小发送的数据,合理的规划每一个byte的作用,数量上尽量去合并同一批发送的数据包,减小由于包头造成的流量损失。

Q: 如何解决UDP丢包问题?

A:

首先明确一点,丢包问题是不可能解决的,在TCP和UDP下都会存在丢包的情况,那么为什么TCP号称是可靠的传输协议呢?这是由于TCP处理了丢包的情况,而UDP是无连接的,每次发出一个数据包之后就不管了,所以丢包的情况是需要我们自己去处理的。

首先,丢包是不可避免的,但是我们应该尽量去避免代码逻辑造成的丢包,还有就是完善丢包重传机制。

代码逻辑造成的丢包,具体来说,是以下几点:

  1. 发送端发送的数据堆积导致的丢包,也就是发送缓存被填满了导致的丢包,处理方式就是,控制发送频率,避免同时发送过多、过大的数据包。
  2. 数据包过大导致的丢包,internet协议规定的MTU大小为576,也就是目前最差的路由器支持的最小包大小就是576,如果大于这个数字,路由器就有可能对数据包进行分包,这样就一个包变成了两个包,两个包只要有其中一个包丢掉了,就代表这个数据包丢了,所以我们要严格控制数据包的大小,去掉UDP包头20个字节的大小,我们可用的还有556,我们程序中定义为512,只要超过这个数字,就会强制进行分包发送,接收方接收到数据包的时候,再进行重组。
  3. 接收端卡顿导致的丢包,接收端运行卡顿,导致数据包到接受端的时候Recv函数并没有在执行,处理方式就是使用多线程去执行Recv函数,这个线程里面只处理Recv,然后将接收到的数据缓存起来。

但是就算这样处理了之后,由于网络问题导致的丢包是没法解决的,所以我们必然要建立可靠的UDP传输。也就是实现丢包重传机制。

  1. 给每一个包规定一个自增的唯一序号,通过ACK确认双方发送到了那个数据包。
  2. 合理设置RTO(重传超时时间),TCP貌似是2*RTO, KCP采用的是1.5*RTO。

然后这里面试官追问,如果说这个包丢了,你一定要等到确认丢包之后重传吗?

答案是不会,格斗游戏既然使用了帧同步,就是要求实时性能,所以在重传机制上,还做了冗余发送的机制,就是在发送当前帧的时候,把前面几帧的数据一起合并起来发过去,相当于这几个消息中,只要收到了其中一个消息,就能流畅的播下去。

Q:如何保证在UDP环境下接收逻辑顺序一致性?

A:针对每一个数据包进行编号,后发的数据包如果先到了客户端,就存着,直到接收到的数据包是顺序的,才发生到逻辑层进行顺序处理

Q:如何实现帧同步环境下的断线重连?

A:

因为UDP是无连接的,所以断线只能通过上次收到的消息时间超时了多久进行判断,断线之后客户端逻辑帧停止,表现帧停止预测。

重连就比较麻烦了,重连回来之后,将逻辑帧、状态帧拉回来,服务器一次性将断线之后的消息发给客户端,客户端加速播放。

但是如果断线时间比较久,重连回来之后,消息数据量非常大,需要播放的帧数很多,有没有优化方法呢?有的,帧同步因为逻辑是在客户端运算的,所以帧同步的作弊也比较容易,我们通常会采用专门的验证服务器去验证,这个服务器同样接收客户端的操作指令,运行战斗逻辑,所以我们断线时间比较久的话,可以去验证服取到最新的现场数据,再发送现场数据到最新的逻辑帧给客户端,即可实现快速重连

Q:怎么去做战斗预测?

A:

Q:在帧同步的环境下怎么防止作弊的情况?

A:

Q:帧同步和状态同步的区别?为什么我们游戏要用到帧同步?

A:

帧同步和状态同步都不是新东西,很早以前就有了,以前由于网络问题,帧同步只存在于局域网游戏中。帧同步的逻辑放在客户端,服务器只管转发;状态同步的逻辑放在服务端,客户端只管表现。由于帧同步逻辑是客户端计算的,所以帧同步的每一个客户端都要知道场上的所有信息,才能正确的进行计算。而状态同步的逻辑都在服务端,所以状态同步不需要每一个客户端都知道所有的信息,只需要知道这个客户端所关心的信息就可以了。

因此状态同步更适合MMORPG这样的同步客户端数量较多,信息较为复杂的情况;而帧同步更适合MOBA这样的,客户端数量固定,更关注实时性的情况。

为什么我们游戏需要用到帧同步?我们游戏是一个格斗类型的游戏,对于打击感、实时性要求较高,而且参与战斗的只有两个客户端,战斗的场景非常简单,是一个典型的适合使用帧同步的场景。如果我们使用的是状态同步,每一个客户端在同一帧的表现不一致,就非常难调打击感,那么对于格斗游戏来说,没有打击感这个游戏就没有了灵魂。还有一点,帧同步的逻辑都在客户端,所以如果需要新增加战斗机制,只需要在客户端修改就可以了,不需要像状态同步那样,服务端增加计算逻辑,客户端增加表现逻辑。开发上非常简单,逻辑上也非常清晰。

除开帧同步 还少量的问了一些其他问题

Q:ETC压缩算法原理

A:

Q:大地图下的地图加载方式?

A:

Q:MMORPG游戏中多人、多时装渲染优化方案?

A:

问题不止这些,不过面试时间有点久,有些问题已经忘了,这里先做一个记录,后面有空再把回答补上

【面经】腾讯U3d面试面经 帧同步方向(总)相关推荐

  1. js解析二维码_最新最全阿里巴巴,今日头条,腾讯Flutter面试真题全解析(狂虐不止)...

    阿里巴巴,今日头条,腾讯Flutter面试真题全解析.你只有去过大厂,才知道大厂的面试有多难,这个难度不是你能够想象得到的.所以说如果想去做这方面的工作,建议把以下内容好好准备一下(其实也就是多看一些 ...

  2. java后台面试自我介绍_java腾讯远程面试后台研发岗面试题分享

    分享一个腾讯远程面试java后台研发岗位的面试经过,简单来说,自我介绍.经历分享.问题解答以及敲代码. 1. 上来先自我介绍. 2. 讲讲自己的项目经验. 3. ArrayList和LinkedLis ...

  3. jQuery 一次定时器_记一次腾讯微信面试

    2017年7月毕业至今,已经快两年了,这两年的的技术积累得到到底怎样呢?个人觉得,面试是检验技术的唯一标准.所以,决定准备一份简历,到顶尖的互联网公司试一下,广州这边,最好的公司,当然就是微信啦.正好 ...

  4. 【腾讯软件测试面试经历】一面、二面、HR终面

    此文讲述了我和腾讯蜜汁缘分. 我在腾讯截至投递简历的前十几分钟填完了简历,以至于我报错岗位了.我想去的是测试开发,却报成了软件测试. 紧接着,我收到了笔试通知.在笔试的模拟测试中,共有2种类型的题目: ...

  5. 西安腾讯云面试总结(已拿offer)

    西安腾讯云面试总结(已拿offer) 一面 (电话面试) tcp 和 udp 的区别? 事件循环? react 和 vue 的区别,数据流动? 箭头函数优点? web 性能优化? web 安全? 项目 ...

  6. 腾讯CSIG面试题目总结

    腾讯CSIG面试题目总结 1.MySQL高可用如何做?链接 主从同步:网络波动等一些客观原因,导致半同步复制发生超时而切换为异步复制,那么这时便不能保证数据的一致性.所以尽可能的保证半同步复制,便可提 ...

  7. 腾讯实习生面试2016两道面试题目?(知乎)

    腾讯实习生面试2016两道面试题目?修改 谢谢大神们高质量的回答,满满干货,excited ------------------------------------------------------ ...

  8. 腾讯笔试面试经历(2010年)

    发信人: sysuzsx (sysuzsx), 信区: MC 标 题: 腾讯笔试面试经历 发信站: 逸仙时空 Yat-Sen Channel (Mon May 24 13:01:43 2010) 今天 ...

  9. 最新百度 阿里 华为 腾讯 谷歌面试笔试题及解析

    最新百度 阿里 华为 腾讯 谷歌面试笔试题及解析 8月15日,百度2道面试题: 1.来自<编程之美>的概率题:一个桶里面有白球.黑球各100个,现在按下述规则取球:的 i .每次从通里面拿 ...

最新文章

  1. php安装pear和phpunit
  2. mysql数据库 web asp.net,使用基于asp.net web的应用程序的mysql数据库
  3. 详谈Spring定义
  4. The fall of RNN / LSTM
  5. Java EE陷阱#1:忽略@Singleton的默认锁定
  6. 老机型能更新鸿蒙,华为和荣耀老机型用户有福:确定能批量升级到鸿蒙系统!...
  7. ERP已经凉凉?低代码平台真能成为下个风口吗?
  8. mysql 还原 批量ibd_MySQL只有.frm和.ibd文件如何批量恢复InnoDB表-爱可生
  9. enum ordinal java_Java中怎样由枚举常量的ordinal值获得枚举常量对象
  10. OpenCV_连通区域分析----Two-Pass法
  11. 漂浮式半潜风机(二)环境荷载
  12. 201671030118 词频统计软件项目报告
  13. 杭州初中计算机老师怎么样,杭州中学两位老师,获得浙江省优质课评比一等奖。学生激动留言,这么多年老师还是这么漂亮!...
  14. Oracle 同义词,赋权语句图解记录
  15. 上海哪里打印比较便宜?
  16. POJ 小白算法学习 任重而道远
  17. 【YOLOv5-6.x】设置可学习权重结合BiFPN(Add操作)
  18. 粉丝福利!Matlab自动配色神器ColorForFans
  19. LeetCode第7题:整数反转
  20. Webpack 的 Chunk,想怎么分就怎么分

热门文章

  1. 【自考】-操作系统概论
  2. 【Mac】macOS无法验证此App不包含恶意软件 解决方法
  3. html背景音乐停止按钮显示,JS 一个按钮控制网页背景音乐的开始暂停
  4. BTC学习知识点总结
  5. 如何快速批量删除微信好友?
  6. 分子生物学 第四章 DNA的生物合成
  7. 官宣!麻省理工学院官方线上课程项目开放报名了
  8. 绝地求生登录老是显示服务器繁忙,绝地求生服务器繁忙请稍后再试解决方案 专家详解...
  9. 【企业架构】描绘未来第 3 部分:产品路线图
  10. SSM Chapter 05 Spring 核心概念