网易游戏一面面经
整体感觉面试官很nice,大概持续1小时45分钟
- 手撕代码30分钟:想象一下炸弹人游戏,在你面前有一个二维的网格来表示地图,网格中的格子分别被以下三种符号占据:'W' 表示一堵墙,'E' 表示一个敌人,'0'(数字 0)表示一个空位,请你计算一个炸弹最多能炸多少敌人。由于炸弹的威力不足以穿透墙体,炸弹只能炸到同一行和同一列没被墙体挡住的敌人。注意:你只能把炸弹放在一个空的格子里。
输入:
3
0 E 0 0
E 0 W E
0 E 0 0
输出: 3
解释:输入第一行表示网格行数 下面的每一行表示网格的具体内容。假如在位置 (1,1) 放置炸弹的话,可以炸到 3 个敌人。
- 虚析构函数工作原理
- 多个实例对象维护几个虚函数表?
- vector和list的区别
- 分析代码
#include <iostream> using namespace std; int main() { double *p = nullptr; p = p + 1; cout << p << endl; }
- 代码分析
class A; typedef int (A::*func)(int *, const int *) const;
- 代码分析
#include <iostream> using namespace std; struct A { char a; double b; int c; }; int main() { cout<< sizeof(A)<<endl; }
- 为什么要内存对齐
- 模板的特化和偏特化
- 哈希表的底层实现(哈希冲突,桶数量,扩容)
- 平衡二叉搜索树(AVL树)搜索和查询时间复杂度,插入和删除节点时如何翻转AVL树?
- TCP三次握手、四次挥手
- TCP和UDP区别,应用场景
- 进程与线程
- 线程之间的通信方式(管道、信号、共享内存、消息队列、信号量、套接字)
- 对面向对象编程的理解
- 手撕循环队列,实现基本接口void* read(void* buffer, int size)......