亚马逊面试经历 | 380(校内)
亚马逊面试经历
线上回合
平台:HackerEarth
格式:20 道 MCQ,2 道编码问题
时间:90分钟
MCQ:数据结构、网络、操作系统等。
Q1) 最大值 j – i 使得 a[j] > a[i]
O(n) 中的预期解
Q2) 每个窗口大小的最小值的最大值
个人访谈
40 名候选人被选为 PI。 20+ 候选人在第一次 PI 后被拒绝。只有8-9进入最后一轮。最终选择了5个。
第 1 轮:(45 分钟)
问题 1)字符串的所有排列
问题 2) 重复排列
问题 3) 以 Zig-Zag 模式连接每个级别的节点。
第 2 轮:(60 分钟)
问题 1) 给定一个大小为 N 的数组,存在这样的模式: a[i]-M <= a[i+1] <= a[i]+M 。建议一种算法来搜索给定数组中的数字。
解决方案应该比 O(n) 更好。
他给出了诸如认为 M 远小于 N 等提示。我给了他很多方法,但无法给他一个具体的算法。他说我们稍后再讨论这个问题并提出了另一个问题
问题 2)想象一个网格形式的土地。大地的北方有敌人。和兵到地西。西方的士兵想知道北方是否有敌人。因此他们决定在网格区域以 45 度角放置镜子。如果他们在 (i,j) 放置一面镜子,那么他们可以看到第 j 列中的敌人。同样,他们会在网格的其他地方放置镜子,以查看其他列中的敌人。现在假设网格的某些单元格是岩石区域,并且不能在这些单元格中放置镜子。
例子:
|
Walls | Enemies
__________|
_ _ R _
Soldiers _ _ _ _
R _ _ _
_ _ _ R
Solution:
|
Walls | Enemies
__________|
_ _ R _
Soldiers / _ _ _
R _ _ /
_ / _ R
在上述解决方案中,/ 表示镜像。
使用上述配置,士兵可以查看第 0、1 和 3 列中的敌人。
请注意,由于岩石区域会阻挡视线,因此无法看到第 2 列中的敌人。
一行最多可以有一个镜子,每列最多可以有一个镜子。
您必须提供任何一种解决方案,以尽可能多地放置有用的镜像。
我通过首先标记出无用的单元格来解决这个问题。然后以贪婪的方式放置镜子。
时间复杂度:O(n*m)
问题 3) 你得到了一个正则表达式和一个字符串。如果字符串与正则表达式匹配,则返回 true,否则返回 false。
正则表达式只有 * ?和英文字母。
* 表示出现零次或多次的任何字符。
?表示恰好出现一次的任何字符。
例子:
regex: *aab?c
string: dbvaabcc
output: True
regex: *c*
string: ca
output: True
regex: ?c?
string: ca
output: Fasle
我使用递归解决了这个问题。探索所有可能的路径。
第 3 轮:(提高标准)90 分钟
这一轮是由一位资深人士进行的。他非常有经验,而且非常聪明。
他从我的简历开始。问了我的实习经历和实习期间做过的项目。我的项目是在 NoSQL 数据库上的,所以对它们有疑问。他让我解释为什么我的项目对组织很重要。我学到了什么,等等。他给了我非常棘手的场景,并问我如何在我的 NoSQL 数据库中处理这些案例。我将如何保护我的数据库免受黑客等攻击?很少有关于一致性、可用性等的分布式系统问题。项目讨论持续了大约 15-20 分钟。
Ques)然后他告诉我想象一大块文件,里面有很多句子。我必须以编程方式找出其中的重要单词。哪些词更能表达意思?
我给了他一些方法。我一直在说些什么。他相当满意并继续下一个问题。
问题)库存跨度问题
他问我上述问题的所有可能变化。
我不断地给出解决方案,他不断地修改它,设置约束等等。他用这个问题来审视我的概念。
问题)你有字符串0 和 1。根据公式重新排列给定的字符串:
f(i) = f(i-1)*f(i-1) – f(i-2)*f(i-2)
给出了 f(1) = 1 和 f(2) = 2。
所以,
f(3) = 2*2 – 1*1 = 3
f(4) = 5
f(5) = 16
…
按顺序排列,使您有 f(1) 个 0 和 f(2) 个 1,再有 f(3) 个 0,依此类推。最后附加剩余的 1 或 0。
Example:
string: 1011001010011 // 7 1's and 6 0's
output: 0110001111100
在 O(n) 中就地执行此操作。
他对我优雅的代码非常满意,并告诉我我做得很好。我立即被告知我将很快进行第四轮比赛。
第 4 轮:(50-60 分钟)
这一轮主要集中在计算机基础和 CS 概念上。在这一轮中,他没有问我任何 DS 或 Algo 问题。
他让我自我介绍,然后问我最喜欢的科目。
他问了我很多关于异常的问题。
1. 什么是例外?你如何使用它们?
2. 什么是运行时异常?举个例子。
3. 我们应该捕获一个 RuntimeException 吗?什么时候?为什么?如何?
4.使用异常等的优势
然后,他继续使用 Threads。
1.什么是线程?
2. 线程与进程?
3.线程的优点?
4.如何同步线程?
5. 使用线程的生产者-消费者设计。
6.线程生命周期
7. 线程如何通信?
要求我使用线程为银行应用程序编写面向对象的代码。仅应实施存款、取款和支票金额功能。
我告诉他我的脑海中没有这些概念,但他仍然坚持要我去做。
我在代码上苦苦挣扎,所以他告诉我离开它并转到计算机网络。
网络:
1.什么是FTP?与安全 FTP 有何不同?
2. TCP 是如何工作的?什么是三向握手?
3. 当我从网络浏览器发出 URL 请求时会发生什么?
4. 什么是点对点网络?它是如何工作的?
5. Linux 中的 scp 命令是什么?它有什么作用?
其他几个问题。
我在第四轮表现不佳,被拒绝了。
在我的准备过程中,GeeksForGeeks 给了我很大的帮助。感谢其他同学分享他们的面试经验。 🙂