阿里巴巴笔试题目(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 xvzf 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. 为了保护我们的地球,全世界都在倡导绿色环保。在高效能计算和绿色计算方面,请谈谈你的一些想法。