京东2015年应届生招聘笔试题(A)卷答案选择题部分

时间:2023-12-26 23:20:13

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

京东2015年应届生招聘笔试题(A)卷答案选择题部分图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

京东2015年应届生招聘笔试题(A)卷答案选择题部分

其先序遍历结果为: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