1.操作系统死锁的必要条件(多选题):()
A.相互排斥条件
B.系统资源有限
C.进程调度不合理
D.环路等待条件
答:A,C,D
參考资料:http://blog.sina.com.cn/s/blog_5e3604840100ddgq.html
2.定义根节点深度为1,有n个元素的全然二叉树的深度是()
A.D(n) = log2(n)
B.D(n) = 1 + log2(n)
C.D(n) = n + log2(n)
D.D(n) = 1 + n * log2(n)
答:B
思路:假设了解二叉树就能知道数的深度是log2(N),那么要不要加1呢。试试就知道要加1。(这里log(N)是去除小数点后面的数字的,也就是想下取整)
见图1
图1
3.下面函数的时间复杂度()
void recursive(int n,int m,int o) {
if(n <= 0) {
printf("%d,%d\n",m,o);
} else {
recursive(n-1,m+1,o);
recursive(n-1,m,o+1);
}
}
A.O(n*m*o)
B.O(n^2*m^2)
C.O(2^n)
D.O(n!)
答:C
思路:咱们不用管后面的m和o,由于循环的推断条件是n,你看if语句里面。是n<=0的时候跳出循环,所以n才是重点,当n>0时,一个recursive(n)须要处理2个recursive(n-1),递归下去。每一个recursive(n-1)又要处理2个recursive(n-2),所以这个函数一共要处理2^n个recursive(0,m,o);所以时间复杂度为O(2^n)。
这里。2^n 表示 2的n次方。
4.这是一道关于进程和线程的题。题目太模糊看不太清,推荐一个不错介绍进程和线程的博客:
http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html
5.如果你仅仅有100Mb的内存,须要对1Gb的数据进行排序,最合适的算法是
A.归并排序
B.插入排序
C.高速排序
D.冒泡排序
答:A
思路:这道题一開始我不是非常会,由于我一直在纠结100Mb内存怎样存储1Gb的数据。
学长说是A。所以先选A。我会继续对此问题进行追踪……
6.下面关于TCP/IP协议的描写叙述中,不对的是()
A.TCP负责将信息拆分为数据包,并在数据包达到目的地后对其进行装配
B.IP负责为数据包选择路由以使将其传递到正确的目的地
C.TCP协议是可靠的服务,当client第一次向服务端发送会话请求的时候,就会把传输数据过去
D.IP、ICMP和IGMP都是网络层的协议
答:C
思路:其它没有看。由于尽管我读书少没有学过TCP/IP,可是我知道TCP/IP的三次握手。
【重点:TCP/IP的三次握手与四次挥手】
http://www.2cto.com/net/201310/251896.html
推荐到这个站点上看看。
7.SQL语言中,删除一个表的命令是()
A.DELETE
B.DROP
C.CLEAR
D.REMOVE
答:B
思路:在数据库中,数据库是由若干个表组成的;表是由若干个记录组成的。
删除数据库和表的操作都是DROP;
删除记录是DELETE。
最主要的一些指令能够看这里:http://blog.csdn.net/lasolmi/article/details/39857245
8.已知一棵二叉树,其先序序列为EFHIGJ,中序序列为HFIEJKG,则该二叉树根节点的右孩子为()
A.E
B.J
C.G
D.H
答:首先你得了解先/中/后序序列的概念。
这里我简要讲一下(也可到百度上面查):
先序序列就是对一棵二叉树进行先序遍历得到的一串序列。先序遍历就是:首先訪问根结点然后遍历左子树。最后遍历右子树。在遍历左、右子树时,仍然先訪问根结点,然后遍历左子树。最后遍历右子树,假设二叉树为空则返回。
中序序列就是对一棵二叉树进行中序遍历得到的一串序列。
中序遍历就是:中序遍历首先遍历左子树。然后訪问根结点。最后遍历右子树。在遍历左、右子树时,仍然先遍历左子树,再訪问根结点,最后遍历右子树。
即:
若二叉树为空则结束返回
否则:
(1)中序遍历左子树。
(2)訪问根结点。
(3)中序遍历右子树。
注意的是:遍历左右子树时仍然採用中序遍历方法。
后序序列就是对一棵二叉树进行后序遍历得到的一串序列。
后序遍历就是:后序遍历首先遍历左子树,然后遍历右子树,最后遍历訪问根结点。在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后遍历根结点。即:
若二叉树为空则结束返回,
否则:
(1)后序遍历左子树
(2)后序遍历右子树
(3)訪问根结点
如图2
其先序遍历结果为:ABDECF
当中序遍历结果为:DBEAFC
其后序遍历结果为:DEBFCA
对于这三种遍历顺序,我们仅仅要知其二就能得到剩下的一种遍历序列。
详细方法能够參考此文:http://www.cnblogs.com/bmrs/archive/2010/08/19/SloveTree.html
9.两人玩游戏,在脑门上贴数字(正整数>=1),仅仅看见对方的,看不见自己的。并且两人的数字相差1,下面是两人的对话:
A:我不知道
B:我也不知道
A:我知道了
B:我也知道了
问A头上的字是多少,B头上的字是多少()
A.A是4,B是3
B.A是3,B是2
C.A是2,B是1
D.A是1,B是2
答:B
思路:我们来模拟一下过程:
A看到B头上的2,可是他不知道自己是1还是3
B看到了A头上的3。所以他也不知道
A听B说不知道,就知道自己头上的是3了。由于假设自己头上的是1,B肯定知道自己是2
由于假设A是4的话。A肯定不会说自己知道了,所以B知道了A是2,从而B也知道了自己是3.
我的推理结束了。
10.例如以下的无向图中有多少个不同的最小生成树()
A.4
B.5
C.6
D.7
答:A(待验证)
思路:求一个图的最小生成树的算法有kruskal算法和prim算法。在prim算法过程中对其进行改进能够成为求最小生成树个数的算法。这里由于情况比較少,所以我们能够自己手算来得到效果。
11.在C++中,为了让某个类仅仅能通过new来创建(即假设直接创建对象,编译器将报错),应该()
A.将构造函数设为私有
B.将析构函数设为私有
C.将构造函数和析构函数均设为私有
D.没有办法能做到
答:A
12.内联函数在下面场景中最实用的()
A.当函数代码较长且多层嵌套循环的时候
B.当函数中有较多的静态变量的时候
C.当函数代码较小而且被频繁调用的时候
D.以上都不正确
答:C
思路:内联函数inline在非递归的时候理论上会更快(可是之前自己试的时候感觉更慢,括号内的能够省略)。
13.下列程序的输出结果:
#include <iostream>
using namespace std;
class A {
public:
void print() {cout<<"A:print()";}
};
class B:private A {
public:
void print() {cout<<"B:print()";}
};
class C:public B {
public:
void print() {A:print();}
};
int main() {
C b;
b.print();
}
A.A:print()
B.B:print()
C.编译出错
答:C
思路:没有学过C++那么深,在我的编译器codeblocks上没出错,仅仅是什么都没有打印到屏幕上。
14.题目模糊,仅仅知道是Java中的异常处理的catch...(try...)finally...的使用方法。
题目涉及知识点:Java的异常处理。
课參考资料:http://blog.csdn.net/hguisu/article/details/6155636