这篇文章在我的草稿中存在了很长时间。我终于从繁忙的日程中抽出一些时间来完善它。
第一个问题很快就出现了我为什么要写这篇文章。网络上已经有成百上千的类似汇编讨论了这一点。
好吧,以下原因迫使我这样做:
- 作为一名 GFG 版主,我通过各种社交媒体(FB、LinkedIn、Quora、InstaGuide)和各种邮件客户端收到了许多读者的请求,要求指导和指导如何为微软、亚马逊、谷歌等顶级跨国公司做准备
- 经历过类似的旅程,见证了很多朋友的成功,我觉得应该分享知识。我的经验可能对碰巧追求与我曾经的目标相同的新一代有用
请注意,这篇文章纯粹是我的学习、我多年来所遵循的以及我的经验的反映。这不是根据需要即兴发挥的唯一方法——您的编码技能、加强 DS 和算法以及提高解决问题的能力。我再说一遍,这不是唯一的方法。有些事情我因为时间限制而无法遵循,或者因为我没有意识到而没有遵循。如果我错过了这里值得一提的任何内容,请发表评论。
语
多年来,语言一直是有志者之间争论的话题。掌握一种语言,了解它的来龙去脉,而不是从一种语言跳到另一种语言总是好的。为什么?因为有时您可能会遇到这样的情况,当您遇到问题时,您开始想知道应该选择哪种语言,而您的注意力会受到影响。当您真正应该专注于解决问题时,实施就晚了。然后,在编码时,您计划在两者之间更改语言。这对你的面试没有好处。如果你能用“X”语言解决一个问题,最终你也会用“Y”语言解决它。学习一门新语言只是时间问题。一种语言在 5 年后可能不会像现在那样广泛使用。从长远来看,您解决问题的能力至关重要。
我通常在 C 和 C++ 之间切换。如果时间紧迫,我更喜欢使用 STL(标准库函数)而不是编写我自己的链表版本。如果我想开发一个项目,例如一个 android 应用程序,我会选择托管语言,因为它更容易。如果我想自动化一些事情来节省我的时间,比如回复和喜欢我的生日祝福, Python脚本是一种节省的恩典。你明白了,对吧?掌握一种语言并根据要求学习其他语言。
数据结构和算法
数据结构和算法非常重要,是解决问题的支柱。
对于初学者来说,Sahni Horowitz 的《C 数据结构基础》很好。阅读之后,您应该能够理解基本的数据结构、它们是如何实现的以及可以使用它们的更少示例。不要期望通过这个学习高级 DS。在您的基本概念清晰并且您可以用您选择的语言轻松实现它们之后,您就可以开始学习算法和解决问题了。
许多站点(包括 GeeksforGeeks)都以非常临时的方式呈现问题,没有难度级别。这让初学者感到困难,因为他们不知道他们正在尝试的问题的难度级别。在熟悉基础知识后,Narasimha Karumanchi 使数据结构和算法变得容易,这是一本很好的读物。它有很好的按难度级别组织的问题集合。只要确保尝试自己解决问题,而不是急于寻求解决方案。一旦您对 DS 有了充分的了解并对解决问题有了一定的信心,就可以跳转到在线门户网站并从您选择的主题开始解决问题。 GeeksforGeeks 是一个很好的开始。
对于算法,Cormen 的算法介绍是必读的。
高级数据结构
有时,基本 DS 并不能用于解决问题,您需要了解高级 DS。日常问题,例如对电话联系人列表实施基于前缀的搜索,以从混乱的字符序列中查找字典单词,都需要特殊类型的 DS。其中有很多——TST、Trie、后缀树、后缀数组、斐波那契堆、段树、间隙缓冲区、绳索、跳过列表、K维树等。虽然了解这些 DS 的实现很好,但我建议也知道何时使用它们。
解决问题
所以你有一把枪,了解如何使用它,可能以前用过它。如果你要打一场战争,你不会喜欢依赖你的业余经验。你宁愿努力练习来拯救你的屁股。现在试着从解决问题的角度来思考。你知道什么是DS。但您还需要知道何时使用。欢迎来到解决问题的世界。给你一个问题,你被要求解决它。这个问题可以是从简单的谜题到实现用户场景的任何问题。您一定已经注意到 LinkedIn 中的连接度功能。你将如何实施它?您的方法是否考虑了可扩展性?当用户群增加十倍时,您的代码会崩溃吗?这是顶级跨国公司通常寻找的最重要的技能。你如何处理问题?你如何将其划分为模块?你如何解决它们中的每一个,然后将它们组合起来?
动态规划
我分离出DP是因为它是一种难以掌握的怪物。不管你过去解决了多少问题,一个新的DP问题总能给你带来惊喜。你练习得越多,找出规律的机会就越大。谷歌对 DP 很特别。如果你正在为谷歌做准备,你应该预计每轮面试至少会有一个 DP 问题。练习 DP 部分来自:
- GeeksforGeeks – 动态规划
- TopCoder——动态规划——从新手到高级
竞技编程
竞争性编程在提高解决问题的能力和在时间压力下执行的能力方面发挥着非常重要的作用。参加各种在线门户网站,如 TopCoder、CodeChef、SPOJ。这是关于编程运动入门的帖子。
设计和测试
所以你擅长 DS 和 Algos。您可能也擅长解决问题,并且想出了具有不同时间和空间复杂度的不同方法。您在竞争性编程中解决的问题是明确定义的,并且必须在没人可能使用的环境下工作。如果你被要求实现一个用户场景怎么办。问题陈述通常含糊不清,您需要进行大量讨论才能解决歧义。这就是设计出现的地方。您将如何设计重做-撤消功能?您将使用哪些数据结构在 Web 浏览器中存储历史记录?您将如何在地址栏中实现自动完成功能?假设亚马逊想要构建一项功能,可以从任何设备恢复存储在云中的视频。你会使用什么数据结构?你将如何扩大规模?您的设计是否考虑了并发问题?表现如何?如果您和您的女朋友共享同一个云帐户并尝试从不同设备播放相同的视频怎么办?
现在您已经很好地考虑了设计,想出了不同的数据结构来使用,并考虑到优点和缺点。在实施时,您必须处理极端情况。您必须了解 Youtube 视频观看次数中的整数溢出问题。在实施的过程中,他们从未真正想过视图计数可以超过整数变量可以容纳的数量,并且 BOOM,视图计数循环回零。
在功能上线之前,必须对其进行良好的测试。练习一些测试题也是很好的。您将如何在 MS Word 中测试插入图像功能?剪切复制粘贴功能怎么样?你将如何测试 Temple Run 游戏?尝试编写所有可能的测试用例以及您将如何在代码中处理它。编写健壮的代码非常重要。如果你在早期阶段就处理好这些事情,你就可以避免愚蠢的错误(并增加你在面试中被选中的机会)。
还有什么?
对操作系统有深入的了解。高尔文的恐龙书很好读。了解网络的工作原理并深入了解 DBMS。
恢复建设
第一印象是最好的。简历是 HR 用来决定是否给你打电话面试的第一件事。他们有数百个。所以他们通常会扫描它 20 秒到 2 分钟。它应该干净、简洁和优雅。提到的每个词都值得它占用的空间。经验法则是,如果您的经验不足一年,简历的大小不应超过一页(少数例外)。
需要注意的几点:
- 维护标题以适应姓名、电子邮件 ID、地址和联系电话等信息
- 提及与每种语言相对应的专业水平。例子:精通C,擅长Java
- 如果您提到一个项目,请写下您的主要学习、对团队的影响和 .如果此项目在线(应用程序),请不要忘记包含链接。这将表明您构建了一些正在被人们使用的东西。猜猜看,这就是公司所做的,构建产品,根据用户反馈稳定它,接受新功能请求等等。
以下是 Gayle 的一些有用提示——申请人在为科技公司写简历时常犯的错误是什么?
如何申请微软?
我收到很多消息,要求我帮忙推荐他们。当我问他们对 DS 和 Algos 感觉如何时,他们说足够好。然后我将我的问题改写为他们在 GeeksforGeeks 解决面试经历时的感受。他们要么没有听说过 GeeksforGeeks,要么从未读过。这并不奇怪。 GeeksforGeeks 仍在增长。但是当我通过调整已经存在的著名问题向他们询问有关 DS 的问题时,他们只说他们以前没有解决过这个问题。请不要那样做。梦想是好的,但只有当你努力让它成为现实时,它才会实现。
如果您无法通过面试,根据公司政策,您将再次等待 6-12 个月才能再次申请。现在进入正题,您可以通过“职业”页面或通过推荐来申请 Microsoft 的职位。推荐通常会增加接到面试电话的机会,因为您的简历是通过 Microsoft 认为是优秀工程师的人送到系统的。你如何要求转介?这很简单。将您的简历转发给您认识的在那里工作的人。除非你的简历中填满了不符合公司要求的内容,否则没人会说不。经验法则是我们相信解决问题,如果您擅长于此,我们很乐意在这里见到您。请记住,每个人都希望与聪明的人一起工作。这通常适用于任何公司,而不仅仅是微软。
该做什么和不该做什么
- 实践,实践和实践
- 养成编写干净可读代码的习惯(避免使用 i、j 之类的变量名称)
- 确保处理所有极端情况
- 用笔和纸练习代码。在面试中,您无法使用编译器
- 不要把解决方案混为一谈。尝试自己解决
- 思考解决问题的不同方法,并思考为什么应该优先考虑一种方法
资源
我在 Quora 上回答了几个与面试准备相关的问题。您可能会发现博客中缺少一些内容,这是有意避免重复工作。请在此处阅读我的技术答案。
资源(我还没有谈到):
- 破解 Gayle Laakmann 的编码面试:面试前必须阅读一次。它涵盖了面试官对你的期望、如何处理行为问题和一些有趣的问题等方面。它将彻底改变您对设计和测试问题的看法
- GeeksforGeeks:问题的圣经(有很好解释的解决方案)。确保您不要急于寻求解决方案。无论花费多少时间,尝试自己解决问题。随着时间和诚实的练习,你应该会变得更好
- CareerCup:一大堆问题。虽然您不能依赖解决方案,但它提供了一个用于讨论问题的丰富社区。我发现它很适合讨论设计问题
- 欧拉计划:数学爱好者的天堂。您在纸上使用一些公式解决问题,然后编写代码以获得最终解决方案。从该站点解决至少 40 个问题。