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

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继承的派生类中可见,也能在类外被访问







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值