网易游戏服务器开发一面复盘

网易雷火事业群,11.9投简历,11.11来电话,11.12一面,11.13被拒。

1.自我介绍

2.一道概率题

3.看C++代码写输出,考的是std::move的转发问题,记混了

move是强制右值,forward才是完美转发,即左值转左值,右值转右值

4.选择题,排序算法的时间复杂度

5.innodb锁的选择题,估计是答错了

6.mysql引擎

InnoDB,mysql默认引擎。支持事务,数据量大和高性能以及读写很平均时的首选引擎。支持外键完整性约束,行锁定,缓存,存储按主键顺序存放。支持树索引。

MyISAM,查询速度快,不支持事务。支持全文索引和树索引。表锁定。

MEMORY将数据存储到内存中。支持树索引和哈希索引。

Archive,插入速度快,高压缩。日志可以用。

7.读频繁和写频繁用哪个引擎

读频繁可以用MyISAM,写频繁用InnoDB,如果查询很少也可以Archive。Memory理论上最快。

8.为什么用B+树,为什么不用红黑树,用过哈希索引吗

B+树是一个多叉搜索树。相对于B树,它把所有数据都放在叶子结点,非叶子结点由此可以放更多的关键字,所以比B树的深度更小,查询效率更快;其次叶子结点之间用链表串联起来,使得范围查询变得容易。红黑树是二叉搜索树,深度更深,会导致硬盘IO变多。

哈希索引对于每一行数据,都会计算一个哈希值,然后将哈希值和对应行的指针存储在哈希表中,用链表法来解决哈希冲突。哈希索引只支持等值查找,不支持范围查找。只支持所有索引列的查找,如索引建在(A,B),只找A是无法使用的。无法根据索引排序。

9.数据库三大范式

第一范式,所有字段值都是不可分解的原子值。比如地址可以拆分为,省份,城市,详细地址。

第二范式,保证每一列都和主键相关。

第三范式,保证每一列都和主键直接相关,而不是间接相关。

(学号) → (姓名, 年龄, 所在学院, 学院地点, 学院电话),符合第二范式但是不符合第三范式

10.为什么要有右值引用

减少函数调用过程中,由于对象拷贝引起的开销

11.匿名函数用过吗,怎么实现的

lambda表达式[]()->ret{}。

编译器实现原理,是创建了一个lambda类。外部截取的变量,为private成员变量,利用构造函数设置值。然后重载operator(),此函数即为后面形参列表、返回值、函数体的内容。然后声明一个该类的对象,通过对象调用operator()。

12.C和C++分配内存的方式

C语言用malloc和free,C++用new和delete。

13.申请内存失败的时候会发生什么

不知道他想问什么。C会返回空指针,而C++会抛出异常。

14.看你简历上有PHP,垃圾回收了解吗

C/C++是手动控制内存分配和释放,而Java、PHP、Python这些是有垃圾回收机制的。

引用计数法,每有一个地方引用了对象,就给对象的引用计数器加一,为0时则释放。缺点,互相引用的问题,引用计数器也占空间。

标记-清除,就是找与GC Roots有直接或间接引用关系的,打上标记,然后遍历堆,没标记就释放了。

标记-复制,将内存分为两块,一块的内存用完了,就把所有存活对象复制到另一块,然后集体清除前一块。

标记-整理,把存活对象整理到前头,然后剩下的全部清除。

分代处理,根据生命周期的长短分为新生代、中年代、老年代,采取不同的回收方法。

15.看你简历上有docker,讲一下你对docker的理解

docker使用了linux提供的命名空间来隔离进程。网络隔离有四种模式,默认是bridge。会创建一个docker0,然后所有容器与这个网桥相连,并获得一个IP地址。cpu与内存的隔离,是用了一个叫CGroup的东西。因为只是实现了隔离,不像虚拟机那样,所以效率极高。

16.口述算法思路,10w个数字,范围在1到10w,只有一个重复

17.软件设计模式

单例模式,即一个类在程序运行时只有一个对象,该类必须自己创建这个对象,并提供给其他对象。

工厂模式,定义一个创建对象的接口,由子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

观察者模式,定义对象一对一的关系,当一个对象的状态发生改变的时候,通知与它相关联的对象。

装饰器模式,动态地给一个对象增加额外的职责。

18.有哪些游戏开发常用的技术

19.TCP怎么保证可靠性

序列号,确认应答,滑动窗口。每个包都有一个序列号,保证有序。收到包后都要发送ACK,表示自己收到。滑动窗口有固定大小,如果前面的包还没收到ACK,则窗口不会滑动,一直重发这个包。

20.如果我想又快又有可靠性呢

给UDP加上滑动窗口,拥塞控制的机制。

21.用过哪些开源的库吗

Boost,没用过。

22.为什么要投游戏岗,玩过哪些游戏

23.实习的时间

24.反问,回答得怎样,还行吧

25.总结。垃圾回收一点没看,C++也妹这东西啊。口述算法只想出一种思路,事后翻了翻方法挺多的。数据库引擎和数据库范式答的不好

发表评论

电子邮件地址不会被公开。 必填项已用*标注