📜  亚马逊面试经历|设置 304(在校实习)

📅  最后修改于: 2021-11-10 06:25:18             🧑  作者: Mango

资格标准:CGPA >= 5.0

第一轮:技术测试
在 HackerRank 上进行的在线测试,包含 20 个 MCQ 和 2 个编码问题。

  • 编码问题 1:查找访问所有车站的游览
  • 编码问题 2:数组由 0 和 1 组成。翻转操作是您转 1 的操作? 0 和 0 ? 1.你必须对一个子数组最多做一次“翻转”操作。然后最后显示一次翻转操作后数组中可以包含的最大数量 1。
    在这两个问题中,都接受了蛮力解决方案,即 O(n^2)。

MCQ的
它们非常简单,您只需要了解有关调度算法、线程和时间复杂度的基本知识。在本节中,主要部分来自操作系统。
我建议您查看有关操作系统的最后一分钟笔记,它们是我在在线回合和进一步回合中的救星。

我们被告知将只有 2 轮技术回合和无人力资源回合。

面对面第 1 轮:(约 1 小时)

  • 问题1:折叠一个LinkedList :1 ->2->3->4->5->6 转换为1->6->2->5->3->4
    我的方法:
    • 步骤1:找到链接列表的中间部分。
    • 步骤2:将链表的后半部分反转,保持链表后半部分的头部为head2。
      上半场
      1->2->3
      逆转后的下半场
      6->5->4
      现在同时遍历两半,然后从第一个列表中获取一个节点,然后从第二个列表中获取一个节点,这样做直到到达第一个和第二个列表的末尾并创建新链接并维护到下一个节点的链接。让我涵盖所有角落案例。
      最后让我在纸上给出一个正确的工作代码。
  • 问题2:
    如果 BST 中的节点之一不在正确位置,则将其放置在 bst 中的正确位置。首先通过一些观察,我发现将有 2 个节点顺序错误。
    所以这个问题变得类似于交换 bst 的两个节点,纠正 bst。我给出了一个按顺序遍历的方法,但遗漏了一些角落案例,在给出了一些之后,他告诉我我错过了更多的测试案例,然后他转向了下一个问题。
  • 问题 3:
    一个音乐播放器有 N 首歌曲,你有一个随机数生成器 rand(n) 它从 [0,n-1] 生成一个数字。你的任务是从给定的 N 首歌曲中随机播放一首歌曲,这样每首歌曲都播放一次,播放完所有歌曲后,您的程序应终止。
    • 方法一:
      我们将使用 HashMap 来存储播放歌曲的索引,然后每当播放随机歌曲时,检查它在 HashMap 中的出现,如果它已经存在,则再次生成一个随机数,直到 HashMap 的大小为 N。
      他告诉我这是一个错误的代码,并让我找出错误。
      代码的问题是在最坏的情况下它可能以无限循环结束,假设第一次 rand(n) 生成一个数字 k (k面试官给的提示:如果你可以交换一些歌曲怎么办?
    • 方法二:
      步骤 1:取一个变量,最后将其初始化为 N。
      第二步:用rand(last)生成一个随机数,设为k。
      第 3 步:交换(a[last-1],a[k])
      第四步:最后——;
      第 5 步:转到第 2 步,直到播放完所有歌曲(最后!= 0)通过最后一个变量,我只需跟踪播放的所有歌曲(最后)。
      他对这种方法很满意。

第一轮结束。

面对面第 2 轮(约 1.5 小时)

  • 问题 1:
    他从图表开始,要求找到一个人的追随者,告诉他做一个 bfs 和一些与 bfs 相关的基本问题。
  • 问题 2:克隆一个带有随机指针的 LinkList。
    用Hash Map给了他一个解决方案,他不满意让我在O(1)额外空间做。
    我想了 20 分钟,但无法采用 O(1) 方法。
    面试官给的提示:如果你改变了原始列表中的一些链接怎么办?
    再次思考了大约 10 分钟,仍然无法使用 O(1) 方法。

然后他让我编写 HashMap 方法,在编码时我想出了 O(1) 额外空间的方法。完成代码后,我告诉他另一种方法,他很满意,第二种方法不需要代码。

  • 问题 3:如果您有 2 个非常大的数字,您将如何将它们相加?告诉他 BigInteger 在Java使用它。
    I : 不使用它。
    取两个字符串,简单地将每个字符转换为数字,然后将它们相加。
    I:不,您不必将字符转换为数字。
    取2个阵列。
    I:用数组告诉约束。
    然后我终于告诉他使用LinkList。
    然后最后告诉我在不反转列表的情况下添加它们的方法。(通过递归完成)
  • 然后还有许多与快速排序、堆、散列、各种算法的时间复杂度相关的小问题。
    Compiler 中有哪些不同的阶段?
    我没想到!
    我思考了大约 2 分钟,并尝试尽可能多地收集我在 Compiler design 中读到的任何内容。然后我给了他编译器的4个阶段:词法分析器,语法分析器,语义分析器,中间代码生成,然后告诉他我不记得更多了,因为我没有准备CD并且很久以前研究过。
  • 然后他问了我 OS 的问题。
    什么是线程?
    为什么线程比处理更好?
    什么是颠簸?
    LRU是什么?
    还有一些关于操作系统的基本问题。

这就是采访的全部内容。

结果:选中😀

祝所有极客在他们的安置季节好运!!

如果您喜欢 GeeksforGeeks 并愿意做出贡献,您也可以写一篇文章并将您的文章邮寄到 review-team@geeksforgeeks.org。在 GeeksforGeeks 主页上查看您的文章并帮助其他 Geeks。

亚马逊的所有练习题!