1、微软校园招聘笔试题922 第一次笔试2.下面哪一项不能用于Widows中进程间通信?A. 命名事件B. 命名管道C. 临界区D. 共享内存3.下面哪一种操作不是stack的基本操作?A. 入栈B. 出栈C. 检查是否为空D. 排序栈中元素4.下面哪一种属于“creational”的设计模式?A. FaadeB. SingletonC. BridgeD. CompositeE.上面都不是5.当建立连接时,下面哪一个数据包发送顺序是正确的TCP握手协议过程?A. SYN,SYN+ACK,SYN+ACKB. SYN+ACK,SYN+ACK,SYNC. SYN,SYN+ACK,RSTD. SYN,SY
2、N,ACKE.以上都不是6.函数式编程的性质有?(TheCharacteristicsof functional programming are?)A. Avoidof changing state and mutable dataB. ReferentialtransparencyC. LambdacalculusD. ThreadsafeE.All of Above7.关于HTTP协议说明,哪些是正确的?A. 在CS模式下,作为一种request-response协议B. 无状态,对每一个请求看成独立的C. WWW和Email使用的协议D. HTTP响应包括数字状态码,404经常代表“Pa
3、geNot Found”E.以上都不是9.4个袋子,15个球,每个袋子至少放一个球,而且袋子中的球数量不能重复,有多少种方式?A. 4B. 5C. 6D. 711. 有两个32bit的数A、B,使用下面方式得到32bit的数C、D。哪一种可以使用C、D得到A、B的值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=BD. C=(int32)(A+B),D=(int32)(A+2*B)E.C=(int32)(A*B),D=(int32)(A/B)12. 如果一个二叉树的前序遍
4、历结果是abcdefg,下面哪一个是可能的中序遍历结果?ABCEA. abcdefgB. gfedcbaC. bcdefgaD. bceadfgE.bcdaefg13. T(n)=1(n=1),T(n)=25+T(n/5)+n2,T(n)复杂度是多少?BA. O(nlogn)B. O(n2logn)C. O(n2)D. O(n3)E.O(n3logn)14. 两个线程运行在双核机器上,每个线程主程序如下,线程1:x=1;r1=y;线程2:y=1;r2=x。x和y是两个全局变量,初始为0。以下哪一个是r1和r2的可能值?ABCA. r1=1,r2=1B. r1=1,r2=0C. r1=0,r2=
5、1D. r1=0,r2=015. 有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)16. 1,2,3,999,1000?A. 189B. 191C. 193D. 19517. 2月28日出生和2月29日出生的人的比例是多少?2012年2月28日和2012年2月29日出生的人的比例是多少?BA. 1:1和1:1B. 4:1和1:1C. 1:1和4:1D. 4:1和4:118. 下面哪些使用的是贪心算法A. 单源最短路径中的Dijkstra算法B. 最小生成树的Prim算法C.
6、最小生成树的Kruskal算法D. 计算每对顶点最短路径的Floyd-Warshall算法E.字符串匹配中的KMP算法19. Class APublic:Intk1;int k2;一个数组A a5=3,4,6,5,2,7,3,1,1,2下面哪一个是函数调用之后的结果1,2,2,7,3,1,3,4,6,5A. f1(a,5,cmp)B. f2(a,5,cmp)C. f3(a,5,cmp)D. f4(a,5,cmp)E.以上都不对20. : |: |:|:a|b|c|y|z:0|1|2|9下面哪一个词可以从的规则中产生?Iabcd II bcdef III d22A. 都不是B. 只有I和IIC.
7、 只有I和IIID. 只有II和IIIE.I和II和III都是答案与分析:2.下面哪一项不能用于Widows中进程间通信?A. 命名事件B. 命名管道C. 临界区D. 共享内存答案:CWiki的结果是,Windows中进程间通信方式有:File, 管道(Pipe),命名管道(named pipe),信号(Signal),消息队列(Message queue),共享内存(shared memory),内存映射(memory mapped file),信号量(semaphore),套接口(Socket)。不太确定命名事件(Named Event)这个对不对,查了一些资料,好像也没有提到的,但是有些
8、进程间通信代码会用到这个,有谁帮忙解释一下吗?而临界区事实上应该算是由信号量来保证的。3.下面哪一种操作不是stack的基本操作?A. 入栈B. 出栈C. 检查是否为空D. 排序栈中元素答案:D可以看一下stack的ADT结构,前三种都在基本操作函数中。4.下面哪一种属于“creational”的设计模式?A. FaadeB. SingletonC. BridgeD. CompositeE.上面都不是答案:BCreational包括下面几种:Singleton;Factory Method;Abstract Factory;Builder;Prototype5.当建立连接时,下面哪一个数据包发
9、送顺序是正确的TCP握手协议过程?A. SYN,SYN+ACK,SYN+ACKB. SYN+ACK,SYN+ACK,SYNC. SYN,SYN+ACK,RSTD. SYN,SYN,ACKE.以上都不是答案:E这是握手的三次协议的更为详细的内容:SYN, seqASYN, ACK=1,seqB, ack number=seqA+1ACK=1, ack number=seqB+1C中RST意思为:连接复位Resettinga connection。想重置连接时,会发送RST数据包。所以有人说,C应该也是可以的,因为可以在收到SYN+ACK后,设置发送RST,而且这种方式可以用在网络探测上,但是题目
10、中明确说了是在建立TCP链接的时候正确的三次握手协议,所以我认为答案应该是选择E。6.函数式编程的性质有?(TheCharacteristicsof functional programming are?)A. Avoidof changing state and mutable dataB. ReferentialtransparencyC. LambdacalculusD. ThreadsafeE.All of Above答案:E这个wiki了一下,也不太懂,貌似就是说functionalprogramming是种编程典范,它将电脑运算视为数学意义上的函数的计算。在wiki中,avoids
11、state and mutable data,Lambdacalculus,Referential transparency 都有,Threadsafe而是正确的。可以参考一下这个7.关于HTTP协议说明,哪些是正确的A. 在CS模式下,作为一种request-response协议B. 无状态,对每一个请求看成独立的C. WWW和Email使用的协议D. HTTP响应包括数字状态码,404经常代表“PageNot Found”E.以上都不是答案:A,B,DEmail使用的是STMP协议HTTP还有一个特性是“无连接”:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户
12、的应答后,即断开连接。采用这种方式可以节省传输时间。9.4个袋子,15个球,每个袋子至少放一个球,而且袋子中的球数量不能重复,有多少种方式?A. 4B. 5C. 6D. 7E.以上都没有答案:C可以这样数:1,2,3,91,2,4,81,2,5,71,3,4,71,3,5,62,3,4,611. 有两个32bit的数A、B,使用下面方式得到32bit的数C、D。哪一种可以使用C、D得到A、B的值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=BD. C=(int32)(A
13、+B),D=(int32)(A+2*B)E.C=(int32)(A*B),D=(int32)(A/B)答案:C注意考虑整数溢出问题,对于有符号数,A、C、D通过下面方式都可以恢复第一项:A=(C+D)/2,B=C-A第二项:D右移一位,不知道移出的是1还是0,不能恢复第三项:A=C-D,B=D第四项:B=D-C,A=C-B第五项:虽然可以C*D再开方,但是不能确定A和B的正负但是对于无符号数,A不行,这里简单起见,以3bit数为例。例如A=111,B=110。C=A+B=001(溢出),D=A-B=001,所以A不能正确恢复了。C仍然可以,A=C-D=001-110=111。D答案,同样因为溢
14、出不能恢复。 12. 如果一个二叉树的前序遍历结果是abcdefg,下面哪一个是可能的中序遍历结果?A. abcdefgB. gfedcbaC. bcdefgaD. bceadfgE.bcdaefg答案:A,B,C,EABCE13. T(n)=1(n0, 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)e0, F(n)=W(nlogba+e
15、),复杂度为T(n)=theta(f(n).例如T(n)=3T(n/4)+cn2,theta(n2)14. 两个线程运行在双核机器上,每个线程主程序如下,线程1:x=1;r1=y;线程2:y=1;r2=x。x和y是两个全局变量,初始为0。以下哪一个是r1和r2的可能值?A. r1=1,r2=1B. r1=1,r2=0C. r1=0,r2=1D. r1=0,r2=0答案:A,B,C考察临界区问题,没有设置临界区,所以可能:A: x=1 = y=1 = r1=y=1 = r2=x=1B: y=1 = r2=x=0 = x=1 = r1=y=1C: x=1 = r1=y=0 = y=1 =r2=x=
16、115. 有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. 189B. 191C. 193D. 195这道题没有答案,正确应该是192,一种数的方法是:1-100有:9+2=11,101-200有:9+9+2=20,之后201-300,901-1000模式相同,但1000多1,所以公有11+20*9+1=192。也可以按照1个零有哪些,2个零
17、有哪些,3个零有哪些这样数,总之有一个比较规律的数的方法,保证没有遗漏就可以了。17. 2月28日出生和2月29日出生的人的比例是多少?2012年2月28日和2012年2月29日出生的人的比例是多少?A. 1:1和1:1B. 4:1和1:1C. 1:1和4:1D. 4:1和4:1答案:B4:1(四年一次闰年)1:1(如果闰年,则那年28日和29日出生概率相同,与在其他日期出生概率没有差别)18. 下面哪些使用的是贪心算法A. 单源最短路径中的Dijkstra算法B. 最小生成树的Prim算法C. 最小生成树的Kruskal算法D. 计算每对顶点最短路径的Floyd-Warshall算法E.字符
18、串匹配中的KMP算法答案:A,B,C贪心:Dijkstra,Prim,Kruskal (算法导论中已明确说明)。Kruskal:初始化每个顶点为只有一个根几点的树,将边的权值按从小到大排序,选择权值最小的边(u,v),如果u和v不在一颗树中,则将u和v所在两棵树合并,边(u,v)加入到集合中,直到所有的边都找完。Prim:从任意顶点出发,维护一个树A,每一步,选择最小的边连接G(V,A),将结点V加入到树A中,直到所有的顶点都找完。动态规划:Floyd-Warshall,KMP19. Class APublic:Intk1;int k2;一个数组A a5=3,4,6,5,2,7,3,1,1,2
19、下面哪一个是函数调用之后的结果1,2,2,7,3,1,3,4,6,5A. f1(a,5,cmp)B. f2(a,5,cmp)C. f3(a,5,cmp)D. f4(a,5,cmp)E.以上都不对答案:A,D这道题出的很有意思,乍一看,题干这么大,可能会被唬住,其实冷静下来看一下,很简单,就是一个排序的稳定性非稳定性的分析。所谓稳定性,即:保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同,如果排序的结点仅仅是一个数,则稳定性意义不大,但是如果有多个键值,就需要考虑稳定性的分析。例如,对于本题,如果排序算法是稳定的,那么因为原数组3,4排在3,1前,根据稳定性的定义,
20、排序的结果就一定不会出现3,1排在3,4前的情况。而如果算法是不稳定的,那么只能说,3,1有排在3,4前面的可能,需要根据具体的排序过程判断是否相等的值会变换位置。关于八种算法稳定性的分析,可以查看所以,首先明确四个函数都采用了什么样的排序算法:f1:选择排序;f2:直接插入排序;f3:冒泡,f4:快排f2和f3是稳定的,直接pass掉。然后非稳定的再看是否变换了位置。A和D如果走一遍程序的话,会发现3,4和3,1这两个元素是变了顺序的。对于A答案,a5=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第
21、三遍排序:1,2,2,7,3,1,6,5,3,4第四遍排序:1,2,2,7,3,1,3,4,6,5所以正确对于D答案,a5=3,4,6,5,2,7,3,1,1,2第一遍排序的运行过程是这样的。初始:low=0,high=4,i=0,t=3,4For循环:J=1, c(6,5,t)0,i=0,没有交换(ai,aj),3,4,6,5,2,7,3,1,1,2J=2,c(2,7,t)0,i=1,交换(6,5,2,7),3,4,2,7,6,5,3,1,1,2J=3, c(3,1,t)=0,i=2,交换(6,5,3,1),3,4,2,7,3,1,6,5,1,2J=4, c(1,2,t)0,i=3,交换(6
22、,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(aj,t)=0),如果写成c(aj,t)0的话,则该答案也不会选择。所以最终的答案是A和D20. : |: |:|:a|b|c|y|z:0|1|2|9下面哪一个词可以从的规则中产生?Iabcd II bcdef III d22A. 都不是B. 只有I和IIC. 只有I和IIID. 只有II和IIIE.I和II和III都是答案:D算是一道考察形式自动机的题。关键是分析清楚每种模式本质上代表什么。表示单个字母;表示单个数字;是两个,或者递归和两个,其实表示的是偶数个,即偶数个数字;同理,是偶数个字母。所以的可能是:1个字母,奇数个字母,或者一个字母和偶数个数字。所以第二个和第三个是正确的。