版权所有,转载请注明出处,谢谢!
另外,我是初学者,这是自己笔记,网上也有相关2013阿里试题的解析,大家都可以去查找参考,会更全面一些。
1. -7的二进制补码表示为:
A.01111000 B.01111001 C.11111000 D.11111001
解析:有符号数有三种表示法原码,反码,补码。所谓原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
2.以下四种介质带宽最大的是:
A.同轴电缆 B.双绞线 C.光纤 D.同步线
3.进程阻塞的原因不包括:
A.时间片切换 B.等待I/O C.进程sleep D.等待解锁
解析:操作系统基础知识。单就从字面的阻塞两个字的意思看,等待和sleep都能造成阻塞,排除掉后三个选项。专业知识来看,时间片切换是用来进行进程切换的。考察的意图就是操作系统,软件工程专业必学的一门课程,此题相关的知识可以查找进程的7种状态,进程切换的原因,进程切换的过程,都是操作系统必备的一些知识。
4.设只含根节点的二叉树高度为1,现有一颗高度为h(h>1)的二叉树上只有出度为0和出度为2的节点,那么这颗二叉树节点最少为:
A.2^h-1 B.2h-1 C.2h D.2h+1
解析:注意此题最少两个是关键。讨巧的方法就是画图。要想维持二叉树的高度,结点又最少,就必须满足每一层有且只有一个出度为2的结点,也就是说直接沿着一条路下去保持出度为2,直到高度达到h,那么就是每层有2个结点,共2h结点,而根节点只有一个(第一层只有1个结点),所以最少要为2h-7。 此题考察二叉树相关知识,具体知识可以参考此篇文章:http://blog.csdn.net/walkinginthewind/article/details/7518888
5.给定下面程序,那么执行printf("%d\n",foo(20,13));结果是多少:
int foo(int x,int y)
{
if(x <= 0 || y <= 0)return 1;
return 3*foo(x-6,y/2);
}
A.3 B.9 C.27 D.81
解析:对递归的非常简单的考察,很容易。关键的问题是整个思考过程中的逻辑问题,不然很容易丢掉一次循环次数。在此基础上要去看一下常见的递归算法:斐波那契等等。另外也有可能会给你段文字,让你去写递归的逻辑,这样总体而言需要注意三个过程:递归的出口是什么(即递归结束的条件)?解决当前层次上的递归逻辑?解决下一层次上的递归逻辑?详细可以参见:http://blog.csdn.net/lixiaoshan_18899/article/details/1227122
6.对于以下说法错误的是:
A.Dijkstra是求两点间最短路径的,复杂度:O(n*n)。
B.Floyd-Warshall是求所有点对之间最短路径的,复杂度:O(n^3)。
C.求n个数中的中位数复杂度最低为:O(n*logn)。
D.基于比较的排序算法复杂度下界为:O(n*logn)。
解析:算法设计与分析知识。每个选项都是一个知识点,至于c选项,看这篇文章
7.给定一个m行n列的整数矩阵,每行从左到右和每列从上到下都是有序(假设都是升序)的。判断一个整数k是否在矩阵中出现的最优算法,在最坏情况下的时间复杂度是:
1 5 7 9
4 6 10 15
8 11 12 19
14 16 18 21
A.O(m*n) B.O(m+n) C.O(log(m*n)) D.O(log(m+n))
解析:二分搜索技术的灵活运用,给定一个排好序的n个元素,现在要在这n个元素中找出特定元素x,最坏情况下的复杂度为O(logn),好吧,我巧妙的避开了回答啊这个最坏复杂度是怎么得到的。引申到该题中,就是O(logn)*O(logm)。该题考察的是软件工程专业的一门必修课算法设计与分析,主要看递归与分治策略,动态规划啊,贪心算法,回溯法,分支限界法这几大章节。
8.一个包里有5个黑球,10个红球和17个白球。每次可以从中取两个球出来,放置在外面。那么至少取多少次,一定出现过取出一对颜色一样的球。
A.16 B.9 C.4 D.1
解析:这道题反正跟我的想法有些出路,但是我问了几个人都是A的,所以答案就是A把。我自己的想法是问至少取出多少次,那么只要剩下的球都是白的就可以,那么前五次是黑红,后五次红白,那么取第11次的时候就是会出现颜色一样的了,可能我想法是错的,怎么也转不过来这个脑筋。
9.某地电信局要对业务号码进行梳理,需要检测开通的市话号码是否存在某一个是另一个的前缀的情况,以简化电话交换机的逻辑。例如:某用户号码是11001100,但与110报警电话产生前缀配对。已知实话号码最长为8位,最短3位,并且所有的电话号码都以1开头。由于市话号码众多,长度也未必一致,高效的算法可以用O(n)的时间复杂度完成检测(n为开通市话号码个数,数量是千万级的)。那么该算法在最坏情况下需要耗费大约多少内存空间?
A.5GB B.500MB C.50MB D.5MB
解析:最坏的就是都是8位号码即为1B 那么千万级就是1B*1000*1000*10 = 10MB 两位数的级别,为什么会出现50MB呢,因为这里的进位应该是1024B = 1KB的,约去了尾数24,只要去看数量级是两位数就够了。不知道这道题为什么有这么多字,自己也不是很把握,欢迎批评指正。
10.骑士只说真话,骗子只说假话。下列场景能确定一个骑士、一个骗子的有?
A.甲说:“我们中至少有一个人说真话”,乙什么也没说。
B.甲说:"我们两个都是骗子",乙什么也没说。
C.甲说:“我是个骗子或者乙是个骑士”,乙什么也没说。
D.甲乙都说:“我是个骑士”。
E.甲说:“乙是个骑士”,乙说:“我们俩一个是骑士一个是骗子”。
解析:是道逻辑题。无非就是每个选项都去假设甲是骑士乙是骗子,再反过来假设甲是骗子乙是骑士,看看两次假设是不是都满足一个条件不成立的时候,另一个条件成立。如果去掉红字部分,就有陷阱了,可能两个人都是骑士,两个人都是骗子,就不能像上面那样考虑了,这种题就是思维逻辑。