⼴州乐享元游-校招-C++服务端开发⼯程师笔试
⼀、选择题(共19道)
1. 问你第⼀志愿
2. 问你第⼆志愿
3.1、⼀个经常通过书名查询书籍信息的图书管理系统,哪种数据结构存储书数据(A)      A. 树      B. 链表      C. 忘记了      D. 忘记了
3.2、Linux⽬前⼤规模⽹络并发程序开发的⾸选IO模型是(C)                                            A. select      B. poll      C. epoll      D. blocking IO 解析:        采⽤了IO多路复⽤epoll模型,epoll是Linux⽬前⼤规模⽹络并发程序开发的⾸选模型。在绝⼤多数情况下性能远超select和poll。epoll的底层实现为红⿊树。
3.3、问abcdef进栈后不可能的出栈顺序(选项忘了)
3.6、玩家t表有play_id、item_id两个字段,现查询每个玩家各⾃拥有的物品数量(select play_id, count(*) from t groud by play_id)(选项忘了)
3.7、下⾯哪项关于主键的选项是错的(A)      A. ⼀个主键只能包含⼀个字段      B. ⼀个表只能有⼀个主键      C. 忘记了      D. 忘记了 解析:        有将两个字段当成⼀个主键的情况
3.8、下⾯哪项关于线程的选项是错的(A)      A. ⼀个线程死循环导致另⼀个线程⽆法运⾏      B. 进程是分配资源最⼩单位      C. ⼀个进程包含多个线程      D. 线程是程序最⼩单位 解析:        对于D:线程是操作系统能够进⾏运算调度的最⼩单位,分配算⼒、执⾏调度以线程为单位。        对于B:进程是正在运⾏的程序的实例,是线程集合的载体,同时也是操作系统分配资源的基本单位。        对于C:进程可以有多个线程,但⾄少有⼀个主线程。
3.9、下⾯哪项是错误的(C)      A. 智能指针可以创建对象      B. 智能指针可以删除对象      C. 智能指针可以避免内存泄漏(还是“可避免内存泄漏”具体忘记了)      D. 智能指针在引⽤计数为0时删除对象 解析:        当两个对象使⽤⼀个shared_prt成员变量指向对⽅,会造成循环引⽤,使引⽤计数失效,从⽽导致内存泄漏。不知道对不对 参考:⽜客上的C++⾯试题          四个智能指针:
auto_ptr(被弃⽤)、shared_ptr、weak_ptr、unique_ptr(替换auto_ptr)          智能指针可以很⼤程度上的避免内存泄漏问题!          unique_ptr保证同⼀时间内只能由⼀个智能指针可以指向改对象。          shared_ptr实现了多个智能指针可以指向相同对象,当计数为0时,资源会被释放掉。          weak_ptr指向⼀个shared_ptr管理的对象,其构造和析构不会引起引⽤计数的增加或减少。
3.11、下⾯代码是什么排序(A)        void func(int arr[], int n){                int i;                for (int j = 1; j<n; j++){                      i = j - 1;                      key = arr[j];                      while (i>=0 && key < arr[i]){                              arr[i+1] = a[i];                              i--;                      }                      a[i+1] = key;                }        }      A. 插⼊排序      B. 忘记了      C. 忘记了      D. 归并排序
3.12、⼆分查长度为1000的序列,最坏情况下需要查(10)次。(选项忘了)
3.13、下⾯程序在两个线程中执⾏,不可能输出(D)结果。        int count = 0;        for (int i = 0; i < 100; i++) {            count++;      }        cout<< count << endl;
A. 10
B. 100
C. 199
D. 201
3.18、现有1000瓶药⽔,其中有⼀瓶是毒药⽔,⼩⽩⿏喝了后在24⼩时后⽴即死亡,⾄少需要多少只⼩⽩⿏才能知道哪⼀瓶是毒药⽔(A)。        A. 10        B. 100        C. 200        D. 500 解析:        10
只⼩⽩⿏,则每只喝100瓶药⽔,死⼀只,剩9只⼩⽩⿏和100药⽔要区分;9只⼩⽩⿏,每只喝11瓶,剩1瓶未区分,有下⾯两种情况:            1. 死⼀只,剩下8只⼩⽩⿏和11瓶要区分的药⽔,因为只有1瓶毒药⽔,已经有⼩⽩⿏死亡,说明剩下⼀瓶药⽔不是毒药⽔。之后每只喝1瓶,剩3瓶未区分,有下⾯两种情况:
1.1 死⼀只,剩下7只⼩⽩⿏并确定毒药⽔。              1.2 没有⼩⽩⿏死亡,剩下8只⼩⽩⿏和3瓶药⽔要区分。之后3只⼩⽩⿏各喝⼀瓶即可区分。
2. 没有⼩⽩⿏死亡,剩下9只⼩⽩⿏和1瓶毒药⽔
3.19、⽼王30元买回来的玩具,40元卖。顾客⽤100元买,⽼王没钱给顾客,向邻居借100元,给顾客,后邻居发现100元是,⽼王赔给邻居,问⽼王亏了多少钱(B)。        A. 80        B. 100        C. 忘记了        D. 忘记了 解析:        以我的理解是:⽼王本可以赚那40元的,但因为假钱缘故,还赔60元进去,所以共亏了100元。  不知道对不对
⼆、编程题(共3道)1、排序题        输⼊:                [9,7,8,5]        输出:                [5,7,8,9]
分析:实现并不难,给出的代码是:
vector<int> sortFunc(vector<int>& source){
return source;
}
直接使⽤algorithm中的sort对source中元素排序即可。
1#include<iostream>
2#include<vector>
3#include<algorithm>
4using namespace std;
5
6vector<int> sortFunc(vector<int>& source) {
7
8 sort(source.begin(), d());
9 return source;
10
11}
12
13int main() {
14
15 vector<int>vBefore;
16 vBefore.push_back(9);
17 vBefore.push_back(7);
18 vBefore.push_back(8);
19 vBefore.push_back(5);
20 vector<int>vAfter;
21 vAfter = sortFunc(vBefore);
22 for (int i = 0; i < vAfter.size(); i++) {
23  cout << vAfter[i] << endl;
24 }
25
26 return 0;
27
28}
2、求矩阵的转置        输⼊:                3                1  2  3                4  5  6                7  8  9        输出:                1  4  7                2  5  8                3  6  9 分析:        这道题的实现并不难,主要是我⾃⼰不会创建动态的⼆维数组,⽽且不懂vector容器嵌套vector容器还硬着使⽤。        这⾥有学过矩阵转
置都很容易实现,主要是动态⼆维数组的创建可能会有点难。
1 //动态⼆维数组的建⽴
2 int size;
3 cin >> size;
4 int** arr = new int* [size];
5 for (int i = 0; i < size; i++) {
6  arr[i] = new int[size];
7 }
完整代码:
1#include<iostream>
2using namespace std;
3
4int main() {
5 //动态⼆维数组的建⽴
6 int size;
7 cin >> size;
8 int** arr = new int* [size];
9 for (int i = 0; i < size; i++) {
10  arr[i] = new int[size];
11 }
12 //接收数组数据
13 int temp1, temp2;
14 int i = 0, j = 0;
15 while (cin >> temp1) {
16  arr[i][j] = temp1;
17  j++;
18  if (() == '\n') {
19  i += 1;
20  j = 0;
21  }
22        // 转置并输出结果
23  if (i == size) {
24  i = 0, j = 0;
25  for (int i = 0; i < size; i++) {
26    for (int j = i; j < size; j++) {
27    if (i != j) {
28      temp2 = arr[i][j];
29      arr[i][j] = arr[j][i];
30      arr[j][i] = temp2;
31    }
32    }
33  }
34  for (int i = 0; i < size; i++) {
35    for (int j = 0; j < size; j++) {
36    cout << arr[i][j] << " ";
37    }
38    cout << endl;
39  }
40  }
41 }
42
43 return 0;
44}
3、求矩阵的转置        输⼊:                [[1,2,3],[4,5,6]]        输出:                [[1,4],[2,5],[3,6]] 分析:第三题仍然是求矩阵的转置,只不过这⾥多了个[]作为⼲扰。 思路:        读取有四种情况:                  当读到'['时,⼊栈                  当读到'数字'时,⼊队                当读到']'时,匹配'['                  当读到','时,
跳过
1#include<iostream>
2#include<string>
3#include<stack>
4#include<queue>
5using namespace std;
6
7int main() {
8 stack<char> s;//⽤于统计有⾏数
9 queue<int> q;
10 int row = 0, cow;
11 string str;
12 cin >> str;
13 string::iterator it = str.begin();
14 while (it != d()) {//注意这⾥是it != d()
15  //四种情况:
16  //  当读到'['时,⼊栈
17  //  当读到'数字'时,⼊队
18  //  当读到']'时,匹配'['
19  //  当读到','时,跳过
20  if (*it == '[') {
21  s.push(*it);
22  }
23  else if (*it == ']') {
24  if (s.top() == '[') {
25    row++;
26    s.pop();
27  }
28  }
29  else if (*it == ',') {
30  it++;
31  continue;
32  }
33  else {
34  q.push((int)(*it - '0'));// 转成整形
35  }
36  it++;
37
38 }
39 //创建转置后的⼆维数组
40 row--;//因为加多⼀⾏,所以要减去1
41 cow = q.size() / row;
42 int** arr = new int* [cow];
43 for (int i = 0; i < cow; i++) {//注意这⾥是cow不是row
44  arr[i] = new int[row];
45 }
46 //求矩阵的转置
47 for (int i = 0; i < row; i++) {//注意这⾥不要反了是row,下⾯是cow
48  for (int j = 0; j < cow; j++) {
49  arr[j][i] = q.front();
50  q.pop();
51  }
52 }
53 // 输出结果
54 cout << '[';
55 for (int i = 0; i < cow; i++) {
56  cout << '[';
57  for (int j = 0; j < row; j++) {
58  cout << arr[i][j];
59  if (j != row - 1)cout << ',';游戏开发工程师需要学什么
60  }
61  cout << ']';
62  if (i != cow - 1)cout << ',';
63 }
64 cout << ']' << endl;
65
66 return 0;
67}
结尾处说说⾃⼰的感受吧。将发题⽬出来不是为了什么,只是希望那些跟我有同样梦想的(做游戏)伙伴感受⼀下游戏公司的笔试题⽬难度如何,希望你们能顺利通过笔试,拿到⾃⼰期望的office。上⾯的解题思路有的是其他⼈的想法,有的是博主⾃⼰的想法。如果有⽐较厉害的伙伴想到更好的⽅法可以留下您的解题思路,⼤家⼀起交流交流。另外,博主有打算⾃⼰做游戏的想法,⽬前是想做⼀款avg类型的游戏(要上架的),剧情ing,志同道合的伙伴可以了解⼀下。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。