微软实习生面经2015.4.27

微软实习生面经2015.4.27

         3月中旬报名参加微软暑期预科生,苏州软件开发,4.3日线上笔试,4道编程题做出2道,当时正和女友西塘旅游ing、、、大晚上码完代码去酒吧喝喝小酒然后~~~以上纯属扯淡、、前两题的题解我会在另一篇博文中提供。

         之后就是漫长的等待,直到4.20日收到通知,确定了4.27日早上9点面试,路费住宿费全报销(微软神壕!!)。面试一共三轮,每轮标准时间是45min。

         第一轮:面试官看起来很和善,先是自我介绍,然后提问我的项目1,我把项目解释一番后他问了一系列问题,最犀利的一个:你的混合智能优化算法(把ga、pso、雨林蜂群结合起来的算法)如何避免陷入局部最优?我蒙了一下然后说,因为上述算法本身具备避免局部最优的机智,所以我的混合智能选取策略只是一个壳,并不用考虑底层(即集体选择哪个算法)的问题。面试官说这个回答的好,我喜欢(=_=!)其实我在壳上也做了避免局部最优的优化来着但是忘了那个术语…问题2:描述最小生成树-Kruskal算法思想。然后问我如何优化复杂度。我首先想到了优化选择当前最小边的策略,给出了诸如:优先权队列,不用排序而只用找最小值(复杂度由nlgn变为n)甚至丧病的hash等……然后面试官说优先权队列是最好的…然后,问我如何证明Kruskal确实能得到最优解,折腾了5min后我有了些头绪但还是很卡,面试官说没事,一面比较愉快的结束了。

         10min后第二轮:一上来个人简介,问我项目2,机器学习那块的,我把整个框架讲了遍。回答了一些小问题,然后撸代码:有一个只包含字母和空格的文本,输出其中所有的单词,不能用STL。写完后加要求:记录每个单词出现的次数。下意识的反应到可以把每个单词hash一下储存键值。但通过跟面试官的讨论,发现(1)直接用ascll码相加hash,会冲突(其实后来想想也是可行的,冲突多大事…但是当时只能顺着面试官的思路),(2)通过1,10,100…这样的权值加权求和hash,这样不会冲突,但是键值太大,取余后还是会冲突(冲突多大事orz!)然后面试官说好吧那你就写个普(bao)通(li)的方法吧。创建结构体储存字符串和其出现的次数。然后读文本,把每个单词缓存到临时数组里,然后去匹配….写完提了两个问题:(1)并不用缓存单词,只要记录该单词开始和结束的位置即可。(2)结构体我用的字符型数组,单词过长怎么办,malloc(有点风险),string、vector(不可用STL)。第二轮还算顺利。

         第三轮:boss面。自我介绍+项目1+项目2,琐碎的提问,有两点回答的不算好:(1)最优化算法中,初始化时是随机生成初始种群嘛?我说不是,用了一种可以借助邻接矩阵使初始种群就比较“合理”的算法(后来回想起来叫“IGLP”);(2)ga中交叉何这样交叉...我表示这显然是有原因的但是我显然不知道、、、然后说你都面两轮了我就不考你代码了,逻辑题:给一串只包含0~9的数字串,每个数字出现的概率相同(比如32978417506),现在告诉你(1,3,5,7)这四个数字不可用,即只能用(0,2,4,6,8,9)这6个数,如何表示原数字串?我想到了类似于计算机网络数据报转码传输的机制,将1转化为92,3转化成94,5转化成96,7转化成98,9转化成99,这样原串就可用原空间1.4倍的空间储存。问我有没有占用空间更小的方法,我考虑了一下进制等,发现不行。他说方法还是有的,但是会很复杂,面试结束。后来想想也许存在某个矩阵,可以把原串转换成另一个空间仍为n的串,但是如何还原以及如何保证新串也没有1357?细思极恐….

         三轮面完已到中午,在微软吃了免费的工作餐(盒饭),回来hr说今天面试结束了你可以走了…………………..当然面试一共就三轮,但是你为啥不早说搞得我没心理准备…

         Summary:(1)另一个没项目经验但是算法很吊的acm大神表示他每轮都是2个算法问题,可见微软还是很重基础的,问的问题涵盖算法和数据结构的全部内容,甚至有小伙伴被问到AC自动机...不过由于他那轮面试官是印度人,我们怀疑是他没听清题意...(2)面试一般中文交流,若遇到国外的面试官请多保重…(3)微软好良心……..(4)微软苏州和北京是互联网工程院,做bing,上海做云(5)一周后(前天)接到微软电话,说面试表现不错,确认了实习信息,进入备胎池的赶脚……

你可能感兴趣的:(面经)