完美世界2013/2014校招笔试题目分析:算法与内存优化

5星 · 超过95%的资源 需积分: 9 69 下载量 182 浏览量 更新于2024-09-12 4 收藏 86KB DOCX 举报
本文档提供了完美世界在2013年和2014年的校园招聘笔试题目,主要考察了编程基础、数据结构与算法、内存管理和C++编程等知识点。以下是部分题目详解: 1. **矩阵乘法优化**: 问题涉及到矩阵乘法运算的计算效率,其中选项A至E分别展示了不同的计算顺序。在计算多层矩阵乘法时,减少中间矩阵的维度有助于降低乘法次数。根据数学运算法则,矩阵乘法的最优顺序通常是按列优先(从左到右)和按行优先(从上到下),使得每一步计算的矩阵维度尽可能小。在这个例子中,选项B `(A1((A2A3)A4))` 是最优解,因为它在最后阶段得到的矩阵维度最小,因此所需的数乘次数最少。 2. **C++内存大小计算**: - 对于字符数组 `array` 和指针 `p` 的大小,分别根据C++标准进行分析。`array` 包含7个字符加上一个终止符,故 `sizeof(array)` 应为8。指针 `p` 指向字符串,但单独的指针并不包含实际字符串内容,只有地址,所以 `sizeof(p)` 为4。 - 函数参数列表不同,`char p[10]` 的 `sizeof` 返回数组长度10,而 `char(&p)[10]` 返回数组引用的实际大小,即10个字符加一个终止符,共11。 - `main` 函数中的 `sizeof(char[2])` 表示固定大小的数组,其大小为2,`sizeof(char&)` 表示引用类型的大小,为1。 - 结果依次应为:8,4,10,1,2,1。所以答案是E。 3. **容器操作崩溃情况**: 题目测试的是迭代器在不同容器上的行为。`erase` 函数在删除元素后需要移动后面的元素来填补空缺,但在向后迭代时可能会遇到问题。在选项所给的容器中,`vector` 和 `deque` 是线性存储的,删除元素会导致后续元素位置变化,当使用 `erase` 删除元素后,原迭代器可能变得无效,可能导致程序崩溃。`list` 通过双向链表实现,删除操作不会影响其他元素的位置,`map` 通过红黑树实现,删除操作内部处理良好。因此,崩溃的容器类型是1(vector)和4(deque)。正确答案是A。 4. **C++类与内存管理**: - `classA` 的构造函数中调用 `clear()` 方法,该方法使用 `memset` 将对象成员清零。然而,由于 `this` 指针在 C++ 中是不可直接赋值的,`memset(this, 0, sizeof(*this))` 语句实际上不能清除指向的对象。正确的做法是仅对成员变量进行初始化,或者使用 `std::memset` 或 `std::zero 初始化`。 - 而析构函数 `~classA()` 是虚函数,确保了子类的析构行为。 总结起来,这些题目涵盖了矩阵运算效率、C++内存管理、容器操作和类的设计等多个关键知识点,对于应聘完美世界的在校生来说,理解和掌握这些内容对于通过笔试至关重要。