网易游戏(雷火、盘古、伏羲)9月线下笔试真题(游戏开发方向)

(一)填空选泽题,一空一分

1、两个人轮流抛硬币,先抛出正面的赢,请问先抛的人赢的概率是________。

2、倘若你有一件武器,每使用一个材料,从1级到2级有90%概率成功,从2级到3级有80%,那么从1级武器升到3级所需材料的数学期望是________。

3、在一个正方体上取三个顶点构成三角形,该三角形是等腰非直角三角形的概率是________。

4、2 100 mod 7 = ________。

5、C++11 STL中map与unordered_map的区别,下列叙述正确的有________。
A  自定义类型作为unordered_map的key,需要实现相应的哈希函数和比较函数
B  两者遍历的输出的结果都是有序的
C  unordered_map内部为hash实现,map为红黑树实现
D  unordered_map的查询效率一定会比map的查询效率要高

6、C调用C++函数时,需要给C++的函数声明加上________,原因是________。

7、在C++ STL常用的容器中,下列哪些支持下标“[]”运算?________。
A  vector
B  list
C  map
D  set
E  stack

8、计算机在内存中存储数据有大端和小端模式之分,32位x86结构的计算机使用________模式,0x12345678对应的首字节是________。(提示:所填写数字使用16进制表示)

9、给定程序段
char s[] = "Netease";
char *p = s;
则下列叙述正确的是:________。
A  s和p完全相同
B  数组s中的内容和指针变量p中的内容相等
C  s数组长度和p所指向的字符串长度相等
D  *p和s[0]相等

10、关于C++11的异常,以下说法正确的有________。
A  析构函数不应该抛出异常
B  exception类是所有异常类的父类
C  在catch块无法将捕获的异常重新抛出
D  throw语句抛出的异常对象需要驻留在所有可能被激活的catch语句都能访问到的特殊内存空间中

11、以下C代码段的运行结果是________。
#define sum(a,b) a+b
int a = 5;
int b = 6;
int result = sum(a, b) * sum(a, b);
printf("%d\n", result);

12、关于C/C++的全局变量,下列说法正确的有________。
A  在函数或者类外定义的变量是全局变量
B  对于不同编译单位的全局变量,编译器会根据其依赖关系顺序初始化
C  在cpp文件中用static修饰的全局变量的作用域为该文件
D  未初始化的全局变量会放在bss段,而已初始化的全局变量则会放在data段

13、给定如下代码段,在64位编译环境下,sizeof(B) = ________。(64位编译环境下,sizeof(int) = 4)
class A{
public:
    virtual void funcA(){}
    int *p;
};
class B: public A{
    int i;
    char c;
}

14、关于C++程序,下列说法正确的有________。
A  数组下标越界是语法错误
B  构造函数不可以是虚函数
C  弱指针weak_ptr没有重载operator*和->
D  赋值运算符只能作为类的成员函数重载

15、以下关于std::mutex,std::lock_guard的描述,正确的有________。
A  mutex用于保护共享数据不会被多个线程访问
B  在同一个线程中,可以连续调用一个mutex的lock函数而不产生死锁
C  lock_guard采用RAII对mutex进行封装
D  lock_guard析构时其对应的mutex也会析构

16、下面这段C++代码的时间复杂度是________。
int x = 0;
for(int i = 1; i < n; i++)
    for(int j = 1; j < n; j += n/2)
         for(int k = 1; k < n; k = 2 * k)
             x = x + 1;
 
17、关于插入排续、冒泡排续、快速排续这三个排续算法,下列说法正确的是________。
A  最坏情况下,他们的时间复杂度都是O(n 2)
B  最好情况下,他们的时间复杂度都是O(n)
C  最好情况下,他们的时间复杂度分别是O(n)  O(n)  O(nlog 2n)
D  平均情况下,他们的时间复杂度都是O(n 2) O(n 2) O(nlog 2n)

18、下列关于select/epoll说法正确的有________。
A  select是同步IO,而epoll则是异步IO
B  epoll和select都是I/O多路复用的技术,都可以实现同时监听多个I/O事件的状态
C  epoll相比select效率更高,主要是基于其事件通知机制,而select则是基于轮询机制
D  select会随着FD数目的增加而线性下降,而epoll则不会

19、计算机启动后第一次调用ping www.163.com命令,会用到哪些网络协议?________
A  icmp    B  tcp    C  dns    D  arp

20、关于死锁说法正确的有________。
A  出现并发***作时容易出现死锁
B  数据库系统不会出现死锁
C  数据库中防止死锁的方法是禁止两个用户同时访问
D  系统资源不足也是导致数据库死锁的原因之一

21、已知一表达式的前缀表达式为 +-*235/^234( 楼主注:这里的235和234是™六个一位数而不是两个三位数,考场上没想到,fuxk!),该表达式的值为________。

22、已知一个二维向量(x,y),请求出与之垂直的二维向量(顺时针90度方向)________。

23、若事务T对数据对象A加上共享锁,则________。
A  事务T可以读A和修改A,其他事务只能再对A加共享锁,而不能加排他锁
B 事务T可以读A但不能修改A,其他事务只能再对A加共享锁,而不能加排他锁
C 事务T可以读A但不能修改A,其他事务(能)再对A加共享锁和排他锁
D  事务T可以读A和修改A,其他事务(能)再对A加共享锁和排他锁

24、关于linux的静态库和动态库,说法正确的有________。
A  Linux的动态库都是以ELF(Executable Linkage Format)存在的
B  多个应用程序引用同一份静态库,也在内存中存在多份拷贝导致空间浪费
C  可以用tar -czvf将目标文件(.o)打包成静态库文件
D  编译动态库的时候一定要加-fPIC参数,用于产生位置无关代码

25、一棵二叉树中续遍历续列是bdfcgae,后续遍历续列是bfdgeac,则该二叉树的前续续列是________。

26、Linux下用GCC编译和链接C/C++代码,以下说法正确的有:
A  编译是把C/C++源文件转换成机器语言的过程,会生成以.o和.obj为后缀的目标文件
B  如果源文件中使用了未定义(definition)的外部符号(如变量或者函数),编译时将会报错
C  链接时会收集所有目标文件中的符号信息,并决议(resolve)每个目标文件中需要的符号信息
D  静态链接时生成的可执行程序通常比动态链接时生成的可执行程序大
E  当链接库有更新时,不管是静态链接还是动态链接,都只需要替换链接库文件即可,无需重新生成可执行程序

27、假设一个文件中字符和字符对应出现的次数如下:
字符 次数 字符 次数
'e' 20 'u' 16
'f' 8 'a' 2
'd' 6 'c' 10
江文件使用哈夫曼编码/霍夫曼编码后(要求对于任何节点,左子树高度大于等于右子树高度),f对应的编码为________。

28、TCP建立连接的过程中,第二个报文的标记位是________。

29、下列关于TCP和UDP的描述,正确的是________。
A  TCP和UDP都是基于IP协议的应用层协议
B  UDP是datagram based的传输协议,所以网络传输中的UDP报文不会被拆分成多段发送
C  TCP提供了拥塞控制和流量控制机制
D  UDP的不可靠传输体现为可能丢包,但协议会保证顺序投递

30、与文法 S->AB|AS, A->aA|a, B->b 等价的正则表达式是________。

31、下列代码段在Linux中的运行结果会输出________个*。
#include<stdio.h>
#include<unistd.h>
int main(int argc, char *argv[]){
    int i;
    for(i = 0; i < 2; i++){
       fork();
       printf("*\n");     
    }
    return 0;
}
 
32、以下关于字符编码说法正确的是________。
A  大写字母A的UTF-16编码和UTF-8编码相同
B  GBK编码的汉字字符是双字节的
C  UTF-16编码的字符是双字节的
D  UTF-8编码的字符最少可以使用1个字节

33、给定有向图的节点,邻接情况及遍历顺序如下:
adj(s) = [a,c,d],
adj(c) = [e,b],
adj(b) = [d],
adj(d) = [c],
则从起点s开始的深度优先遍历的顺续为________。

34、以下哪些是对称加密算法________。
A  DES    B  AES    C  RSA    D  RC4

35、以下哪些程序可以为终端用户提供HTTP服务?________
A  Apache    B  Nginx    C  Node.js
D  Tomcat    E  Lighttpd

36、在传统的前向渲染流水线中,以下几个过程执行的先后关系是________。
A  顶点渲染    B  像素渲染
C  光栅化       D  图元组装

37、假设有如下三张表:
Student(id, name, age) 学生表,
Course(id, name) 课程表,
SC(sid, cid, score) 成绩表。
(a)对于被频繁调用的查询语句 SELECT * FROM SC WHERE score >= ? and sid = ?,最高效的索引是________。
(b)请写出SQL语句查询平均成绩大于80分的学号________。

38、假设当前目录一个用git管理的目录,请用一条命令统计该目录中git状态是修改过(modified)的文件数量________。

39、以下属于深度学习框架的有________。
A  Tensorflow    B  Torch    C  PyPy    D  Docker

40、关于游戏引擎,下列说法正确的是________。
A  堡垒之夜(FORTNITE)和绝地求生(PUBG)都是采用unreal引擎开发的
B  unity和unreal都是开源的游戏引擎
C  unity和unreal既可以开发PC端游戏,也能开发移动端或web端游戏
D  unity引擎中可以通过coroutine来实现多线程编程

41、以下网易出品的游戏中属于MMORPG类型的有________。
A  逆水寒    B  梦幻西游    C  荒野行动    D  非人学园

42、网易游戏的口号是
A  用心创造快乐
B  游戏热爱者
C  用心带来快乐
D  游戏创造者

(二)二叉树(8分)
已知一棵二叉树的节点结构如下:
 
class TreeNode{
    int value;
    TreeNode *left;
    TreeNode *right;
}

1、请实现方法左右翻转这棵二叉树,翻转后的二叉树是原树的镜像(3分)
 
void invert(TreeNode *t)
2、请实现方法判断两棵二叉树是否相同(2分)
 
bool equal(TreeNode *t1, TreeNode *t2)
3、请实现方法计算一颗二叉树的宽度,即各层节点个数的最大值(3分)
int calc_width(TreeNode *t)

(三)吓跑的怪物(10分)
有一个关卡,玩家依次经过n个怪物,怪物不会主动攻击玩家,击败怪物 i 可以获得 p i 分。但是击败它会吓跑后面 f i 只怪物,求解玩家最后可以获得的最高分数。
例如有5只怪,击败分别能获得2、4、3、2、2分,同时分别会吓跑其后的0、3、1、0、0只怪物。如果玩家击败第1和第2只怪物,吓跑了后面3只,那么只能获得6分。
 
//    p和f的长度都是n,并且i + f[i] < n
int calc(vector<int> &p, vector<int> &f)
 
1、请描述你的算法,并给出时间复杂度(3分)
2、请用C/C++实现上述函数(7分)

(四)布尔表达式(12分)
给定一个布尔表达式字符串,这个布尔表达式只会包含‘&’、‘|’、‘!’、(、)和10个变量(用‘a’~‘j’表示),‘&’和‘|’是两元操作符。‘&’表示当左右元素都为true时返回true,否则返回false;‘|’表示当左右有一个为true时就返回true;‘!’是一个一元操作符,表示对元素取反。
'!'的优先级大于'&'和‘|’,‘&’和‘|’优先级相同,‘!’的结合性为右到左,‘&’和‘|’为左到右。所有提供的表达式均合法,无空白字符且不为空。
该表达式符合的EBNF语法如下:
 
 
Expression => Term | Expression '|' Term
Term => Factor | Term '&' Factor
Factor => Sub | '!' Factor
Sub => Variable | '(' Expression ')'
Variable => 'a' | 'b' |...| 'j'

问题:
1、给出一个表达式字符串和每一个变量的值,请实现该函数(10分)
bool Calc(std::string& expr, std::vector<bool>& vals);
*    expr表示这个布尔表达式,vals表示每个变量的值,a的值是vals[0],b的值是vals[1]等等,计算返回表达式的结果。
*    例如表达式为“a|(b&!c)”,a、b、c分别为false、true、false,结果返回true。

2、给出一个字符串表达式,判断有多少个变量是实际影响计算结果的(2分)
int Count(std::string& expr);
*    例如表达式“a&((b|!b)|c)”,b和c的值是不影响表达式结果的,结果返回1。

(五)Skip List(10分)
In computer science, a skip list is a data structure that allows fast search within an ordered sequence of elements. Fast search is made possible by maintaining a linked hierarchy of subsequences, with each successive subsequence skipping over fewer elements than the previous one (see the picture below).
A skip list is built in layers. The bottom layer is an ordinary ordered linked list. Each higher layer acts as an "express lane" for the lists below, where an element in layer i appears in layer i+1 with some fixed probability p (two commonly used values for p are 1/2 or 1/4.

A search for a target element begins at the head element in the top list, and proceeds horizontally until the current element is greater than or equal to the target. If the current element is equal to the target, it has been found. If the current element is greater than the target, or the search reaches the end of the linked list, the procedure is repeated after returning to the previous element and dropping down vertically to the next lower list. The expected number of steps in each linked list is at most 1/p, which can be seen by tracing the search path backwards from the target until reaching an element that appears in the next higher list or reaching the beginning of the current list. Therefore, the total expected cost of a search is (log1/p n)/p which is O(log n), when p is a constant.

Now you need to implement the skip list with insert(4分), search(3分) and remove(3分) operation. For your convenience, the value of skip list is an integer.



(六)养猪(15分)
为了让大家吃上放心的猪肉,知名青年企业家甲淼(丁磊)在某地郊区建设了标号不重复的1到n的多个养猪场。为了方便管理和运输,这些养猪场之间准备n条修建道路相互连接起来。但现在甲先生觉得道路图纸有些问题,因为要连接所有主场只需要n-1条道路就够了,所以图纸上有一条道路是多余的。现在他想取消图纸上这条道路,你可以帮他找到多余的道路吗?
这里,道路用二元组的形式记录,如[i]号到[j]号养猪场的道路记为[i, j],甲先生保证j > i。整个道路图纸用表示道路的二元组组成的数组表示,比如现在有4个养猪场,有道路图纸[[3, 4], [2, 3], [1, 2], [1, 3]],可视化图形如下所示:

(图自己画)

问题:
1、现在甲先生想找到这条多余的道路,如果有多个道路都可以判定为多余,请给出最后出现在图纸中的道路。比如以上示例中[1, 2], [2, 3], [1, 3]都可以是多余边,但只接受[1, 3]为答案(出现在二元数组中的顺序更靠后)。请给出解决方案,请用伪代码或者编程语言描述你的算法,要求算法的时间和空间复杂度尽可能低。(5分)

2、现在甲先生改变了需求,他准备选泽其中一个养猪场改造为养鸡场,养鸡作为饲料并向其他猪场运输。处于各方面的考虑,甲先生现在要求所有道路只能单向通行,现在道路[i, j]表示只能从[i]号猪场到[j]号。比如原来4个养猪场的图纸现在就改为[[2, 1], [1, 3], [3, 4], [3, 2]],可视化图形如下所示:

(图自己画)

那么现在仍然有一条道路是多余的,并且饲料厂需要修建在能够到达所有猪场的地方,现在请找出这条多余的道路以及删除道路后应该被改造为饲料厂的猪场编号。如果有多个道路都可以判定多余,则请给出最后出现在图纸中的道路。请给出解决方案,请用伪代码或者编程语言描述你的算法,要求算法的时间和空间复杂度尽可能低,允许调用在问题1已经编写的函数。(10分)

猜你喜欢

转载自www.cnblogs.com/jiangzemin/p/9948559.html