阿里巴巴2015实习生笔试真题

1.有两个N*N的矩阵A和B,想要在PC上按矩阵乘法基本算法编程实现计算A*B。假设N较大,本机内存也很大,可以存下A、B和结果矩阵。那么,为了计算速度,A和B在内存中应该如何存储(按行存指先存储第一行,再第二行,直到最后一行;按列存指先存储第一列,再第二列,直到最后一列)?

A.A按行存,B按行存。
B.A按行存,B按列存。
C.A按列存,B按行存。
D.A按列存,B按列存。

答案:A

想到的是传统矩阵相乘的方法,时间复杂度为O(n3 ),但是这不是最优的方法,最优方法为Strassen矩阵相乘发,时间复杂度降低为O(n2.81),用分治的思想将矩阵分块计算,在这个算法中按行存储更有利。所以正确答案为A。


2.IP数据报头采用()字节序,在此字节序下从低地址到高地址0x1234的表示形式为 () 。

A.big_endian,0x12 0x34 0 0
B.little_endian,0x34 0x12 0 0
C.big_endian,0 0 0x12 0x34
D.little_endian, 0 0 0x34 0x12

答案:C

big_endian:高位在低地址;
small-endian:地位在低地址。

3.设集合A={1,2,3},A上的关系R={(1,1),(2,2),(2,3),(3,2),(3,3)},则R不具备 ()?

A.自反性
B.传递性
C.对称性
D.反对称性

答案:D

假设集合A,以及基于A上的关系R
自反: 如果a是A的元素,那么<a,a>是R的元素
反自反: 如果a是A的元素,那么<a,a>不是R的元素
对称:如果<a,b>是R的元素,那么<b,a>是R的元素
反对称:如果<a,b>,<b,a>是R的元素,那么a,b相等
传递:如果<a,b>,<b,c>是R的元素,那么<a,c>是R的元素


4.无锁化编程有哪些常见方法?

A.针对计数器,可以使用原子加
B.只有一个生产者和一个消费者,那么就可以做到免锁访问环形缓冲区(Ring Buffer)
C.RCU(Read-Copy-Update),新旧副本切换机制,对于旧副本可以采用延迟释放的做法
D.CAS(Compare-and-Swap),如无锁栈,无锁队列等待

答案:D

A 这方法虽然不太好,但是常见
B ProducerConsumerQueue就是这个,到处都是
C linux kernel里面大量使用
D 本质上其实就是乐观锁,操作起来很困难。。单生产者多消费者或者多生产者单消费者的情况下比较常见,也不容易遇到ABA问题。


5. 以下措施中,不可能改进分布式系统读写(IO)性能的有____。

A.网络从千兆网升级为万兆网
B.优化调度系统,尽量做到任务与数据相近(Locality)
C.数据预取机制
D.实现异步读写机制

答案:D

异步IO就是调用系统IO来完成实际的IO操作,而不需要应用程序自己写代码完成IO,每次系统IO完成后给应用程序返回一个IO完成的信号,从而实现应用程序真的的异步无阻塞式的IO,异步IO可以提高应用程序的性能,而对操作系统IO没什么影响。影响分布式系统读写(IO)性能的关键因素应该是请求数据,而数据可能在别的机器上,所以ABC都能明显改善性能。至于D,感觉在非分布式系统上都已经出现了,貌似对 分布式系统读写(IO)性能的影响不大。


6.假定x=500,求下面函数的返回值______ 。

int fun(int x)
{
    int countx = 0;
    while (x)
    {
        countx++;
        x = x & (x – 1);
    }
    return countx;
}
A.2
B.3
C.5
D.6

答案:D

很有意思的一道题目,500(d)=(111110100)b,由于当x为2的整数次幂时,x&(x-1)==0,所以,500的二进制表示中有多少个二进制位就会循环多少次,问题得解


你可能感兴趣的:(阿里巴巴,实习生笔试)