职位:高级软件工程师– Office 365团队
我最初于2018年8月在爱尔兰都柏林的Office 365团队申请了高级软件工程师职位。一个月后,我收到了招聘人员的电话,以快速了解我的当前情况。他问我以下问题:
1)为什么要申请这个职位?
2)您目前的职务是什么?
3)在接下来的5到8年的时间里,您会在哪里看到自己?
招聘人员很满意,他安排通过Skype与软件工程师进行技术面试。
Skype访谈:技术
它分为两部分,首先,他问了我一些基于能力的问题以及我的简历中的一些项目。他还问我为什么要为Microsoft工作?我从事的最具挑战性的项目是什么?为什么? –当时只有15个薄荷糖,然后他给了我下面的编码面试问题:
给定一个数组:[5、10、4、0、2、4、6、31、6、6、8、5、1、2、3]查找作为其左和右子数组之和的数字。在此示例中,它的31个数字是因为其左侧的数字加起来等于31。
编写一个函数,该函数将返回该数字(如果存在)。如果没有返回-1。
提示:他一直在寻找时间和空间的复杂性以及解决方案的方法。您必须问一些问题,例如输入数组可以为null还是为空?在这种情况下,我们应该抛出异常吗?输入数组有多大?它是否包含负数?还是十进制数字?像这样的东西。这表明,在着手编写代码之前,您要考虑并计划如何实现它。然后考虑如何解决该问题以及时间和空间的复杂性。讨论完成后,请问现在是否可以开始编写代码。
因此,我说要编写代码,并且我也一直在解释自己的所作所为,只是为了让他知道我的想法。完成函数编写后,我遍历了似乎有效的示例输入数组。然后,他更改了一个输入数组,该数组包含零,一和负数,而我的代码无法找到正确的数。
我以为我在这个阶段失败了。接下来,他问我是否有任何问题,所以我向他询问了他们的软件开发过程,构建和发布过程以及其他一些技术/项目生命周期类型问题。当您有机会时,它非常重要地提出问题。
几周后,我收到了招聘人员的电话,他们希望我来微软都柏林校园进行面对面采访。
Office 365团队的现场采访:技术
面试整天都被预订了。它分为四个阶段。每个阶段持续约1个小时,并与招聘经理共进午餐(这是面试的一部分,因此要小心,不要太自在)。
阶段1
给定的数组值= [1、3、4、8]和索引[0、2]。编写一个函数,该函数将返回一个数组,其中包含除索引中的所有值以外的所有值的乘积。因此,在此示例中,该函数的结果将包含3、4、8和1、3、8的乘积。
当然,提出问题以澄清任何困惑并通过解决方案进行讨论。说明您将如何处理它以及时间和空间的复杂性。
阶段2:
查找字符串的第一个非重复字符。输入“ Teeter”输出“ r”。同样,在编写代码之前,提出问题并讨论您将如何实现它的想法。
阶段3:
反转字符串的单词,同时保留特殊字符的位置。输入=“嗨!停止用Java编写代码,使用C#。”输出=“ C#!在代码编写中使用Java ,请阻止Stop Hay”。注意!并且,保持不变。
阶段4 –这是与招聘经理一起进行的:
从排序的数组中找到丢失的数字。输入= [0、1、2、3、4、6、7、8、9]输出=5。我使用了二进制搜索。
他们似乎都感到满意,我想我可以从这支球队那里得到报价。四个星期后,招聘人员致电并发布了消息,不幸的是,这个报价已经发给了另一个更适合这个职位的候选人。但是,我的反馈是积极的,建议我申请Microsoft的另一个职位。
职位:高级软件工程师– SharePoint团队
几个月后,我为Microsoft Dublin校园的SharePoint团队申请了高级软件工程师职位。接到另一位招聘人员的电话后,她在以前的采访中得到了我的反馈,她说这是肯定的。她安排了一次在Skype上与Redmond Seattle的软件开发经理进行技术面试的机会。
Skype采访。
他问了我一些有关C#和CLR的技术问题。一些ASP.net和.net核心问题。然后,他转向一些基于能力的问题。之后,他给了我编码问题。他要求我仅通过使用数组数据结构来设计Queue类。类应具有以下行为:
Enqueue(int),Dequeue(),Peek()和Count()。
我问了他几个问题,以澄清一些假设,并询问他的许可是否可以开始编写代码。我在编写代码时一直在谈论,我们讨论了一些事情。他喜欢我的解决方案,并问我是否有任何问题要问。正如我之前说的,对我们提出的问题非常重要。最后,我要求提供任何负面反馈,因为这将帮助我为下一次面试做更好的准备。
几天后,她从招聘者那里接到电话,她说,由于他们已经收到了Office 365面试的积极反馈,因此他们决定跳过对Skye的另一次技术面试,并邀请他们在Microsoft进行面对面的全天面试
都柏林校区。
与SharePoint服务团队进行的现场采访:
首次采访3位软件工程师:
1.您目前担任的职务是什么? / 说说你自己。
2.在进行代码审查时,您需要什么?
3.您如何衡量应用程序的性能?
4.您如何在项目中实施新技术?
5.您如何指导队友?
6. C#8.0中有哪些新功能?
7.如果您的队友找到了一种完全可以满足需求的新技术,该怎么办?
8.除了技术指导之外,您还指导软技能吗?
9.您如何影响队友?
10.白板问题:
一种。在给定输入[0,7,5,5,3,4,1] [[5,7],[6,3],[4,1]的情况下,一次电梯到达每个楼层(仅0-7层), [7,2]
b。讨论测试用例
C。注意:我不明白这个白板问题的重点。我很轻松,面试官似乎不确定他想了解我的解决问题技能的内容。二维数组有缺陷,因此我修复了该问题,然后讨论了如何解决(算法)。最终,我被要求为此写代码。
d。您将如何设计一个调用3个微服务来完成在线订单的应用程序?
招聘经理(团队经理)的第二次面试
1.定义SOLID
2.监视和遥测之间的区别是什么?
一种。在遥测方面有更多的经验-它如何提供帮助等。
3.我忘记了第三个技术问题。
4.告诉我您从事或领导过的最具挑战性的项目吗?
一种。那里有什么歧义,您是如何解决的等等。
5.您认为团队负责人应该是什么?
6.您如何评价同事或队友的负面反馈?
招聘经理老板的第三次面试(在雷德蒙德)
1.您是否被告知我们的团队结构?
2.最具挑战性的项目
3.您如何掌握新技术,又如何学习它们?
4.您如何衡量项目的成功?
几天后,招募人员打来的电话恢复了整个招募过程。这是我一生中最快乐的一天!