2024.03.23 完美世界 - 游戏C++客户端开发工程师游戏开发 - 笔试复盘

245 阅读3分钟

单项选择(20道):

    1. 双向链表;
    1. 指针释放;
    1. C++派生类对象相关;
    1. 给出一段排序好的数组,求二分搜索的次数;
    1. 迭代器在各种STL中什么情况下会失效;
    1. 小端存储;
    1. 已知一个线性表(38,25,74,63,52,48),假定采用散列函数 h(key)=key%7 计算散列地址,并散列存储在散列表 A[0..6] 中,若采用线性探测方法解决冲突,则在该散列表上进行等概率成功查找的平均查找长度为__2__ ;
    1. 由于CPU向打印机输出数据的速度远远高于打印机的工作速度,为缓解CPU和打印机之间速度不匹配的矛盾,可采用__缓冲技术__ ;
    1. 进出栈;
    1. TCP的TIME_WAIT状态;
    1. 函数指针;
    1. 概率与统计题目;
    1. 下列协议是网络层的协议的是?(IP、ARP等)
    1. 一个电脑连接8台同样的外设,一个进程一次调用三台,进程数大于多少时会出现死锁问题?(4)
    1. 给定二叉树前序遍历和中序遍历,写出后序遍历;
    1. 对于数组 a[4][10] ,引用符号(&)使用错误的是哪一项?
    1. C++中多态性分为?怎么实现多态性?
    1. 给出的排序算法的时间复杂度最小的是?
    1. 给出结构体和对齐模数,求什么忘了;
    1. 二进制运算:
int cal(int num1, int num2) {
    if(num2 == 0) return num1;
    int a = num1 ^ num2;
    int b = num1 & num2;
    return cal(a, b);
}

不定项选择(10道):

    1. volatile关键字的作用;

volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。声明时语法:int volatile vInt; 当要求使用 volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。 而且读取的数据立刻被保存。

    1. 下列哪种排序空间复杂度为O(1)?

      A. 选择排序     B. 冒泡排序     C. 希尔排序     D. 归并排序    

    1. 函数重载的判定依据?
    1. 哪些函数调用必须进入内核?

      A. exit     B. fopen     C. strlen     D. memcpy    

    1. TCP/UDP的区别?
    1. C++ new;
    1. 多线程/多进程;
    1. 进程并发;
    1. 深/浅拷贝;

浅拷贝:就是复制的是引用地址,如果修改复制后的对象,原对象也会跟着改变;
深拷贝:就是复制的是对象的值,新建一个引用地址,复制后的对象修改不影响原对象。

    1. 多进程如何监听同一端口?

编程题(2道):

  • 1. 回文链表(找不到原题,也挺简单的,略)

  • 2. LeetCode 354. 俄罗斯套娃信封问题(动态规划 - 最长上升子序列)

给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度。

当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。

请计算 最多能有多少个 信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。

注意:不允许旋转信封。

 

示例 1:

输入: envelopes = [[5,4],[6,4],[6,7],[2,3]]
输出: 3
解释: 最多信封的个数为 3, 组合为: [2,3] => [5,4] => [6,7]

示例 2:

输入: envelopes = [[1,1],[1,1],[1,1]]
输出: 1