微软面试 经历文档格式.docx
《微软面试 经历文档格式.docx》由会员分享,可在线阅读,更多相关《微软面试 经历文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
![微软面试 经历文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/29/aaa06fa4-04a4-4091-b77e-5b13c4ceb70c/aaa06fa4-04a4-4091-b77e-5b13c4ceb70c1.gif)
接着面试官问“我在用WMI的时候碰到过这个问题:
有时候执行一个查询的时候第一次很慢,以后就快了〞,我说“WMI的架构是这样的:
WMI中有一个CIM做为类似于数据库的东西,然后有Provider向CIM中提供数据,然后WMI查询器去CIM中查询数据。
第一次慢的原因是因为LazyLoad,第一次调用的时候Provider先去进行数据的准备,把找到的数据放到CIM中,然后再查询,这样以后再执行WMI查询的话就快了。
这只是我的猜想,我没做过验证〞,我认为这样答复是比拟好的,首先我将我了解的WMI的架构说了出来,然后说了我对于“第一次慢〞的理解,但是这个理解是我推测出来的,没有得到验证,因此我强调“只是我的猜想,我没做过验证〞,那么及时我的推测是错的,面试官也不会因此而降低给我的打分,反而会因为我善于进行分析、推测而给我加分。
接着面试官把他的笔记本电脑放到面前说“我给你出一个很简单的题,你把它用程序实现出来〞,他的题是“有一个字符串是用空格分隔的一系列整数,写一个程序把其中的整数做如下重新排列打印出来:
奇数显示在左侧、偶数显示在右侧。
比方‘2783229’显示成‘7392822’。
要求在30分钟只能运行起来〞。
说实话拿到这种题,我也懵了。
虽然我经常和咱们如鹏网的同学们说“要学好数据结构、算法这些根底知识〞,但是工作很多年了,编的很多软件使用的都是语言、第三方提供好的函数库、类库,突然让自己写这种算法的题目也一时无法适应过来。
不过很快我心态就调整过来了,就像我在?
那个视频教程中提到的“面试官让当场写程序的时候不是只有‘写出来’与‘写不出来’两种结果,而是面试官是想看你怎么思考、解决问题的〞,而且我也提到过“面试时写代码一定要把边界条件、异常情况考虑到,并且和面试官解释在做什么、为什么这么写〞。
我定了定神,想“具体算法怎么实现不管,但是要先检查特殊情况,也就是给出的字符串是否是‘用空格分隔的一系列整数’〞,因此我先编写了如下的校验代码:
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<
();
//奇数队列
listOdd=newList<
//偶数队列
inti=int.ParseInt(item);
if((i%2)==0)
listOdd.Add(i);
else
listEven.Add(i);
listResult=listEven.Join(listOdd);
//将偶数队列拼到奇数队列之后
原理很简单,就是建一个奇数队列、一个偶数队列,从前向后扫描各个整数,依次判断整数,如果是奇数那么将将整数放入奇数队列,否那么放到偶数队列。
最后将偶数队列拼到奇数队列之后形成最终的“奇数在做,偶数在右〞的队列。
接着我发现在校验合法性和判断奇偶的地方我遍历了两次items数组,因此我又把这两局部代码合并,这样就只用遍历一次,虽然没有降低复杂度,但是还是降低了执行的步数:
写完这个程序调试通过。
又想到这个职位要求有一定的测试能力,因此又写了一个单元测试用例。
一看表用了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:
说说工作原理。
我首先说了的工作原理,然后说了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:
No
book
cnt
1
a
100
2
150
b
50
180
No是人的编号〔人的编号不止有1、2两个〕,book为书的名字〔一共就a、b两本书〕,cnt表示这个人手中拥有这本书的数量。
要求写一个SQL对这个SQL语句进行转置,输入如下的表格
刚拿到这道题的时候脑子又一片空白,因为最怕这种有点BT的SQL题,甚至有点想放弃。
不过面试官加了一句“这道题很简单〞,估计是面试官在给我定心丸,让我不要紧张。
因此我对自己说“不要否认自己,我一定可以〞,因此我稳定了一下情绪,然后尽力回忆写?
程序员的SQL金典?
这本书中的时候参考的那些书中和这个题类似的问题,思路翻开,很快写出了下面的SQL语句:
selectNo,SUM(a)aSUM(b)b
(
selectNo,a,0fromtwherebook=’a’
unionall
selectNo,0,bfromtwherebook=’b’
)groupbyNo
对这段SQL不理解的同学可以参考?
的关于Union、子查询等章节的内容。
面试官又问了碰到数据库运行非常慢的时候怎么解决。
我就答复先使用数据库提供的性能查看工具,找出最耗时的SQL,然后逐个进行优化,直到没有明显异常情况的SQL。
具体的优化手法包括:
使用动态参数而非动态拼字符串的方式进行动态查询;
为经常进行查询的字段简历索引、联合索引等;
调整WHERE子句中的连接顺序;
防止隐式的全表扫描。
面试官又问“怎么测试记事本的saveas功能〞,我说了“文件已经存在、文件不存在、用户指定了文件后缀、用户取消了保存动作、大文件的保存、覆盖只读文件、文件名过长〞等情况,面试官问“还有其他的吗?
〞,我想了一下没想到其他的,就果断的说“想到不其他的了〞〔如果思考几秒钟没有想到其他了,就果断的说想到不了,千万不能延迟太长时间〕,然后面试官有补充了“文件名中包含非法字符〞等情况。
最后面试官问了“如果一个程序一运行就自动退出,你认为可能的原因是什么,怎么排除故障〞。
我就说可能是GDI、内存等资源缺乏造成的,也可能是程序中指针处理错误〔但是这种情况会显示内存错误对话框〕,如果不是这些原因,那么我会查看程序的运行日志、EventLog等,如果还找不到原因的话就会使用Windbg等工具进行深入的调试,然后又复述了一下和同事一起用Windbg排除VisualStudio自动退出bug的过程。