阿里巴巴研发工程师笔试卷A-2015年

一、单项选择题

1、下列关键字序列为堆的是______。

 A、100,60,70,50,32,65        B、60,70,65,50,32,100        C、65,100,70,32,50,60 

 D、70,65,100,32,50,60        E、32,50,100,70,65,60        F、50,100,70,65,60,32

2、如果一个博物馆参观者到达的速率是每分钟 20 人,平均每个人在馆内停留20分钟,那么该博物馆至少需要容纳______人才行?

 A、100        B、200        C、300        D、400        E、500        F、600

3、计算三个稠密矩阵 A、B、C 的乘积 ABC,假定三个矩阵的尺寸分别为 m*n, n*p,p*q,且 m<n<p<q,以下计算效率最高的是________。

 A、(AB)C        B、A(BC)        C、(AC)B        D、(BC)A        E、(CA)B

4、通过算法生成的随机数是“伪随机”的,也就是说,在设定好第一个数之后,后面的数字的序列是确定的,并且经过一个非常大的循环会回到第一个数的状态,然后周而复始。显然,摇号、抽奖的程序是不能通过伪随机数来实现的。现实中常常基于某种热噪声来实现真正的随机数。假定某热噪声是标准正态分布,那么能否将它转换成(0,1)区间上的均匀分布______。

 A、忽略测量和计算误差,可以转换为(0,1)区间上的均匀分布        B、无法转换为(0,1)区间上的均匀分布        C、信息不足,无法判断

 D、借助伪随机数生成算法可以转换为(0,1)区间上的均匀分布        E、仅仅靠伪随机数生成算法,就可以生成(0,1)区间上的均匀分布        F、以上说法都不对

5、有一个用数组 C[1..m]表示的环形队列,m 为数组的长度。假设 f 为队头元素在数组中的位置,r 为队尾元素的后一位置(按顺时针方向)。若队列非空,则计算队列中元素个数的公式应为_______。

 A、(m+r-f)mod m        B、r-f        C、(m-r+f) mod m        D、(m-r-f) mod m        E、(r-f) mod m

6、某足球队有四名外援,分别来自巴西、荷兰、意大利和美国。他们分别擅长前 锋、后卫或守门,其中:
        ① 美国外援单独擅长守门;
        ② 意大利外援不擅长前锋;
        ③ 巴西外援和另外某个外援擅长相同的位置;
        ④ 荷兰外援擅长的位置和巴西外援不同。
以上条件可以推出巴西外援擅长的位置是______。

 A、前锋        B、守门        C、后卫        D、前锋或守门        E、后卫或守门        F、前锋或后卫

7、二分查找树里查询一个关键字的最坏时间复杂度是______。

 A、O(n)        B、O(n log n)        C、O(n^2)        D、O(n^3)        E、O(logn)        F、不确定

8、假设某段通信电文仅由 6 个字母 ABCDEF 组成,字母在电文中出现的频率分别为2,3,7,15,4,6。根据这些频率作为权值构造哈夫曼编码,最终构造出的哈夫曼树带权路径长度与字母 B 的哈夫曼编码分别为______。(这里假定左节点的值小于右节点的值)

 A、86,1011        B、70,1000        C、86,0001        D、70,0010        E、92,1000        F、92,0100

9、并发进程执行的相对速度是______。

 A、由进程的程序结构决定        B、由进程本身来控制                   C、进程被创建时决定

 D、与进程调度策略有关           E、与进程的销毁时间有关             F、由内存分配策略决定

10、某团队有 2/5 的人会写 Java 程序,有 3/4 的人会写 C++程序,这个团队里同时会写 Java 和 C++的最少有______人。

 A、3        B、4        C、5        D、8        E、15        F、20

11、有一个装过食盐的瓶子,容积是 w,在食盐用完之后,还有一些食盐粉末(体 积可以忽略)残留在瓶子壁上。现在要把该瓶子改装糖,给你 u 体积的纯净 水,用来清洗该瓶子。在每次清洗之后,瓶子里会残留至少 v 体积的水(食盐 溶液,可以忽略盐的体积) 。假设 w>u>v,请问下述哪种方式使用这些纯净 水,能把瓶子洗得最干净______。

 A、 把所有的纯净水全部倒入瓶子,然后把水倒掉       B、将纯净水平均分成两份,用每一份清水洗一遍瓶子        C、每次注入体积为 v 的纯净水清洗瓶子,直到纯净水用尽

 D、每次注入体积为 2v 的纯净水清洗瓶子,直到纯净水用尽        E、将用过的水重新诸如瓶子,多次清洗        F、以上方法清洗效果相同

12、下列 C 代码中,不属于未定义行为的有:______。

 A、int i=0;i=(i++);        B、char *p=”hello”;p[1]=’E’        C、char *p=”hello”;char ch=*p++

 D、int i=0;printf(“%d%d\n”,i++ i--)        E、都是未定义行为        F、都不是未定义行为

13、毕业典礼后,某宿舍三位同学把自己的毕业帽扔了,随后每个人随机地拾起帽子,三个人中没有人选到自己原来带的帽子的概率是_______。

 A、1/2        B、1/3        C、1/4        D、1/6        E、1/8        F、1/9

14、村长带着 4 对父子参加爸爸去哪儿第三季第二站某村庄的拍摄。村里为了保护小孩不被拐走有个前年的规矩,那就是吃饭的时候小孩左右只能是其他小孩或者自己的父母。那么 4 对父子在圆桌上共有___种坐法。 (旋转一下,每个人面对的方向变更后算是一种新的坐法)

 A、144        B、240        C、288        D、480        E、576        F、960

15、分布式系统中,______不是可扩展性所需要的

 A、无状态应用集群        B、分布式缓存        C、负载均衡        D、硬件共享存储       E、分而治之的策略        F、以上所有都是

16、若干个等待访问磁盘者依次要访问的磁道为 19, 43, 40, 4, 79,11,76,当前磁头位于 40 号柱面,若用最短寻道时间优先磁盘调度算法,则访问序列为___。

 A、19,43,40,4,79,11,76        B、40,43,19,11,4,76,79        C、40,43,76,79,19,11,4

 D、40,43,76,79,4,11,19        E、40,43,76,79,11,4,19        F、40,19,11,4,79,76,43

17、C++内存分配中说法错误的是:______。(多选)

 A、对于栈来讲,生长方向是向上的,也就是向着内存地址增加的方向        B、对于堆,大量的 new/delete 操作会造成内存空间的不连续

 C、堆容易产生 memory leak        D、堆的效率比栈要低得多       E、栈变量引用容易逃逸        F、以上都对

18、下列关于网络编程错误的是______。

 A、UDP 是不可靠服务        B、主动关闭的一端会出现 TIME_WAIT 状态        C、服务端编程会调用 listen(),客户端也可以调用 bind()

 D、TCP 建立和关闭连接都只需要三次握手       E、Linux 通过提供提供 socket 接口来进行网络编程        F、长连接相对短连接可以节省建立连接的时间

19、在 32 位操作系统中,下列类型占用 8 个字符的为______。

 A、short int        B、Int C long        C、Unsigned int        D、Long long       E、Char        F、Int

20、在小端序的机器中,如果

union X{
    int x;
    char y[4]; 
};

如果:
    X a;
    a.x=0x11223344;//16 进制 则:______。 

A、a.y[0]=0x11        B、a.y[1]=0x11        C、a.y[2]=0x11        D、a.y[3]=0x11       E、a.y[0]=0x22        F、a.y[3]=0x22

二、问答题

21、java 中的 wait()方法和 sleep()方法的区别是什么?

22、写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。请注意程序效率。

23、给定一个 query 和一个 text,均由小写字母组成。要求在 text 中找出以同样的顺序连 续出现在 query 中的最长连续字母序列的长度。例如, query 为“acbac”,text 为 “acaccbabb”,那么 text 中的“cba”为最长的连续出现在 query 中的字母序列,因此, 返回结果应该为其长度 3。请注意程序效率。


参考答案

1、A    2、D    3、A    4、A    5、A    6、C    7、A    8、A    9、D    10、A

11、C    12、C    13、B    14、D    15、F    16、B    17、AF    18、D    19、D    20、D

21、解析:

        对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类中的。sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。
        在调用sleep()方法的过程中,线程不会释放对象锁。
        而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备。

22、参考代码:

/**
*1)先构造二叉树;
*2)利用二叉树遍历的方法得到min和max即可;
*/
class Test{
    public static void main(String[] args) {
        TestALBB mTestALBB=new TestALBB();
        int array[]={1,5,-5,9,-10};
        mTestALBB.createTree(array);
        int value=mTestALBB.getMax();
        System.out.println("value: "+value);
    }
}
class TestALBB{
    public int min=0;
    public int max=0;
    public TreeNode t=null;
    /*
     * 有一组数据 构造二叉树;
     */
    public void createTree(int array[]){
        //方法1--》顺序存储构造二叉排序树;利用队列;
        TreeNode t=new TreeNode();
        t.data=array[0];
        t.left=t.right=null;
        int i=1;
        java.util.Queue<TreeNode> mQueue=new java.util.LinkedList<TreeNode>();
        mQueue.offer(t);
        TreeNode temp=null;
        while(i<array.length-1){
            temp=mQueue.poll();
            TreeNode left=new TreeNode();
            left.data=array[i];
            left.left=left.right=null;
            temp.left=left;
            mQueue.offer(left);
             
            TreeNode right=new TreeNode();
            right.data=array[i+1];
            right.left=right.right=null;
            temp.right=right;
            mQueue.offer(right);    
            i=i+2;
        }
        this.t=t;
    }
/*
 * 利用先序排序得到 min和 max
 */
    public void getValue(TreeNode t){
        if(t!=null){
            if(t.data>max)max=t.data;
            else if(t.data<min)min=t.data;   
        }
        if(t.left!=null){
            getValue(t.left);
        }
        if(t.right!=null){
            getValue(t.right);
        }
    }
     public int getMax(){
        this.getValue(this.t);
        return Math.abs(max-min);
    }
}
/**
 * 
 * @author Administrator
 * 节点的数据结构
 *
 */
class TreeNode{
    public TreeNode right=null;
    public TreeNode left=null;
    public int data=0;
}

23、参考代码:

int GetLCSLength(int m, int n, char *str1, char *str2) {
    int max = 0;
    int *array = (int *)malloc(m * n * sizeof(int));
    memset(array, 0, sizeof(array));
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            if (str1[i] == str2[j]) {
                if (i > 0 && j > 0) {
                    array[i][j] = array[i - 1][j - 1] + 1;
                } else {
                    array[i][j] = 1;
                }
                if (array[i][j] > max) {
                    max = array[i][j];
                }
            }
        }
    }
    return max;
}


个人资料
Bingo
等级:9
文章:694篇
访问:38.9w
排名: 1
上一篇: 阿里巴巴研发工程师笔试卷-2013年
下一篇:阿里巴巴基础平台研发工程师实习生笔试题-2015年
猜你感兴趣的圈子:
阿里巴巴笔试面试圈
标签: treenode、瓶子、外援、left、array、面试题
隐藏