微软面试 经历Word格式.docx

上传人:b****3 文档编号:16655969 上传时间:2022-11-25 格式:DOCX 页数:9 大小:25.35KB
下载 相关 举报
微软面试 经历Word格式.docx_第1页
第1页 / 共9页
微软面试 经历Word格式.docx_第2页
第2页 / 共9页
微软面试 经历Word格式.docx_第3页
第3页 / 共9页
微软面试 经历Word格式.docx_第4页
第4页 / 共9页
微软面试 经历Word格式.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

微软面试 经历Word格式.docx

《微软面试 经历Word格式.docx》由会员分享,可在线阅读,更多相关《微软面试 经历Word格式.docx(9页珍藏版)》请在冰豆网上搜索。

微软面试 经历Word格式.docx

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:

说说工作原理。

我首先说了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:

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不理解的同学可以参考《程序员的SQL金典》的关于Union、子查询等章节的内容。

面试官又问了碰到数据库运行非常慢的时候怎么解决。

我就回答先使用数据库提供的性能查看工具,找出最耗时的SQL,然后逐个进行优化,直到没有明显异常情况的SQL。

具体的优化手法包括:

使用动态参数而非动态拼字符串的方式进行动态查询;

为经常进行查询的字段简历索引、联合索引等;

调整WHERE子句中的连接顺序;

避免隐式的全表扫描。

面试官又问“怎么测试记事本的saveas功能”,我说了“文件已经存在、文件不存在、用户指定了文件后缀、用户取消了保存动作、大文件的保存、覆盖只读文件、文件名过长”等情况,面试官问“还有其他的吗?

”,我想了一下没想到其他的,就果断的说“想到不其他的了”(如果思考几秒钟没有想到其他了,就果断的说想到不了,千万不能延迟太长时间),然后面试官有补充了“文件名中包含非法字符”等情况。

最后面试官问了“如果一个程序一运行就自动退出,你认为可能的原因是什么,怎么排除故障”。

我就说可能是GDI、内存等资源不足造成的,也可能是程序中指针处理错误(但是这种情况会显示内存错误对话框),如果不是这些原因,那么我会查看程序的运行日志、EventLog等,如果还找不到原因的话就会使用Windbg等工具进行深入的调试,然后又复述了一下和同事一起用Windbg排除VisualStudio自动退出bug的过程。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1