网易互娱 游戏研发实习 二面 部分复盘

---------------------------4/1日更新-------------------------------------------------------------
4/1日更新,增加了部分网络题目的复盘,关于游戏方面的知识过两天

-----------------------------原文------------------------------------------------------------------
二面全是场景题,被问到头皮发麻,求小伙伴们一起解答一下。
面试官人挺好,奈何自己有点菜。很多知识前一天恶补的,没吃透,比如四叉树。

1. 出现过,一个虚函数继承和函数指针转换的问题,但额外问了base和derive的内存空间,64位平台,8字节内存对齐。https://www.nowcoder.com/discuss/734061?type=post&order=recall&pos=&page=1&ncTraceId=&channel=-1&source_id=search_post_nctrack&gio_id=EB3C6A80002608A9F1FA4C98FE80F1BA-164****493204
复盘:没啥好讲的,只要了解虚函数继承后的内存(重点要明白,从类的虚指针到虚函数这是一个二级指针,作两次指针强转),以及typedef的一些知识应该就能明白。

2. 也在上面的出现过,1server,100client,单进程,如果一个client应用层不收数据(即不调用recv了)会发生什么,阻塞和非阻塞形式都讲讲。
我大概只想到一半的程度。client应用层不收,但server持续发送,会导致client缓冲区满,client缓冲区满后会告知server缓存空间为0。
然后server只能不断重试尝试向client发送探测报文,client也再次告知server没缓冲空间了。
后面面试官似乎想把我往server缓冲区满的方向引导,他提问一个client和100个client缓冲区有什么区别?是共用还是独立的?
我?????后面实在分析不出来了...
复盘:可以看这个关于缓冲区的介绍的文章https://www.cnblogs.com/traditional/p/11806454.html
大致过程跟就是server不断发送数据,但client应用层不接收,将导致server发送缓存区满,server发送缓存区满后将根据io类型来决定如何处理。
如果是阻塞IO,则整个进程阻塞。如果是非阻塞IO,将返回错误码EAGAIN,此时虽然那个有问题的client不能发送了,但与其他client建立的socket是没问题的,有独立的发送缓冲区,因此不受影响。

3. epoll底层红黑树,效率很高对吧。但是我有个需求,将100M文件发送出去。但发送缓存有限,我肯定要进行分割出来分批次发送吧,那么一次发1K,每次发送都要通过epoll侦听缓存空间是否就绪,然后就绪后发出去,这变成轮询了不是吗,怎么改进呢(应该仍旧是单进程情况下,面试官还是想让我往缓冲区方向思考)。
我???????????这题真的不懂
复盘:(自己的想法不一定对)其实分析思路跟上面那个差不多,我们直接写大文件很可能会导致发送缓冲区满,因此需要不时的通过epoll侦听相应socket可写。我们可以以非阻塞的形式进行send,当写入时产生EAGAIN时,表明发送缓冲区已满,这个时候我们通过epoll out侦听socket是否可写,若可以,那么我们这个时候再去重试一下send,而不必每次发送1KB就去侦听一下。

4. 一个很大地图,很多人,给一个x,y位置点和技能半径r,如何在大量用户情况下找到你攻击半径下的用户列表。
我:可以用分区的方法,如100*100地图,我拆分成100个1*1区块,然后以r所在区块为中心做dfs/bfs,并以r作为深度进行搜索。
面试官:每个区块上面人的密度不一样,会产生很多无人的区块,你遍历空区块实际上做了无用功,对这类区块的存储怎么优化。
我:可以采用四叉树的方法,将地图分割,然后密度越大的区域划分出来的区块越多,密度较低的区域只需要用1个区块存储用户列表就可以了。
似乎没达到点子上,面试官还想问我如何对四叉树进行存储优化,奈何四叉树只是学了皮毛,不懂面试官想问啥...
复盘:还是不会...等过两天再看看。

5. 力扣hard题381(更正,有些区别,面试需求是随机删除,381是随机获取),如何实现一个key value存储,以O(1)复杂度提供插入,删除,查找和随机删除?https://leetcode-cn.com/problems/insert-delete-getrandom-o1-duplicates-allowed/
我:用一个vector<ListNode>模拟哈希表,能够以O(1)复杂度提供前三个功能,另启用一个数组vector keys存储相应的key,然后通过rand 一个keys中索引来实现随机删除。
面试官:但是你如果使用了一个额外的数组,如何在对哈希表进行维护时,同时删除数组中的key呢。
我:emmmm(一时半会没反应过来)
面试官:比如我们哈希表中存了key value是{{1,3}, {2, 4}},你的数组里面存了{1,2},这时候我删掉key = 2的哈希表,你肯定也要维护keys数组
我:(思考了大概一分钟)为哈希表的value添加一个迭代器,指向数组对象中的相应位置,从而一并删除。
面试官:不对吧,迭代器删除也要考虑后续迭代器失效问题
我:emmmm,那就指针吧,将数组keys中要删除的Key其和最后一个元素swap一下,然后pop_back()。
复盘:思路应该没问题,用一个冗余数组来记录键值,从而提供随机删除的功能;但增加冗余数组后,需要同时对哈希表中存储的value进行一些更改(如插入指针或者是索引),使得删除时能对数组进行更新。

面完后人有点蒙,反问的话问了面试官这场面试的评价,面试官不方便讲...
建议我去牛客上多刷刷面经。
然后问了游戏行业的现状...emmmmmmm这就不讲了
#网易互娱游戏研发工程师暑期实习面经##实习##面经##C/C++#
全部评论
楼主拿到offer了吗
点赞 回复 分享
发布于 2022-04-20 14:59
我周二面试的,现在还没等到结果,不知道要三面还是hr面,估计得等到清明后了
点赞 回复 分享
发布于 2022-04-02 20:29
第三题应该是想问epollout吧, 第四题,我当时回答的时候说的也是把地图分成好几个区域。然后呢每个区域都维持一个玩家列表,每当玩家进入一个区域时就从原先区域的玩家列表中删除,加入新的玩家列表;查找的时候,只需要看一下覆盖了哪些区域,然后查找这些区域的用户列表就可以,面试官说是可行的,但也不够好。 另外楼主有后续消息吗
点赞 回复 分享
发布于 2022-04-02 10:51
会有三面还是hr面
点赞 回复 分享
发布于 2022-04-02 08:25
我也和你问的差不多😂
点赞 回复 分享
发布于 2022-04-01 21:57
第四题想问AOI吧
点赞 回复 分享
发布于 2022-04-01 08:46
网易互娱是不是只有一套题啊😂楼主这问的和我完全一模一样,我是今天下午4点的二面
点赞 回复 分享
发布于 2022-03-31 21:46
楼主你好,现在第二题有相应的答案了吗?
点赞 回复 分享
发布于 2022-03-31 21:39
我和你被问的问题基本上一样
点赞 回复 分享
发布于 2022-03-31 18:40
什么职位
点赞 回复 分享
发布于 2022-03-31 18:13
好家伙 我二面先是问项目 然后是问了很多基础 最后是一道算法方面的题 感觉风格完全不一样啊 你是面的啥呀 我是服务器端开发
点赞 回复 分享
发布于 2022-03-31 18:02

相关推荐

05-24 09:55
已编辑
上海大学 Java
更新:一面过了,但通勤有点远,接了另一个小厂的offer鼠鼠二本,现在大二,项目是苍穹和仿Git,问得还是挺简单的,不过还是有几个没答好公司规模算是中小厂,100-499那个档的,做的业务应该是快消的产业链、信息化这一块一面是线上,如果通过,二面是要线下去的。公司里学校挺远的,地铁要一个半小时,各位牛爷爷给点意见1.&nbsp;自我介绍2.&nbsp;从哪里学的CS61B(自我介绍中提到的)3.&nbsp;学校里学过的专业课中哪门课印象最深刻/收获最多4.&nbsp;第一个项目就是java程序设计的课程项目吗5.&nbsp;学习java多久了6.&nbsp;java中常见的规范7.&nbsp;讲讲Restful规范——没答出来8.&nbsp;数据库用的什么9.&nbsp;了解哪些java集合,讲讲它们的原理(LinkedList、ArrayList)10.&nbsp;Hashmap线程安全吗?哪个是线程安全的?介绍一下原理(Hashmap、ConcurrentHashmap)11.&nbsp;说说mysql优化12.&nbsp;说说逻辑外键13.&nbsp;说说mysql的索引优化——没答出来14.&nbsp;看到你的第二个项目是与git相关的,那么你来说说我们常用的git命令吧15.&nbsp;数据结构和算法掌握得怎么样16.&nbsp;口头手撕:非严格单调递增数列如何去重?17.&nbsp;看你简历上说对前端有一定了解,那就是对前端三件套和vue了解并可以进行开发吗18.&nbsp;挑一个项目给我简要介绍一下19.&nbsp;项目中遇到的难点20.&nbsp;bitmap操作的时间复杂度——没答出来21.&nbsp;常见的排序算法,它们的时间复杂度22.&nbsp;讲一讲快速排序的具体实现——没答出来23.&nbsp;看到你项目中第一点写到JWT令牌完成登录,Threadlocal储存用户信息,能讲讲吗24.&nbsp;ThreadLocal是弱引用,那么相比于强引用,弱引用的优势是什么——没答出来25.&nbsp;实习时长26.&nbsp;学校在哪27.&nbsp;未来的职业规划28.&nbsp;反问&nbsp;
查看27道真题和解析
点赞 评论 收藏
分享
评论
5
72
分享

创作者周榜

更多
牛客网
牛客企业服务