10年 阿里

阿里巴巴笔试题目(2009.9)

技术类笔试试题(卷一)卷一:Java开发、测试工程师(25题)

技术类笔试试题(卷二)卷二:搜索研发、C++(25题)

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

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

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

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

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

5^4/C(20,4)

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

A.f,c,b

B.f,d,b

C.g,c,b

D.g,d,b

二分查找的理论

算法思想:

将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,

将查找区间缩小一半。

折半查找是一种高效的查找方法。它可以明显减少比较次数,提高查找效率。但是,折半查找的先决条件

是查找表中的数据元素必须有序。

算法步骤描述:

step1 首先确定整个查找区间的中间位置

mid = ( left + right )/ 2;

step2 用待查关键字值与中间位置的关键字值进行比较;

若相等,则查找成功;若大于,则在后(右)半个区域继续进行折半查找;若小于,则在前(左)半个区

域继续进行折半查找

Step3 对确定的缩小区域再按折半公式,重复上述步骤。最后,得到结果:要么查找成功,要么查找失败。

折半查找的存储结构采用一维数组存放。

floor(lower+high/2)

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

A. FILE可以用变量$file来代替

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

C. mode为+<的时候,只可以读文件,不能写文件

D. mode可以省略不写

mode为+<的时候,既可读又可写

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

A.7

B.8

C.9

D.10

开始的3次也是缺页

 

采取 FIFO 页面淘汰算法,如何计算缺页。

答:操作系统的虚拟存储器管理技术中,有一项比较重要的分支叫分页存储管理。分页管理是在页架中装入一些需要使用或过去使用过的页面,但是页架的数量是有限的,这里就会用到一些页面置换算法,使得页面访问的效率提高。判断一个置换算法优劣的指标就是缺页率,缺页是指当前的页架中没有需要访问的页面,而需要将该页面加入其中一个页架。缺页率=访问缺页次数/访问总次数。

先进先出算法(FIFO)是一个实现起来比较简单的页面置换算法,其基本原则是“选择最早进入主存的页面淘汰”,理由是最早进入的页面,其不再使用的可能性比最近调入的页面要大。理论上来说,如果分配的页架数增加的话,缺页率是会减少,但是 FIFO 算法对于一些特殊的页面访问序列会有随着分给的页架数增加,缺页率也增加的异常现象。

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

A.2

B.3

C.4

D.5

 

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

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

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

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

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

文件索引结构

答:索引就是在内存中(当然如果索引太大,也可能在硬盘固定的,连续的存储块中)建立一个真实数据的映射,通过索引,我们确定要找的数据范围,然后再通过尽量少的 IO 到硬盘上把目标数据抓回来。以下是可以作为索引的数据结构,其中 mysql 采用的是 B+树。 顺序文件:几种简单的文件组织,其产生方式是将数据文件按某个查找键排序,并在该文 件上建立索引。 ? 稠密索引:这种索引为数据文件的每个记录设一个键-指针对。这些键-指针对按它们的键 值顺序存放。 ? 稀疏索引:这些索引为数据文件的每个存储块设一个键-指针对。与指针相对应的键为该 指针所指向的存储块中第一个键值。 ? 多级索引:在索引文件上再建索引,在索引的索引上再建索引,等等,这在有时候是很有用的。高级索引必须是稀疏的。 ? 文件的扩展:随着数据文件和它的索引文件的增长,必须采取一些措施来为文件增加附加的存储块。为文件的基本块增加溢出块是一种可行的办法。在数据文件或索引文件的块序 列表中插入更多的块,除非要求文件本身存放在连续的磁盘块中。 ? 辅助索引:即使数据文件没有按查找键 K 排序,我们也可在键 K 上建立索引。这样,索引 必须是稠密的。 ? 倒排索引:文件与其包含的词之间的关系通常可通过一个词-指针对的索引结构来表示。 指针指向“桶”文件的某个位置,该位置上有一个指向文件中词的出现的指针列表。 ?B 树:这些结构实质上是有着很好的扩充性能的多级索引。带有 n 个键和 n+ 1 个指针的存储 块被组织成一棵树。叶结点指向记录。任何时候所有索引块都在半满与全满之间。 ? 范围查询:指查找键值在给定范围内的所有记录,有索引的顺序文件和 B 树索引可为这类查询提供便利,但散列表索引不能。 ? 散列表:同创建主存散列表一样,我们也可以基于辅存的存储块来建立散列表。散列函数将键值映射到桶,有效地将数据文件的记录分配到多个小组(桶)。桶用一个存储块和可 能出现的溢出块表示。 ? 动态索引:如果

一个桶中的记录太多,势必降低散列表的性能,因而随着时间推移,桶的数量可能需要增加。允许合理增加桶的两种重要方法是可扩展散列和线性散列。它们都首先将 键值散列到一个长位串,然后使用其中若干位来决定记录所属的桶,位的数目是可变的。 ? 可扩展散列:这种方法允许在存在记录数太多的桶时将桶的数目加倍。它使用指向块的指 针数组来表示桶。为了避免块过多,几个桶可以用同一个块表示。 ? 线性散列:这种方法每当桶中的记录比例超出阈值时增加一个桶。由于单个桶的记录不会 引起表的扩展,所以在某些情形下需要溢出块。

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

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

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

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

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

 

8. [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]

从中间节点开始调整

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

A.10

B.2^10

C.2^14

D.2^24

主存的分块大小是(2^10)字节

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

A.30

B.26

C.38

D.33

 

11. std::vector::iterator 重载了下面哪些运算符?std::vector::iterator重载了下面哪些运算符:*、->和[].

A.++

B.>>

C.*(前置)

D.==

 

12. 下列运算符,在C++语言中不能重载的是?:、::

A. *

B. ?:

C. ::

D. delete

重载操作符的限制:

(1)并不是所有的操作符都能被重载。除了. ,.* ,:: ,? : ,sizeof,typeid 这几个运算符不能被重载,其他运算符都能被重载

(2) 重载不能改变该运算符用于内置类型时的函义,程序员不能改变运算符+用于两个 int 型时的含义。

(3)运算符函数的参数至少有一个必须是类的对象或者类的对象的引用。这种规定可以防止程序员运用运算符改变内置类型的函义。(4)重载不能改变运算符的优先级。

(5) 重载不能改变运算符的结合律。

(6) 重载不能改变运算符操作数的个数。比如+需要两个操作数,则重载的+也必须要有两个操作数。

13. 在排序方法中,元素比较次数与元素的初始排列无关的是:

在排序算法中,元素比较次数与元素起始排列无关的是:选择排序、堆排序,有关的是:shell排序、归并排序、直接插入排序

A. Shell排序

B.归并排序

C.直接插入排序

D.选择排序

冒泡排序:最好情况需比较 n-1 次,最坏情况需比较 n(n-1)/2;

选择排序:最好情况需比较 n(n-1)/2,最坏情况需比较 n(n-1)/2;

对分排序:最好情况需比较 n/2logn,最坏情况需比较近似 nlogn;

根据算法本身,通过计算迭代次数,或建立递推方程求解。

14. 给定如下代码,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. 与编译器相关

 

15. 给出以下定义,下列哪些操作是合法的?

Const char* p1 = “hello”;

Char* const p2 = “world”;

A. p1++;

B. p1[2] = ‘w’;

C. p2[2] = ‘l’; P2[2] = ‘l’;p2指向的是一个常量字符串,是不能通过指针来改变的。当指向一个数组时,可以。*p2=‘h’不对。

D.p2++;

 

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

A. 9

B. 10

C. 12

D.18

计算方法如下:

依题意,在 n 进制下,

567=5*(n^2)+6*n+7

456=4*(n^2)+5*n+6

150216=n^5+5*(n^4)+2*(n^2)+n+6

(n^2 表示 n 的 2 次方)

将四个答案分别代入方程:

(5*(n^2)+6*n+7)*(4*(n^2)+5*n+6)=n^5+5*(n^4)+2*(n^2)+n+6

只有当 n=18 时等式成立。

17.关于struct和class,下列说法正确的是

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

B. struct不能继承,class可以继承

C. struct可以有无参构造函数

D. struct的成员变量只能是public

 

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

A. int(*(*F)(int,int))(int);

B. int(*F)(int,int)

C. int(*(*F)(int,int))

D. *(*F)(int,int)(int)

 

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

A.(int *p[10])(int*);

B. int [10]*p(int*);

C.int (*(*p)[10])(int*);

D. int ((int*)[10])*p;

 

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

A. 不确定

B.n-i+1

C.i

D.n-i

 

21. 编译时会产生错误的是?

#include <iostream>

using namespace std;

struct Foo {

Foo() {}

Foo(int) {}

void fun() {}

};

int main(){

Foo a(10);//语句1

a.fun();//语句2

Foo b();//语句3

b.fun();//语句4

return 0;

}

A. 语句1

B. 语句2

C. 语句3

D. 语句4

 

22. 32位机器上,下列代码中:

#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; int型

} a;

Sizeof(a)的值是

A.20

B.21

C.22

D.24

E.非以上选项

 

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

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

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

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

D.基类定义的protected成员在protected继承的派生类中可见,也能在类外被访问

 

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

A. vector

B. list

C. deque

D. stack

 

25. 判断一个单向链表中是否存在环的最佳方法是:

A.两重遍历

B.快慢指针

C.路径记录

D.哈希表辅助

bool judge(list *head){if(head == NULL){return false;//没有环}

list *pFast = head;

list *pSlow = head;

while(pFast-next != NULL && pFast-next-next !=NULL){pFast = pFast-next-next;

pSlow = pSlow-next;

 

 

18.在 C++中不能重载下面的哪个运算符:(BC)

(A) *(B) ?: (C) :: (D) delete

答:分类: C/C++

算术运算符:+,-,*,/,%,++,--;

位操作运算符:&,|,~,^(位异或),<<(左移),>>(右移)

逻辑运算符:!,&&,||;

比较运算符:<,>,>=,<=,==,!=;

赋值运算符:=,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=;

其他运算符:[],(),->,,(逗号运算符),new,delete,new[],delete[],->*。

不能重载的 5 个运算符:

. ;(C)

?: ;(C)siezof ;(C)

:: ;(C、C++)

.* ;(C、C++)

19.就是指针的一大堆问题啦,什么函数指针啊,数组指针之类的

函数指针是指向函数的指针变量。因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C 在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是一致的。函数指针有两个用途:调用函数和做函数的参数。

数组名的指针,即数组首元素地址的指针。即是指向数组的指针。例:int (*p)[10]; p 即为指向数组的指针,又称数组指针。数组指针是指向数组首元素的地址的指针,其本质为指针;指针数组是数组元素为指针的数组(例如 int *p[3],定义了p[0],p[1],p[2]三个指针),其本质为数组。数组指针的使用在某些情况下与指针数组很相似,要注意区别。

20. sizeof() 计算问题

技术类笔试试题(卷三)卷三:公共题(17题)

1. 在一次歌唱竞争中,每一名参赛选手都有评委投了优秀票。如果上述断定为真,则以下哪项不可能为真?1)有的评委投了所有参赛选手优秀票。2)有的评委没有给任何参赛选手投优秀票。3)有的参赛选手没有得到一张优秀票。

A. 只有1)。

B. 只有1)。

C. 只有3)。

D. 只有1)和2)。

E. 只有1)和3)。

 

2. 所有通过英语六级考试的学生都参加了学校的英语俱乐部,王进参加了英语俱乐部,所以他一定通过了英语六级考试。以下哪项最好的指出了上述论证的逻辑错误?

A.部分通过英语六级考试的学生没有参加英语俱乐部

B.王进能够参加英语俱乐部是因为它符合加入俱乐部的基本条件。

C. 王进曾经获得过年级英语演讲比赛第一名。

D.凡愿意每学期缴纳50元会费,并且愿意积极参加俱乐部活动的学生都可以成为俱乐部的成员。

E.有些参加俱乐部的学生还没有通过英语六级考试。

 

3. 一架飞机在满油的情况下可以绕地球飞0.5圈,假设飞机与飞机之间可以互相加油,请问在确保所有飞机够油飞回起点的情况下,最少需要几架飞机才可以让其中一架飞机成功绕地球飞行一圈?

A.3

B.4

C.5

D.6

E.7

 

4. 如果所有的妇女都有大衣,那么漂亮的妇女会有?

A.更多的大衣

B.时髦的大衣

C.大衣

D.昂贵的大衣

 

5. 100张多米诺骨牌整齐的排成一列,顺序编号依次为1,2,3,……,99,100。第一次拿走所有奇数位置上的骨牌,第二次再从剩余骨牌中拿走所有奇数位置上的骨牌,依次类推。请问最后剩下的一张骨牌的编号是多少?

A. 32

B. 64

C. 88

D. 96

第一次后剩下 50 个偶数 2 4 6...100

将它们除以 2 得到 1~50 的一列

第二次后剩下 25 个偶数 2 4 6...50

将他们除以 2 得到 1~25 的一列

第三次后剩下 12 个偶数 2 4 5...24

将他们除以 2 得到 1~12 的一列

同理,第四次除后到 6 第五次除后到 3 第六次除后剩下最后一张 1

所以,它的编号是 1×2^6=64

 

6. 小王在商店买衬衫,售货员问她想要哪种颜色的,小王幽默的说:“我不像讨厌黄色那样讨厌红色,我不像讨厌白色那样讨厌蓝色,我不像喜欢粉红那样喜欢红色,我对蓝色不如对黄色那样喜欢。”小王最后会选择的颜色是:

A. 粉色

B. 蓝色

C. 红色

D. 黄色

 

7. 在我国北方严寒冬季的夜晚,车辆前挡风玻璃会因低温而结冰霜。第二天对车辆发动预热后玻璃上的冰霜会很快融化。何宁对此不解,李军解释道:因为车辆仅有除霜孔位于前挡风玻璃,而车辆预热后除霜孔完全开启,因此,是开启除霜孔是车辆玻璃冰霜融化。以下哪项为真,最能质疑李军对车辆玻璃迅速融化的解释?

A. 车辆一侧玻璃窗没有出现冰霜现象。

B. 尽管车位玻璃窗没有除霜孔,其玻璃上的冰霜融化速度与挡风玻璃没有差别

C. 当吹在车辆玻璃上的空气气温增加,其冰霜的融化速度也会增加

D. 车辆前挡风玻璃除霜孔排出的暖气流排除后可能很快冷却

E. 即使启用车内空调暖风功能,除霜孔的功能也不能被取代

 

8. 小张承诺:如果天不下雨,我一定去听音乐会。以下哪项为真,说明小张没有兑现承诺?1)天没下雨,小张没去听音乐会。2)天下雨,小张去听了音乐会。3)天下雨,小张没去听音乐会。

A.仅1)。

B. 仅2)。

C. 仅3)。

D. 仅1)和2)。

E. 1)、2)和3)。

 

9. 某零件加工厂按工人完成的合格零件和不合格零件支付工资。公认每做一个合格零件得工资10元,每做一个不合格零件被扣除5元。已知某人一天工作了12个零件得工资90元。那么他在这一天做了多少个不合格零件?

A.2

B.3

C.4

D.6

 

10. 给你8颗小石头和一架天平,其中有7颗石头重量一样,另外一个比这7颗略重。请问在最坏情况下,最少要称重几次,才能把这颗较重的石头找出来?

A. 3

B. 2

C. 1

D. 4

 

11. 如果你有两个大小一样的桶,分别装了半桶红颜料和半桶蓝颜料。如果我们从蓝色颜料桶里舀一杯,倒入红色颜料桶里,搅拌均匀,然后再从红色颜料桶里舀一杯倒入蓝色颜料桶。请问以下说法哪种正确?

A. 红色桶中蓝颜色的比例大。

B. 蓝色桶中红颜色的比例大。

C. 红色桶中蓝颜色的比例和蓝色桶中红颜色的比例一样大。

 

12. 甲乙丙三人居一学生宿舍。甲报案遗失2000元。保安人员经过周密调查,得出结论是丙作的案。班主任说:“这是最不可能的。”保安人员说:“当所有其他的可能性都被排除了,剩下的可能性不管看来多么不可能,都一定是事实。”以下哪项如果是真,将最为有力的动摇保安人员的结论?

A.保安人员事实上不可能比班主任更了解学生。

B.对非法行为惩处的根据,不能是逻辑推理,而只能是证据。

C.保安人员无法穷尽的把握所有的可能性。

D.丙是班上公认的品学兼优的学生。

E.乙有作案的前科。

 

13. 为了将当前目录下的归档文件myftp.tgz解压缩到/tmp目录下,用户可以使用命令

A. tar  xvzf myftp.tgz  –C/tmp

B. tar&nbsp; xvzf&nbsp; myftp.tgz  –R/tmp

C. tar  vzf  myftp.tgz –X/tmp

D. tar  xvzf  myftp.tgz /tmp

 

14. 软件测试的对象包括()

A.目标程序和相关文档

B.源程序、目标程序、数据及相关文档

C.目标程序、操作系统和平台软件

D.源程序和目标程序

 

15. 正则表达式ab?c匹配的字符串是()。

A. abcd

B. adc

C. aFdc

D. aEbc

 

主观题

1.  假设有Alibaba网站最近一个月的查询日志,记录了用户的查询行为。每条查询都至少包含有一个产品词,称之为查询意图。总计有查询记录3000万条,请统计出这3000万条……

2.  为了保护我们的地球,全世界都在倡导绿色环保。在高效能计算和绿色计算方面,请谈谈你的一些想法。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值