准备接受五大公司的采访

根据我的印象,很多人对准备在顶尖高科技公司进行面试的话题很感兴趣,因此我决定写一篇文章,而不是我将来会提到的个人答案。 每个对访谈过程本身,您需要注意的事项,如何准备以及准备什么感兴趣的人-欢迎光临。

本文内容


  • 培训计划
  • 资源和文章清单
  • 工作面试技巧

在开始培训之前,我决定开发一个准备系统,以及准备过程中将使用的资源列表。

第一步是确定面试的要求,因此,有必要对面试中遇到的问题有一个很好的了解。 在Google搜索结果上进行了相当快速的搜索之后,我发现了这本书该书相当完整地收集了有关面试主题的有用技巧和示例作业。

在这一阶段,值得一提的是,本书中的代码主要是用Java / C ++编写的,这使其可读性很强。 因此,为了使面试更舒适,我建议您以计划在面试中使用的语言解决所有问题。

阅读本书之后,我能够识别出一些准备的关键主题。

我的列表如下所示:

  • 大o
  • 谜题
  • 应用架构
  • 算法和数据结构

大o


实际上,关于Big-O真的没有什么可谈的,您只需要了解和理解不同算法的计算复杂度的差异,了解如何确定算法的运行时间和内存消耗,了解优化算法的基本步骤等即可。
关于Big-O的文章和书籍不计其数,在几乎所有有关算法的输入课程中,都有关于该主题的讲座。 在habr上,还有关于此主题的一系列文章habr.com/post/196560

谜题


免责声明-我本人在面试中没有遇到难题,但我听说它们可能会遇到。

在准备方面,我看到难题的方式实际上是相同的算法,只是没有参考特定的数据结构或算法范例。 因此,组织难题的准备工作非常困难。 我能够找到的最佳解决方案是简单地“动手做”,解决40至60个难题,并在某种程度上了解如何解决难题。 随着时间的流逝,大脑开始了解要注意的内容以及任务的简单设计:例如,难题中指示的所有数字通常不只是那样。 这不仅是“仅用两根绳子”,而不仅仅是“在25分钟内烧光”。 通常,难题不包含无用的定量信息。

应用架构


了解构建应用程序体系结构具有基于知识的经验。 要成为一名优秀的建筑师,要想成为一名优秀的架构师是非常困难的,而单纯地通过反复试验来研究架构则效率很低。 由于这些原因,要“准备”面试的建筑部分相当困难。 在某种程度上,这部分的准备工作是您的整个职业生涯。 但是,刷新某些方面仍然是一个好主意。 例如:表示架构。 即使是那些在关键时刻精通UML的人,也可以简单地忘记视图的某些细节或链接的特定视图。 另一个例子是流行的设计模式。 尽管事实上经常使用它们,但并不是所有的东西都会立即使用,也不是按需提供,以在此处和现在提供有关它们的知识。 尝试自己完成几轮测试并找出问题区域。

算法和数据结构


面试中最重要,最有问题的时刻之一。 重点放在解决这些问题上,快速有效地解决这些问题的能力非常重要。
为了进行准备,我整理了一个最常见的数据结构和算法列表,结果如下:

  • 数组
  • 弦乐
  • 二叉树
  • 二进制搜索树(BST)
  • 图表
  • 链表
  • 矩阵
  • 叠放
  • 特里
  • 回溯
  • 分而治之
  • 动态编程
  • 排序
  • 贪心

在每个部分中,您都需要掌握一些技巧。 一个典型的例子是链接列表上的“慢”和“快”滑块。 如果不了解或不了解此概念,实际上不可能有效解决链表上的许多问题。 或BFS / DFS图搜索算法。 通常,面试的许多任务要么是对知名概念的修改,要么是多个概念的组合。 因此,学会解决和认识每个数据结构/算法中的基本任务非常关键。

就个人而言,我看了斯坦福大学的一些讲座,在我给自己写了每个类别的5-10个作业后,就这样简单地填补了我的手。 这需要很多时间和精力,但值得这样做。

以下是一些我用来准备和搜索作业的资源:

https://www.quora.com-仅列出约500个有关各种主题的任务,以及C ++解决方案。 非常方便,有时有几种解决方案,其中一种比另一种更为理想。

https://www.hackerrank.com是包含类别和主题的便捷资源,并且具有适用于20多种语言的内置编译器。 帮助快速有效地填充您的手。

https ://www.glassdoor.com-直接包含采访中的问题,有时还包含来自社区的答案。

对我来说,这两个就足够了,但是如果您还不够,那么这3个就可以更好地了解进一步发展的方向。

请记住,在查看提示之前,尝试自己做出答案和做出决定非常重要。 因此,您实际上迫使自己去思考并寻求解决方案,即 直接模拟面试的气氛。

不要仅仅使用计算机来解决问题。 尝试在木板或纸上练习 许多公司都以这种方式进行采访。

在您看来,这是相同的,但实际上,在纸上实践会带来很多惊喜,从您需要在编写之前首先提出整个解决方案的事实开始(删除和退格键不在此处,删除和移动行非常昂贵),最后是应该正确保存工作表/板上的空间,因为 它是有限的。

面试中要注意的是解决问题的信心和步调,思考所有可能的输入选项,处理错误和各种情况。 因此,仅编写一个“可行的”解决方案是不够的。

好的建议是编写编译后的代码。 是的,毫无疑问,最主要的是解决问题及其变体的能力,没有人会过多关注1个逗号,但这不应该包含在规则中。 您编写的是代码和实际解决方案,而不是伪代码和草图。

在面试过程中-尽量不要结束自己的创造力,许多决定都需要从非标准的角度来考虑。 如果您不在家,请随时寻求帮助,这不会大大提高您的机会,但是您也不应默默站立45分钟。

本文可能不是完整而全面的指南,但是它将帮助您理解朝哪个方向发展。

祝大家做准备。

Source: https://habr.com/ru/post/zh-CN423329/


All Articles