面经 | 疯狂游戏 | 一面 已凉
7021
发布于 未知归属地

总共面了1.5h,1h的业务测试和0.5h的代码测试,整场下来正常发挥,最后代码测试写得不好,即便写了半小时,结尾会把题目发下来给大家看一下,大家可以出谋策划一下。
1.简单进行自我介绍。
2.虚函数的实现原理以及为什么要有虚函数。
3.c++11新特性的智能指针。
4.shared_ptr的实现原理。
5.shared_ptr的引用计数是怎么实现的,或者说一个指针绑定一个对象那计数器是怎么加1的?
6.map是线程安全的吗?
7.map既然不是线程安全的,那我们能怎么样去减小锁的粒度呢?
8.让你实现一个按时间先后顺序的排位器,你会怎么去实现。(堆 + 哈希表)
9.你在小米实习的主要工作是什么。
10.实习期间你具体又做了哪些事情呢,可以详细说说。
11.Epoll的实现原理。
12.Epoll和我们在win点击完成时有什么区别?
13.讲一讲http协议。
14.线程池中你为什么使用的是6个线程呢,有什么原因。
15.多进程和多线程的区别。
16.如何解决死锁。
17.联机对抗游戏中游戏引擎的渲染效果,你是怎么做的呢。
19.这是2D的canvas?(2D)
18.联机你是怎么做的呢。
19.websocket和socket又有什么区别?
20.讲一讲你这个项目的匹配系统。
21.在匹配系统中添加客户端是多线程,执行具体逻辑是守护线程,同时对消息队列进行操作难道不会产生安全问题吗?(确实有这个问题,得加一个锁)

上机编程题(vs code写的,acm模式
题目描述:扁平数组转Tree

给定一个扁平数组,数组内每个对象的id属性是唯一的。每个对象具有pid属性,pid属性为0表示为根节点(根节点只有一个),其它表示自己的父节点id。
编写一段程序,输入为给定的扁平数组,输出要求为一个树结构,为其中每个对象增加children数组属性(里面存放child对象)。

解法有很多种,性能最优的方案最佳

给定输入:

[
  {id: 1, name: '部门1', pid: 0},
  {id: 2, name: '部门2', pid: 1},
  {id: 3, name: '部门3', pid: 1},
  {id: 4, name: '部门4', pid: 3},
  {id: 5, name: '部门5', pid: 4},
]

给定输出:

{
  "id": 1,
  "name": "部门1",
  "pid": 0,
  "children": [
      {
          "id": 2,
          "name": "部门2",
          "pid": 1,
          "children": []
      },
      {
          "id": 3,
          "name": "部门3",
          "pid": 1,
          "children": [
              // 省略
          ]
      }
  ]
}
评论 (12)