总共面了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": [
// 省略
]
}
]
}