阿里巴巴集团 2014年秋季校园招聘 系统工程师 北京 笔试卷(解析)

第一部分单选题(前10题,每题2分;后10题,每题3分;共50分。选对得满分,选错倒扣一分,不选得0分。)

 

1.    字符串”alibaba”有个不同的排列。

A. 5040 B. 840 C. 14 D.420 

解析:D. 排列组合问题,注意a有三个,b有两个。

2.    下列一段C++代码的输出是。

class Base

{

public:

     int Bar(char x){return (int)(x);}

     virtual intBar(int x) {return(2*x);}

};

class Derived :public Base

{

public:

     int Bar(char x){return(int)(-x);}

     int Bar(int x){return (x/2);}

};

void main(void)

{

     Derived Obj;

    Base*pObj=&Obj;

    printf(“%d,”,pObj->Bar((char)(100)));

    printf(“%d,”,pObj->Bar(100));

}

A. 10050 B. -100200 C. -100,50 D. 100200

解析:A. 本题考查父类指针,以及虚函数概念。

3.    有一个二维数组A[10][5],每个数据元素占1个字节,且A[0][0]的存储地址是1000,则A[i][j]的地址是。

A. 1000+10i+j B. 1000+i+j C. 1000+5i+jD. 1000+10i+5j

解析:C,行列问题,本题有个问题,没有声明是行优先。

4.   下列不是线性表?

A. 队列 B. C. 关联数组 D. 链表

解析:C. 基本概念的考察

5.    下列有关在一个处理器(processor)上跑两个线程(thread)的说法中,正确的是。

A. 一个线程可以改变另一个线程的程序计数器(program counter

B. 一个线程既不能读也不能写另一个线程的栈(stack

C. 一个线程可以读写另一个线程的寄存器(register

D. 以上都不对

6.   关于双链表的搜索给定元素操作的说法正确的是。

A. 从两个方向搜索双链表,比从一个方向搜索双链表的速度慢

B. 从两个方向搜索双链表,比从一个方向搜索双链表的方差要小

C. 从两个方向搜索双链表,比从一个方向搜索双链表速度要快

D. 以上说法都不正确

 解析:B. 综合数学和数据结构知识

7.   n个数字进行排序,期中两两不同的数字的个数为kn远远大于k,而n的取值区间长度超过了内存的大小,时间复杂度最小可以是。

A. Onlogk B. Onk C. On D. Onlogn

 

8.   一台指针式钟表的时钟和分钟的指向重合的时间间隔是   

A. 720/13分钟 B. 720/11分钟 C. 60分钟 D. 以上都不正确

解析:B. 360度求模,相等即可。或者排除法,12点时其相遇,一点到两点之间还有一次相遇,大于一小时小于两小时。

 

9.   两个大小不同的杯子RSR中装着一定量的小米,S中装着一定量的沙子。一名儿童用勺子从S中取出一勺沙子放入R,与小米混合之后,再从R中取出等体积的一勺混合物放入S。假定两勺物品的体积相等,且RS都没有发生溢出。则以下说法中正确的是   

A. R中的沙子和S中的小米一样多

B. R中的沙子比S中的小米少

C. R中的沙子比S中的小米多

D. 无法判断

 解析:A

 

10.  假定抛出的硬币落地之后正反两面出现的概率分别是1/2。那么抛10次和100次硬币(分别称为T10T100)相比,以下说法正确的是。

A. T100出现一半的正面比T10出现一半正面的概率更大

B. T1003次都是正面的概率比T103次都是正面的可能性大

C. T100正面次数的方差小于T10出现正面次数的方差

D. T100出现正面的比例比T10出现正面的比例在(0.45,0.55)区间中的可能性更大。

解析:C. 概率统计中知识,分清频率和概率的问题。

11.  某福彩机构推出了一款简单的猜谜游戏:游戏玩家只需交纳n元,赌红或者黑。如果开奖结果与游戏玩家所赌的颜色相同,则玩家除得到交纳的n元赌资外,还可以获得n元作为奖励;否则该玩家失去交纳的n元赌资。为了游戏公平,开奖是红或者黑的概率均为1/2。某游戏玩家想出了一个玩法:开始出100元参与赌博,然后按照如下规则进行游戏,如果输掉,并且赌资充足,就把已经输了的总钱数翻倍作为赌资进行赌博;否则,就停止该游戏。假定该机构赌资无限,而玩家的赌资比较有限,以下关于该玩家退出游戏时的情形的评论中合理的是:。

A. 该玩家的策略可以保证游戏结束时赢钱数的期望为正数

B. 该福彩机构长期会赔钱

C. 该玩家会有一定概率在游戏结束时输钱,但输得不多

D. 该玩家赢的可能性比输的可能性大

解析:A. 分清该玩家和福彩机构的差别。

12.  16瓶水,其中只有一瓶水有毒,小白鼠喝一滴之后一小时会死。请问最少用

只小白鼠,在1小时内一定可以找出至少14瓶无毒的水?

A. 1

B. 3

C. 4

D. 16

解析:C. 策略如下

1)将16瓶分为两组AB,每组8瓶,选一只小鼠喝A组中的每一滴

2)将A组分为两小组,A1A2,每小组4瓶,选择一只小鼠喝A1组中的每一滴(一瓶一滴)

3)将B组分为两小组,B1B2,每小组4瓶,选择一只小鼠喝B1组中的每一滴(一瓶一滴)

4)选A1中两瓶,B1中两瓶组成一个组,然后选择一只小鼠喝下

四个步骤即可确定14瓶无毒的。

13.  有一台4CPU的服务器,上面运行着1种在线服务。如果该在线服务处理一个请求在非独占IO上的等待时间和CPU计算上消耗的时间比为2:1,假定IO带宽充足,那么至少开个线程能最大化性能地使用该服务器?

       A. 4 B. 8 C. 12 D. 线程越多越好

       解析:C. 并发的概念。

14. 有一种语言称为lua,里面的数字只有一种类型(number),实际上是双精度浮点数。没有各种位数的整数,如32位、64位整数等。那么关于该语言的说法错误的是

A. 该语言可以用number类型的变量作为数组下标

B. 该语言可以表示任意32位数字整数的数字ID

C. 该语言无法实现32位数字整数的按位与、或、异或运算

D. 该语言可以正常进行双精度浮点数运算

 

15. 一个在线服务通常需要读取存储着海量数据的数据库。为了提高服务的处理速度,通常需要加cache(缓存)。以下场景中不合适使用cache的是。

A. 数据库中每条数据被访问到的概率近似相等,且独立

B. 使用了多线程机制的服务

C. 单条数据尺寸大小的数据

D. 有着大量访问的服务

16. 如下一段神奇的代码实现的功能是。

int miracle(unsigned int n)

{

     int m=n==0 ?0:1;

     while(n=(n&(n-1)))

     {

        m++;

     }

     return m;

}

A. n的二进制表示中”0″的个数

B. n的二进制表示的倒序值

C. n的二进制表示中”1″的个数

D. 一个均匀的哈希函数

 解析:C

17. 1023个两两不同的整数,取值范围是11024,其按位异或的结果的取值范围是 

A. 01024

B. 0,10252047

C. 11024

D. 22048之前的全部偶数

 解析:采用特殊值方式即可。两两不同结果肯定不为0;且1是能够取到的,可以看出选择C

18. 七夕节n对恋人(n>=2)围成一圈举行篝火晚会。晚会的规则是:男女相同,且每对恋人处在相邻的位置上。请问有多少种不同的圈子?

A. 2n-1)!/2 B. 2n-1)! C. 2nn-1)! D. 2n)!

 解析:C. 注意题目中的是圈子,且恋人相邻

19. 星期天有10个朋友约好一起郊游,在车站的集合时间是早晨9:50:0010:00:00。已知每个人到达车站的时间是9:50:0010:00:00内的均匀分布,且彼此独立。那么最后一人最可能到达的时间是(精确到分钟,向下取整)。

A. 各个分钟概率相等 B. 9:57 C. 9:58 D. 9:59

 解析:A

20. 已知某国家每年出生人口数每年递增3%,且男女比例为1:1。如果每个男性都希望找比自己小0.5 3岁的女性结婚,且每个女性都希望找比自己大0.53岁的男性结婚,适婚年龄为2030岁,那么对该国适婚男女婚配方面的说法正确的是。

A. 男女会比较均衡

B. 会产生较多剩女

C. 会产生较多剩男

D. 信息不足,无法判断

 

第二部分不定向选项4题,每题5分。每题有1-5个正确选项,完全正确计5分,漏选计2分,不选计0分,多选、错选计-2分)

1.   要提高多线程程序的效率,对锁的控制策略非常重要。一种策略是在锁的个数不太多、控制结构不太复杂的情况下,尽可能降低加锁的粒度;另一种策略是在合适的条件下取消用锁。以下情况中不可能取消锁的是。

A. 多线程写一个共同的数据结构,且写操作是原子操作

B. 多线程写一个共同的数据结构,且写操作不是原子操作

C. 多线程读一个共同的数据结构,且读操作不是原子操作

D. 一个线程写,多个线程读一个共同的数据结构,写操作是原子操作,读操作不是原子操作

E. 一个线程写、多个线程读一个共同的数据结构,写操作不是原子操作,读操作是原子操作

 解析:BE

2.   一颗非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树可能是。

A. 所有的结点均无右孩子

B. 只有一个叶子结点

C. 是一颗二叉搜索树

D. 所有的结点均无左孩子

 解析:ABCD. 注意“可能”一词的运用

3.   以下数字在表示为double8字节的双精度浮点数)时存在舍入误差的有。

A.  B. 1030次方 C. 0.1 D. 0.5 E. 100

 解析:AB

4.   给定如下C程序:

typedef struct node_s{

    int item;

    struct node_s*next;

}node_t;

void reverse_list(node_t* head)

{

     node_t* n=head;

     head=NULL;

     while(n){

             }

     return head;

}

以下哪项能实现该函数的功能

A. node_t* m=head; head=n;head->next=m; n=n->next;

B. node_t* m=n; n=n->next;m->next=head; head=m;

C. node_t* m=n->next; n->next=head; n=m; head=n;

D. head=n->next; head->next=n;n=n->next;

 解析:D,旋转链表采用头插法。

 

第三部分填空与问答5题,共30分)

5.   4分)某无聊的程序员在玩Windows上的记事本程序,不用鼠标,每次可以按以下键或组合之一:ACtrl+A(全选)、Ctrl+C(拷贝)、Ctrl+V(粘贴),那么在10次按键只能可以制造的最长文本长度为。

解析:考虑有助于增加文本长度的操作1.按键A 2.按键(Ctrl+ACtrl+CCtrl+V),3. Ctrl+V

且注意一点:Ctrl+A之后的Ctrl+V会把原来的全部清空

 

6.   4分)若初始序列为gbfcdae,那么只会少需要

次两两交换,才能使该序列变为abcdefg。任给一个自由a–g7个字母组成的排列,最坏的情况下需要至少

次两两交换,才能使序列变为abcdefg

 

27. 5分)在某恶劣天气,若地图上S点到T点的交通网如下图所示,其中每条边表示一条双向通道,其上的数字为该通路可通行的概率,且该概率两两独立。求ST的可通行概率


7.    8分)6度分离假说的含义是,世界上任何两个人要么是朋友,要么是朋友的朋友,或者更高阶的朋友的朋友(如朋友的朋友的朋友),改论断中朋友一词出现的次数为两人之间的距离,那么该距离小于等于6。如果某SNS(如QQ、旺旺等),有100万用户,其人际关系网咯符合以下两个假设:

1.  朋友关系是一种对称关系(如AB是朋友,那么BA也是朋友)

2.    符合2度分离假说

i个人拥有的朋友的个数为ni ,所有n中最大值为n试估算n的最小值

8.  9分)某电子商务网站进行AB两种推荐算法的效果对比测试,对用户的访问请求按照1:9的比例随机分配给AB两种算法处理。产生推荐结果后,按照两种指标对比两种算法产生的结果好坏:第一种指标是CTRPV=该算法下用户的点击展现次数/该算法下所有的展现次数,第二种指标是CTRUV=该算法下有点击的用户数/该算法下所有的用户数。假定每个用户会对该推荐服务2次访问,如果ABCTRPV持平(假设为0.01)。那么CTRUV哪个大,大的比小的大百分之多少

 

 

第四部分:JAVA附加题(注,阿里有大量JAVA研发工程师需求;选作以下题目有机会增加该方向面试机会)

 

1.以下每个线程输出的结果是什么?(不用关注输出的顺序,只需写出输出的结果集即可)

public classTestThread{

 

    publicstatic vod main(String[] args){

        //test1

        Threadt1 = new Thread(){

            @Override

            publicvoid run(){

                try{

                    inti=0;

                    while(i++<100000000){

                        //nothing

                    }

                    System.out.println(“A1″);

                }catch(Exceptione){

                    System.out.println(“B1″);

                }

            };

        };

        t1.start();

        t1.interrupt();

        

        //test2

        Threadt2 = new Thread(){

            publicvoid run(){

                try{

                    Thread.sleep(5000);

                    System.out.println(“A2″);

                }catch(Exceptione){

                    System.out.println(“B2″);

                }

            };

        };

        t2.start();

        //t2.interrupt();    //不确定是否有这句话

        

        //test3

        Threadt3 = new Thread(){

            publicvoid run(){

                try{

                    Thread.sleep(50000);

                    System.out.println(“A3″);

                }catch(Exceptione){

                    System.out.println(“B3″);

                }

            };

        };

        t3.start();

        t3.interrupt();    

 

        //test4

        Threadt4 = new Thread(){

            publicvoid run(){

                try{

                    Thread.sleep(50000);

                    System.out.println(“A4″);

                }catch(Exceptione){

                    System.out.println(“B4″);

                }

            };

        };

        t4.start();

        t4.interrupt();    

        

        //test5

        try{

            t4.start();

            System.out.println(“A5″);

        }catch(){

            System.out.println(“B5″);

        }

    }

}

 

12.  一个10亿条记录的文本文件,已按照关键字排好字存储,请设计方法,可以快速的从文件中查找指字关键字的记录。

 

阿里巴巴集团 2014年秋季校园招聘

【系统工程师】附加题

 

1.  在互联网时代系统的稳定性要求越来越高,为了提升系统的稳定性,高可用技术被广泛运用,请列举至少4中相关的技术解决硬件、系统或网络等层面的单点问题。

 

2.  请描述一下TCP建立连接三次握手的过程。

 

3.搜索引擎是很常用的web应用。大部分搜索引擎需要设计一个抓虫(Crawler),从很多网站抓去网页,分析数据,供搜索引擎使用。

设想你来做一个搜索引擎的爬虫,需要抓去约一百万家网站的网页内容。

1) 请画出一个抓虫系统的架构图。

2) 重点说明你的爬虫需要如何优化来提升性能。

   


其他未尽解析,待补充。

另外可以参考:http://www.cnblogs.com/zhouzhuo/p/3631524.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值