您的位置:首页 > 编程语言 > C语言/C++

阿里巴巴2010搜索研发C++工程师笔试卷

2015-02-13 21:20 369 查看
1 20个阿里巴巴B2B技术部的员工被安排为4排,每排5个人,我们任意选其中4人送给他们一人一本《effective c++》,那么我们选出的4人都在不同排的概率为:

5^4*5!*15!/20!

4^5*5!*15!/20!

5^4*4!*16!/20!

4^5*4!*16!/20!

//每排一个人总数为5*5*5*5,20人里选择4人的总数为C(4,20)

2 若有序表的关键字序列为(b,c,d,e,f,g,q,r,s,t),则在二分查找关键字b的过程中,先后进行的关键字依次为:

f,c,b

f,d,b

g,c,b

g,d,b

3 perl里面声明:open(FILE,mode,file); 操作的描述,下列哪项不正确?

FILE可以用变量$file来代替

mode可以和file写在一起,例如:open(FILE, ‘>file’)

mode为+<的时候,只可以读文件,不能写文件(既可以读也可以写)

mode可以省略不写

//可读写

4 有一个虚拟存储系统,若进程在内存中占3页(开始时内存为空),若采用先进先出(FIFO)页面淘汰算法,当执行如下访问页号序列后1,2,3,4,5, 1,2,5,1,2,3,4,5,会发生多少缺页?

7

8

9

10

//FIFO,发生缺页时的调入顺序即为淘汰顺序
1、访问1,缺页,调入1,内存中为 1, ,;

2、访问2,缺页,调入2,内存中为 1,2,;
3、
访问3,缺页,调入3,内存中为 1,2,3;
4、
访问4,缺页,调入4,淘汰1,内存中为 4,2,3;
5、
访问5,缺页,调入5,淘汰2,内存中为 4,5,3;

6、
访问1,缺页,调入1,淘汰3,内存中为 4,5,1;
7、
访问2,缺页,调入2,淘汰4,内存中为 2,5,1;
8、
访问5,不缺页,内存中为 2,5,1;
9、
访问1,不缺页,内存中为 2,5,1;
10、
访问2,不缺页,内存中为 2,5,1;
11、访问3,缺页,调入3,淘汰5,内存中为 2,3,1;

12、访问4,缺页,调入4,淘汰1,内存中为 2,3,4;

13、访问5,缺页,调入5,淘汰2,内存中为 5,3,4;

5 设有一个顺序栈S,元素s1、s2、s3、s4、s5、s6依次进栈,如果6个元素的出栈顺序为s2、s3、s4、s6、s5、s1,则顺序栈的容量至少应为多少?

2

3

4

5

6 下列关于文件索引结构的叙述中,哪一个是错误的?

采用索引结构,逻辑上连续的文件存放在连续的物理块中

系统为每个文件建立一张索引表

索引结构的优点是访问速度快,文件长度可以动态变化

索引结构的缺点是存储开销大

7 在ASC算法team日常开发中,常常面临一些数据结构的抉择,令人纠结。目前大家在策划一个FBI项目(Fast Binary Indexing),其中用到的词汇有6200条,词汇长度在10-15之间,词汇字符是英文字母,区分大小写。请在下面几个数据结构中选择一个使检索速度最快的:

二叉搜索树,比较函数开销:1次运算/每字符

哈希表,hash算法开销:10次运算/每字符

链表,比较函数开销:1次运算/每字符

TRIE树,寻找子节点开销:1次运算/每字符

//注解:又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。

8 【0、2、1、4、3、9、5、8、6、7】是以数组形式存储的最小堆,删除堆顶元素0后的结果是()

【2、1、4、3、9、5、8、6、7】

【1、2、5、4、3、9、8、6、7】

【2、3、1、4、7、9、5、8、6】

【1、2、5、4、3、9、7、8、6】

9 某页式存储管理系统中,地址寄存器长度为24位,其中页号占14位,则主存的分块大小是()字节。

10

2^10

2^14

2^24

10 在一个长为33厘米的光滑凹轨上,在第3厘米、第6厘米、第19厘米、第22 厘米、第26厘米处各有一个钢珠,凹轨很细,不能同时通过两个钢珠,开始时,钢珠运动方向是任意的。两个钢珠相撞后,以相同速度反向运动。假设所有钢珠初 始速度为每秒运动1厘米,那么所有钢珠离开凹轨的最长可能时间是()

30

26

38

33

11 在排序方法中,元素比较次数与元素的初始排列无关的是()

Shell 排序

归并排序

直接插入排序

选择排序

12 给定如下代码: int x[4]={0}; int y[4]={1}; 数组x和y的值为()

{0,0,0,0},{1,1,1,1}

{0,0,0,0},{1,0,0,0}

{0,不确定},{1,不确定}

与编译器相关

13 假设在n进制下,下面的等式成立,n值是() 567*456=150216

9

10

12

18

14 定义一个函数指针,指向的函数有两个int形参并且返回一个函数指针,返回的指针指向一个有一个int形参且返回int的函数?

int (*(*F)(int, int))(int)

int (*F)(int, int)

int (*(*F)(int, int))

*(*F)(int, int)(int)

15 声明一个指向含有10个元素的数组的指针,其中每个元素是一个函数指针,该函数的返回值是int,参数是int*,正确的是()

(int *p[10])(int*)

int [10]*p(int *)

int (*(*p)[10])(int *)

int ((int *)[10])*p

以上选项都不正确

16 一个栈的输入序列为123、、、、、n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是()

不确定

n-i+1

i

n-i

17 下列代码编译时会产生错误的是()



语句1

语句2

语句3

语句4

//因为语句3没有定义b对象,所以语句4出错

18
在32位机器上,下列代码中




sizeof(a)的值是()

20

21

22

24

非以上选项

//int 4,union13+1 偶对齐 enum 4,总22

//
1:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储。

2:结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储.(structa里存有struct b,b里有char,int ,double等元素,那b应该从8的整数倍开始存储.)

3:收尾工作:结构体的总大小,也就是sizeof的结果,.必须是其内部最大成员的整数倍.不足的要补齐.

typedef struct bb

{

intid; //[0]....[3]

doubleweight; //[8].....[15]      原则1

floatheight; //[16]..[19],总长要为8的整数倍,补齐[20]...[23]     原则3

}BB;

typedef struct aa

{

charname[2]; //[0],[1]

int id; //[4]...[7]          原则1

doublescore; //[8]....[15]    

short grade; //[16],[17]        

BBb; //[24]......[47]          原则2

}AA;

union

1.共用体类型实际占用存储空间为其最长的成员所占的存储空间;

2.若是该最长的存储空间对其他成员的元类型(如果是数组,取其类型的数据长度,例int a[5]为4)不满足整除关系,该最大空间自动延伸;



我们来看看这段代码:

union mm{

char a;//元长度1

int b[5];//元长度4

double c;//元长度8

int d[3];

};

本来mm的空间应该是sizeof(int)*5=20;但是如果只是20个单元的话,那可以存几个double型(8位)呢?两个半?当然不可以,所以mm的空间延伸为既要大于20,又要满足其他成员所需空间的整数倍,即24

所以union的存储空间先看它的成员中哪个占的空间最大,拿他与其他成员的元长度比较,如果可以整除,ok

19 当很频繁地对序列中部进行插入和删除操作时,应该选择使用的容器是()

vector

list

deque

stack

//链表适合插入和删除

20 判断一个单向链表中是否存在环的最佳方法是()

两重遍历

快慢指针

路径记录

哈希表辅助

21 下列运算符,在C++语言中不能重载的是()

*

.*

::

delete

22 std::vector::iterator重载了下面哪些运算符?

++

>>

*(前置)

==

23 关于struct和class,下列说法正确的是()

struct的成员默认是public,class的成员默认是private

struct不能继承,class可以继承

struct可以有无参构造函数

struct的成员变量只能是public

24
给出以下定义,下列哪些操作是合法的?
char a[] = "hello";
char b[] = "world";
const char *p1 = a;
char* const p2 = b;


p1++

p1[2]='w';

p2[2]='l';

p2++

25 下面描述中,错误的是()

基类定义的public成员在公有继承的派生类中可见,也能在类外被访问

基类定义的public和protected成员在私有继承的派生类中可见,在类外可以被访问

基类定义的public和protected成员在保护继承的派生类中不可见

基类定义的protected成员在protected继承的派生类中可见,也能在类外被访问
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: