2012 Microsoft Intern Hiring Written Test

1、Suppose that a selection sort of 80 items has completed 32 iterations of the main loop. How many items are now guaranteed to be in their final spot (never to be moved again)?
A、16    B、31   C、32     D、39   E、40
2、Which synchronization mechanism(s) is/are used to avoid race conditions among processes/threads in operating system?
A、Mutex     B、Mailbox     C、Semaphore      D、Local procedure call
3、There is a sequence of n numbers 1,2,3,...,n and a stack which can keep m numbers at most. Push the n numbers into the stack following the sequence and pop out randomly . Suppose n is 2 and m is 3,the output sequence may be 1,2 or 2,1,so we get 2 different sequences . Suppose n is 7,and m is 5,please choose the output sequence of the stack.
A、1,2,3,4,5,6,7
B、7,6,5,4,3,2,1
C、5,6,4,3,7,2,1
D、1,7,6,5,4,3,2
E、3,2,1,7,5,6,4
4、Which is the result of binary number 01011001 after multiplying by 0111001 and adding 1101110?
A、0001010000111111
B、0101011101110011

C、0011010000110101

转化为10进制操作以后,再转化为二进制就可以了。

5、What is output if you compile and execute the following c code?

 

[cpp]  view plain copy
  1. void main()  
  2. {  
  3.     int i = 11;  
  4.     int const *p = &i;  
  5.     p++;  
  6.     printf("%d",*p);  
  7. }  

A、11
B、12
C、Garbage value
D、Compile error
E、None of above

6、Which of following C++ code is correct ?  C

A、

[cpp]  view plain copy
  1. int f()  
  2. {  
  3.     int *a = new int(3);  
  4.     return *a;  
  5. }  

B、

[cpp]  view plain copy
  1. int *f()  
  2. {  
  3.     int a[3] = {1,2,3};  
  4.     return a;  
  5. }  

C、

[cpp]  view plain copy
  1. vector<int> f()  
  2. {  
  3.     vector<int> v(3);  
  4.     return v;  
  5. }  

D、

[cpp]  view plain copy
  1. void f(int *ret)  
  2. {  
  3.     int a[3] = {1,2,3};  
  4.     ret = a;  
  5.     return ;  
  6. }  

E、None of above

7、Given that the 180-degree rotated image of a 5-digit number is another 5-digit number and the difference between the numbers is 78633, what is the original 5-digit number?
A、60918   B、91086    C、18609    D、10968    E、86901

8、Which of the following statements are true
A、We can create a binary tree from given inorder and preorder traversal sequences.
B、We can create a binary tree from given preorder and postorder traversal sequences.
C、For an almost sorted array,Insertion sort can be more effective than Quciksort.
D、Suppose T(n) is the runtime of resolving a problem with n elements, T(n)=O(1) if n=1;
T(n)=2*T(n/2)+O(n) if n>1; so T(n) is O(nlgn)

E、None of above

9、Which of the following statements are true?
A、Insertion sort and bubble sort are not efficient for large data sets.
B、Qucik sort makes O(n^2) comparisons in the worst case.
C、There is an array :7,6,5,4,3,2,1. If using selection sort (ascending),the number of swap operations is 6
D、Heap sort uses two heap operations:insertion and root deletion (插入、堆调整)
E、None of above

10、Assume both x and y are integers,which one of the followings returns the minimum of the two integers?
A、y^((x^y) & -(x<y))
B、y^(x^y)
C、x^(x^y)
D、(x^y)^(y^x)

E、None of above

x<y的时候,-(x<y)即-1的补码形式就是全1(111111),(x^y)&-(x<y)== x^y。x>y的时候,-(x<y)即0的补码形式就是全0(000000),(x^y)&-(x<y)== 0

11、The Orchid Pavilion(兰亭集序) is well known as the top of “行书”in history of Chinese literature. The most fascinating sentence is "Well I know it is a lie to say that life and death is the same thing, and that longevity and early death make no difference Alas!"(固知一死生为虚诞,齐彭殇为妄作).By counting the characters of the whole content (in Chinese version),the result should be 391(including punctuation). For these characters written to a text file,please select the possible file size without any data corrupt.
A、782 bytes in UTF-16 encoding
B、784 bytes in UTF-16 encoding
C、1173 bytes in UTF-8 encoding

D、1176 bytes in UTF-8 encoding

E、None of above

12、Fill the blanks inside class definition

 

[cpp]  view plain copy
  1. class Test  
  2. {  
  3. public:  
  4.     ____  int a;  
  5.     ____  int b;  
  6. public:  
  7.     Test::Test(int _a , int _b) : a( _a )  
  8.     {  
  9.         b = _b;  
  10.     }  
  11. };  
  12. int Test::b;  
  13.   
  14. int main(void)  
  15. {  
  16.     Test t1(0 , 0) , t2(1 , 1);  
  17.     t1.b = 10;  
  18.     t2.b = 20;  
  19.     printf("%u %u %u %u",t1.a , t1.b , t2.a , t2.b);  
  20.     return 0;  
  21. }   

Running result : 0   20   1   20

 

A、static/const

B、const/static

C、--/static

D、conststatic/static

E、None of above

13、A 3-order B-tree has 2047 key words,what is the maximum height of the tree?
A、11     B、12     C、13    D、14
解析:m阶B-树的根节点至少有两棵子树,其他除根之外的所有非终端节点至少含有m/2(向上取整)棵子树,即至少含有m/2-1个关键字。根据题意,3阶的B-树若想要达到最大的高度,那么每个节点含有一个关键字,即每个节点含有2棵子树,也就是所谓的完全二叉树了,这样达到的高度是最大的。即含有2047个关键字的完全二叉树的高度是多少,这也是为什么这种题只出3阶的原因吧,就是为了转化成求完全二叉树的深度。很明显求得高度是11,但是由于B-树还有一层所谓的叶子节点,可以看作是外部结点或查找失败的结点,实际上这些结点不存在的,指向这些结点的指针为空。所以不考虑叶子节点信息的时候,最大高度是11,考虑叶子节点信息的时候,最大高度就是12了。
14、In C++,which of the following keyword(s)can be used on both a variable and a function?
A、static   B、virtual   C、extern    D、inline   E、const
15、What is the result of the following program?

[cpp]  view plain copy
  1. char *f(char *str , char ch)  
  2. {  
  3.     char *it1 = str;  
  4.     char *it2 = str;  
  5.     while(*it2 != '\0')  
  6.     {  
  7.         while(*it2 == ch)  
  8.         {  
  9.             it2++;  
  10.         }  
  11.         *it1++ = *it2++;  
  12.     }  
  13.     return str;  
  14. }  
  15.   
  16. int main(void)  
  17. {  
  18.     char *a = new char[10];  
  19.     strcpy(a , "abcdcccd");  
  20.     cout<<f(a,'c');  
  21.     return 0;  
  22. }  

A、abdcccd
B、abdd
C、abcc
D、abddcccd
E、Access violation

16、Consider the following definition of a recursive function,power,that will perform exponentiation.

 

[cpp]  view plain copy
  1. int power(int b , int e)  
  2. {  
  3.     if(e == 0)  
  4.         return 1;  
  5.     if(e % 2 == 0)  
  6.         return power(b*b , e/2);  
  7.     else  
  8.         return b * power(b*b , e/2);  
  9. }  

Asymptotically(渐进地) in terms of the exponent e,the number of calls to power that occur as a result of the call power(b,e) is
A、logarithmic
B、linear
C、quadratic
D、exponential
17、Assume a full deck of cards has 52 cards,2 blacks suits (spade and club) and 2 red suits(diamond and heart). If you are given a full deck,and a half deck(with 1 red suit and 1 black suit),what is the possibility for each one getting 2 red cards if taking 2 cards?
A、1/2      1/2
B、25/102  12/50
C、50/51   24/25
D、25/51   12/25
E、25/51    1/2
18、There is a stack and a sequence of n numbers(i.e. 1,2,3,...,n), Push the n numbers into the stack following the sequence and pop out randomly . How many different sequences of the n numbers we may get? Suppose n is 2 , the output sequence may 1,2 or 2,1, so wo get 2 different sequences .
A、C_2n^n
B、C_2n^n - C_2n^(n+1)
C、((2n)!)/(n+1)n!n!
D、n!
E、None of above
19、Longest Increasing Subsequence(LIS) means a sequence containing some elements in another sequence by the same order, and the values of elements keeps increasing.
For example, LIS of {2,1,4,2,3,7,4,6} is {1,2,3,4,6}, and its LIS length is 5.
Considering an array with N elements , what is the lowest time and space complexity to get the length of LIS?
A、Time : N^2 , Space : N^2
B、Time : N^2 , Space : N
C、Time : NlogN , Space : N
D、Time : N , Space : N
E、Time : N , Space : C

20、What is the output of the following piece of C++ code ?

 

[cpp]  view plain copy
  1. #include<iostream>  
  2. using namespace std;  
  3.   
  4. struct Item  
  5. {  
  6.     char c;  
  7.     Item *next;  
  8. };  
  9.   
  10. Item *Routine1(Item *x)  
  11. {  
  12.     Item *prev = NULL,  
  13.         *curr = x;  
  14.     while(curr)  
  15.     {  
  16.         Item *next = curr->next;  
  17.         curr->next = prev;  
  18.         prev = curr;  
  19.         curr = next;  
  20.     }  
  21.     return prev;  
  22. }  
  23.   
  24. void Routine2(Item *x)  
  25. {  
  26.     Item *curr = x;  
  27.     while(curr)  
  28.     {  
  29.         cout<<curr->c<<" ";  
  30.         curr = curr->next;  
  31.     }  
  32. }  
  33.   
  34.   
  35. int main(void)  
  36. {  
  37.     Item *x,  
  38.         d = {'d' , NULL},  
  39.         c = {'c' , &d},  
  40.         b = {'b' , &c},  
  41.         a = {'a' , &b};  
  42.     x = Routine1( &a );  
  43.     Routine2( x );  
  44.     return 0;  
  45. }  

 

A、 c b a d
B、 b a d c 
C、 d b c a 
D、 a b c d
E、 d c b a



微软2012年9月22日校园招聘笔试题

1、数据库
基于某个条件选出一个订单列表,考的是最基本的数据库语言select * from * where *
2、不能用于进程间通信的是
A、Named event
B、Named pipe
C、Critical section
D、Shared memory
3、shallow copying (浅拷贝)的特征
英文太烂不知道shallow copying怎么翻译不敢选
4、 Functional programming(函数式编程)的特点
完全不了解functional programing 
考了”没有副作用”,“不修改状态”,“引用透明”引用透明的概念类似于可重入
5、以下算法用到贪婪算法的是
A、Dijkstra
B、Prim
C、Kruskal

D、Floyd- Warshall
E、KMP string match
6、1,2,3,…1000 一共出现了多少个0
A、189
B、191
C、193
D、195
算出来是192个可是没有这个答案估计题目出错了。 
7、T(x)=1 (x<=1), T(n)=25*T(n/5)+n^2 求T(n)的时间复杂度
A、O(n*log(n))
B、O(log(n))
C、O(n^2*log(n))
D、O(n^3*log(n))
T(n)=25*(25*T(n/25)+(n/5)^2)+n^2=25^2*T(n/(5^2))+2*n^2=25^(log(n)/log5)+(log(n)/log5)*n^2=n^2+n^2*log(n) =O(n^2*log(n))

8、下列属于设计模式中 ”creational pattern” (创建型)的是?
A、Facade
B、Singleton
C、Bridge
D、Composite
Facade composite bridge 都属于Structural(结构型)
9、建立一个TCP连接的过程?
三次握手http://baike.baidu.com/view/1003841.htm
答案中好像没有SYN,SYN+ACK,ACK,于是我就选了 E、None of above


10、二叉树的pre-order traversal为abcdefg,则它的in-order traversal可能是?
A、abcdefg
B、gfedcba
C、efgdcba

D、bceadfg
E、bcdaefg

以前序遍历abc为例,只有三个节点,中序遍历可能是cba, bca, bac, abc, acb
11、15个球放在4个袋子中,每个袋子至少有一个球且每个袋子中球的数目不同,总共有多少种放法?
A、4
B、5
C、6
D、7
E、None of above 
不知道除了枚举有没有别的更好的办法
12、给了4个函数,可以看出其中第一个为选择排序,第二个为冒泡排序第三个感觉代码本身就有些问题第四个为快速排序。问哪一个排序能将数组a={(3,4),(6,5),(2,7),(3,1),(1,2) }变为{(1,2), ,(2,7), (3,1),( 3,4),(6,5)}
只比较第一个元素。
Stuct A{
Int key1;
Int key2;
};
比较函数为 int cmp(A x, A y) {return x.key1-y.key1;)
选择排序, 此题代码是选择的最小出列。选出最小的与前面的交换,其条件是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,结果是与题目相符。
13、继承、虚函数
下面程序输出结果

[cpp]  view plain copy
  1. #include<iostream>  
  2. using namespace std;  
  3.   
  4. class Base  
  5. {  
  6. public:  
  7.     char Value() { return 'A';}  
  8.     virtual char VirtualValue() { return 'X';}  
  9. };  
  10.   
  11. class Derived:public Base  
  12. {  
  13. public:  
  14.     char Value(){return'U';}  
  15. };  
  16.   
  17. class VirtualDerived:virtualpublic Base  
  18. {  
  19. public:  
  20.     char Value() { return 'Z';}  
  21.     char VirtualValue() { return 'V';}  
  22. };  
  23.   
  24. void main()  
  25. {  
  26.     Base *p1=new Derived();  
  27.     Base *p2=new VirtualDerived();  
  28.     cout<<p1->Value()<<" "<<  
  29.         p1->VirtualValue()<<" "<<  
  30.         p2->Value()<<" "<<  
  31.         p2->VirtualValue()<<endl;  
  32. }  

输出:AXAV
14、两个线程thread1: x=1;r1=y; thread2: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
15、A,B,C,D都为32位整型,基于以下给定的C,D能否得出A,B
A、C=A+B,D=A-B
B、C=A+2*B,D=A+B
C、C=A+B,D=B

D、C=A-B,D=(A+B)>>1
E、C=A*B,D=A/B 
该题主要是考虑越界问题
对于A选项假设A>0,B>0;C可能越界使得C=A+B-2^32举个反例:A=B=2^31-1 C=-2,D=0;
A=B=-1,C=-2,D=0
对于C选项不管C是否越界总能得到A=C-D, B=D
对于B选项我们可以考虑Q=A+B, C=Q+B ,D=Q跟C的那个一样,就能求出Q与B Q=A+B,B又已知A可求
D选项:A=B=-1 A=B=2^31-1
E选项:A=B=2^15, A=B=2^31
16、BNF
很简单的一个题目
17、http协议
18、不属于栈的基本操作
A、pop
B、push
C、if empty
D、sort
19.一颗完全二叉树有n个节点,求深度
A、lg(n)/lg2
B、1+lg(n)/lg2 
题目没记全 忘补充。另答案都是自己做的,应该有很多做错的或者方法不好可以优化的 忘留言指点





2012 Microsoft Intern Hiring Written Test
2012 Microsoft Intern Hiring Written Test
2012 Microsoft Intern Hiring Written Test
2012 Microsoft Intern Hiring Written Test
2012 Microsoft Intern Hiring Written Test
2012 Microsoft Intern Hiring Written Test

你可能感兴趣的:(Microsoft)