阿里笔试后总结

没有准备,答得很烂,也说明自己基础太差~

(1)考察通过子网掩码和主机地址求该主机的网络号。

解答:网络号是指主机地址部分全0的那个地址,子网掩码是指网络地址全1且主机地址全0的地址;显然,子网掩码&主机地址=主机网络号

(2)考察对指针和指针数组的定义的理解,题目是“在64位系统上,定义的int  *a[2][3]的变量占据几个字节?”

解答:指针的长度,确定于系统的寻址长度,在64位机上指针长度为8个字节【有些机器只用了48位什么的,在笔试中不予考虑】;这个表达式表示定义了一个2行3列的int型指针数组,而在64位系统上指针长度为8字节,所以结果为:2*3*sizeof(int *) = 48字节

(3)考察linux运维指令,这个。。。浩浩常用指令,怎么复习?嗯,这道题是“Linux中使用df -h /home 和 du -sh /home 所查看到的已使用的磁盘容量不同,可能的原因是?”

解答:

(4)考察补码的定义、类型转换的规则,如长类型和短类型计算,会将短类型扩展至长类型再计算。

题目是:一个C语言程序再一台32位机器上运行,程序中定义了三个变量xyz,其中x和z是int 型,y为short型。当x=127,y=-9时,执行赋值语句z=x+y后,xyz的值分别是?

答案:x=0000007FH,y=FFF7H,z=00000076H

(5)考察数组越界问题,so easy

(6)快速排序的期望运行时间复杂度是O(nlogn),最坏运行时间复杂度为O(n2)

(7)在一个长度为n的顺序表中删除第i个元素,要移动______个元素。如果在第i个元素钱插入一个元素,要后移______个元素。

有一道大题是:

4个人过桥,时间为晚上,只有一只手电筒,最多只能两个人同时过桥,且必须带手电,只能步行将手电简带来带去,而不能扔来扔去。每个人走路的速度不同,A过桥要1分钟,B过桥需要2分钟,C需要5分钟,D需要10分钟,两个一起走,则速度等于其中较慢的人的速度。

这是一道规划问题,一个靠谱点的参考答案是:

(1)A和B一起过桥,2分钟;(2)A回来,1分钟;(3)C和D一起过桥,10分钟;(4)B回来,2分钟;(5)A和B一起过桥,2分钟;

所以,总共2+1+10+2+2=17分钟。

总结:这个办法的聪明之处在于三点,一个是:让两个走得最慢的人同时过桥,这样花去的时间只是走得最慢的那个人的时间,而走得次慢的那位的时间就不用计算在内了;另一个是,让从彼岸返回的时候,从彼岸的所有人中挑选走得最快的那个人;最开始的时候过桥的一定是最快的两个人,这样保证第二次返回的时候是次快的那个人回来。

关于这道题有个经典的扩展分析:【逻辑】四人过桥问题分析  

关键在于,比较2b 与 a+y的大小,其中a,b为最快和次快的速度,y、z为次慢和最慢的速度

如果2b大于a+y,则采取模式:“由A护送到对岸,A返回”,称作“模式一;

如果2b小于a+y,则采取模式由A和B护送到对岸,A和B返回”,称作“模式二

当N大于等于4的时候,先做前4步,然后每次递归N-2求解,这里的2是N个要过桥的人里面最慢的两个。

posted @ 2014-04-10 23:29  javaadu  阅读(95)  评论(0编辑  收藏  举报