13年微软

来源:互联网 发布:经传软件跟风统计 编辑:程序博客网 时间:2024/05/22 05:27


答案与分析:

2.       下面哪一项不能用于Widows中进程间通信?

A.      命名事件

B.      命名管道

C.      临界区

D.      共享内存

答案:C
Wiki
的结果是,Windows中进程间通信方式有:File,管道(Pipe),命名管道(named pipe),信号(Signal),消息队列(Messagequeue),共享内存(sharedmemory),内存映射(memory–mapped file),信号量(semaphore),套接口(Socket)。不太确定命名事件(Named Event)这个对不对,查了一些资料,好像也没有提到的,但是有些进程间通信代码会用到这个,有谁帮忙解释一下吗?而临界区事实上应该算是由信号量来保证的。

3.        下面哪一种操作不是stack的基本操作?

A.      入栈

B.      出栈

C.      检查是否为空

D.      排序栈中元素

答案:D

可以看一下stackADT结构,前三种都在基本操作函数中。

4.        下面哪一种属于“creational”的设计模式?

A.      Façade

B.      Singleton

C.      Bridge

D.      Composite

E.       上面都不是

答案:B

Creational包括下面几种:   Singleton FactoryMethod AbstractFactoryBuilder Prototype

5.        当建立连接时,下面哪一个数据包发送顺序是正确的TCP握手协议过程?

A.      SYNSYN+ACKSYN+ACK

B.      SYN+ACKSYN+ACKSYN

C.      SYNSYN+ACKRST

D.      SYNSYNACK

E.       以上都不是

答案:E

这是握手的三次协议的更为详细的内容:

SYN, seqA

SYN,ACK=1,seqB, ack number=seqA+1

ACK=1, acknumber=seqB+1

CRST意思为:连接复位Resettingaconnection。想重置连接时,会发送RST数据包。

所以有人说,C应该也是可以的,因为可以在收到SYN+ACK后,设置发送RST,而且这种方式可以用在网络探测上,但是题目中明确说了是在建立TCP链接的时候正确的三次握手协议,所以我认为答案应该是选择E

6.        函数式编程的性质有?(TheCharacteristicsoffunctional programming are?

A.      Avoidof changing state and mutable data

B.      Referentialtransparency

C.      Lambdacalculus

D.      Threadsafe

E.       Allof Above

答案:E

这个wiki了一下,也不太懂,貌似就是说functionalprogramming是种编程典范,它将电脑运算视为数学意义上的函数的计算。在wiki中,avoidsstateand mutable dataLambdacalculusReferentialtransparency都有,Threadsafe而是正确的。可以参考一下这个http://www.programmer.com.cn/12717/

7.        关于HTTP协议说明,哪些是正确的

A.      CS模式下,作为一种request-response协议

B.      无状态,对每一个请求看成独立的

C.      WWWEmail使用的协议

D.      HTTP响应包括数字状态码,404经常代表“PageNotFound”

E.       以上都不是

答案:ABD

Email使用的是STMP协议

HTTP还有一个特性是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

9.        4个袋子,15个球,每个袋子至少放一个球,而且袋子中的球数量不能重复,有多少种方式?

A.      4

B.      5

C.      6

D.      7

E.       以上都没有

答案:C

可以这样数:

1,2,3,9

1,2,4,8

1,2,5,7

1,3,4,7

1,3,5,6

2,3,4,6

11.    有两个32bit的数AB,使用下面方式得到32bit的数CD。哪一种可以使用CD得到AB的值

A.      C=int32(A+B),D=(int32)(A-B)

B.      C=int32(A+B),D=(int32)((A-B)>>1)

C.      C=int32(A+B),D=B

D.      C=int32(A+B),D=(int32)(A+2*B)

E.       C=int32(A*B),D=(int32)(A/B)

答案:C
注意考虑整数溢出问题,对于有符号数,ACD通过下面方式都可以恢复
第一项:A=(C+D)/2,B=C-A
第二项:D右移一位,不知道移出的是1还是0,不能恢复
第三项:A=C-D,B=D
第四项:B=D-CA=C-B
第五项:虽然可以C*D再开方,但是不能确定AB的正负
但是对于无符号数,A不行,这里简单起见,以3bit数为例。例如A=111B=110C=A+B=001(溢出)D=A-B=001,所以A不能正确恢复了。C仍然可以,A=C-D=001-110=111D答案,同样因为溢出不能恢复。

12.    如果一个二叉树的前序遍历结果是abcdefg,下面哪一个是可能的中序遍历结果?

A.      abcdefg

B.      gfedcba

C.      bcdefga

D.      bceadfg

E.       bcdaefg

答案:ABCE

A         B

C    E

13.    T(n)=1(n<=1),T(n)=25+T(n/5)+n^2,T(n)复杂度是多少?

A.      O(nlogn)

B.      O(n^2logn)

C.      O(n^2)

D.      O(n^3)

E.       O(n^3logn)

答案:B

还是用主定理吧,直接推的话,好像比较麻烦。

主定理:

主要记住nlogbaf(n)的关系,即可,大于为情况1,等于为情况2,小于为情况3.

T(n)=aT(n/b)+f(n)

1)       e>0,F(n)=O(nlogba-e),复杂度为T(n)=theta(nlogba):例如T(n)=9T(n/3)+n,  theta(n2)

2)       f(n)=theta(nlogba),复杂度为T(n)=theta(nlogba*lgn)。例如:T(n)=25T(n/5)+O(n2),theta(n2lgn)

3)       e>0,F(n)=W(nlogba+e),复杂度为T(n)=theta(f(n)).例如T(n)=3T(n/4)+cn2,theta(n2)

14.    两个线程运行在双核机器上,每个线程主程序如下,线程1x=1;r1=y;线程2y=1;r2=xxy是两个全局变量,初始为0。以下哪一个是r1r2的可能值?

A.      r1=1,r2=1

B.      r1=1,r2=0

C.      r1=0,r2=1

D.      r1=0,r2=0

答案:ABC

考察临界区问题,没有设置临界区,所以可能:

A:x=1 => y=1 => r1=y=1 => r2=x=1

B:y=1 => r2=x=0 => x=1 => r1=y=1

C:x=1 => r1=y=0 => y=1 =>r2=x=1

15.    n个元素的完全二叉树的深度是:

E.       D(n)=log2(n)

F.       D(n)=1+log2(n)

G.      D(n)=n+log2(n)

H.      D(n)=1+n*log2(n)

答案:B

普遍来说,认为根结点深度为1,所以深度=1+log2(n)

16.    1,2,3,…999,1000这些数中,一共出现了多少个0?

A.      189

B.      191

C.      193

D.      195

这道题没有答案,正确应该是192,一种数的方法是:1-100有:9+2=11,101-200有:9+9+2=20,之后201-300,…,901-1000模式相同,但10001,所以公有11+20*9+1=192。也可以按照1个零有哪些,2个零有哪些,3个零有哪些这样数,总之有一个比较规律的数的方法,保证没有遗漏就可以了。

17.    228日出生和229日出生的人的比例是多少?2012228日和2012229日出生的人的比例是多少?

A.      1:11:1

B.      4:11:1

C.      1:14:1

D.      4:14:1

答案:B

4:1(四年一次闰年)

1:1(如果闰年,则那年28日和29日出生概率相同,与在其他日期出生概率没有差别)

18.    下面哪些使用的是贪心算法

A.      单源最短路径中的Dijkstra算法

B.      最小生成树的Prim算法

C.      最小生成树的Kruskal算法

D.      计算每对顶点最短路径的Floyd-Warshall算法

E.       字符串匹配中的KMP算法

答案:ABC

贪心:DijkstraPrimKruskal (算法导论中已明确说明)。

Kruskal:初始化每个顶点为只有一个根几点的树,将边的权值按从小到大排序,选择权值最小的边(u,v),如果uv不在一颗树中,则将uv所在两棵树合并,边(u,v)加入到集合中,直到所有的边都找完

Prim:从任意顶点出发,维护一个树A,每一步,选择最小的边连接G(V,A),将结点V加入到树A中,直到所有的顶点都找完。

动态规划:Floyd-WarshallKMP

19.     

ClassA{

Public:

Intk1;intk2;

};

一个数组Aa[5]={{3,4},{6,5},{2,7},{3,1},{1,2}}

下面哪一个是函数调用之后的结果

{{1,2},{2,7},{3,1},{3,4},{6,5}}

 

A.      f1(a,5,cmp)

B.      f2(a,5,cmp)

C.      f3(a,5,cmp)

D.      f4(a,5,cmp)

E.       以上都不对

答案:AD

这道题出的很有意思,乍一看,题干这么大,可能会被唬住,其实冷静下来看一下,很简单,就是一个排序的稳定性非稳定性的分析。所谓稳定性,即:保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同,如果排序的结点仅仅是一个数,则稳定性意义不大,但是如果有多个键值,就需要考虑稳定性的分析。例如,对于本题,如果排序算法是稳定的,那么因为原数组{3,4}排在{3,1}前,根据稳定性的定义,排序的结果就一定不会出现{3,1}排在{3,4}前的情况。而如果算法是不稳定的,那么只能说,{3,1}有排在{3,4}前面的可能,需要根据具体的排序过程判断是否相等的值会变换位置。关于八种算法稳定性的分析,可以查看http://hi.baidu.com/shismbwb/item/404c94898cfd2855850fab24。选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。

 

所以,首先明确四个函数都采用了什么样的排序算法:

f1:选择排序;f2:直接插入排序;f3:冒泡,f4:快排

f2f3是稳定的,直接pass掉。然后非稳定的再看是否变换了位置。AD如果走一遍程序的话,会发现{3,4}{3,1}这两个元素是变了顺序的。

对于A答案,a[5]={{3,4},{6,5},{2,7},{3,1},{1,2}}

第一遍排序:{{1,2},{6,5},{2,7},{3,1},{3,4}}

第二遍排序:{{1,2},{2,7},{6,5},{3,1},{3,4}}

第三遍排序:{{1,2},{2,7},{3,1},{6,5},{3,4}}

第四遍排序:{{1,2},{2,7},{3,1},{3,4},{6,5}}

所以正确

对于D答案,a[5]={{3,4},{6,5},{2,7},{3,1},{1,2}}

第一遍排序的运行过程是这样的。

初始:low=0,high=4,i=0,t={3,4}

For循环:

J=1,c({6,5},t)>0,i=0,没有交换(a[i],a[j]),{{3,4},{6,5},{2,7},{3,1},{1,2}}

J=2,c({2,7},t)<0,i=1,交换({6,5},{2,7}),{{3,4},{2,7},{6,5},{3,1},{1,2}}

J=3,c({3,1},t)=0,i=2,交换({6,5},{3,1}){{3,4},{2,7},{3,1},{6,5},{1,2}}

J=4,c({1,2},t)<0,i=3,交换({6,5},{1,2}){{3,4},{2,7},{3,1},{1,2},{6,5}}

最后,执行exchange(a,low,i),交换({3,4},{1,2}){{1,2},{2,7},{3,1},{3,4},{6,5}}

得到第一遍排序结果:{{1,2},{2,7},{3,1},{3,4},{6,5}},找到了{3,1}的位置,已经在{3,4}的前面,所以最后的结果一定与预期结果相同。这里需要非常注意的是在_f41函数中,if(c(a[j],t)<=0),如果写成c(a[j],t)<0的话,则该答案也不会选择。所以最终的答案是AD

20.     

<word>::<letter>|<letter><pairlet>|<letter><pairdig>

<pairlet>::<letter><letter>|<pairlet><letter><letter>

<pairdig>::<digit><digit>|<pairdig><digit><digit>

<letter>::a|b|c|…|y|z

<digit>::0|1|2|…|9

下面哪一个词可以从<word>的规则中产生?Iabcd IIbcdef III d22

A.      都不是

B.      只有III

C.      只有IIII

D.      只有IIIII

E.       IIIIII都是

答案:D

算是一道考察形式自动机的题。关键是分析清楚每种模式本质上代表什么。<letter>表示单个字母;<digit>表示单个数字;<pairdig>是两个<digit>,或者递归<pairdig>和两个<digit>,其实表示的是偶数个<digit>,即偶数个数字;同理,<pairlet>是偶数个字母。所以<word>的可能是:1个字母,奇数个字母,或者一个字母和偶数个数字。所以第二个和第三个是正确的。

 

0 0
原创粉丝点击