面试复盘 | 网易互娱 正式批 面试

本来对于网易的游戏岗位,我最先投递是的网易雷火事业群,后来看见别人推送网易互娱的一个免笔试的活动,恰好符合条件就投递了,后来由于雷火进程太慢了,在邀请面试时,放弃了,就保留了互娱这一个岗位,谁知面完进了互娱的池子....

下面来复盘一下两次面试的内容,欢迎大家一起交流学习~

一面(90mins)


自我介绍

  • 基本情况介绍

手撕代码

  • 动态规划类型

    一开始写了一个暴力遍历的解法,面试官问还可以怎么优化,想了一下说可以通过动态规划来解决,介绍了一下解法思路,面试官说可以,也没让代码实现。..... 面试完了再回顾这道题,竟然发现当初和面试官讲的思路行不通.....哈哈哈哈看来面试官被忽悠住了😝

项目介绍

  • C++ 项目介绍,展开问题:
    1. C++ 多态介绍下?

      分别回答了编译时多态和运行时多态,进而面试官追问到虚函数、虚函数原理....

    2. C++11 标准用了哪些?

      自动类型推断、匿名函数、移动语义和完美转发,function 类模型和智能指针。

    3. 介绍下智能指针怎么实现的?

      主要对 shared_ptr 和 weak_ptr 进行了提问,包括之间的区别,在底层上是怎么实现的,基本上算是把 shared_ptr 手撸了一遍,这里提供一个参考版本:

      template<class T>
      class smart_pointer {
      private:
          T* _ptr; 
          int* _count;
      
      public:
          smart_pointer (T* ptr = nullptr) : _ptr(ptr) {
              if(_ptr) _count = new int(1);
              else _count = new int(0);
          }
      
          smart_pointer(const smart_pointer* ptr) { 
              if(this != &ptr) {
                  this->_ptr = ptr._ptr;
                  this->_count = ptr._count;
                  (*this->_count)++;
              }
          }
      
          smart_pointer& operator=(const smart_pointer& ptr) {
              if(this->ptr == ptr._ptr) return *this;
      
              if(this->_ptr) {
                  (*this->_count)--;
                  if(*this->count == 0) {
                      delete this->_ptr;
                      delete this->_count;
                  }
              }
      
              this->_ptr = ptr._ptr;
              this->_count = ptr._count;
              (*this->_count)++;
              return *this;
          }
      
          T& operator*() { return *(this->_ptr); } 
          T* operator->() { return this->_ptr; }
      
          ~smart_pointer() {
              (*this->_count)--;
              if(*this->_count == 0) {
                  delete this->_ptr;
                  delete this->_count;
              }
          }
      
          int use_count() { return *this->_count; }
      }
    4. 使用了什么 STL 容器,底层怎么实现的?怎么扩增容量的?

      主要回答了 vector 容器,讲了一下 vector 的实现原理,相比于其他容器的特性和缺点,对它的大小和容量面试官也提问了一些。另外面试问能不能自己实现一个容器,来回墨迹半天搞不懂面试官到底是要干什么,也就放弃了...

    5. 项目中缓存区怎么实现的?怎么实现自动紧凑和增长的?

      介绍了下实现原理,因为是基于 vector 来实现的,面试官问会存在什么问题,还可以怎么优化,简单回答了下性能方面的优化思路。

    6. select 、poll 和 epoll 的区别?

      从结构、功能、性能、可移植方面进行了回答,这问题太常见了所以准备的相当充分,面试官看我回答的比较全面也就没再追问了。

    7. 介绍下操作系统的进程管理是怎样的?我们用的操作系统使用了那种调度策略?

      从进程状态和页面调度两个方面进行了回答...

情景题

游戏中假如有一个炸弹,这个炸弹的伤害范围是一个圆形区域,同时在地图里有很多人物,问怎么设计逻辑判断这个炸弹对哪些人物造成了伤害?

  • 答:可通过勾股定理计算每个人物与炸弹坐标的距离;
  • 问:计算距离涉及到根号计算,复杂度较高,如果了成千上万的人物在地图里,怎么优化?
  • 答:对于比较远的人物,可以直接比较单个坐标值,人物某个坐标值与炸弹对应坐标值的超过了伤害范围可直接判断无伤害。
这一个问题和面试官周旋了好久,get 不到面试官的点,最后我用草稿纸画了下示意图,将每个坐标分别在 X 轴和 Y 轴上进行投影,根据在两个轴上单个维度的距离可计算的快一些,避免更复杂的开根号计算。

二面(50mins)


自我介绍

项目介绍

  • 介绍一下两个版本实现之间的区别;

    第二个版本是第一个版本的优化版本,着重介绍了改进的点,以及采用的 C++11 新特性;

  • 同步 IO 与异步 IO 的区别?

  • 阻塞 IO 与非阻塞 IO 的区别?

  • 同步日志和异步日志是怎么实现的?生产者-消费者模型是怎么实现的?

  • 定时器是怎么实现的?

  • GET 和 POST 的区别?在解析时需要注意什么?

手撕代码

  • LeetCode 爬楼梯
  • 输出所有可能的方案不是方案数量——回溯法。

情景题

  • 在二维地图中,有一些补给点,还有很多角色,对于每个角色返回距离他最近的补给坐标,要怎么设计?需要注意,补给点是固定的,角色是在地图中运动的。

    设计要点:对固定的补给点来设计而不是运动的角色,例如对补给点来设计一种排序,给定一个坐标返回距离这个坐标最近的补给点。

  • 情景题:设计一个排行榜,每个角色有一个分数,这个分数是动态变化的,你怎么设计这个排行榜?

    这个题目面试官好像是想考察数据结构的,当时回答时主要想设计一个可以动态地、高效地排序的数据结构,需要注意的是除了前十名,后面的角色分数也是要维护,因为可能后面的角色获得一定分数后可能进入前十名。这一题答的不太好,面试官说回去可以再好好研究一下。

总结


因为是投递的游戏岗位,所以网易互娱的面试还是比较有偏向性、专业性的,很多问题都是从游戏开发的角度来进行提问,没有相关经验的话感觉不太好 get 到面试官的点。整体来说,还是有一些难度的,考察的八股等基础知识主要穿查在项目中考察,对代码能力和情景问题的分析比较看重吧。

另外,网易互娱的面试流程真的是太慢了,两次面试间隔了一周,二面完现在过去一个多月了还是没有消息😡

#面试复盘##面经##网易互娱##秋招##C++工程师##游戏研发工程师#
全部评论
排行榜那题,是不是可以前十名用链表来维护,后面的用大根堆来维护
1 回复 分享
发布于 2021-11-23 11:23
第一题怎么用动态规划解决呢 一面情景题那个可以把距离平方和爆炸半径平方比较吗?
点赞 回复 分享
发布于 2022-04-02 19:14
情景题是不是不要开根号也能比大小,,,
点赞 回复 分享
发布于 2022-02-08 22:47
那个爬楼梯用动态规划最快
点赞 回复 分享
发布于 2021-11-07 11:07
lz,研发的就两面技术面嘛? 我一个小测试为啥有三面😥
点赞 回复 分享
发布于 2021-11-01 17:05
请问现在怎么样了
点赞 回复 分享
发布于 2021-11-01 11:22
还没消息吗 楼主
点赞 回复 分享
发布于 2021-10-24 15:12
楼主的项目是高性能服务器吧
点赞 回复 分享
发布于 2021-10-24 10:21
加油
点赞 回复 分享
发布于 2021-10-22 17:52

相关推荐

bg双非本科,方向是嵌入式。这次秋招一共拿到了&nbsp;8&nbsp;个&nbsp;offer,最高年包&nbsp;40w,中间也有一段在海康的实习经历,还有几次国家级竞赛。写这篇不是想证明什么,只是想把自己走过的这条路,尽量讲清楚一点,给同样背景的人一个参考。一、我一开始也很迷茫刚决定走嵌入式的时候,其实并没有一个特别清晰的规划。网上的信息很零散,有人说一定要懂底层,有人说项目更重要,也有人建议直接转方向。很多时候都是在怀疑:1.自己这种背景到底有没有机会2.现在学的东西到底有没有用3.是不是已经开始晚了这些问题,我当时一个都没答案。二、现在回头看,我主要做对了这几件事第一,方向尽早确定,但不把自己锁死。我比较早就确定了嵌入式这个大方向,但具体做哪一块,是在项目、竞赛和实习中慢慢调整的,而不是一开始就给自己下结论。第二,用项目和竞赛去“证明能力”,而不是堆技术名词。我不会刻意追求学得多全面,而是确保自己参与的每个项目,都能讲清楚:我负责了什么、遇到了什么问题、最后是怎么解决的。第三,尽早接触真实的工程环境。在海康实习的那段时间,对我触动挺大的。我开始意识到,企业更看重的是代码结构、逻辑清晰度,以及你能不能把事情说清楚,而不只是会不会某个知识点。第四,把秋招当成一个需要长期迭代的过程。简历不是一次写完的,面试表现也不是一次就到位的。我会在每次面试后复盘哪些问题没答好,再针对性补。三、我踩过的一些坑现在看也挺典型的:1.一开始在底层细节上纠结太久,投入产出比不高2.做过项目,但前期不会总结,导致面试表达吃亏3.早期有点害怕面试,准备不充分就去投这些弯路走过之后,才慢慢找到节奏。四、给和我背景相似的人一点建议如果你也是双非,准备走嵌入式,我觉得有几件事挺重要的:1.不用等“准备得差不多了”再投2.项目一定要能讲清楚,而不是做完就算3.不要只盯着技术,多关注表达和逻辑很多时候,差的不是能力,而是呈现方式。五、写在最后这篇总结不是标准答案,只是我个人的一次复盘。后面我会陆续把自己在嵌入式学习、竞赛、实习和秋招中的一些真实经验拆开来讲,希望能对后来的人有点帮助。如果你正好也在这条路上,希望你能少走一点弯路。
x_y_z1:蹲个后续
点赞 评论 收藏
分享
01-11 08:47
门头沟学院 Java
choumoduji...:读研的目的就是为了以最快的速度和最低的要求完成“学校”规定的毕业标准,而不是所谓课题组的要求
点赞 评论 收藏
分享
评论
15
132
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务