星期六, 十月 21, 2006

微软笔试题

一.最基本题型(说明:此类题型比较简单)

1. 1到100有多少个9

2. 连续整数之和为1000的共有几组

3. U2合唱团在17分钟内得赶到演唱会场,途中必需跨过一座桥,四个人从桥的
同一端出发,你得帮助他们到达另一端,天色很暗,而他们只有一只手电筒。
一次同时最多可以有两人一起过桥,而过桥的时候必须持有手电筒,所以就
得有人把手电筒带来带去,来回桥两端。手电筒是不能用丢的方式来传递的。
四个人的步行速度各不同,若两人同行则以较慢者的速度为准。 Bono需花1
分钟过桥 Edge需花2分钟过桥 Adam需花5分钟过桥 Larry需花10分钟过桥
他们要如何在17分钟内过桥呢?(这是Micrsoft征聘人员时问的问题,你必须
在五分钟内答出来才可能获得聘用)。

4. 说有一份遗产3500元一个女人的老公留下来的,如果这个女人生的是儿子那么
她将分到她儿子的一半,如果是女儿,他将分得她女儿的2倍,如果这个女人生
了一对,一男一女,问各得多少遗产?

5. 老师d的物理测验答案在教室里丢失了,今天那个教室上了5堂课,老师d上了3
堂,有可能是a、b、c三个同学盗窃
已知: 1、a上了两堂课
2、b上了三堂课
3、c上了四堂课
4、a、b、c每个人都上了老师d的两堂课
5、五堂课中,三个人到堂的组合各不相同
6、老师d的课中有一堂,三个人中到了两个,事后证明不是那两个人偷得
问?是谁偷得

6. a b c d e
* f
__________________
=g g g g g g
问,a b c d e f g各是什么数字(不重复)

7. a进行一次C和D之间往返旅行,希望在整个旅行中能够达到60km/h的平均速度,
但是当他从C到达D的时候发现平均速度只有30km/h,问a应当怎么做才能够使
这次往返旅行的平局速度到达60km/h

8. 烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的
绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?

9. 你有一桶果冻,其中有黄色、绿色、红色三种,闭上眼睛抓取同种颜色的两个。
抓取多少个就可以确定你肯定有两个同一颜色的果冻?

10. 如果你有无穷多的水,一个3公升的提捅,一个5公升的提捅,两只提捅形状上
下都不均匀,问你如何才能准确称出4公升的水?

11. 一个岔路口分别通向诚实国和说谎国。来了两个人,已知一个是诚实国的,另
一个是说谎国的。诚实国永远说实话,说谎国永远说谎话。现在你要去说谎国,
但不知道应该走哪条路,需要问这两个人。请问应该怎么问?

12. 12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就
找到那个球。13个呢?

13.在9个点上画10条直线,要求每条直线上至少有三个点?

14.在一天的24小时之中,时钟的时针、分针和秒针完全重合在一起的时候有
几次?都分别是什么时间?你怎样算出来的?

二.没有答案型(说明:这些题显然不是考你智力。而考的是你的反应能力。 这种题大
多数没有答案,但是要看你的反应喽!)

1.为什么下水道的盖子是圆的?

2.中国有多少辆汽车?

3.将汽车钥匙插入车门,向哪个方向旋转就可以打开车锁?

4.如果你要去掉中国的34个省(含自治区、直辖市和港澳特区及台湾省)中的
任何一个,你会去掉哪一个,为什么?

5.多少个加油站才能满足中国的所有汽车?

6.想象你站在镜子前,请问,为什么镜子中的影象可以颠倒左右,却不能颠倒上下?

7.为什么在任何旅馆里,你打开热水,热水都会瞬间倾泻而出?

8.你怎样将Excel的用法解释给你的奶奶听?

9.你怎样重新改进和设计一个ATM银行自动取款机?

10.如果你不得不重新学习一种新的计算机语言,你打算怎样着手来开始?

11.如果你的生涯规划中打算在5年内受到奖励,那获取该项奖励的动机是什么?
观众是谁?

12.如果微软告诉你,我们打算投资五百万美元来启动你的投资计划,你将开始什
么样商业计划?为什么?
13.如果你能够将全世界的电脑厂商集合在一个办公室里,然后告诉他们将被强迫
做一件事,那件事将是什么?

三.难题(说明:这类题有一定难度,如果得不到答案,也不能说明什么。 如果你想到
了解题思路,那么答案马上就能出来。如果想不到思路, 那么......就别想解出来了。


1.你让工人为你工作7天,回报是一根金条,这个金条平分成相连的7段,
你必须在每天结束的时候给他们一段金条。如果只允许你两次把金条弄断,
你如何给你的工人付费?

2.有一辆火车以每小时15公里的速度离开北京直奔广州,同时另一辆火车
每小时20公里的速度从广州开往北京。如果有一只鸟,以30公里每小时的速
度和两辆火车同时启动,从北京出发,碰到另一辆车后就向相反的方向返回
去飞,就这样依次在两辆火车之间来回地飞,直到两辆火车相遇。请问,这
只鸟共飞行了多长的距离?

3.你有四个装药丸的罐子,每个药丸都有一定的重量,被污染的药丸是没被
污染的药丸的重量+1。只称量一次,如何判断哪个罐子的药被污染了?

4.门外三个开关分别对应室内三盏灯,线路良好,在门外控制开关时候不能
看到室内灯的情况,现在只允许进门一次,确定开关和灯的对应关系?

5.人民币为什么只有1、2、5、10的面值?

6.你有两个罐子以及50个红色弹球和50个蓝色弹球,随机选出一个罐子,
随机选出一个弹球放入罐子,怎么给出红色弹球最大的选中机会?在你的计
划里,得到红球的几率是多少?

四.超难题(说明:如果你是第一次看到这种题,并且以前从来没有见过类
似的题型,并且能够在半个小时之内做出答案。只能说明你的智力超常......)

第一题 五个海盗抢到了100颗宝石,每一颗都一样大小和价值连城。
他们决定这么分:
抽签决定自己的号码(1、2、3、4、5)
首先,由1号提出分配方案,然后大家表决,当且仅当超过半数的人同意时,
按照他的方案进行分配,否则将被扔进大海喂鲨鱼如果1号死后,再由2号提
出分配方案,然后剩下的4人进行表决,当且仅当超过半数的人同意时,按照
他的方案进行分配,否则将被扔入大海喂鲨鱼
依此类推
条件:每个海盗都是很聪明的人,都能很理智地做出判断,从而做出选择。
问题:第一个海盗提出怎样的分配方案才能使自己的收益最大化?

第二题 . 一道关于飞机加油的问题,已知:
每个飞机只有一个油箱, 飞机之间可以相互加油(注意是相互,没有加油机) 一箱油
可供一架飞机绕地球飞半圈,

问题: 为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机?
(所有飞机从同一机场起飞,而且必须安全返回机场,不允许中途降落,中间
没有飞机场)

五.主观题(说明:在以后的工作过程中,我们可定会犯这样那样的错误。 既然错误已
经酿成,损失在所难免,我们只能想办法把损失减少到最小。 如果能巧妙地回答出这些
问题,再发生错误的情况下。能让客户有最少的抱
怨,公司有最少的损失。)

1.某手机厂家由于设计失误,有可能造成电池寿命比原来设计的寿命短一半 (不是冲
放电时间),解决方案就是免费更换电池或给50元购买该厂家新手机 的折换券。请给所
有已购买的用户写信告诉解决方案。

2.一高层领导在参观某博物馆时,向博物馆馆员小王要了一块明代的城砖作 为纪念,
按国家规定,任何人不得将博物馆收藏品变为私有。博物馆馆长需要如何写信给这位领
导,将城砖取回。

3.营业员小姐由于工作失误,将2万元的笔记本电脑以1.2万元错卖给李先生,
王小姐的经理怎么写信给李先生试图将钱要回来?

六.算法题(说明:这些题就不是什么花样了,考的是你的基础知识怎么样。 再聪明而
没有实学的人都将会被这些题所淘汰。)

1.链表和数组的区别在哪里?

2.编写实现链表排序的一种算法。说明为什么你会选择用这样的方法?

3.编写实现数组排序的一种算法。说明为什么你会选择用这样的方法?

4.编写能直接实现strstr()函数功能的代码。

5.编写反转字符串的程序,要求优化速度、优化空间。

6.在链表里如何发现循环链接?

7.给出洗牌的一个算法,并将洗好的牌存储在一个整形数组里。

8.写一个函数,检查字符是否是整数,如果是,返回其整数值。
(或者:怎样只用4行代码编写出一个从字符串到长整形的函数?)

9.给出一个函数来输出一个字符串的所有排列。

10.请编写实现malloc()内存分配函数功能一样的代码。

11.给出一个函数来复制两个字符串A和B。字符串A的后几个字节和字符串
B的前几个字节重叠。

12.怎样编写一个程序,把一个有序整数数组放到二叉树中?

13.怎样从顶部开始逐层打印二叉树结点数据?请编程。

14.怎样把一个链表掉个顺序(也就是反序,注意链表的边界条件并考虑空链表)?

七.几个微软技术支持中心电话面试的题目

1.如果只想让程序有一个实例运行,不能运行两个。象winnamp一样, 只能开一个窗口
,怎么作?

2.如何截取键盘的响应,让所有的'a'变成'b'?

3.apartment在com中有什么用?为什么要引入这个?

4.存储过程是什么,有什么用,什么优点?

5.template有什么特点,什么时候用?

6.好像最好要了解win32sdk底层的知识。比如消息响应的过程等等。

7.对.net的理解,对web service的理解,对三层结构的理解

8.两层的负载平衡与三层结构的负载平衡有什么差别,优点

9.windows DNA结构的特点,优点。
——————————————————————————————————————
——————

Part I.选择题:(70分钟)
1.求函数返回值,输入x=9999;
int func(x)
{
int countx = 0;
while(x)
{
countx ++;
x = x&(x-1);
}
return countx;
}

2.为什么返回局部变量的引用不好?
a,b,c,d不记得了,大概和内存,返回值等等有关。

3.Stack R,from the top to bottom:{2,3,4,5,6},逐个取出放入Queue Q ,再从Q中逐
个取出放入R中,问现在

从上到下R中元素的排列?

4.在你自己定义的类中有什么是CLASSVIEW不会为你做的:
(a) 析构器。 (b)拷贝构造函数 (c)构造函数 (不记得有没有这一项了) (d)(不记得了


5.写出程序的结果:___________ __________________
int funa(int *a)
{
a[0] ++;
}

int funb(int b[])
{
b[1] += 5;
}

main()
{
int a[5] = {2,3,4,5,6};
int b[5] = {2,3,4,5,6};
int *p;
p = &a[0];
(*p)++;
funb(p);
for(int i = 0; i <5; i++)
printf("%d,",a);
p = &b[1];
funa(p);//(啊,现在写的时候才发现做错了,传的是b[1]的地址;只记得传地址给指针
了,考的时候以为

//传的是b.主要是被第一次调用funb弄晕了~~呵呵)
funb(p);
for(i = 0; i < 5; i++)
printf("%d,",b);
}

18.一道智力题或者说逻辑题,好多英文单词不认识,都没弄懂意思,所以也没做。有记
得的写出来吧,最好翻译过来,我还打算做一下呢。虽然很有可能做不出。

有一道好像是说编译器可以修改type error,的好处或不好。
有一道是什么regular language和 text free language比较?(有没有人给我解释一下
这两个是什么东东?)
有一道是在编写代码是查找错误好还是用testing找好?

其他的都不记得了。

Part II 编程(40分钟)
1. 把一段汇编语言的程序写成一个C语言函数,不能有go to 和指针。因为那段汇编我
没看懂,所以也记不得了。那个汇编是我们微原学的汇编,是另一个,不过它有解释关
于它的语句命令。

2.实现以下程序,以方便binary search.
.要有处理错误语句
.队列的分配的大小是固定的MAX_LEN,由第二个参数输入
.不能复制队列
insert (int *arr, //队列
size_l len, // 队列大小
size_l count, //队列元素的数目
int varl //要处理的数据
)返回插入数据的索引
remove(int *arr,size_l len,size_l count,int varl)返回删除元素的索引
search(int *arr,size_l len,size_l count,int varl)返回搜索道元素的索引

Part III Design(20分钟)
1.如果给你分配一个任务,做一个新版本的IE浏览器的一个功能,可能是搜索功能、用
户界面,你将如何design,development,test
2.不记得

Part IV Testing(30分钟)
1。给你一个函数,你如何测试它,函数是strcmp(char* str1,char* str2)
2.给你一个DVD Play,你如何测试它?如果测有只有一定的时间,你首先测试哪一步?
为什么?

Part V. Writing(20分钟)
在过去的这些年,你遇到了哪一个最大的困难,你是如何解决它的?你是单独做的还是
和别人一起做的决定?为什么做这个决定?现在the output如何?
——————————————————————————————————————
———————

MSRA Interview Written Exam(December 2003,Time:2.5 Hours)


1写出下列算法的时间复杂度。
(1)冒泡排序;
(2)选择排序;
(3)插入排序;
(4)快速排序;
(5)堆排序;
(6)归并排序;

2写出下列程序在X86上的运行结果。

struct mybitfields
{
unsigned short a : 4;
unsigned short b : 5;
unsigned short c : 7;
}test

void main(void)
{
int i;
test.a=2;
test.b=3;
test.c=0;

i=*((short *)&test);
printf("%d\n",i);
}


4写出下列程序所有可能的运行结果。

int a;
int b;
int c;

void F1()
{
b=a*2;
a=b;
}

void F2()
{
c=a+1;
a=c;
}

main()
{
a=5;
//Start F1,F2 in parallel
F1(); F2();
printf("a=%d\n",a);
}

5考察了一个CharPrev()函数的作用。

6对 16 Bits colors的处理,要求:
(1)Byte转换为RGB时,保留高5、6bits;
(2)RGB转换为Byte时,第2、3位置零。

7一个链表的操作,注意代码的健壮和安全性。要求:
(1)增加一个元素;
(2)获得头元素;
(3)弹出头元素(获得值并删除)。

8一个给定的数值由左边开始升位到右边第N位,如
0010<<1 == 0100
或者
0001 0011<<4 == 0011 0000
请用C或者C++或者其他X86上能运行的程序实现。

附加题(只有在完成以上题目后,才获准回答)
In C++, what does "explicit" mean? what does "protected" mean?

没有评论: