📅  最后修改于: 2023-12-03 14:49:05.243000             🧑  作者: Mango
这篇文章将对我在亚马逊做为 SDE1 的面试经历进行介绍。在简历初审后,我通过了初始的电话面试,并且被邀请于亚马逊总部进行两轮面试。下面是我面试经历的详细介绍。
第一轮面试由一位亚马逊的高级工程师主持,持续时间约45分钟。面试开始时,他向我介绍了亚马逊的一些核心概念,并根据我的简历问了一些相关的问题。之后,他问了我一道算法问题:给定两个已经排序的数组,合并这两个数组并且保持排序。我给出了使用归并排序的算法,并且讲解了代码实现的细节。之后,他问我如何对这个算法进行性能优化。我提出了缓存数组长度的做法,并在代码实现中进行了讲解。
第二面由一位亚马逊的高级经理主持,持续时间约60分钟。他向我介绍了一个实际应用的案例,并对我进行了一些挑战和提问。之后,他问了我两个算法问题。第一个问题是设计一个发布和订阅(pub/sub)系统,我提出了一个基于事件的解决方案,并且描述了其关键技术。第二个问题是给定一份列表,如何在最短的时间内找到其中出现次数最多的元素,并描述了代码实现的细节。我给出了使用哈希表的算法,并且对复杂度进行了分析。
在面试结束后,我收到了一封感谢面试的邮件。大约在两周之后,我收到了亚马逊 HR 回复,他们对我进行了一个加薪的 offer。这是一个不错的经历,衷心感谢亚马逊的面试官们对我的认可和支持。
代码片段:
# 合并已经排序好的数组
def merge_sorted_arrays(arr1, arr2):
i, j = 0, 0
result = []
while i < len(arr1) and j < len(arr2):
if arr1[i] < arr2[j]:
result.append(arr1[i])
i += 1
else:
result.append(arr2[j])
j += 1
result.extend(arr1[i:])
result.extend(arr2[j:])
return result
# 使用哈希表寻找列表中出现次数最多的元素
def get_most_frequent_item(lst):
count = {}
for val in lst:
if val in count:
count[val] += 1
else:
count[val] = 1
return max(count, key=count.get)