📜  亚马逊 6 个月 SDE 实习面试经验(2020 年 11 月)(1)

📅  最后修改于: 2023-12-03 15:21:42.162000             🧑  作者: Mango

亚马逊 6 个月 SDE 实习面试经验(2020 年 11 月)

背景介绍

我本人是一名计算机科学专业的学生,对计算机编程有浓厚兴趣,并希望能进入互联网公司实习。在经过自己的努力和准备之后,我顺利进入了亚马逊公司参加了为期6个月的SDE实习。

面试过程
初试

亚马逊公司的初试主要是在线测试,分为两部分:调查问卷和在线编程题目。

调查问卷

调查问卷主要是了解应聘者的背景、技术能力、个人经验以及职业愿望等内容,这一部分比较简单,使用英语填写即可。

在线编程题目

在线编程题目是为了测试应聘者编程能力和解决问题的能力。这一部分主要包括两个问题,第一个是字符串压缩,第二个是LCS问题。

字符串压缩

给定一个字符串,编写一个算法将其压缩成重复字符的数字表示。例如,字符串 "AAABBCDD" 应该变为 "A3B2C1D2"。

def compress_string(s: str) -> str:
    if not s:
        return ""

    n = len(s)
    res = []
    i = 0

    while i < n:
        j = i

        while j < n and s[j] == s[i]:
            j += 1

        res.append(s[i])
        res.append(str(j - i))
        i = j

    return "".join(res) if len(res) < n else s
LCS问题

给定两个字符串 s 和 t,编写一个算法来求它们的最长公共子序列(LCS)。例如,对于s = "abcdefg"和t = "abcdfg",它们的LCS为 "abcg"。

def longest_common_subsequence(s: str, t: str) -> str:
    m, n = len(s), len(t)
    dp = [["" for _ in range(n + 1)] for _ in range(m + 1)]

    for i in range(1, m + 1):
        for j in range(1, n + 1):
            if s[i - 1] == t[j - 1]:
                dp[i][j] = dp[i - 1][j - 1] + s[i - 1]
            else:
                dp[i][j] = max(dp[i - 1][j], dp[i][j - 1], key=len)

    return dp[m][n]
复试

复试主要是在线麦克风面试和在线代码面试。

麦克风面试

麦克风面试主要是测试应聘者的英语沟通和解决问题的能力,面试官会根据简历和初试表现提问应聘者的个人能力和经历。

代码面试

代码面试主要是测试应聘者的编程能力和解决问题的能力,面试官会提供几道编程题目,并要求应聘者在线完成编程,同时可以向面试官提问。

二叉树的前序遍历

给定一个二叉树,编写一个递归算法来返回其前序遍历。例如,给定二叉树 [1, null, 2, 3],返回 [1, 2, 3]。

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
        
def preorder_traversal(root: TreeNode) -> List[int]:
    res = []

    def helper(root):
        if not root:
            return

        res.append(root.val)
        helper(root.left)
        helper(root.right)

    helper(root)
    return res
最长回文子序列

给定一个字符串s,找到其中最长的回文子序列。例如,对于字符串s = "bbbab",其最长回文子序列为 "bbbb"。

def longest_palindromic_subsequence(s: str) -> str:
    if not s:
        return ""

    n = len(s)
    dp = [["" for _ in range(n)] for _ in range(n)]

    for i in range(n):
        dp[i][i] = s[i]

    for i in range(n - 1, -1, -1):
        for j in range(i + 1, n):
            if s[i] == s[j]:
                dp[i][j] = s[i] + dp[i + 1][j - 1] + s[j]
            else:
                dp[i][j] = max(dp[i + 1][j], dp[i][j - 1], key=len)

    return dp[0][n - 1]
总结

亚马逊的SDE实习面试难度比较大,需要应聘者有扎实的编程能力和解决问题的能力。在准备过程中,需多刷题,熟悉并熟练掌握各种编程语言和数据结构算法。另外,要注意英语沟通和表达能力,面试时发挥自己的优势和亮点,展示个人实力和能力。