转自:http://blog.sina.com.cn/s/blog_7a23157a0102v0mu.html
1. 单选题
1.
A:
B:
C:
D:
2.
A:
C:
3.
A:
B:
(http://wenku.baidu.com/link?url=8XuW3ih_h6xJ-JPehSELv0jRggI3f-MpD6nyc8sAEKz5MW8e6KAu1U
是为了保持指令字长度不变而增加指令操作的数量
C:增加流水线段数理论上可以提高CPU频率(记住!)
D:冯诺依曼体系结构的主要特征是存储程序的工作方式
4.
A:CPU
5.
A:DECBA
6.你认为可以完成编写一个C语言编译器的语言是:
A:汇编
7.
A:static成员变量在对象构造时候生成(这个与类有关,与对象无关)
B:
C:
D:
9:某进程在运行过程中需要等待从磁盘上读入数据,此时进程的状态将:
A:
C:
10:下面算法的时间复杂度为:
Int
{
If(n==0||n==1)
return
return
A:
11:
A:18
2013->2012->1006->503->502->251->250->125->124->62->31->30->15->14->7->6->3->2->1
12:对于一个具有n个顶点的无向图,若采用邻接表数据结构表示,则存放表头节点的数组大小为:
A:
13. 一个和hash有关的有图的题
答案:A.对于几何中的每个字符串取hash可以看作是同分布的独立重复事件,所以每一个事件出现10的概率都是p=1/1024,那么当出现的时候,期望的次数就是1/p,1024.
14:如下函数,在32bit系统foo(2^31-3)的值是:
Int
{
A:
参考答案:C,首先-号比^的优先级高,所以实参应该是2^28,而C++中并没有幂指数的运算符,这个^只表示异或运算,所以实参的二进制值,
所以答案为C
15:对于顺序存储的线性数组,访问节点和增加节点删除节点的时间复杂度为:
A:
16:在32为系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是:
Struct
{
Int
Struct
{int
A:
17:袋中有红球,黄球,白球各一个,每次任意取一个放回,如此连续3次,则下列事件中概率是8/9的是:
A:
18:一个洗牌程序的功能是将n张牌的顺序打乱,以下关于洗牌程序的功能定义说法最恰当的是:
A:
B:
C:
D:
19:用两种颜色去染排成一个圈的6个棋子,如果通过旋转得到则只算一种,一共有多少种染色:
参考答案:C
解释:应该有14种方案,设只有黑白两色,默认白色,那么,用p(n)表示有n个黑棋的种类
p(0)=p(6)=1
p(1)=p(5)=1
p(2)=p(4)=3//相邻的一种,隔一个的一种,两个的一种
p(3)=4//都相邻的一种,BB0B的一种,BB00B的一种,B0B0B的一种,一共4种
综上是14种
20:递归式的先序遍历一个n节点,深度为d的二叉树,则需要栈空间的大小为:
A:
第二部分:多选
21:两个线程运行在双核机器上,每个线程主线程如下,线程1:x=1;r1=y;线程2:y=1;r2=x;
X和y是全局变量,初始为0。以下哪一个是r1和r2的可能值:
A:
B:
C:r1=0,r2=0
D:r1=0,r2=1
22.关于Linux系统的负载,以下表述正确的是:
A:
B:
C:
D:
23:关于排序算法的以下说法,错误的是:
A:
B:堆排序平均时间复杂度O(nlogn),最坏O(nlogn)
C:冒泡排序平均时间复杂度O(n^2),最坏O(n^2)
D:归并排序的平均时间复杂度O(nlogn),最坏O(n^2)
24:假设函数rand_k会随机返回一个【1,k】之间的随机数(k>=2),并且每个整数出现的概率相等。目前有rand_7,通过调用rand_7()和四则运算符,并适当增加逻辑判断和循环控制逻辑,下列函数可以实现的有:
A:rand_3
解释,对于rand_x(x<7)的直接截断,只要rand数大于x直接忽略,保证rand_x能够做到概率相等。而对于其他的则采用7×rand_7+rand_7,可以-7得到rand_49,然后截断成rand_42,统一除以2,则是rand_21,其他类似。多谢@plylw456
鉴于大家对这道题的解释看得不太清,我就在此展开解释一下:
首先分析:7×rand_7+rand_7
1.
那么对于随机变量X,你可以理解为它是一个“量级”的概念,X取值为1~7
当X=1时,随机变量Z取值范围是1*7+(1~7),也就是8~14
当X=2时,随机变量Z取值范围是2*7+(1~7),也就是15~21
当X=3时,随机变量Z取值范围是3*7+(1~7),也就是22~28
以此类推。。。
可以产生8~56的随机数。
那么产生的8~56的随机数,概率都相等吗?
答案是必然的,因为X是量级的概念,达到每个量级的概率是1/7,在量级内,Y达到1~7每个数的概率依然是1/7,所以8~56的每个数的概率都是1/49
好了我们可以得到1/49等概率的8~56,直接在生产的时候-7,得到等概率1/49的1~49.。。。。
好,现在只需要记住,得到rand_49,1~49的每个数都是等概率的就可以了,因为我们要截断,也就是说,为了得到rand_23直接截断,判断输出如果>23,直接忽略,否则输出,大家可能有点别扭,因为有的随机数生成的时候可能时间上要比其他的长点。但是要记住,1~23每个数输出的概率都是相等的,只不过不能保证每次输出时间都分秒不差而已。时间长短是跟概率无关的概念。
填空和问答:
25:某二叉树的前序遍历-+a*b-cd/ef,后续遍历abcd-*+ef/-,问其中序遍历序列为:a+b*c-d-e/f
层序遍历应该是:-+/a*efb-cd
26:某缓存系统采用LRU,缓存容量为4,并且初始为空,那么在顺序访问以下数据项的时候:1,5,1,3,5,2,4,1,2
出现缓存直接命中的次数为:(3),最后缓存即将淘汰的是(3)
:(LRU是Least Recently Used近期最少使用算法。)1-》1,5-》5,1-》5,1,3-》5,1,3,2-》1,3,2,4-》3,2,4,1-》3,4,1,2-》
首先1调入内存,然后5调入内存,然后1调入内存(命中缓存),然后3调入内存,然后2调入内存,然后4调入内存(将最少使用的5置换出内存),然后1调入内存(命中缓存),然后2调入内存(命中缓存)。最后,最少使用的3将面临被置换出的危险。
27:两个较长的单链表a和b,为了找出节点node满足node
链表相交检测,链表环检测。参考博客:http://blog.csdn.net/hackbuteer1/article/details/7583102
如果有公共节点,那因为是单链表,所以以后肯定也都是在一条线上面走,也就是说如果最后一个节点相同,那就有公共节点,不然就没有公共节点
如果两个链表相交于某一节点,那么在这个相交节点之后的所有节点都是两个链表所共有的。也就是说,如果两个链表相交,那么最后一个节点肯定是共有的。先遍历第一个链表,记住最后一个节点,然后遍历第二个链表,到最后一个节点时和第一个链表的最后一个节点做比较,如果相同,则相交,否则不相交。时间复杂度为O(len1 +len2),因为只需要一个额外指针保存最后一个节点地址,空间复杂度为O(1)。(编程之美上面有详细的介绍)
28、当存储数据量超出单节点数据管理能力的时候,可以采用的办法有数据库sharding的解决方案,也就是按照一定的规律把数据分散存储在多个数据管理节点N中(节点编号为0,1,2,,,,N-1)。假设存储的数据时a请完成为数据a计算存储节点的程序。
#define N 5
int hash(int element){
return element*2654435761;
}
int shardingIndex(int a){
int p = hash(a);
_________________________; //这里是空格
return p;
}
答案:p%=N
29:宿舍内5个同学一起玩对战游戏,每场比赛有一些人作为红方,一些人作为蓝方,请问至少需要多少场比赛,才能使得任意两个人之间有一场红方对蓝方和蓝方对红方的比赛?
分析:一次划分中,某方可以有1人,另一方有4人或某方有2人,另一人有3人。
要使任意两个人之间有一场红方对蓝方和蓝方对红方的比赛,假设5个同学为A,B,C,D,E,相当有有向图的5个节点,任意两个节点间有两个方向的边连接。
即总的节点关系有(5个节点中选取两个节点)A(5,2)=5*4=20个关系。
而一次比赛(一次划分)能够生成的关系(一方两人一方三人的划分)c(2,1)*c(3,1)=2*3=6或者(一方四人一方一人的划分)c(4,1)*(c(1,1)=4*1=4,
所以一场比赛(一次划分)最多生成的关系次数为6
所以需要20/6=3.33..即至少需要4场比赛
C++选做题
PartI
假设你有一台计算机,配置如下:
48GB内存
16核CPU,3.0GHz
12块2TBSATA硬盘
有两个数据文件A和B,A的大小是40GB,B的大小是2TB,A和B的文件格式一样,都包含等长的100字节的记录,记录的前20个字节表示key,后80个字节表示value,所有的key和value都由数字和大小写字母组成(0-9A-Z a-z),同一个文件中的key没有排序,也没有重复。
文件A和B都切成了1GB(1*10^9字节)的数据块(名为A000001、A000002......A000010、B000001、B000002......B002000),均匀分布在6块硬盘上。
请问如何用最快的方法找到A和B之间共同的key,以及他们对应的value值(建议输出格式如下所示:<空格><空格>)
请描述你的方法里面用到的关键的数据结构和算法,估算这个方法需要的内存空间和运算时间,并说明你的推导过程。
PartII
如果你有100台服务器,每台配置如上描述,它们通过千兆网络组成一个集群,任意两台之间的带宽可以达到1000Mbps,同时假设文件A和B的大小也放大100倍(各位4TB和200TB),并且被切分成1GB的碎片,均匀分布在100台服务器上。
请问如何用最快的方法找到A和B之间共同的key,以及他们对应的value值(建议输出格式如下所示:<空格><空格>)
请描述你的方法里面用到的关键的数据结构和算法,估算这个方法需要的内存空间、网络流和运算时间,并说明你的推导过程。
主要是说对一条微博进行评论,也就是创建一条评论,弹出框是否正常,输入字数是否有提示
必选选项没有选择提示还是有默认
提交评论有几个选项,等,要看数据库入库是否正常,以及在功能上是否对应,
授权以及编码要着重注意,编码和解码是否能对应