nishuangxi 发表于 2006-11-7 21:50:27

想去面试微软测试工程师的进!

今天去微软面试,地点MLT
   首先,三天前接到微软的电话面试,问了我关于对数据库事务、存储过程的理解,如何定义存储过程中的变量,还有提到内连接&外连接的区别。语言方面问了C++中,虚函数作用,什么是多态,如何实现。问我是否懂.net开发,我实话实说“不懂”,本人未接触过.net,但那边经理还是教我去公司笔试。
    到了公司门口,门卫发个牌,领我到了一个开发经理那里,二话不说,给我三张卷子,全英文的,单面的,题目分五部分,第一部分关于.net,第二部分关于算法实现,两个题,一个简单,一个难点,分别是N!阶乘用递规实现,还有就是“    !OK    isthat”把这句句子顺序输出单词之间空格没有规律,输出要按原样。第三部分是智力题,没什么好说,看个人造化了,就是网上传的很多的那种,第四部分是英语能力题,比考四级容易,都是选择题。第五部分是写作,写回信,说一微软的客户电脑出了问题,你是MS工程师给客户回信,要求表现出你的沟通能力。
      做完题后给我电话面试的经理先来面我,问了一些电话问的,然后叫我写一个求最大公约数的算法,要求性能好。然后问数据结构方面的问题,给平衡二叉树,满二叉树,完全二叉树作个定义,如果定义不出来,你可以举例子说明。接下来是第二个人来面试。
      他问我对测试熟悉还是开发,我当然答:测试。然后他问”如果有一个基于C/S的系统,当有大量客户访问时,速度随着时间不断变慢,你作为测试工程师,会从那些方面入手找问题?“第二个是给出一个图片上传的对话框,有图片大小规定,有格式规定,叫你写出用例。
      大致就这些,想到了再补充,希望对大家有帮助。

songfun 发表于 2006-11-7 22:26:41

从面试题看,一直是沿用旧的题目,之前的微软都有,学员们可以上网去好好研究一下。
翻来翻去都是这些题目。

cdj0823 发表于 2006-11-8 13:04:15

太感谢!

Oh!My 发表于 2006-11-8 22:08:23

回复 #1 nishuangxi 的帖子

刚才嫌来无事的时候做了下两道编程题目。发现比较第二道第一道更加容易错。第一道有个小陷阱。写惯了c的人都喜欢自加自减运算。那么很有可能写成:
int rec(int x)
{
if (x <= 1)
          return 1;
else
          return (x*rec(x--));
}
或者
int rec(int x)
{
if (x <= 1)
          return 1;
else
          return (x*rec(--x));
}
但事实上两种写法都是错的。第一种根本算不出结果,第二种--x会影响到乘号左面的x。所以会导致算出的是(n-1)的阶乘所以正确的答案应该是
int rec(int x)
{
if (x <= 1)
          return 1;
else
          return (x*rec(x-1));
}

[ 本帖最后由 Oh!My 于 2006-11-8 22:20 编辑 ]

Oh!My 发表于 2006-11-9 00:09:57

嫌来无事再发一下第二道题目的代码。第一眼以为要用堆栈做,仔细一看不是的。那么只有好了,省去写stack class的麻烦。直接逻辑运算插入一个flag判定空格还是单词就ok了。
void str(char a[])
{
    int len = 0;
    int flag = 1;
    int wordlen = 0;
    while(a != '\0')
      len++;
    while(len >= 0)
    {
      if ((a == ' ' && flag == 1))
      {
      for(int i = 0; i < wordlen; i++)
      cout << a;
      wordlen = 0;
      flag = 0;
      }
      if ((a != ' ' && flag == 0))
      {
      for(int i = 0; i < wordlen; i++)
      cout << a;
      wordlen = 0;
      flag = 1;
      }
      if (a == ' ')
            flag = 0;
      else
            flag = 1;
      wordlen ++;
      len --;
    }
    for(int i = 0; i < wordlen-1; i++)
    cout << a[ i ] ;
}

[ 本帖最后由 Oh!My 于 2006-11-9 23:32 编辑 ]

Oh!My 发表于 2006-11-9 00:35:05

至于那道最大公约数的题目应该用辗转相除法吧.这道题目有点微软作风了.原本就算来个顺序遍历算法复杂度也不过n.比起排序算法来说快太多了.

edwin_chen 发表于 2006-11-9 16:17:08

还是不错嘛,对开发这么了解

nishuangxi 发表于 2006-11-9 20:21:04

最大公约数的求发是应该用转相除法。
我问一下你实现第二个题中的word变量怎么来!

nishuangxi 发表于 2006-11-9 20:59:29

求最大公约数的Euclid法(辗转相除法)

#include   <stdio.h>
void   main()
{
int   min,   max,   curmod;
int   a   ,   b;
scanf("%d,%d",   &a,   &b);
while(a   >   1   &&   b   >   1)
{
min   =   a   >   b   ?   b   :   a;
max   =   a   >   b   ?   a   :   b;
curmod   =   max   %   min;
while   (curmod   >   0)
{
max   =   min;
min   =   curmod;
curmod   =   max   %   min;
}
printf("最大公约数是:%d\n",   min);

}

fulton 发表于 2006-11-9 21:50:07

不错 不错

Oh!My 发表于 2006-11-9 23:31:02

回复 #8 nishuangxi 的帖子

循环后面不是每次wordlen都加1么,就这么来的。每次输出一个单词后wordlen再置零。哦,我自己写的时候写word的,放上来为了方便改成了wordlen没有改干净。

于淼 发表于 2006-11-11 19:21:50

补充一个比较经典的问题(至少我是没回答上来):
    c++一个类能继承几个父类?(回答:多个)C#一个类能继承几个父类?(回答:一个)。(这才是重头戏)为什么C++可以C#不可以?(sdlkfj9 没回答上来)
顺便也麻烦老师们帮忙解答一下。


另:微软好像极其喜欢会C#的人,去之前把C#啃熟一般没什么大问题

floatingleaf 发表于 2006-11-15 14:34:01

最简单的方法

int gcd(int m,int n)
{
int g;
if(!n)g=m;
else g=gcd(n,m=%n);
return(g);
}

wfq80825 发表于 2006-12-5 14:19:19

你们对开发这么了解,给我们这些对开发不太了解的测试人员不小的压力
页: [1]
查看完整版本: 想去面试微软测试工程师的进!