微软面试 经历
微软面试经验分享

微软面试经验分享微软面试经验一:到现在找工作也算告一段落了,回想过去的一个学期,发现真的能从中学到很多东西,一次次的面试不仅仅是关于Offer,也是我逐渐认识到自己的缺点和不足并加以改进的过程,在这里和各位同学分享,他山之石可以攻玉,希望大家都能够找到一份理想的工作微软这个是让我挺遗憾的,面的是上海的全球技术支持中心,总共4面,第一面是英文面,一个老外,应该是工程师被临时拉来做英文面试官,前半个小时问了一些基本问题,比如为啥选这个职位,我们为啥要选你,还有你觉得接待中国和外国的客户时有什么区别需要注意的等等,这次我表现还正常,聊得算不错。
后半小时给了话题让写一封email帮客户解决问题,这个经常写了,也顺利过关。
二面是个我很适应的和蔼型中年人,就问了一个问题,怎么把一串字符串的单词反向重排,先给了一个两端查询交换的算法被认为代码量太大容易出错,又给了一个指针数组指向的问题,被认为不符合要求且太浪费空间。
不得已说每次移一个字母到最后,被指出太费时间。
三面是个很强势的面试官,问了一堆非常底层的东西,被问到不行,最后是一条算法题怎么删掉一个单向链表一个给定的节点,现在知道是老题目了,当时是第一次见,愣了一会终于醒悟过来,也算是过关了。
最后一面不是算法了,面试官上来海聊了会儿结束。
Hr最后过来让我等消息来终面,当时满以为没问题了,还高兴了几天,谁知道最后被告知面试官讨论再三觉得我背景分到哪个组都不合适最后不了了之。
微软面试经验二:微软(中国)有限公司总裁唐骏在9月21―23日举办的“首届中国市场总监、销售经理高峰论坛”上透露:应聘者如果答对他出的三道题中的一道,就可以被公司录用。
他说:“这三道题都是真实的案例,看似简单,但是能全部回答上来的寥寥无几。
”唐骏所说的三道题是――1.员工小王误将2万元手提电脑以1.2万元卖给了顾客张先生,作为小王的经理,请你写一封信给张先生,把8千元要回来。
2.某电视台著名节目主持人,因为个人发展原因要离开她所主持两年的电视节目和喜爱她的观众。
微软面试经历中英文面试

微软面试经历中英文面试微软面试经验一:上周三晚上,我收到了ATC的面试通知(邮件)周四晚上,整整复习了一天,直到晚上2点钟,主要看数据结构,重点看了排序,检索,二叉书,自己还想了想怎么存储一个二叉树到文件中,怎么从文件恢复(这个据说今年考过),怎么不用递归实现前序,后序,中序遍历。
图论部分稍微看了一下。
结果,上周五(19日),我参加ATC的面试时候,我看的一个都没有考到2,惨啊。
第二轮的时候,考官的问题是:怎么实现在一个图中,判断能否沿所有边走一遍且只走一遍,如果能够,写出走法。
需要自己定义数据结构和写算法。
其实,这个就是著名的七孔桥问题,反正我当时一下就有点懵了,幸亏考官给我一些提示,后来还简化了一些条件和要求,但是我自己感觉答的不是很好。
不过,幸运的是,我还是能参加了下午的面试,只有一个人面试,呵呵。
现在等待结果中。
总之,大家还是看看图论的一些东西吧,当然二叉树还是要看的。
至于其它一些编程题,主要要考虑编程习惯,边界条件(保证程序正确),以及算法效率,估计都得靠临场发挥了。
就像版上所说的,自己不会的时候,一定要和面试官多聊,试探性的说出自己想法,他总不会让你往一个明显错误的方向走下去吧1微软面试经验二:ATC PM 面经首先声明,我是被人推荐面试去的。
不要和现在的校园招聘混淆了,面试的流程应该是不一样的。
感谢推荐我的Darren.Wang,这位ee的师兄是我的伯乐,虽然我们就见过2面。
注:以下的面试都是全英文,就最后报告offer的是中文。
ok,首先是电面,9月中旬,是hr打过来的,问了一些基本问题,问了简历上的问题,然后问我最熟悉的编程语言是什么,我大言不惭的说c#。
于是她问了我3个c#的问题,都是概念性问题,期间听到有用笔在记录什么东西(汗)。
分别是thread pool, overload/overri de, 还有一个忘记了。
大概就是看你能不能流利的说出来的把。
这一轮的重点大概就是英语。
微软面试经历中英文面试

微软面试经历中英文面试微软面试经验一:上周三晚上,我收到了ATC的面试通知(邮件)周四晚上,整整复习了一天,直到晚上2点钟,主要看数据结构,重点看了排序,检索,二叉书,自己还想了想怎么存储一个二叉树到文件中,怎么从文件恢复(这个据说今年考过),怎么不用递归实现前序,后序,中序遍历。
图论部分稍微看了一下。
结果,上周五(19日),我参加ATC的面试时候,我看的一个都没有考到2,惨啊。
第二轮的时候,考官的问题是:怎么实现在一个图中,判断能否沿所有边走一遍且只走一遍,如果能够,写出走法。
需要自己定义数据结构和写算法。
其实,这个就是著名的七孔桥问题,反正我当时一下就有点懵了,幸亏考官给我一些提示,后来还简化了一些条件和要求,但是我自己感觉答的不是很好。
不过,幸运的是,我还是能参加了下午的面试,只有一个人面试,呵呵。
现在等待结果中。
总之,大家还是看看图论的一些东西吧,当然二叉树还是要看的。
至于其它一些编程题,主要要考虑编程习惯,边界条件(保证程序正确),以及算法效率,估计都得靠临场发挥了。
就像版上所说的,自己不会的时候,一定要和面试官多聊,试探性的说出自己想法,他总不会让你往一个明显错误的方向走下去吧1微软面试经验二:ATC PM 面经首先声明,我是被人推荐面试去的。
不要和现在的校园招聘混淆了,面试的流程应该是不一样的。
感谢推荐我的Darren.Wang,这位ee的师兄是我的伯乐,虽然我们就见过2面。
注:以下的面试都是全英文,就最后报告offer的是中文。
ok,首先是电面,9月中旬,是hr打过来的,问了一些基本问题,问了简历上的问题,然后问我最熟悉的编程语言是什么,我大言不惭的说c#。
于是她问了我3个c#的问题,都是概念性问题,期间听到有用笔在记录什么东西(汗)。
分别是thread pool, overload/overri de, 还有一个忘记了。
大概就是看你能不能流利的说出来的把。
这一轮的重点大概就是英语。
微软求职的面试经历

微软求职的面试经历作为一名应届毕业生,我一直对于微软这家公司非常感兴趣。
在我大学期间,我一直在学习相关的计算机技术知识,并且积极参加各种与微软相关的比赛和活动。
因此,在我的求职计划中,微软一直是我追求的目标之一。
最近,我有幸参加了微软的一次面试。
在此,我将分享一下我的面试经历,希望这对即将面试微软的候选人能够有所帮助。
一、面试前的准备在收到面试通知之前,我花了很多时间和精力来准备面试。
首先,我查阅了微软的招聘网站,了解到该公司对于求职者所需的技能和经验。
同时,我也研究了一下微软的产品和服务,并了解了公司的历史和愿景。
这些知识不仅有助于我更好地了解公司和面试官的期望,还有助于我在面试中更好地回答问题。
二、面试的环节1. 笔试我的第一轮面试是一场60分钟的笔试,主要考察我的编程能力和理论知识。
在笔试中,我遇到了许多高难度的问题,例如算法设计和优化,复杂度分析等。
对于这些问题,我首先深入思考,确定最优的解决方案。
然后,我会手动模拟代码运行,以确认我的代码解决了问题并且没有逻辑上的错误。
2. 微软技术面试通过笔试后,我有幸获得了微软技术面试,也就是“MST”面试。
这是一场深入考察我的技术能力和经验的面试,分为两个小时,共两个环节。
第一个环节是编程部分。
我被要求通过Visual Studio 来写代码,并提供适当的注释。
在这个环节中,我展示了我的代码设计和实现的能力。
第二个环节是面试官对我的技术能力和经验的提问。
在这个环节中,我需要回答一系列关于计算机科学、软件工程、数据结构和算法等方面的问题。
在回答问题的过程中,我以更实际的场景和应用举例,强化了我的技术见解。
三、面试结束后在面试结束后,我向面试官表达了我的感谢和对于面试的评估。
然后,我继续关注微软的招聘信息,并随时准备下一次面试。
总体而言,微软的面试流程是一个非常严格的过程,需要考查候选人的技术能力和专业素养。
在面试中,我遇到了很多有挑战性的问题,并且必须通过深思熟虑的方法来解决。
微软求职的面试经历

微软求职的面试经历面试官:现在我们要问一个问题,看看你的创造性思维能力。
不要想得太多,运用日常生活中的常识,描述一下你的论调。
这个问题是,下水道的井盖为什么是圆的?范曼:它们并不几乎是圆的。
有些是方的。
的确有些圆井盖,但我也看过方的,长方的。
面试官:不过我们起码考虑圆形的圆形井盖,它们为什么是圆的?范曼:如果我们起码考虑圆的,那么它们自然是椭圆的。
面试官:我的意思是,为什么会存在圆的井盖?把井盖成圆形的有什么特殊的意义吗?范曼:是有特殊意义。
当需要覆盖的洞是圆形之时,通常盖子也是圆的。
用一个圆形的盖子盖一个圆形的洞,这是最简单的办法。
面试官:球状你能想到一个球形的井盖比方形的井盖有哪些优点吗?范曼:在回答这个问题之前,我们先要看看盖子右面是什么。
挡板下面的洞是圆的,因为圆柱形最能承受邻近周围土地的压力。
而且,下水道出入孔预示要留出孔足够一个人通过的空间,而一个顺着梯子爬下去的人则的横截面基本是圆的。
所以圆形自然而然地成为下水道顺理成章出入孔的矩形。
圆形的窨井盖只是为了覆盖圆形的洞口。
面试官:你认为存在安全方面的权衡吗?我的意思是,方形的井盖会不会掉进去,因此造成人身伤害?范曼:不大可能。
有时在一些方形洞口上才也会看到方形的盖子。
这种盖子比入口大点,周围有横档。
通常这种盖子是金属质地,非常重。
我们可以想象一下,两英尺宽的方形洞口,1到1.5英寸宽的横档。
为了让井盖掉进去,需要抬起一端,然后旋转30度,这样它就广受横档的妨碍了,然后再将井盖与地平线成45度角,着眼点这时转移的重心才足以让井盖掉下去。
是的,井盖的确存在压住的可能,但可能性非常小。
只要对负责开井盖的人稍加培训,他就不会犯这样的严重错误。
从航空工程的角度来看,井盖的形状完全依赖于它要覆盖的洞口的全面覆盖形状。
面试官(面有难色):失陪一下;我要与小股东谈点事情。
(离开了房间)(10分钟后,面试官回来了。
)面试官:我们推荐你立即去销售部工作。
微软面试经历

微软面试经历作为一个计算机科学专业的学生,微软一直是我心中的梦想公司之一。
因此,当我接到微软的面试邀请时,我感到非常兴奋。
在这篇文档中,我将分享我的微软面试经历,并讨论我从中学到的教训和经验。
首先,微软的面试起初并不像我想象中的那么“可怕”。
我通过一个在线平台参加了初试,并顺利通过了第一轮面试。
在这一轮面试中,我被要求回答一系列和编程相关的问题,例如算法,数据结构和计算机网络等等。
这一轮面试后,我被邀请前往微软的办公室参加面试。
我第二轮面试是一组技术面试,面试者就是我即将加入的团队成员。
这些反响非常积极和友好,这使得我感到更加舒适,并且更加放松地回答所有的问题。
在这组面试中,我被要求回答了一些挑战性的问题,例如数据结构,解决问题的能力和编码能力等等。
然而,面试并不是完美的体验。
在接下来的一轮面试中,我遇到了一名非常苛刻的面试官。
他会问我一些非常困难的问题,并且一直打断我当我尝试回答。
与此同时,他似乎对我的回答并不满意,因此感到非常紧张。
这个经历告诉我一个重要的教训,就是在面试中不要感到沮丧,也不要让一些苛刻的面试官影响你的表现。
相反,你应该保持平静,信心和自尊,坚信你的能力和知识可以满足面试官的要求。
在接下来的面试中,我进一步练习了我的编程技能,并与微软的团队成员进行了更深入的交流。
在最后一轮面试中,我被要求回答一些开放问题,例如对于未来软件开发的看法,未来可靠性和可扩展性的增长。
这些问题需要我更加深入的思考,并且提供扎实的技术和行业见解。
总而言之,微软的面试经历给我留下了非常深刻的印象。
我感到非常感恩和幸运能够参与这个过程,向这些技术专家学习,并且与他们交流对技术的追求和对未来的探索。
这次面试教给我了很多重要的教训,例如自信,冷静和坚定。
此外,我还了解到了微软的团队精神和行业知识,这对我未来的职业生涯是非常有价值的。
微软面试经验

收获在微软导语:商立方高端商务平台根据自己用户真实体验,整理出用户的面试经验,与大家分享,共同进步。
微软的实习,对于我来说,是一个憧憬已久的梦想,是一次“极客”对于技术追求的旅程,是一场如期而至的灿烂经历。
2011年6月的初夏,已有些许炎热,我刚刚结束了GRE的考试,开始着手准备暑期的实习。
偶然的一次机会,我得知微软亚太区全球技术支持中心开始招收暑期实习生。
微软,这个伴随我长大的“良师益友”,无论是它30多年来在计算机技术领域卓越的贡献,还是它所推崇的价值观,都深深吸引着我,能够通过实习去亲身体验这样一家优秀公司的企业文化,学习其先进的技术,感染其卓越创新的价值观,并凭借自己的专业素养为其更好的发展效力,对于一个计算机专业的大学生来说无疑将受益匪浅。
怀着无限向往的心情,我投下了人生中的第一份简历。
层层面试,披荆斩棘,最终我以优异的表现拿到了微软亚太区全球技术支持中心暑期实习的Offer,开始了微软的实习之旅。
在微软,每个实习生都会“拜师父”,实习生通过与实习导师的交流和学习,以更快地适应和熟悉实习生活。
我的实习导师是一名在微软工作多年的技术支持工程师,他不仅仅耐心地教授我专业技术,帮助我解答技术问题,而且更重要的是传授我很多职业素养、为人处事的方式和交流沟通技巧,让我迅速地融入微软的实习生活。
不仅如此,部门还安排了定期的实习生培训,每周都会邀请资深工程师向我们讲解微软的重要技术,传授沟通、交流和合作技巧,分享人生经历。
而且部门经理非常关心每一个实习生的发展,会经常与我们这些实习生进行一对一的谈话,为我们做实习和人生规划,给我们提出一些有指导性的宝贵意见。
在这里,我感受到的是一个以人为本、注重团队合作、技术卓越和不断创新的微软,我同时学到了许多大学里接触不到的应用性技术,并且在沟通交流方面得到了很大的提升,收获的是满满的技术和素养。
在微软,我参加了CSS为实习生们精心准备的暑期实习生夏令营,结交了一群阳光拼搏的朋友,感受到了微软的活力和青春,度过了人生中难忘美好的一个夏天。
加入微软的面试体验分享_面试体验.doc

加入微软的面试体验分享_面试体验在前一篇文章《参加Google的面试经验分享》中,有人说我对猎头的标准回答是“在美国或香港有工作吗?”“进入谷歌招聘流程后,微软的一名人力资源给我打电话,说北京有一个职位将与美国总部密切合作,并问我是否有兴趣。
当时,我想如果我加入一家美国公司的中国分公司,将来我可能有机会搬到美国,至少我会有机会去总部出差,所以我决定试试。
人力资源部联系我后,招聘经理亚历克斯直接联系了我,约我一起吃晚饭。
晚餐并不是真正的采访,而是相互了解。
亚历克斯过去在微软总部工作,但碰巧他已经在北京呆了三个月,他自然会很高兴见到任何申请这个职位的候选人。
至于这个与美国密切合作的项目,主任和一半成员都在美国。
中国已经有一些人在这里,但它需要招募更多的人。
亚历克斯在晚餐时教会了我一件最重要的事情:什么是“商品化工程师”。
所谓的“商品”是指无差别的普遍等价物。
例如,原油按桶计算是一样的,不管它是在中东还是在中国生产。
当我们说一桶原油的价格时,我们并不关心它是在哪里生产的,因为价格是相似的,在使用中没有区别。
因此,“共同改进工程师”视工程师为普遍的等价物,无视他们的人性和个性,视工程师为无差别的人力资源单位,并以任何项目中短缺的人力资源单位来补充他们。
他让我意识到我不满意百度的现状。
同时,他也支持我在美国换一家公司找一份工作的想法。
之后,亚历克斯为我安排了一次电话采访。
采访者是印度人。
他问了我两个问题,其中一个可以通过简单的代码编写来解决,另一个与分布式系统设计有关。
我没有经验,只能谈论我知道的概念。
我觉得后一个问题的答案不是很好,因为总是没有办法达到目的,同时,它也不像算法问题,面试官可以提出一些建议。
后来,这一轮采访的反馈证明确实不是很好。
然后亚历克斯让我去微软的办公室进行一天的面试。
当他早上到达时,他让我参加当天的每日例会,让我知道他们是如何工作的。
接下来,我通过电话会议采访了美国主管,没有讨论技术问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微软面试分享:开篇前两天一个朋友帮着推荐了一个微软的职位,先参加了面试,然后周三收到了offer,在这里把面试的过程和如鹏网的同学们分享一下。
因为我是有工作经验的人,所以走的是社会招聘的流程。
如鹏网的同学们大部分都是在校生,和校园招聘比起来,社会招聘的流程少很多,招聘的形式也有一定的差异,但是相信我的面试经历也会对大家有一定的帮助。
在听到这个职位的机会的时候,我第一时间准备了一份简历,就像我在《软件方向应届生求职面试指导》这个视频教程中讲的那样,我根据这个职位的特点对我的简历进行了个性化的修改,将职位描述(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分钟只能运行起来”。
说实话拿到这种题,我也懵了。
虽然我经常和咱们如鹏网的同学们说“要学好数据结构、算法这些基础知识”,但是工作很多年了,编的很多软件使用的都是语言、第三方提供好的函数库、类库,突然让自己写这种算法的题目也一时无法适应过来。
不过很快我心态就调整过来了,就像我在《软件方向应届生求职面试指导》那个视频教程中提到的“面试官让当场写程序的时候不是只有‘写出来’与‘写不出来’两种结果,而是面试官是想看你怎么思考、解决问题的”,而且我也提到过“面试时写代码一定要把边界条件、异常情况考虑到,并且和面试官解释在做什么、为什么这么写”。
我定了定神,想“具体算法怎么实现不管,但是要先检查特殊情况,也就是给出的字符串是否是‘用空格分隔的一系列整数’”,因此我先编写了如下的校验代码: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(ite m+“不是合法的数字,给出的字符串格式错误”);}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接口等知识。