比尔盖茨……不管你是 8 岁还是 80 岁,人们都非常熟悉这个名字以及他对这个世界的贡献。一个以极端善良的行为和介绍微软而闻名的人。当比尔盖茨创建微软时,他有一个愿景,即每个家庭都应该拥有一台计算机(最好是 Windows),并且他实现了。今天,微软是世界知名的科技公司。如果你是一个准备进入这家公司的人,你肯定知道数据结构和算法对于面试准备的重要性。
毫无疑问,这是申请微软或任何其他大型科技公司的 SDE 或软件工程师职位的必备技能。这些公司的招聘流程有点相似,但我们将分享一些微软破解面试的具体细节、技巧、准备策略和评估过程。请记住,这些回合的难度级别取决于您申请的 SDE 职位级别,您可以更喜欢任何您熟悉的编程语言。
需要牢记的要点
- 在微软,没有固定的面试流程或格式。它随着产品组或团队而变化。最常见的面试过程包括四到五轮,每一轮都侧重于分析、解决问题、设计、编码和测试候选人的技能。
- 当你刚从大学(本科)毕业时,你被选入任何特定团队的情况非常罕见。有时甚至在你接受采访时也没有指定角色。当你有一年的工作或者你的硕士毕业时,你通常会被招聘到组织中的特定团队/角色。在这些面试中,混合了算法问题和您的专业知识问题。当您在该行业工作了过去 8-9 年时。在那里,您的经验和简历比您进行的任何技术面试都更能说明问题。
- 对公司做一些背景调查。公司现在在做什么,或者他们目前正在研究的市场场景或技术是什么。这表明您对公司感兴趣,这是判断候选人对公司感兴趣程度的好方法。
- 面试官受过训练,不会对你的答案做出反应,所以不要指望他们会给出是或否的答案,无论你是否朝着正确的方向前进。这很糟糕,但却是评估候选人的一种非常有效的方式,因此请做好准备,看看冷酷无情的面孔。
- 与 Google 或 Facebook 相比,Microsoft 面试问题/难度级别的一致性稍差。
现在是讨论 Microsoft 为招聘程序实施的策略和轮次的时候了,请记住一个适用于每个公司的快速提示……您的目标是编写适量的优质代码并进行良好的沟通。你的报酬不是编写代码,而是思考、找出问题并提供解决方案。要破解任何技术面试,您只需要一台笔记本电脑,一个有效的互联网连接,将定期解决问题,几个月内,您就可以学习基本知识。微软的面试程序有点类似于其他大型科技公司,所以让我们讨论一下……
发送申请
您可以访问 Microsoft Career 页面申请 SDE 角色,但成千上万的候选人申请此角色,因此在面试电话中不容易被招聘人员注意到。如果您有任何推荐或与 Microsoft 的员工有联系,您获得面试电话的机会就会更多。如果您没有,我们强烈建议您通过 LinkedIn 与招聘经理或招聘人员建立联系。此外,在申请工作时,请关注您的简历。以下是一些有助于您获得面试邀请的要点……
- 尝试制作单页简历并仅包含相关内容。简短、准确,因为没有一个招聘人员有超过 15 秒的时间来扫描简历。只写下那些你觉得舒服的东西,不要做任何虚假的事情,因为面试官在面试中很容易发现这一点。如果你提到你的项目,那么也要提到你的项目的复杂性。检查链接简历建设 – 资源和技巧来准备你的简历。
- 如果您将要从大学毕业,Microsoft 有一个专门的学生招聘网站。
- 微软有时会在招聘会、黑客马拉松等上招聘,尽管等待这些机会有机地出现可能是一个漫长的等待游戏,尤其是取决于你在全球的位置。您可以访问 hackathon.com 链接,查看您所在地区是否有任何黑客马拉松。
- 及时更新您的 Linkedin、Github 和其他个人资料,招聘经理会使用这些工具(如 LinkedIn、校友数据库和专业协会)来寻找合适的候选人。
一旦您与招聘人员取得联系,他们就会想要协调您的第一次电话面试。
筛选面试
我们要邀请这位候选人参加完整的循环吗?为了筛选出很多候选人,微软进行了这一轮,这一轮为公司节省了大量的时间和资源。筛选轮可能是电话,或者您将被要求完成编码挑战,您需要编写干净、良好且无错误的代码,并且还应该对其进行优化。这一轮包括基本到中等级别的数据结构和算法问题,您将有一些在线文档来写下您的代码,并且您的面试官可以看到这些文档。它将持续大约 30-45 分钟,它可以有 2-3 个编码问题。以下是在线编码挑战或电话面试时要记住的要点。
- 电话面试的设计难度并不大,挑战是在现场面试时进行的。
- 您需要为面试官会问的编码问题编写代码,在开始时抛出一个蛮力解决方案,但您也应该尝试改进您的解决方案。想想时间和空间的复杂性,看看你是否可以改进它们。
- 在电话面试中大声思考并清楚地说话(这里的人会遇到麻烦),并将您的策略告诉面试官以解决问题。
- 练习在一些在线文档上编写代码。它将帮助您在面试中很好地处理电话回合。
- 解决 GeeksforGeeks、CareerCup 和 HackerRank 上的问题。
现场面试
一旦你在上一轮中被选中,你将被邀请参加一个需要一整天的循环,包括大约四到五个单独的面试。这些面试中的每一个大约需要一个小时,这将是一个白板回合。确切的轮数取决于您在每一轮中的表现以及您申请的角色。现在,DSA 和核心 CS 科目的主要作用是检查您的编码、解决问题的技能和对计算机科学基础知识的掌握。您需要为所有项目、实习、以前的经验以及编码和解决问题的技能做好准备。问题的难易程度取决于您在 Microsoft 中申请的角色(SDE1、SDE2 等…)。
1. 技术面对面回合
- 测试候选人是否可以使用数据结构和算法的知识解决现实世界的问题。期望能够为给定问题找到最优化的解决方案。您必须能够将算法知识与代码一起传达。
- 下面是微软面试中普遍遇到的问题类型的分布。此数据基于 Glassdoor for Microsoft 的面试经历。
- 检查链接如何在基于产品的公司中找到工作?处理深入的技术编码问题,你在面试中应该遵循什么方法和技巧。
- 查看在 Microsoft 工作的招聘人员提供的面试技巧。
- 提出所有澄清问题,考虑蛮力方法,优化解决方案,然后写下代码。这是我们建议您遵循的简单步骤来解决编码问题。
- 您需要对过去或实习期间做过的项目感到满意。面试官会从那里抛出问题,因此请确保您对项目有完整的了解和详细信息,以便向面试官解释。
- 我们强烈建议您阅读 CTCI(Cracking the Coding Interview)一书,练习问题,尤其是 GeeksforGeeks、HackerRank 和 CareerCup 上的面试问题。
- 您在 Microsoft 面试中遇到的大多数问题都涉及对数组和字符串的一些理解。除此之外,还有链表和图/树数据结构的问题。
- 不要忘记在所有情况下测试您的代码。编写解决方案后,您必须测试您的代码,即使是最低限度的,因为如果您不这样做,积分将被扣除。
2. 系统设计回合
- 系统设计问题是一个开放式对话,这一轮主要由经验丰富的候选人进行,他们测试您设计和扩展基于技术的系统(如设计Gmail、youtube、uber等)的整体能力。
- 检查链接系统设计面试问题,系统设计面试准备,并检查 GeeksforGeeks
- 面试官通常对数据库、存储、日志等资源的选择感兴趣;功能的有效算法;如果系统出现任何问题,识别所有重要的数据和类;哪些功能会暴露给最终用户,哪些不会,以免搞砸整个系统?所涉及的系统和服务器的扩展;使用多线程、消息队列、缓存等。
- 扎实掌握各种数据库技术,它们如何扩展以及它们如何比较,框架和不同技术的知识在系统设计方面有很大帮助。
面试评价标准
面试结束后,所有面试官都会召开会议,与招聘经理和人力资源代表讨论、辩论和证明他们的个人评级。面试后,您将与其他候选人进行比较,面试官会根据以下给出的一些因素找到最好的候选人……
- 面试官在接受面试时通常有一个心态,如果他/她可以在他/她的日常工作中与候选人一起工作,那么在面试时不要表现出傲慢或自我的迹象。
- 面试官会检查你在实现代码时是否使用了合适的数据结构和算法。
- 面试官会注意到你如何优化解决方案的方法、你对编程语言选择的了解、你的编码速度、你错过的任何角落案例以及你如何分析时间和空间复杂度。
- 他们将检查您如何以合乎逻辑的方式传达您的思维过程以解决特定问题。他们还将检查您是否能够捕捉到提示并能够继续解决方案。
提示
- 在整个面试过程中学会“大声思考” ,否则面试官将不知道你在想什么。向面试官展示您对问题的思考过程以及您将采用什么方法来解决问题。
- 永远不要说你做不到。即使有一个你以前没有解决过的问题,或者看起来你解决不了的问题,也要不断从不同的角度攻击问题,面试官会给你提示。尽可能快地捕捉到提示并继续解决方案是很重要的。如果您无法捕捉到提示,则这是一个很大的危险信号。
- 在跳到解决方案之前,请务必提出相关问题,以使其更加清晰。在前往解决方案之前,请务必与面试官核对您的假设并清除您的所有疑虑。
- 您的面试官希望看到您代码中的 3 个关键内容。它应该运行得很快,不会占用比需要更多的内存,并且稳定且易于维护。做到这一点,你就已经领先于大多数人了。
重要链接:
- 微软面试问题
- 微软面试经历
- 必须做编码问题公司明智
- Glassdoor 微软软件开发工程师面试题
- 微软最常见的面试问题