您的位置:首页 > 其它

微软2013校园招聘笔试题

2013-09-27 17:11 337 查看
1. 数据库

基于某个条件选出一个订单列表,考的是最基本的数据库语言select * from * where *

解: 详见/article/9711830.html

2. 不能用于进程间通信的是

A. Named event(命名事件)

B. Named pipe(命名管道)

C. Critical section( 临界区)

D. Shared memory(共享内存)

解: C。详见/article/9711804.html

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

A. 入栈

B. 出栈

C. 检查是否为空

D. 排序栈中元素

解: D

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

A. Façade

B. Singleton

C. Bridge

D. Composite

E. 上面都不是

解: B。详见/article/9711831.html

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

A. SYN,SYN+ACK,SYN+ACK

B. SYN+ACK,SYN+ACK,SYN

C. SYN,SYN+ACK,RST

D. SYN,SYN,ACK

E. 以上都不是

解: 应该是 SYN,ACK+SYN,ACK。详见/article/9711811.html

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

A. Avoid of changing state and mutable data

B. Referential transparency

C. Lambda calculus

D. Thread-safe

E. All of Above

解: E。wiki上说,函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念。在wiki中,avoids
state and mutable data,Lambda calculus,Referential transparency ,Threadsafe都有。

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

解: C.

转化为问题 x1 + x2 + x3 + x4 = 15, x1, x2, x3, x4
>= 1,x4> x3 > x2 > x1。(x1, x2, x3, x4)
一共有多少解。

设x2 = x1 + y1,x3 = x1 + y2,x4 = x1 + y3 => x1
+ x2 + x3 + x4 = 15 ,即有

4 * x1 =
15 - (y1 + y2 + y3) (1)

y1, y2,
y3 >= 1, (2)

y3 > y2
> y1. (3)

=> x1可以取值:x1 = 1, x1 = 2, 此时

1) x1 = 1时,

y1 + y2 + y3 = 11

y1, y2, y3 >= 1,

y3 > y2 > y1.

2) x1 = 2时

y1 + y2 + y3 = 7

y1, y2, y3 >= 1,

y3 > y2 > y1.

此时把一个问题分解为两个递归的子问题了。

如果记f(len, sum) 表示x[0] , x[1], ..., x[len - 1] 的和为sum且满足x[i] >= 1, x[i+ 1] > x[i]的解的个数

则f(len, sum) = f(len - 1, sum - len) + f(len -1, sum - 2*len) + ...+f(len - k, sum - k * len), sum - k * len >= (1 +2 + 3 +...+(len-2)+ len - 1)
程序如下:
int foo(int len,int sum)
{
if(len == 1) return 1;
int remain = len*(len-1)/2;
int ret = 0;

while((sum -= len) >= remain)
ret += foo(len-1,sum);
return ret;
}


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)

解:举例子用排除法就可以了,32bit和3bit一样道理。设A = 011(3),B = 010(2)。则

A. C = A+B = 011 + 010 = 101 ; D = A - B = 001;通过 A = (C+D)/2 = (101+001)/2 = 110/2 = -1,不能正确恢复

B. C = 101 ;D = 000;由于移出的最右一位不知道0还是1,不能正确恢复

C.C = 101,D = 010; A = 101 - 010 = 101 +(-2)补 = 101 + 110 = 011,正确

D. C = 101; D = 011 + 100 = 111 ;通过B = D - C = 111 - 101 = 111 + 011 = 010; A = C - B = 111 - 010 = 111+110 = 011,为何不正确 ?????

E. 无法确定符号

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

A. abcdefg

B. gfedcba

C. bcdefga

D. bceadfg

E. bcdaefg

解:画一画就出来了ABCE

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)

解:主定理,查一下再做!!!!!!!!!!!!

主要记住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)

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

解: ABC,详见http://blog.csdn.net/zephyr_be_brave/article/details/9132497

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)

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

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

A. 189

B. 191

C. 193

D. 195

解:1~9,0个0;10~99,9个0,1000有3个0。求一下100~999有多少个0即可。

100~999中有两个0的数字有9个;有1个0的数字有:9*9*2。所以共有81*2 + 3 + 9*2 +9= 192个.

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

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

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

B. 最小生成树的Prim算法

C. 最小生成树的Kruskal算法

D. 计算每对顶点最短路径的Floyd-Warshall算法 //动态规划

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

解: ABC

19. 给了4个函数,可以看出其中第一个为选择排序,第二个为冒泡排序第三个感觉代码本身就有些问题第四个为快速排序

问哪一个排序能将数组a[5]={{3,4},{6,5},{2,7},{3,1},{1,2}}变为{{1,2},{2,7},{3,1},{3,4},{6,5}}

只比较第一个元素。

比较函数为
int cmp(A x, A y) {return x.key1-y.key1;)


class A{
public:
int k1;
int k2;
};


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://hi.baidu.com/shismbwb/item/404c94898cfd2855850fab24。选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。

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

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

选择排序, 此题代码是选择的最小出列。选出最小的与前面的交换,其条件是cmp<0, 显然第一趟(3,4)与(1,2)交换后到了(3,1)的后面然后是(6,5)与(2,7)交换,其条件是cmp<0,所以(6,5)与(3,1
)交换,最后的输出结果满足题目要求

冒泡排序 其条件是cmp<0,显然(3,4)不可能会与(3,1)交换,因此不符合题目要求

快速排序时不稳定排序,不能保证谁在谁前面,快排的条件是cmp<=0且其哨兵都是选择序列中的第一个作为哨兵,结合本题所给的数组a,结果是与题目相符

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>的规则中产生?

I. abcd 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个字母,奇数个字母,或者一个字母和偶数个数字。所以第二个和第三个是正确的。

21.下面程序的输出结果

#include <iostream>
using namespace std;

class Base
{
public:
char Value() { return 'A';}
virtual char VirtualValue() { return 'X';}
};

class Derived:public Base
{
public:
char Value(){return'U';}
};

class VirtualDerived:virtual public Base
{
public:
char Value() { return 'Z';}
char VirtualValue() { return 'V';}
};

void main()
{
Base *p1=new Derived();
Base *p2=new VirtualDerived();
cout<<p1->Value()<<" "<<
p1->VirtualValue()<<" "<<
p2->Value()<<" "<<
p2->VirtualValue()<<endl;
}

解:AXAV。用Base的指针调用,所以只有虚函数会调用子类本身的。

22.shallow copying (浅拷贝)的特征

解:详见
http://blog.csdn.net/zephyr_be_brave/article/details/9149129
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: