微软校招试题

把微软的这个笔试题贴出来,纯粹是为了方便大家学习交流,相信微软不会那么小气来追究我的责任吧。确实觉得微软出的这些题都不错,虽然只有20道选择,但是考察的面很全,数据结构,网络,算法,操作系统,概率等等

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

微软的这个笔试题贴出来,纯粹是为了方便大家学习交流,相信微软不会那么小气来追究我的责任吧。确实觉得微软出的这些题都不错,虽然只有20道选择,但是考察的面很全,数据结构,网络,算法,操作系统,概率等等都包括进去了。而且答错扣分,不答0分,答对一部分给一部分的分这种给分机制非常合理,避免了有人乱蒙,且对知识点的理解错误会有所惩罚。能够真正将一个人的计算机知识水平考察出来,所以值得好好研究这些笔试题目。不废话了,看题。答案及分析在后面,这些都是我通过查资料和自己的思考做的,本人水平有限,一定有所疏漏或错误,欢迎大家指正交流。

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

A.       命名事件

B.       命名管道

C.       临界区

D.       共享内存

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

A.       入栈

B.       出栈

C.       检查是否为空

D.       排序栈中元素

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

A.       Façade

B.       Singleton

C.       Bridge

D.       Composite

E.       上面都不是

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

A.       SYN,SYN+ACK,SYN+ACK

B.       SYN+ACK,SYN+ACK,SYN

C.       SYN,SYN+ACK,RST

D.       SYN,SYN,ACK

E.       以上都不是

6.        函数式编程的性质有?(TheCharacteristicsof functional programming are?)

A.       Avoidof changing state and mutable data

B.       Referentialtransparency

C.       Lambdacalculus

D.       Threadsafe

E.       All of Above

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

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

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

C.       WWW和Email使用的协议

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

E.       以上都不是

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

A.       4

B.       5

C.       6

D.       7

11.     有两个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=B

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

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

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

A.       abcdefg

B.       gfedcba

C.       bcdefga

D.       bceadfg

E.       bcdaefg

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

A.       O(nlogn)

B.       O(n^2logn)

C.       O(n^2)

D.       O(n^3)

E.       O(n^3logn)

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

A.       r1=1,r2=1

B.       r1=1,r2=0

C.       r1=0,r2=1

D.       r1=0,r2=0

15.     有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.       189

B.       191

C.       193

D.       195

17.     2月28日出生和2月29日出生的人的比例是多少?2012年2月28日和2012年2月29日出生的人的比例是多少?B

A.       1:1和1:1

B.       4:1和1:1

C.       1:1和4:1

D.       4:1和4:1

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

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

B.       最小生成树的Prim算法

C.       最小生成树的Kruskal算法

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

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

19.      

Class A{

Public:

Intk1;int k2;

};

一个数组A a[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.       以上都不对

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 II bcdef III d22

A.       都不是

B.       只有I和II

C.       只有I和III

D.       只有II和III

E.       I和II和III都是

答案与分析:

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

A.       命名事件

B.       命名管道

C.       临界区

D.       共享内存

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

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

A.       入栈

B.       出栈

C.       检查是否为空

D.       排序栈中元素

答案:D

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

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

A.       Façade

B.       Singleton

C.       Bridge

D.       Composite

E.       上面都不是

答案:B

Creational包括下面几种:   Singleton ;Factory Method ;Abstract Factory;Builder ;Prototype

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

A.       SYN,SYN+ACK,SYN+ACK

B.       SYN+ACK,SYN+ACK,SYN

C.       SYN,SYN+ACK,RST

D.       SYN,SYN,ACK

E.       以上都不是

答案:E

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

SYN, seqA

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

ACK=1, ack number=seqB+1

C中RST意思为:连接复位Resettinga connection。想重置连接时,会发送RST数据包。

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

6.        函数式编程的性质有?(TheCharacteristicsof functional programming are?)

A.       Avoidof changing state and mutable data

B.       Referentialtransparency

C.       Lambdacalculus

D.       Threadsafe

E.       All of Above

答案:E

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

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

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

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

C.       WWW和Email使用的协议

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

E.       以上都不是

答案:A,B,D

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的数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=B

D.       C=(int32)(A+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答案,同样因为溢出不能恢复。

 

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

A.       abcdefg

B.       gfedcba

C.       bcdefga

D.       bceadfg

E.       bcdaefg

答案:A,B,C,E

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

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

主定理:

主要记住nlogba和f(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.     两个线程运行在双核机器上,每个线程主程序如下,线程1:x=1;r1=y;线程2:y=1;r2=x。x和y是两个全局变量,初始为0。以下哪一个是r1和r2的可能值?

A.       r1=1,r2=1

B.       r1=1,r2=0

C.       r1=0,r2=1

D.       r1=0,r2=0

答案:A,B,C

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

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模式相同,但1000多1,所以公有11+20*9+1=192。也可以按照1个零有哪些,2个零有哪些,3个零有哪些这样数,总之有一个比较规律的数的方法,保证没有遗漏就可以了。

17.     2月28日出生和2月29日出生的人的比例是多少?2012年2月28日和2012年2月29日出生的人的比例是多少?

A.       1:1和1:1

B.       4:1和1:1

C.       1:1和4:1

D.       4:1和4:1

答案:B

4:1(四年一次闰年)

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

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

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

B.       最小生成树的Prim算法

C.       最小生成树的Kruskal算法

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

E.       字符串匹配中的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,KMP

19.      

Class A{

Public:

Intk1;int k2;

};

一个数组A a[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.       以上都不对

答案:A,D

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

 

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

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

f2和f3是稳定的,直接pass掉。然后非稳定的再看是否变换了位置。A和D如果走一遍程序的话,会发现{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的话,则该答案也不会选择。所以最终的答案是A和D

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 II bcdef III d22

A.       都不是

B.       只有I和II

C.       只有I和III

D.       只有II和III

E.       I和II和III都是

答案:D

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

推荐:http://www.cnblogs.com/roucheng/p/suanfa3.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120429.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • [知识图谱实战篇] 四.HTML+D3+CSS绘制关系图谱「建议收藏」

    [知识图谱实战篇] 四.HTML+D3+CSS绘制关系图谱「建议收藏」前面作者讲解了很多知识图谱原理知识,包括知识图谱相关技术、Neo4j绘制关系图谱等,但仍缺少一个系统全面的实例。为了加深自己对知识图谱构建的认识,为后续创建贵州旅游知识图谱打下基础,作者深入学习了张宏伦老师的网易云课程,并结合自己的理解和技术分享了该系列专栏。前文介绍了Python3抓取电影实体知识,Seaborn可视化展示电影信息,D3可视化布局。本文着重构建知识图谱,通过D3显示已获取的节点和关系图谱。

    2022年6月26日
    59
  • 约瑟夫环问题详解

    约瑟夫环问题详解在牛客网上做到一道题,是约瑟夫环的变型,所以借此学习一下新知识,并且巩固一下对题目意思的理解,这一篇仅作约瑟夫环问题的解释,下一篇再写题目:1.首先,我们先来了解一下什么是约瑟夫环问题:讲一个比较有意思的故事:约瑟夫是犹太军队的一个将军,在反抗罗马的起义中,他所率领的军队被击溃,只剩下残余的部队40余人,他们都是宁死不屈的人,所以不愿投降做叛徒。一群人表决说要死,所以用一种策略来先后杀…

    2022年6月4日
    31
  • 架构之业务架构[通俗易懂]

    架构之业务架构[通俗易懂]业务架构之产品经理的职责产品经理的职责用户的原始需求往往是零散和碎片化的,产品经理的职责就是:告诉用户,系统长什么样子;告诉开发,他要实现什么功能。产品经理定义了系统的外表。产品经理的职责:1、收集用户的原始需求,2、梳理成一个个业务流程,每个业务流程由多个业务步骤组成。一个业务步骤包含三部分的内容:输入、输出和业务功能。3、需求梳理好后,产品经理会把每个步骤具体化为页面原型。在原型中,会以直观的方式给出各个步骤的输入或输出,以及用户的操作过程,最后再把这些页面串起来,形成一个业

    2022年10月12日
    4
  • Latex中希腊字母如何加粗和斜体

    Latex中希腊字母如何加粗和斜体Latex中希腊字母如何加粗和斜体原创不易,路过的各位大佬请点个赞一、希腊字母加粗注意:\mathbf不起作用方案一、用\usepackage{amsmath}\boldsymbol{\sigma}\mathbf只对公式中的普通字母ABC…abcdef等起作用。方案二、更好的方法是使用\usepackage{bm}\bm{}来加粗。二、希腊字母斜体注意:\textit不起作用\mit+\希腊字母如:\mit\Omega原创不易,路过的各位大佬请点个赞…

    2022年10月13日
    3
  • Java笔记二十四——Spring开发

    Java笔记二十四——Spring开发Spring是一个支持快速开发JavaEE应用程序的框架。它提供了一系列底层容器和基础设施,并可以和大量常用的开源框架无缝集成,可以说是开发JavaEE应用程序的必备。在SpringFramework(最核心的Spring框架)基础上,又诞生了SpringBoot、SpringCloud、SpringData、SpringSecurity等一系列基于SpringFramework的项目。SpringFrameworkIoC容器容器是一种为某种特定组件的运行提供必要支持的一个软件环

    2022年5月16日
    37
  • 程序发生崩溃dump文件_failed to create dump file

    程序发生崩溃dump文件_failed to create dump file之前在winxp和win7没有问题,用了win10就出问题了.解决办法:VirtualProtect函数使用VirtualProtectEx代替即可!所有代码如下:#ifndef__DUMP_H__#define__DUMP_H__#include&lt;stdlib.h&gt;#include&lt;stdio.h&gt;#include&lt;ostream&gt;#if…

    2022年9月12日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号