找工作(1)——微软

 序:
毕业意味着失业。大规模的研究生扩招终于在数量上实现了我国科技教育兴国的理想。至于产生的别的问题已经不是教育部关心的了。不过,由于所学专业(计算机)比较热门,所在的学校也还可以,所以呢,还不至于沦落到社会的最底层。因此,只是这个找工作的过程漫长一些罢了。但是这又未尝不是一种经历、一种财富。同时也是走向社会的第一步吧。各种辛酸也只有过来人能够体会。为此,在这看不见硝烟的战场落幕之时回忆一下,既为感慨,也为后来人提供一些帮助吧。由于面试的公司比较多,所以按公司分别列出。今天是第一篇,当然来一个稍微牛逼点的公司——微软。

微软的招聘可以是声势浩大,其招聘地域之广泛、持续时间之长、流程之复杂都是难得一见的。首先是全国性的多场笔试(当然只能参加一场),然后对高校多的地方(如西安)还会采取特别的小型笔试。当然笔试的题型都差不多,题目是不一样的。之后就是面试,面试通常都有4-5轮。最后就是发通知了,有的时候快有的时候慢,不知道跟他们的心情是否有关。反正我最后是收到感谢信了。

笔试题型主要是选择题(包括单选和多选)、程序设计题、测试题、系统设计题之类的。具体说来,
选择题:要记住选错扣分,其主要考察的范围有C++/C、数据库、操作系统、数据结构等计算机基础知识。我记得有几个题:     (1)char a[]="abcdef"是存储在哪的?(答案:静态数据段区)。
     (2)char a[]="abcdefg", char *pa="abcdefg",问32bit机器上sizeof(a), sizeof(pa), strlen(a), strlen(pa)值分别是多少。(答案:8,4,7,7)。
     (3)关于http协议的一些东西,什么是多核之类的,常见的排序算法的复杂度和稳定性,还有SQL语句方面的东西。
程序设计题:考察编程和算法能力。当时的题目好像是实现一个类似于word中的单词检查功能呢个,主要就是实现一个字典。然后是字典中的查找、删除之类的操作。
测试:测试题目考察是写测试用例的能力。题目是测试一款新型汽车的轮胎,让写出测试用例。关键在于能够按照题目要求来进行测试用例编写。题干中会提到该车的销售地域、行驶环境等情形,当然轮胎就要能适应各种环境了。测试用例写得越多越全越好。
系统设计:要求设计一个电子宠物之类的系统吧(记不太清楚了)。要求写出功能需求、并画出设计图。

笔试内容大概就是这些,内容很广泛,没有平时的准备临时连佛脚都找不到。

笔试之后,就会安排面试。首先应该是电面吧(如果有人刚好到你学校去了,也会直接面对面地面试),然后合格了就通知去微软公司面试。当然注意了,这里的面试倾向用英语面试,你不用太担心英语,但是至少你要有基本的听说能力,否则的话……我一个同学就是直接说中文,哈哈,后来被面试官说:“your hardware is good, but software need improve.”他当时被问到“如何查找树中两个节点的最近父节点”,“大量单词当中,如何有效查找到某一个单词”。其中第一个问题比较容易,不过要写代码。第二个问题实际上可以用trie来做的,而不是用hash。我是电面的,过程与他完全不同,一共两面。第一面是英语面试,如自我介绍,项目经历以及一些简单的C++/C和Java(不知道怎么会问java的东西,可能是我多数项目都是跟java相关的)。第二面是中文的,问了一些C++的东西,如构造函数相关的,虚拟函数等基本知识。每次电面大概都是45分钟。通过之后就是去微软公司面试。微软还是牛逼些的,往返费用是报销的,不像SAP居然自费。

在微软公司的面试我进行了四轮,全部用英语。
第一轮,简单自我介绍,然后就是“咱们做个题目吧”。“一个单向线性链表,不知道长度,如何从中以相同的概率选出k项”,另一个题目是“在excel的列中都是用字母来表示列号的,如第一列是A,第26列是Z,第27列是AA……,第52列是AZ,依次类推,给定一个整数表示列号,输出对应的字符串”。每个题目要求写出程序和测试用例。第二个简单,第一个不知道做,后来一个朋友告诉我了。设链表长度为n,那么每个项被选中的概率是k/n(k>n时为1)。考虑,如果长度加1,即n+1,那么每个项被选中的概率应该是k/(n+1)。假设前n项中每项被选中的概率为
k/n, 这个时候我们以k/(n+1)的概率来选择第n+1项,那么这项被选中的概率就是k/(n+1),并且将这一项替换被选中的k项中任一项(概率为1/k),这个时候前n项的任意一项p被选中的情形又分两种:(1)第n+1项没有选中,其概率为1-k/(n+1);(2)第n+1项选中,但是p没有被替换,概率为k/(n+1) × (1-1/k)。(1)、(2)相加得到n/(n+1),又知 前n项中选k项过程中,任意一项选中的概率为k/n,所以在对第n+1项进行操作之后,前n项中任一项被选中的概率为(k/n) * (n/(n+1)) = k/(n+1)。利用递归的思想可以得到算法。

第二轮是个老外,问了两个简单的题目,给定一堆单词,计算每个单词出现的次数。另一个题目是二分查找树中如何增加一个节点

第三轮是给定单词串,将其反转。如“welcome to MS”反转结果为“MS to welcome”。更进一步,如果对于单引号引起来的字符串看作一个单词,如何做。如“welcome 'to MS' ”反转为“ ‘to MS’ welcome”。

第四轮是考察测试,只要写出测试用例。首先测试正则表达式中的*和?的功能。然后测试微波炉,最后测试windows登录窗口。

总结就是,微软的题目没有太复杂的,当然第一个面试题比较难想到。不过需要有扎实的编程功底,其次考虑问题要全面,所以他比较重视测试用例。

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值