2014 年阿里巴巴校园招聘研发工程师考试真题
1.有一个虚拟存储系统,若进程在内存中占 3 页(开始时内存为空),若采用先进先出(FIFO)
页面淘汰算法,当执行如下访问页号序列后 1,2,3,4,5,1,2,5,1,2,3,4,5,会
发生多少缺页?
A、7
B、8
C、9
D、10
2.设有一个顺序栈 S,元素 s1、s2、s3、s4、s5、s6 依次进栈,如果 6 个元素的出栈顺序
为 s2、s3、s4、s6、s5、s1,则顺序栈的容量至少应为多少?
A、2
B、3
C、4
D、5
3.下列关于文件索引结构的叙述中,哪一个是错误的?
A、采用索引结构,逻辑上连续的文件存放在连续的物理块中
B、系统为每个文件建立一张索引表
C、索引结构的优点是访问速度快,文件长度可以动态变化
D、索引结构的缺点是存储开销大
4.【0、2、1、4、3、9、5、8、6、7】是以数组形式存储的最小堆,删除堆顶元素 0 后的结
果是()
A、【2、1、4、3、9、5、8、6、7】
B、【1、2、5、4、3、9、8、6、7】
C、【2、3、1、4、7、9、5、8、6】
D、【1、2、5、4、3、9、7、8、6】
5.某页式存储管理系统中,地址寄存器长度为 24 位,其中页号占 14 位,则主存的分块大小
是()字节。
A、10
B、2^10
C、2^14
D、2^24
6.在一个长为 33 厘米的光滑凹轨上,在第 3 厘米、第 6 厘米、第 19 厘米、第 22 厘米、第
26 厘米处各有一个钢珠,凹轨很细,不能同时通过两个钢珠,开始时,钢珠运动方向是任
意的。两个钢珠相撞后,以相同速度反向运动。假设所有钢珠初始速度为每秒运动 1 厘米,
那么所有钢珠离开凹轨的最长可能时间是()
A、30
B、26
C、38
D、33
7.std::vector::iterator 重载了下面哪些运算符?
A、++
B、>>
C、*(前置)
D、==
8.下列运算符,在 C++语言中不能重载的是()
A、*
B、?: C、:: D、delete
9.在排序方法中,元素比较次数与元素的初始排列无关的是()
A、Shell 排序 B、归并排序 C、直接插入排序 D、选择排序
10.给定如下代码: int
x[4]={0};
int
y[4]={1}; 数组 x 和 y 的值为()
A、{0,0,0,0},{1,1,1,1}
B、{0,0,0,0},{1,0,0,0}
C、{0,不确定},{1,不确定}
D、与编译器相关
10.给出以下定义,下列哪些操作是合法的?
const
char
*p1 =
"hello";
char*
const
p2
=
"world";
A、p1++
B、p1[2]='w';
C、p2[2]='l';
D、p2++
11.假设在 n 进制下,下面的等式成立,n 值是()
567*456=150216
A、9
B、10
C、12
D、18
12.关于 struct 和 class,下列说法正确的是()
A、struct 的成员默认是 public,class 的成员默认是 private
B、struct 不能继承,class 可以继承
C、struct 可以有无参构造函数
D、struct 的成员变量只能是 public
13.定义一个函数指针,指向的函数有两个 int 形参并且返回一个函数指针,返回的指针指
向一个有一个 int 形参且返回 int 的函数?
A、int
(*(*F)(int,
int))(int)
B、int
(*F)(int,
int)
C、int
(*(*F)(int,
int))
D、*(*F)(int,
int)(int)
14.声明一个指向含有 10 个元素的数组的指针,其中每个元素是一个函数指针,该函数的返
回值是 int,参数是 int*,正确的是()
A、(int
*p[10])(int*);
B、int
[10]*p(int
*);
C、int
(*(*p)[10])(int
*);
D、int
((int
*)[10])*p;
E、以上选项都不正确
15.一个栈的输入序列为 123.....n,若输出序列的第一个元素是 n,输出第 i(1<=i<=n)个
元素是()
A、不确定
B、n-i+1
C、i
D、n-i
16.下列代码编译时会产生错误的是()
[cpp]
view
plaincopy#include
using
namespace
std;
struct
Foo
{
Foo()
{
}
Foo(int) {
void fun()
}
{
}
};
int
main(void)
{
Foo
a(10);
//语句 1
a.fun(); //语句 2
Foo
b();
//语句 3
b.fun(); //语句 4
return
0;
}
A、语句 1
B、语句 2
C、语句 3
D、语句 4
17.在 32 位机器上,下列代码中
[cpp]
view
plaincopy#pragma
pack(2)
class
A
{
int
i;
union
U
{
char buff[13];
int
i;
}u;
void foo()
{
}
typedef
char*
(*f)(void*);
enum{red,
green,
blue}
color;
}a;
sizeof(a)的值是()
A、20
B、21
C、22
D、24
E、非以上选项
18.下面描述中,错误的是()
A、基类定义的 public 成员在公有继承的派生类中可见,也能在类外被访问
B、基类定义的 public 和 protected 成员在私有继承的派生类中可见,在类外可以被访问
C、基类定义的 public 和 protected 成员在保护继承的派生类中不可见
D、基类定义的 protected 成员在 protected 继承的派生类中可见,也能在类外被访问
19.当很频繁地对序列中部进行插入和删除操作时,应该选择使用的容器是()
A、vector
B、list
C、deque
D、stack
20.判断一个单向链表中是否存在环的最佳方法是()
A、两重遍历 B、快慢指针 C、路径记录 D、哈希表辅助
21.给你 1、2、3 这三个数字 可以使用 C 的各种运算符 你能表示的最大的整数是()
A、2*3*sizeof(1)
B、3<<(2<<
D、(unsigned
C、sizeof(3)<<(sizeof(2)<<(sizeof(1)))>
-1 的二进制形式就是全 1 表示
22.下面代码的输出是多少?
[cpp]
view
plaincopyclass
A
{
public:
A()
{
cout<<"A"<<>
~A() {
cout<<"~A"<<>
};
class
B:public
A
{
public:
B(A
&a):_a(a)
{
cout<<"B"<<
p>
}
~B()
{
cout<<"~B"<< p>
}
private:
A
_a;
};
int
main(void)
{
A
B
a;
//很简单,定义 a 的时候调用了一次构造函数
b(a);
//这里 b 里面的_a 是通过成员初始化列表构造起来的
//而且是通过 copy
constructor 构造的是 b 的成员对象_a 的,这里是编译器默认的,因
此在构造好_a 前,先调用基类构造函数
//然后才是构造自身,顺序就是 A()->_a->B()(局部)
//因此这里有两个 A,一个 B
//在 return 之前进行析构
/************************************************************************/
/*析构是按照定义对象的反顺序来的,而且同一个对象按照构造的反顺序来的,因此这里先
析构 b 然后才是 a,那么 b 的构造顺序是上面的 A()->_a->B()(局部),反过来,就是 B()(局
部)->_a->A()
因此得到的就是~B->~A->~A
在 b 之后就是析构 a
最后结果就是
~B->~A->~A->~A*/
return
0;
}
23.一个骰子,6 面,1 个面是 1, 2 个面是 2, 3 个面是 3, 问平均掷多少次能使 1、
2、3 都至少出现一次!
24.一个有趣的抛硬币问题
假设有一个硬币,抛出字(背面)和花(正面)的概率都是 0.5,而且每次抛硬币与前次结果无
关。现在做一个游戏,连续地抛这个硬币,直到连续出现两次字为止,问平均要抛多少次才
能结束游戏?注意,一旦连续抛出两个“字”向上游戏就结束了,不用继续抛。
25.问题描述:
12 个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的
人高,问排列方式有多少种?