微软2013实习生笔试题目:面向对象与数据结构分析

版权申诉
0 下载量 142 浏览量 更新于2024-08-24 收藏 121KB DOCX 举报
本文档提供了微软2013年暑期实习生的笔试题目,涵盖了一些基础的编程概念和技术理解。以下是各题目的详细解析: 1. 题目涉及函数调用约定:题目询问支持可变长度参数(如printf)的调用约定。在C++中,C++标准库通常使用`__cdecl`(cdecl)或`__stdcall`(stdcall)调用约定,其中`__cdecl`是Microsoft C++的默认调用约定。但是,printf函数并未指定特定的调用约定,其行为取决于编译器实现。这里没有明确的答案,因为题目没有指明`printf`的调用约定,所以这可能是一个陷阱问题。 2. 编程题考察虚函数和常函数的理解:定义了两个基类A和派生类B,它们都有同名的虚函数`f()`和常函数`f() const`。在`main()`函数中,对象`a`为`B`类型的指针,但通过`A`类型的指针进行操作。由于`g()`函数传入的是`const A*`,它会调用`a->f()`,因此会执行`B`类的非常量版本。`a->f()`会输出`B::f()`,然后在`main()`中的`a->f()`也会输出`B::f()`,最后`g(a)`调用`a->f()`,再输出一次`B::f()`。因此答案是B。 3. 链表与数组的区别:题目询问两者的主要差异。A选项关于排序时的搜索复杂度,链表通常比数组查找效率低;B选项关于动态添加/删除,链表可以动态增长和收缩,而数组大小固定;C选项涉及随机访问效率,数组可以通过索引快速访问,而链表需要遍历查找;D选项数据存储类型,链表是链接节点的结构,数组是连续的内存块。答案是B和C。 4. 线程与进程在Windows中的描述:A选项错误,一个应用程序至少有一个进程,但可以有多个线程;B选项正确,每个进程有自己的栈,但线程可以共享进程的只读堆栈;C选项错误,线程可以独立运行,有自己的栈,而不是共享。 总结:这份微软2013年暑期实习生笔试题测试了候选人的编程基础、函数调用和继承、数据结构理解和操作系统概念。解答这类题目不仅需要扎实的编程技能,还要对计算机系统原理有深入理解。对于求职者来说,准备这类题目有助于提升技术面试的表现,了解企业对于应聘者的期望和要求。