2023年微软面试经历_第1页
2023年微软面试经历_第2页
2023年微软面试经历_第3页
2023年微软面试经历_第4页
2023年微软面试经历_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微软面试分享:开篇前两天一个朋友帮着推荐了一个微软的职位,先参与了面试,然后周三收到了offer,在这里把面试的过程和如鹏网的同学们分享一下。

由于我是有工作经验的人,所以走的是社会招聘的流程。如鹏网的同学们大部分都是在校生,和校园招聘比起来,社会招聘的流程少很多,招聘的形式也有一定的差异,但是相信我的面试经历也会对大家有一定的帮助。

在听到这个职位的机会的时候,我第一时间准备了一份简历,就像我在HYPERLINK"http://www.rupeng.com/forum/thread-453-1-1.html"\t"_blank"《软件方向应届生求职面试指导》这个视频教程中讲的那样,我根据这个职位的特点对我的简历进行了个性化的修改,将职位描述(JobDescription)中强调的技术放到了明显的位置,并且进行具体的说明,将招聘人员最关心的信息放到了他们第一眼就看到的位置,做到“三秒之内吸引招聘者”。

收到我的简历以后,微软给我安排了面试,由于从告知面试到最终面试尚有几天时间,我就按照我简历中写的内容把简历中写到的自己的技能、项目经验重点复习了一下,并且对于JobDescription提到的、而我不具有的技能也稍微了解了一下。ﻫ面试之前我提醒自己:“一定要和面试官谈笑风生!像平时和同事交流同样,这样不紧张了,那么就可以超常发挥”,我做到了。ﻫ面试一共分为四轮。第一轮面试侧重于专业基础知识,第二轮面试侧重于具体技术,第三轮侧重于软件测试和其他技能,第四轮则是BOSS面试,侧重于职业规划、项目经验、待遇等。每轮面试1小时,共连续约4个小时。

第一轮面试。

面试官一方面问“你最熟悉的语言是什么”,我回答“很多语言都用过,最近两年最长时间用的语言是C#和Java,但是自己并没有明显的语言偏好,毕竟语言只是表达想法的工具”,我这样回答的目的是让面试官知道我有比较强的适应各种语言的能力,同时也将这个职位中会重点规定的C#放到了明显的位置;

由于这份工作和高性能计算相关,因此面试官接着又问了“什么样的程序可以并行化”,由于之前做了充足的准备(以前对高性能计算了解不多,但是在面试之前突击了一下关于高性能计算的东西,这叫“不打无准备之仗”),因此回答“任务之间互相依赖的就不能并行化,而任务之间不依赖的则可以并行化,比如计算斐波那契数列,由于各步之间互相依赖,因此无法进行并行化,而用累加的方法计算1到N的和,由于可以提成若干组独立的运算,然后运算结果再进行汇总,因此可以进行并行化”;

接着面试官又问了“一个进程是运营在一个CPU上效率高还是运营在多个CPU上效率高”,由于我对多核编程不是很熟悉,本着“不懂得就说不懂,不要不懂装懂”的原则,我一方面向面试官说明我对多核编程不熟悉,但是还是说出了自己的一些理解,说“一个进程在多个CPU上运营的话,由于系统需要在多个CPU之间进行时间片的分派、切换、调度,因此比在一个CPU上效率低”,面试官纠正了我的说法,他说“一个进程在多个CPU上的话可以让多个CPU的原件都充足运转起来,因此比运营在一个CPU上效率高,尚有一些进程漂移的问题”,这个问题我的回答虽然不是对的的,但是我“不懂得就说不懂,不要不懂装懂”,并且也谈了自己的分析,也表白自己对“时间片”等计算机原理的东西有一定的了解,没有给面试官带来不好的印象,同时问到这个问题面试官也了解到我对多核编程了解不多,因此也就不会继续问这方面的问题,而会更多向其他我也许熟悉的方向问,这相称于“引导面试官”;ﻫ

ﻫ我的简历中写了做过WMI方面的开发,因此面试官接着问“WMI不能做什么”,一般的人都会问“WMI能做什么”,这样的话一般就回答“WMI能做性能的监控、资源的管理等”就可以了,而这个面试官问“WMI不能做什么”的目的很明显,就是让我进行更深层次的阐述,因此我就回答“Windows能做到的WMI就能做到,Windows做不到的WMI也做不到,由于WMI只是对WindowsAPI、COM对象等的包装,只是一个胶水”,这样回答基本把我对WMI的深层次理解说了出来;接着面试官问“我在用WMI的时候碰到过这个问题:有时候执行一个查询的时候第一次很慢,以后就快了”,我说“WMI的架构是这样的:WMI中有一个CIM做为类似于数据库的东西,然后有Provider向CIM中提供数据,然后WMI查询器去CIM中查询数据。第一次慢的因素是由于LazyLoad,第一次调用的时候Provider先去进行数据的准备,把找到的数据放到CIM中,然后再查询,这样以后再执行WMI查询的话就快了。这只是我的猜测,我没做过验证”,我认为这样回答是比较好的,一方面我将我了解的WMI的架构说了出来,然后说了我对于“第一次慢”的理解,但是这个理解是我推测出来的,没有得到验证,因此我强调“只是我的猜测,我没做过验证”,那么及时我的推测是错的,面试官也不会因此而减少给我的打分,反而会由于我善于进行分析、推测而给我加分。ﻫ

ﻫ接着面试官把他的笔记本电脑放到面前说“我给你出一个很简朴的题,你把它用程序实现出来”,他的题是“有一个字符串是用空格分隔的一系列整数,写一个程序把其中的整数做如下重新排列打印出来:奇数显示在左侧、偶数显示在右侧。比如‘2783229’显示成‘7392822’。规定在30分钟只能运营起来”。说实话拿到这种题,我也懵了。虽然我经常和咱们如鹏网的同学们说“要学好数据结构、算法这些基础知识”,但是工作很数年了,编的很多软件使用的都是语言、第三方提供好的函数库、类库,忽然让自己写这种算法的题目也一时无法适应过来。但是不久我心态就调整过来了,就像我在HYPERLINK"http://www.rupeng.com/forum/thread-453-1-1.html"\t"_blank"《软件方向应届生求职面试指导》那个视频教程中提到的“面试官让当场写程序的时候不是只有‘写出来’与‘写不出来’两种结果,而是面试官是想看你怎么思考、解决问题的”,并且我也提到过“面试时写代码一定要把边界条件、异常情况考虑到,并且和面试官解释在做什么、为什么这么写”。我定了定神,想“具体算法怎么实现不管,但是要先检查特殊情况,也就是给出的字符串是否是‘用空格分隔的一系列整数’”,因此我先编写了如下的校验代码:ﻫStringinput=”7392822”;ﻫString[]items=input.Splits(‘’);

foreach(Stringiteminitems)ﻫ{

inti;ﻫﻫif(!int.TryParseInt(item,outi))

ﻫ{ﻫﻫthrownewException(item+“不是合法的数字,给出的字符串格式错误”);

}ﻫ}

很显然,这段校验代码的时间复杂度为O(N),那么整体的复杂度不也许比O(N)更低了,因此下面要写的代码的复杂度只要不高于O(N)就可以了。然后想了几种也许的解答思绪,涉及根据字符串的特点直接进行操作、排序等,但是都没想到非常好的方法。由于有一段时间没写C#程序了,程序调试了几次才编译通过,并且也不太习惯面试官的笔记本电脑的使用,把上面的代码调试通过并且进行刚才的下一步的筹划已通过去10分钟了,我打算在20分钟之内把这道题做完,这样就能有更多时间和面试官交流自己擅长的领域。既然没想到更好的方法,那只能写“老土”的代码了,毕竟可以运营起来是第一位的。我写了下面的代码:ﻫList<int>listEven=newList<int>();//奇数队列ﻫList<int>listOdd=newList<int>();//偶数队列ﻫforeach(Stringiteminitems)ﻫ{ﻫ

inti=int.ParseInt(item);ﻫ

if((i%2)==0)

{

listOdd.Add(i);

}ﻫelse

{ﻫﻫlistEven.Add(i);ﻫ}

}ﻫList<int>listResult=listEven.Join(listOdd);//将偶数队列拼到奇数队列之后ﻫﻫ原理很简朴,就是建一个奇数队列、一个偶数队列,从前向后扫描各个整数,依次判断整数,假如是奇数则将将整数放入奇数队列,否则放到偶数队列。最后将偶数队列拼到奇数队列之后形成最终的“奇数在做,偶数在右”的队列。ﻫ接着我发现在校验合法性和判断奇偶的地方我遍历了两次items数组,因此我又把这两部分代码合并,这样就只用遍历一次,虽然没有减少复杂度,但是还是减少了执行的步数:

Stringinput=”7392822”;

String[]items=input.Splits(‘’);ﻫList<int>listEven=newList<int>();//奇数队列ﻫ

List<int>listOdd=newList<int>();//偶数队列

foreach(Stringiteminitems)

{

inti;ﻫﻫif(!int.TryParseInt(item,outi))ﻫﻫ{ﻫﻫthrownewException(item+“不是合法的数字,给出的字符串格式错误”);ﻫ

}

if((i%2)==0)ﻫ{ﻫﻫlistOdd.Add(i);

}ﻫelseﻫ{

listEven.Add(i);

}

ﻫ}

List<int>listResult=listEven.Join(listOdd);//将偶数队列拼到奇数队列之后ﻫﻫ

写完这个程序调试通过。又想到这个职位规定有一定的测试能力,因此又写了一个单元测试用例。

一看表用了15分钟。因此把这个程序给面试官看,给面试官解释了我的思绪。面试官说“不错,能在面试的压力下写出可以运营的程序已经很不错了,并且还对异常条件进行了校验,编写了单元测试用例,也用了List、Linq等C#中的高级技术。这道题的确只能将时间复杂度最多优化到O(N),但是你这里用了两个额外的队列进行存储,空间复杂度为O(N),我最盼望的解答结果是你能用互换排序等排序的思绪进行解决,这样最多占用一个中间变量就可以实现这个程序,无需消耗额外的内存空间。”因此在这里提醒如鹏网各位同学,很多像我这样的人写程序的时候总是想着减少时间复杂度,却忘了空间复杂度也是要去尽力减少的。但是据后来面试官说,他当时对于我在那么大的压力下能写出可以运营程序比较满意,由于这题重要就是想考察我在将近一年没有写C#程序的情况下会不会“手很生”。ﻫ接着,面试官又出了一个题“编写一个区间类,并且编写一个进行区间加运算的算法”,由于距本轮面试结束仅有15分钟了,因此面试官说“大体体现你的思绪就可以”,因此我一方面编写了一个区间类Region,并且为它添加了MinValue、MaxValue两个属性和一个构造函数。接着我想进行加号的运算符重载,这样使用Region类的人用r3=r1+r2的方法使用了,但是我忘掉C#中运算符重载的语法了,因此我就和面试官“我想写一个运算符重载方法,但是忘了C#中运算符重载的语法”,面试官说“没关系,不用关心具体语法,把想法表达出来就可以”,因此我写了一个Add方法:ﻫpublicRegionAdd(RegionanotherRegion)ﻫ{

ﻫ//…ﻫ}

然后就和面试官交流这个方法实现的细节,涉及怎么表达开闭区间、怎么考虑边界条件等问题,并且在面试官说道“区间中的值也许有整数、浮点数、枚举等很多类型”的时候,我抢在他之前说出了“可以用范型来解决,这样实现了IComparable接口的类都可以使用这个Region类”,这向面试官表达我知道范型、IComparable接口等知识。ﻫ

面试最后面试官说“刚才问你的问题中你没有完全回答出来也没关系,我们只是想从各方面了解你”。第二轮面试

这轮面试重要侧重对于具体技术点的考察。问了很多技术问题,由于这些技术问题也许大部分咱们如鹏网的同学都没接触过,因此我这里只讲具体的相应届生求职有用的信息。下面列的问题我的回答并不是对的答案,只是对当时面试时我回答的一个真实记录而已。

问题1:看你用过Powershell,能说说Powershell的运营过程吗?

我的回答:Powershell其实也是编译执行的(这句话一出来,面试官的眼睛就亮了,问了一句“是吗?”),然后我就将我分析的为什么Powershell也是编译执行的分析过程讲给他。从这个问题开始我把面试官引导到自己擅长的各个技术的原理、运营机制的层面上。ﻫ

问题2:说一下netframework程序的工作过程。ﻫ我把CLR、mscoree、mscoree的main、JIT编译等讲了一通,唾沫横飞,基本把面试官“喷晕了”。

ﻫ问题3:在以太网中怎么优化网络通讯的效率?

我的回答:改用UDP协议,然后在需要可靠通讯的地方用UDP协议自行实现Ack。

面试官说:由于TCP协议是需要三次握手的,但是在HPC通讯中这个三次握手是没必要的,因此微软实现了一个WinSockDirect的技术解决这个问题。

ﻫ问题4:看你的项目中用到了SNMP协议,说一下用到了哪些地方?

我就把使用SNMP进行数据报告,服务器控制agent端等讲了一下,并且讲了MIBOID等我知道的SNMP相关的东西。

问题5:在团队中有几个人。ﻫ我的回答:以前在金蝶中,整个EASTeam是100人左右,但是一个项目组是7、8人,在赞同的Team中也是这个规模。ﻫﻫ问题6:WCF在之前的项目中的作用是什么?ﻫ我就将之前的项目的架构讲了一下,并且说了WCF是怎么在项目中做服务器、客户端的通讯、回调的讲了一下。ﻫﻫ问题7:Silverlight和WPF的区别是什么?

我一方面从微软对Silverlight和WPF的战略定位的角度来分析了Silverlight和WPF的关系,然后又从xaml的共同、xaml的执行机制的不同、执行引擎的不同、Silverlight的受限等方面进行了阐述。基本把自己知道的Silverlight和WPF相关的东西都说出来了。ﻫ

问题8:项目中哪些地方用到了WF?ﻫ我的回答:项目中只是把WF当成了流程执行引擎,并没有用其中的长流程的部分。(我的言外之意是我对WF的长流程不了解,面试官你就别继续问了)ﻫﻫ问题9:说说asp.net工作原理。ﻫ我一方面说了http的工作原理,然后说了viewstate、aspx、postback等的内部机制。

ﻫ问题10:Powershell中怎么调用一个别人写好的Assembly呢?

我回答可以自定义cmdlet,也可以在Powershell中通过LoadAssembly加载Assembly,然后调用Assembly中的类、方法。我知道面试官希望我回答第二种方式,但是我借这个机会表达自己知道Powershell自定义cmdlet的东西,也相称于给自己加分。“回答要出乎面试官的意料”

ﻫ问题11:用到过AJAX吗?

我回答在如鹏网的“输入标题自动显示相关帖”这个功能用到过AJAX。ﻫﻫ问题12:C++掌握的怎么样?

纯C还能写一些限度,C++长时间没用了,需要熟悉一下才干捡起来。(我的意思还是“不太熟,别继续问了,问其他我更熟悉的吧!”)ﻫﻫ问题13:看你的简历说对WindowsSDK比较熟?熟到什么限度?ﻫ我回答:可以用纯SDK写程序。面试官说:SDK可不是.net呀。我回答:当然了,我说的SDK就是指的CreateWindow、SetWindowLong那些Win32API。面试官问:哪些场合用到了SDK?我回答:.net并没有封装所有的Win32的功能,还是有一些功能点是需要使用Win32的,我举了“WPF中Host外部程序”的需求中是怎么使用FindWindow、SetParent等Win32API的。

问题14:这个职位有也许有时需要到客户现场为客户搭建环境、排除故障等,你能胜任吗?

我就回答了在以前公司做项目、准备演示的时候一直是负责安装硬件、安装OS、安装软件、调试网络等一条龙的,还说了有一次在客户现场调试多台服务器、解决网络故障的故事。“用真实的案例来说明问题比简朴的堆砌形容词更有说服力”ﻫ

问题15:对网络管理有了解吗?比如三层互换机、两层互换机之类的?

我一方面说自己和以前公司负责IT运维的同事(其实指的就是咱们如鹏网的朱阳光老师)非常熟悉,经常听他讲到怎么用互换机划分VLan,也听到过三层互换机是怎么回事,不同的数据包在互换机中是怎么流转的,但是我强调这些只是平时了解和自己涉猎的,并没有很系统化的知识。这句话的意思还是:我不是一点儿都不知道,但是也不是很精通,所以就别继续问这方面的问题了。

问题16:用过SharePoint吗?

我回答说对SharePoint没有系统性的接触过。但是在参与Teched的时候对SharePoint印象非常深,回去也系统了解了一下Sharepoint,知道SharePoint能做门户、文档管理、知识库、讨论组等功能,并且也建议过以前公司的IT部门用SharePoint来代替LotusNotes。

ﻫ问题17:用过AD吗?

说自己用到AD的地方并不多,但是知道AD可以实现单点登录,谈了域和工作组的区别。然后不久的把面试官引导到我熟悉的领域,我说我写过程序连接到AD上进行用户名、密码的验证,就是把AD当成普通的LDAP服务器在用。这番话顺利的把面试官引导到我熟悉的LDAP上,他就问我“LDAP是什么东西?”,我就谈了LDAP、关系数据库、树状结构数据、LDAP和AD的关系等我熟悉的东西。ﻫ

问题18:假如给你自己的开发能力打分,你打几分?

我回答:8分。面试官问“那2分差在哪儿”,我就说虽然自己在大学期间系统自学过计算机专业的课程(趁机把这个提出来,就是一个给自己增长砝码的过程),但是毕竟不是科班毕业的,在复杂的算法方面还是有欠缺的,因此这2分差在这里。

这一关面试问的技术点非常多,本着“懂就懂,不懂就说不懂”的原则,然后在自己不懂的领域也尽也许的说自己了解的一些东西,并且适当的引导面试官到自己熟悉的领域。第三轮面试

第三轮面试重要侧重于测试、程序故障排查、程序调优等方面。ﻫ

面试官一上来就说“我看过你的博客了,写了好多文章啊”。在这里我建议咱们如鹏网的同学们可以经常写博客,无论是平时学习的感想还是一些技术文章,都可以发表到自己的博客上,以后求职的时候你的博客就是说明你学习历程的证明。但是一定要注意不要把一些影响自己形象的言论放到博客上,否则很也许给别人导致不好的印象。

接着面试官问“你都知道哪些测试呢?”,我就把自己知道的白盒测试、黑客测试、单元测试、BVT、压力测试(LoadRunner)、界面自动化测试等做了一下介绍,也说了在以前两家公司的测试流程:开发人员提交代码、日构建、BVT测试、测试人员测试提交bug、开发人员修正bug、标记bug已解决、测试人员重新测试……。

面试官又出了一道题“有一个只能计算两个数加法的计算器,你会怎么测试它”,我就写下了测试两个普通整数的加法、其中一个数具有非数字字符、包含负数、数值超过整数表达范围、反复计算10W次看计算性能及是否崩溃等。

面试官又问是否用过windbg进行过调试,我就说和一位懂windbg的同事一起使用windbg解决过一个VisualStudio崩溃的bug,并且具体讲了解决的过程,但是自己没经常性的用过windbg。ﻫ

面试官又说“看你简历还写过SQL方面的书,你对SQL掌握的怎么样?”,我回答:一般的SQL问题都能解决。面试官就给我出了一道题:ﻫ

有如下的一张表t:Nobookcnt1a1002a1501b502b180

ﻫNo是人的编号(人的编号不止有1、2两个),book为书的名字(一共就a、b两本书),cnt表达这个人手中拥有这本书的数量。规定写一个SQL对这个SQL语句进行转置,输入如下的表格Noab110050215018

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论