2012淘宝笔试及答案

来源:互联网 发布:微电影知乎 编辑:程序博客网 时间:2024/05/01 04:00
请给位大牛给出参考答案
一、单选题
1、我们有很多瓶无色的液体,其中有一瓶是毒药,其它都是蒸馏水,实验的小白鼠喝了以后会在5分钟后死亡,而喝到蒸馏水的小白鼠则一切正常。现在有5只小白鼠,请问一下,我们用这五只小白鼠,5分钟的时间,能够检测多少瓶液体的成分()

a 5瓶 b 6 c 31 d 32

答案:c

32瓶标号1-31,根据标号二进制组成五组混合液,分别为第i位为1的混合液;小白鼠i喝第i组混合液。小白鼠死亡组合而成二进制所代表的十进制数字刚好为有毒液体标号。

若小白鼠1,2,,3死了,则证明标号为18的混合液有毒。

2、若某链表最常用的操作是在最后一个结点之后插入一个结点和删除最后一个结点,则采用()存储方式最节省时间?

A 单链表 B 带头结点的非循环双链表 C 带头节点的双循环链表  D 循环链表

答案:c

此处最好的显然是C,插入时直接在头部之前插入,删除时直接删除头部之前的节点,时间均为O(1)。


3、如果需要对磁盘上的1000W条记录构建索引,你认为下面哪种数据结构来存储索引最合适?()

A Hash Table  B. AVL-Tree  C. B-Tree  D. List

答案:c

HashTable需要内存远大于存储记录大小,在此处显然极大浪费存储空间;

AVL-Tree:不适合磁盘,只有两个孩子

List:显然不行

B-Tree就是MYSQL数据库中所用的索引,类似于红黑树,但可以有多个孩子(这依赖于磁盘特性),所以可以比红黑树更矮。每个节点里存储了节点属性及关键字的指针,指针指向存放该关键字的的卫星数据的磁盘页。主要操作包括搜索,插入,删除。


4、可用来检测一个web服务器是否正常工作的命令是()

A ping B tracert  C. telnet  D. ftp

答案:c

ping:验证网络连通性

tracert:跟踪数据包路由

nbtstat:显示本地NetBIOS名称表与NeIBIOS名称缓存, 该命令只有在安装了TCP/IP协议后才可使用,显然跟HTTP协议无关

netstat:显示当前TCP/IP网络连接,并统计会话信息。该命令只有在安装了TCP/IP协议后才可使用。

telnet:是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。看着没什么关系,但就是这个。

ftp:显然是跟ftp协议有关的


5、下面哪个操作是Windows独有的I/O技术()

A. Select  B.Poll  C.IOCP  D. Epoll

答案:IOCP

select:从一组端口中选择一个活跃的端口

poll/Epoll:轮询端口

IOCP(I/O Completion Port,I/O完成端口)是性能最好的一种I/O模型。它是应用程序使用线程池处理异步I/O请求的一种机制。在处理多个并发的异步I/O请求时,以往的模型都是在接收请求是创建一个线程来应答请求。这样就有很多的线程并行地运行在系统中。而这些线程都是可运行的,Windows内核花费大量的时间在进行线程的上下文切换,并没有多少时间花在线程运行上。再加上创建新线程的开销比较大,所以造成了效率的低下。 

前三者linux下也有


6、IPV6地址包含了()位

A. 16  B. 32  C. 64   D.128

答案:D


7、数据库里建索引常用的数据结构是()

A 链表   B队列  C 树   D 哈希表

答案:C


8、在公司局域网上ping www.taobao.com没有涉及到的网络协议是()

A. ARP        B. DNS    C. TCP       D. ICMP

答案:C

首先将个人MAC地址转换为可用的IP地址,涉及了ARP协议

网址URL转换为IP涉及到了DNS协议

ICMP协议时互联网控制报文协议,在互联网通信肯定会用到,对于用户数据传输十分重要


二、填空题
1、http属于(应用层)协议,ICMP属于(网络IP层)协议

2、深度为k的完全二叉树至少有(2^(k-1))个结点,至多有(2^k-1)个结点//标准认为,根节点深度为1

3、字节为6位的二进制有符号整数,其最小值是(-32) 


4、设有28盏灯,拟公用一个电源,则至少需有4插头的接线板数(9)个。

只有最后一个插线板才能提供4个插头,其它都需要为至少一个接线板提供插头

因此3*(n-1)+4>=28 n>=9


三、综合题
1、有一颗结构如下的树,对其做镜像反转后如下,请写出能实现该功能的代码。注意:请勿对该树做任何假设,它不一定是平衡树,也不一定有序。
        1                                                1
      /  | \                                          /  |  \
     2   3  4                                        4   3   2
    /|\  /\  |                                       |  / \ / | \
   6 5 7 8 9 10                                     10 9  8 7 5 6

//递归 

void MirrorTrans(DnsNode* root){

if(root==NULL)  return ;


if(root->left!=NULL)  MirrorTrans(root->left);
if(root->right!=NULL)  MirrorTrans(root->right);


DnsNode* tmp = root->left;
root->left = root->right;
root->right = tmp;

return ;
}

//非递归
void MirrorTransEx(DnsNode* root){
if(root==NULL)  return ;


DnsNode* tmp = NULL;
std::stack<DnsNode*> stck;


//交换
tmp = root->left;
root->left = root->right;
root->right = tmp;


if(root->left) stck.push(root->left);
if(root->right) stck.push(root->right);
while(!stck.empty()){
DnsNode* ptr = stck.top();
stck.pop();


tmp = ptr->left;
ptr->left = ptr->right;
ptr->right = tmp;


if(ptr->left) stck.push(ptr->left);
if(ptr->right) stck.push(ptr->right); 
}


return ;
}

2、假设某个网站每天有超过10亿次的页面访问量,出于安全考虑,网站会记录访问客户端访问的ip地址和对应的时间,如果现在已经记录了1000亿条数据,想统计一个指定时间段内的区域ip地址访问量,那么这些数据应该按照何种方式来组织,才能尽快满足上面的统计需求呢,设计完方案后,并指出该方案的优缺点,比如在什么情况下,可能会非常慢?

先按时间段(每min)分割成若干个区域,每个区域平均小于100万的纪录。每个区可以按照IP作为索引进行B树组织。这样既便于快速查询指定时间段内ip地址访问量,也便于其他操作,如根据时间插入,删除等。但对于仅根据IP进行查询,速度较慢。

思想借鉴数据库的分区+索引,根据时间字段分区,根据IP建立索引。


四、附加题
1、写出C语言的地址对齐宏ALIGN(PALGNBYTES),其中P是要对齐的地址,ALIGNBYTES是要对齐的字节数(2的N次方),比如说:ALIGN(13,16)=16

2、在高性能服务器的代码中经常会看到类似这样的代码:
typedef union
{
  erts_smp_rwmtx_t rwmtx;
  byte cache_line_align_[ERTS_ALC_CACHE_LINE_ALIGN_SIZE(sizeof(erts_smp_rwmtx_t))];
}erts_meta_main_tab_lock_t;

erts_meta_main_tab_lock_t main_tab_lock[16];

请问其中用来填充的cache_line_align的作用是?

3、在现代web服务系统的设计中,为了减轻源站的压力,通常采用分布式缓存技术,其原理如下图所示,前端的分配器将针对不同内容的用户请求分配给不同的缓存服务器向用户提供服务。
                                   分配器
                                /    |      \
                              缓存  缓存 ...缓存
                             服务器1 服务器2 ...服务器n

1)请问如何设置分配策略,可以保证充分利用每个缓存服务器的存储空间(每个内容只在一个缓存服务器有副本)

2)当部分缓存服务器故障,或是因为系统扩容,导致缓存服务器的数量动态减少或增加时,你的分配策略是否可以保证较小的缓存文件重分配的开销,如果不能,如何改进?

3)当各个缓存服务器的存储空间存在差异时(如有4个缓存服务器,存储空间比为4:9:15:7),如何改进你的策略,按照如上的比例将内容调度到缓存服务器?
0 0
原创粉丝点击