米哈游游戏开发一二三面凉经

11月初面完了三面,一周没有消息,微信联系HR询问结果已经不回复了,应该是凉了。
好多问题忘了,努力回忆部分写个面经给剩下的几个公司攒点人品,求个满意offer。
问了面试官,这个游戏开发就是服务器后端开发岗位。

一、一面半个小时,时间过去太久了,有点记不清,没有写代码,基本上是C++八股文加数据结构,但面试官在问完基础的数据结构之后喜欢问一句这个有什么实际应用
C++八股文,多态虚函数
函数默认参数位置,重载的时候如果多的那个形参是默认参数,调用的时候没有那个实参会发生什么?
队列和栈的实际应用
DFS和BFS概念以及实际应用
求解最短路径
讲一讲熟悉的排序算法,排序算法中哪些是稳定的,哪些是不稳定的
堆排序复杂度,为什么是O(nlogn)
反问:
聊了聊原神。

二、二面一个小时,
1、写题:
写一个split的函数,将一个string用逗号分隔开的各个部分切分,返回一个vector<int>,自己考虑异常输入,编写测试样例,如:-1111,1,0 ;       313413,   34324,,,,,+12432  等。
2、上面那道题我没有考虑字符串转成INT之后溢出的问题,面试官问了一下该如何判断溢出,如何处理,讲了思路,问了INT范围及补码表示的问题;
3、两个无符号数相加如何判断溢出;
4、写代码:
判断当前机器是大端还是小端;
5、智力题:
25匹马五个赛道比出前三的问题
6、系统设计:
排行榜排出前100应该怎么做?
很多不同场景的方案:
(1)、提供前100;
(2)、每小时刷新,实时刷新;
(3)、不同战力值数值范围,如果范围很大怎么做,范围比较小怎么做。

三、二面第二天就约了三面,三面大概四十五分钟
写代码部分:
1、单例模式,当时忘了剑指offer上的写法,用了锁,写的有点问题;
2、写一个栈,提供getMax和getMin,复杂度为O(1)。我用了两个空间为n的辅助栈。可以优化吗,讲了一些优化思路。
3、在第二个问题基础上,问了如果要提供栈中的中位数,如何实现?
开始问问题:
1、map和unordered_map的优缺点,适用于什么场景?
2、TCP和UDP区别,用在什么场景。
3、建立一个服务端需要哪些操作,我讲了常用的那些api。
4、time_wait的用处?答了防止服务端没收到确认,误关闭了客户端新开的socket。   问:只有这个吗?不知道其他的了。
5、创建一个守护进程来监听服务进程的异常状态,比如假死。我答了如何创建守护进程,后面的没实践过,不太懂要答什么。
6、操作系统,进程通信,多线程同步控制等;
7、IO多路复用,select和epoll,ET和LT。
8、熟悉哪些数据库吗?没怎么用过。
聊天:
1、玩过游戏吗?除了米哈游之外的游戏
2、有哪些offer?有游戏公司的offer吗?为什么投米哈游
反问:
这个游戏开发是服务端还是客户端?
像原神和蹦蹦蹦这些游戏大部分都是单机场景,服务端主要是做哪些事情?(这个问题问的有点憨批,当时觉得原神这机制实在想不出有多少内容需要服务端处理,就随口问了一下)

总体感受,米哈游的面试问题非常密集(有些记不住了),闲聊比较少,三面连自我介绍都省了直接问问题。考察比较全面,但大部分问题也都属于常规问题。
#面经##米哈游##游戏研发工程师##校招#
全部评论
楼主你好,请问你是实习、校招还是社招?
2 回复 分享
发布于 2020-11-15 13:49
m
点赞 回复 分享
发布于 2024-07-28 19:14 广东
一面之后大概大概多久出结果呀
点赞 回复 分享
发布于 2021-04-02 17:01
“重载的时候如果多的那个形参是默认参数,调用的时候没有那个实参会发生什么?”请问楼主这个问题是啥意思?
点赞 回复 分享
发布于 2020-12-07 19:18
楼主现在去哪里了啊?有 offer 了么
点赞 回复 分享
发布于 2020-11-20 13:07
大佬我想知道一些 这个游戏开发到底是服务器开发还是客户端开发呢
点赞 回复 分享
发布于 2020-11-19 11:16
我和你应该是同一个面试官咯 一面
点赞 回复 分享
发布于 2020-11-18 15:49
老哥可能是没有hc了
点赞 回复 分享
发布于 2020-11-17 11:11
楼主吃感谢信了没?我也是游戏开发,三面完两周都没消息
点赞 回复 分享
发布于 2020-11-16 20:04
我估计是因为你面的太晚了没hc了
点赞 回复 分享
发布于 2020-11-16 01:27
最后那个反问,服务端主要是做哪些事情面试官怎么说的啊
点赞 回复 分享
发布于 2020-11-15 16:55

相关推荐

05-10 00:10
中山大学 golang
发面经许愿过自我介绍进程和线程的区别?为什么线程会比线程快?进程中哪些资源是不共享的?共享的呢?线程中哪些资源是不共享的?共享的呢?为什么堆不共享,讲一下堆不共享的情况?协程知道吗?现在有100个进程,一个进程有10个线程,那么如果方法栈不共享的话是不是会有1000个方法栈,从协程的角度讲一下会有这种情况吗?讲一下为什么要三握手?http2.0和3.0的区别?http2.0和1.0的区别?讲一下Java目前版本的GC的一个过程?Redis和Mysql的区别?Redis是怎么更新的?Redis的数据如果删除失败了怎么解决?(从流程上解决)慢查询怎么找?讲一下之前实习的查询优化怎么实现的?讲一下具体怎么找到慢查询的?RESTFUL&nbsp;API的特点?(回答了域名是什么样的就写了什么)1t个整型数据怎么找中位数?(提示从快排的角度)算法题:LRU连续子数和答案:###&nbsp;**1.&nbsp;进程和线程的区别?**进程是系统资源分配的最小单位,而线程是程序执行的最小单位。一个进程可以包含多个线程,线程之间共享进程的资源,比如内存空间、文件描述符等,而不同进程之间资源隔离,通信需要通过进程间通信机制。---###&nbsp;**2.&nbsp;为什么线程会比进程快?**因为线程间切换的开销小,共享资源多,比如内存空间无需重新分配,而进程切换涉及到上下文切换、内存空间的重新加载等,代价更大。---###&nbsp;**3.&nbsp;进程中哪些资源是不共享的?共享的呢?**不共享的有:内存地址空间、堆栈、全局变量等。共享的有:代码段、只读数据段、内核资源(如打开的文件、信号处理器)。---###&nbsp;**4.&nbsp;线程中哪些资源是不共享的?共享的呢?**不共享的有:线程自己的栈空间、程序计数器、寄存器上下文。共享的有:进程的内存空间、文件描述符、全局变量、静态变量等。---###&nbsp;**5.&nbsp;为什么堆不共享,讲一下堆不共享的情况?**其实堆在**线程间是共享的**,因为多个线程可以访问进程的堆区数据。但在**多进程中堆是不共享的**,每个进程有独立的虚拟地址空间,堆也各自分配,不会共享,除非通过共享内存机制显式实现。---###&nbsp;**6.&nbsp;协程知道吗?**协程是一种用户态的轻量级线程,不依赖操作系统调度,由用户控制上下文切换。相比线程更轻,适用于大量并发但不需要多核并行的场景,比如高并发&nbsp;IO&nbsp;操作。---###&nbsp;**7.&nbsp;有100个进程,每个进程10个线程,如果方法栈不共享,是不是有1000个方法栈?从协程角度讲有这种情况吗?**是的,如果线程不共享栈,那么确实会有1000个独立的栈。协程也是一样,每个协程也需要单独的栈空间,尽管更小,常见是几&nbsp;KB,所以如果用协程实现相同数量,也会有近似数量的栈,只是代价更小。---###&nbsp;**8.&nbsp;为什么要三次握手?**三次握手是为了确保双方都有收发能力:-&nbsp;第一次客户端发起连接(SYN),-&nbsp;第二次服务端确认并回应(SYN+ACK),-&nbsp;第三次客户端再确认(ACK)。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果没有第三次,服务端无法确认客户端是否能正常接收数据。&nbsp;&nbsp;&nbsp;&nbsp;---###&nbsp;**9.&nbsp;HTTP2.0和3.0的区别?**HTTP/2&nbsp;使用&nbsp;TCP,多路复用减少了&nbsp;TCP&nbsp;连接数,但仍受&nbsp;TCP&nbsp;队头阻塞影响;HTTP/3&nbsp;基于&nbsp;QUIC&nbsp;协议,使用&nbsp;UDP,解决了&nbsp;TCP&nbsp;队头阻塞问题,同时提升了连接恢复和握手效率。---###&nbsp;**10.&nbsp;HTTP2.0和1.0的区别?**HTTP/1.0&nbsp;每次请求都要新建连接;HTTP/2&nbsp;引入了多路复用、头部压缩、服务器推送等特性,提高了性能,且可以复用同一个&nbsp;TCP&nbsp;连接处理多个请求。---###&nbsp;**11.&nbsp;Java&nbsp;当前版本的&nbsp;GC&nbsp;过程?**以&nbsp;G1&nbsp;GC&nbsp;为例,它将堆划分为多个&nbsp;Region,分代管理。先在年轻代进行&nbsp;Minor&nbsp;GC,把对象晋升到老年代;当老年代空间不足时进行&nbsp;Mixed&nbsp;GC,回收部分老年代;G1&nbsp;的目标是低延迟,使用并发标记、并发清理等方式减少&nbsp;STW&nbsp;时间。---###&nbsp;**12.&nbsp;Redis&nbsp;和&nbsp;MySQL&nbsp;的区别?**Redis&nbsp;是内存数据库,读写速度快,适合缓存、排行榜等场景;MySQL&nbsp;是磁盘数据库,支持复杂查询、事务等,适合数据存储场景。Redis&nbsp;通常作为&nbsp;MySQL&nbsp;的补充,不是替代。---###&nbsp;**13.&nbsp;Redis&nbsp;是怎么更新的?**通常使用&nbsp;**写穿**&nbsp;或&nbsp;**写回**&nbsp;策略。-&nbsp;写穿是:写数据库后,主动更新或删除&nbsp;Redis&nbsp;缓存;-&nbsp;写回是:先写&nbsp;Redis,异步同步到数据库(一般需要消息队列保证最终一致性)。---###&nbsp;**14.&nbsp;Redis&nbsp;的数据如果删除失败了怎么解决?(从流程上解决)**可以用&nbsp;**延迟双删策略**:第一次删除&nbsp;Redis&nbsp;缓存&nbsp;→&nbsp;更新数据库&nbsp;→&nbsp;延迟一段时间后再次删除&nbsp;Redis,防止并发请求中缓存被旧数据污染。同时可以通过消息队列或异步任务补偿失败的缓存删除。---###&nbsp;**15.&nbsp;慢查询怎么找?**-&nbsp;对&nbsp;MySQL,可以开启&nbsp;`slow_query_log`,设定阈值,日志中就能找到执行时间较长的&nbsp;SQL。-&nbsp;也可以用&nbsp;`EXPLAIN`&nbsp;或&nbsp;`SHOW&nbsp;PROFILE`&nbsp;分析执行计划,找出瓶颈。-&nbsp;在&nbsp;Redis&nbsp;中可以使用慢查询日志&nbsp;`slowlog`&nbsp;命令查看。---###&nbsp;**16.&nbsp;实习中查询优化怎么实现的?**我通过&nbsp;SQL&nbsp;优化&nbsp;+&nbsp;索引优化&nbsp;+&nbsp;缓存设计三方面入手:比如原来使用&nbsp;`LIKE&nbsp;'%keyword%'`&nbsp;模糊查询,改为分词索引提高命中;并对常用查询加入缓存,如&nbsp;Redis&nbsp;+&nbsp;本地缓存双层缓存机制。---###&nbsp;**17.&nbsp;具体怎么找到慢查询的?**在&nbsp;MySQL&nbsp;中打开&nbsp;`slow_query_log`,通过&nbsp;`mysqldumpslow`&nbsp;工具整理日志;配合监控工具(如阿里云&nbsp;DMS、Prometheus&nbsp;+&nbsp;Grafana)定位慢&nbsp;SQL,再用&nbsp;`EXPLAIN`&nbsp;看是否走索引,有没有全表扫描。---###&nbsp;**18.&nbsp;RESTful&nbsp;API&nbsp;的特点?**-&nbsp;使用统一的&nbsp;URI&nbsp;命名资源(如&nbsp;`/users/123`);-&nbsp;使用&nbsp;HTTP&nbsp;方法表达行为(GET、POST、PUT、DELETE);-&nbsp;无状态性,服务端不存客户端状态;-&nbsp;可缓存,提高性能;-&nbsp;结构清晰,易于维护和扩展。---###&nbsp;**19.&nbsp;1TB&nbsp;整型数据怎么找中位数?(提示快排)**1TB&nbsp;数据无法一次性放进内存。可以使用**外部排序算法**,或者基于**快速选择算法(QuickSelect)**的思想,通过分区,把比&nbsp;pivot&nbsp;小和大的数分别归类,类似快排的&nbsp;partition&nbsp;过程,只递归中位数所在的分区,直到找到目标位置。时间复杂度期望是&nbsp;O(n)。
查看22道真题和解析
点赞 评论 收藏
分享
评论
23
213
分享

创作者周榜

更多
牛客网
牛客企业服务