发布于 2014-10-17 07:47:39 | 3725 次阅读 | 评论: 2 | 来源: 网友投递
京东购物商城
京东是中国最大的自营式电商企业,在线销售计算机、手机及其它数码产品、家电、汽车配件、服装与鞋类、奢侈品、家居与家庭用品、化妆品与其它个人护理用品、食品与营养品、书籍与其它媒体产品、母婴用品与玩具、体育与健身器材以及虚拟商品等13大类3,150万种SKUs优质商品。
1.操作系统死锁的必要条件(多选题):()
A.互斥条件
B.系统资源有限
C.进程调度不合理
D.环路等待条件
答:A,C,D
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.以下函数的时间复杂度()
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协议是可靠的服务,当客户端第一次向服务端发送会话请求的时候,就会把数据传输过去
D.IP、ICMP和IGMP都是网络层的协议
答:C
思路:其他没有看,因为虽然我读书少没有学过TCP/IP,但是我知道TCP/IP的三次握手。
【重点:TCP/IP的三次握手与四次挥手】
7.SQL语言中,删除一个表的命令是()
A.DELETE
B.DROP
C.CLEAR
D.REMOVE
答:B
思路:在数据库中,数据库是由若干个表组成的;表是由若干个记录组成的。
删除数据库和表的操作都是DROP;
删除记录是DELETE。
8.已知一棵二叉树,其先序序列为EFHIGJ,中序序列为HFIEJKG,则该二叉树根节点的右孩子为()
A.E
B.J
C.G
D.H
答:首先你得了解先/中/后序序列的概念。
这里我简要讲一下(也可到百度上面查):
先序序列就是对一棵二叉树进行先序遍历得到的一串序列。先序遍历就是:首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树,如果二叉树为空则返回。
中序序列就是对一棵二叉树进行中序遍历得到的一串序列。中序遍历就是:中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。在遍历左、右子树时,仍然先遍历左子树,再访问根结点,最后遍历右子树。即:
若二叉树为空则结束返回
否则:
(1)中序遍历左子树。
(2)访问根结点。
(3)中序遍历右子树。
注意的是:遍历左右子树时仍然采用中序遍历方法。
后序序列就是对一棵二叉树进行后序遍历得到的一串序列。后序遍历就是:后序遍历首先遍历左子树,然后遍历右子树,最后遍历访问根结点,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后遍历根结点。即:
若二叉树为空则结束返回,
否则:
(1)后序遍历左子树
(2)后序遍历右子树
(3)访问根结点
如图2
其先序遍历结果为:ABDECF
其中序遍历结果为:DBEAFC
其后序遍历结果为:DEBFCA
对于这三种遍历顺序,我们只要知其二就能得到剩下的一种遍历序列。
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.下列程序的输出结果:
A.A:print()
B.B:print()
C.编译出错
答:C
思路:没有学过C++那么深,在我的编译器codeblocks上没出错,只是什么都没有打印到屏幕上。
14.题目模糊,只知道是Java中的异常处理的catch...(try...)finally...的用法。
题目涉及知识点:Java的异常处理。
二.编程题
1.题目大意:编写一个函数func(int n),使得返回值是最小的各位乘积等于n的数,且返回值至少两位数。(题目有点看不太清,我就按这样理解了。如果和题目有出入稍微修改一下应该就能解决。)
C++代码:
2.使用非递归方式实现二叉树的先序遍历,并将节点的值保存在数组中。
C++函数原型:
struct TreeNode {
int value;
TreeNode* left;
TreeNode* right;
};
void TraverseTreeInPreOrder(std:vector<int>&value,const TreeNode* root) {
}
思路:最基础的搜索按照某一种方式来分可以分为深度优先搜索和广度优先搜索,深度优先搜索使用栈,或者说递归;广度优先搜索使用队列。这里要求非递归,则采用队列。
C++代码(未实现,C++基础不是太好,不过程序能够体现算法细节,仅作参考):
附加题:写出第k个素因子只有2、3、5的数。
因为数的个数相对较少,所以可以初始化。
C++代码: