字节朝夕光年实习2023.10.13
介绍项目,主要看游戏demo
大部分都是业务问题:
1、如吃鸡类游戏传输数据应该传什么,如何设计网络结构?
答:首先吃鸡应该是服务器-客户端机制,传输控制信息,状态信息本地自行计算
2、追加问题:如果仅传输控制信息,那么本地运算时发生不同该怎么办?
答:可以分开传输控制信息和状态信息,控制信息实时传输,以确保游戏的准确性,状态信息间隔传输,本地客户端自行根据状态信息插帧,并同步,保证状态的同步性。
3、追加问题:如果服务器传状态信息的负载特别大,不太适合传状态信息该怎么办?
答:我认为不管怎么样,状态信息依然还是需要同步的,如果长时间不同步,由于游戏进行中随机性过大,不能保证时间长了后本地结果一致,所以可以将状态信息传输间隔拉长,还可以利用客户端来中转状态信息,但不能完全不传输。
4、追加问题:那什么导致了游戏当中同样的控制信息出现状态的不同步?
答:(憋了半天,面试官还提醒了下)首先随机数,随机数种子的不同就必然会有不同的运算结果,其次多线程,多线程抢占时间片,抢占的结果不同,也会影响到计算结果;然后硬件设备的不同,可能会导致计算的结果不一致(这个胡扯瞎编,不知道对不对);还在说比如shader对于不同的显卡会采用不同的子subShader,(但后面一想这玩意仅影响显示,不影响物理状态);
5、追加问题:那如果随机种子设计的一样,且严格控制多线程资源问题,运行结果还是否一样?
答:(憋了很久)我在用python跑神经网络时,随机种子如果设计的一样,且多线程没有资源抢占,那么结果确实是一致的,我的理解应该是一样的,(然后还自己打自己脸说刚刚说的硬件影响说错了,我也不知道到底对不对)。
6、你认为虚幻中的c++和平时用的c++主要差异在哪?
答:我自己用的时候最主要在于虚幻中自己实现了一套反射机制,他的UHT和UBT帮忙将虚幻中的c++反射到蓝图或者反过来,这能实现许多方便的功能,尤其是在和蓝图项目交互的时候。
(面试官这时候提醒我还有gc),然后我才答虚幻中自行实现了一套gc机制,答标记机制相关的内容。
7、那这个gc和智能指针有什么不同(问智能指针实现)?
答:就正常八股念了圈智能指针,然后这个时候问我细节,然后我直接问要不我写一下shared_ptr,手写了一遍。并答了下两者主要区别在于清除时机不同,标记清除是用一个计时器轮询进行清除,shared_ptr只在修改指针的时候清除。
8、那要是你来设计的话,你更倾向于用哪种方式?
答:我认为这两者互相不冲突,智能指针和gc可以同时使用,两者一起保证内存不出现泄漏。
9、还有大概3、4个业务问题忘了
10、你喜欢玩什么游戏?
答:除了我晕3d,部分3d游戏不玩,其他基本都玩,玩的最多的是p社游戏,比如维多利亚、钢铁雄心这些,还有环世界,然后卡牌比如杀戮尖塔,rpg比如博德之门,小游戏比如吸血鬼幸存者,还有一些3a大作比如艾尔登法环这些,还有一些有名的艺术性游戏,比如双人成行、艾迪芬奇的记忆这些我基本都玩。
11、你不是说你晕3d嘛,你能玩艾尔登法环嘛?
答:我对镜头特别敏感,有些3d游戏的镜头感很好,比如守望先锋、艾尔登法环这些我就不晕,有些比如使命召唤这种我就晕的要吐。
12、那网游你一般玩什么?
答:英雄联盟是最多的,以前上过钻四,平时一般就白金仔不上不下,然后炉石传说,以前还玩守望,但暴雪不当人后就不玩了,还玩过天涯明月刀,小时候玩过梦幻西游和天龙八部这些,除了这些其实基本上什么都沾一点,但时长长过千小时的就刚刚说的几个。
13、手游呢?
答:和平精英还有王者都玩,然后还玩过阴阳师、土豆兄弟、重生细胞这些,相对少一些。
14、要是你来做游戏,你想做哪种?
答:大概说了下要做一个上手简单、但复杂度高(用简单的东西组合复杂的游戏玩法),游戏性是最重要的,画面及格就好,不要负面成瘾(比如阴阳师那种)。
15、问未来规划?
答:说自己想做独立游戏,所以什么都沾一点。
16、主攻方向?
答:性能优化,举例我玩的游戏(P社和环世界这种单核,后期卡死的垃圾玩意)
17、代码题:手写LRU?
基本g,除了记得lru算法是啥,线程也忘了,erase函数想半天才想起来,写的跟狗屎一样,面试官一直好心提醒我,幸好前面手写了下shared_ptr,不然直接打死。
面试体验:特别舒服,而且面试官大概率和我同好,我说自己喜欢游戏的时候,面试官还挺高兴的,面试官人特好,温和的很舒服,遇到过引导性最好的面试。
结果:进二面了