📜  亚马逊面试经历 |设置 276(校园 SDE-I)(1)

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

亚马逊面试经历 | 设置 276(校园 SDE-I)

背景

该面试是在亚马逊校园招聘活动中进行的,职位为 SDE-I,面试评级为 Level 5。面试官是一名 Senior SDE。

流程

我的面试流程如下:

第一轮(在线写 code 软件)

这一轮面试时长 70 分钟,主要考察的是编程能力和细节注意力。

  • 题目:给定一个字符串 s 和一个单词字典,找出 s 所有可能的合法分割方案。
  • 解题方法:动态规划。从前往后,对于 s 的每一个前缀子串,逐个检查其是否为单词,如果是,那么递归处理剩余子串,最后返回所有方案的列表。
  • 语言:Python
  • 代码片段:
def dfs(s, path, word_dict, res):
    if not s:
        res.append(path[:])
        return
    for i in range(1, len(s) + 1):
        prefix = s[:i]
        if prefix not in word_dict:
            continue
        dfs(s[i:], path + [prefix], word_dict, res)

def word_break(s, word_dict):
    dp = [[] for _ in range(len(s) + 1)]
    dp[0] = [[]]
    for i in range(1, len(s) + 1):
        for j in range(i):
            if dp[j] and s[j:i] in word_dict:
                for path in dp[j]:
                    dp[i].append(path + [s[j:i]])
    res = []
    dfs(s, [], word_dict, res)
    assert res == dp[-1]
    return res
第二轮(技术面试)

这一轮面试时长 60 分钟,主要考察的是数据结构和算法。

  • 题目:给定一个有向图,请判断是否存在环。如果存在,返回其中任意一个环的路径。
  • 解题方法:深度优先搜索。遍历每一个节点,对于每一个出边,如果指向的节点已经在 DFS 树的祖先中,那么就说明存在环,返回环上的节点列表。
  • 语言:Python
  • 代码片段:
def dfs(u, graph, visited, path):
    visited[u] = 1
    path.append(u)
    for v in graph[u]:
        if not visited[v]:
            if dfs(v, graph, visited, path):
                return True
        elif visited[v] == 1:
            path.append(v)
            return True
    visited[u] = 2
    path.pop()
    return False

def find_cycle(graph):
    visited = [0] * len(graph)
    path = []
    for u in range(len(graph)):
        if not visited[u]:
            if dfs(u, graph, visited, path):
                return path[path.index(path[-1]):]
    return None
第三轮(经理面试)

这一轮面试时长 45 分钟,主要考察的是项目经验和软技能。

  • 题目:讲述一次你在项目中遇到的问题,以及你是如何解决的。
  • 回答:我在上一份实习工作中,负责开发一个多语言的本地化平台。其中一个难点是如何在运行时动态加载本地化资源,实现运行时切换语言。我最初的想法是将本地化资源存储在本地文件系统中,并通过某种机制将语言切换的请求传递给后端服务器。但是这种方案的缺点是无法立即切换语言,需要等待资源下载完成后才能生效。后来我想到了一个更好的方案,即将所有资源打包成一个压缩包,存储在 CDN 上,通过 CDN 动态加载资源,并通过 JavaScript 代码实现本地化切换,这种方案在用户使用体验上更加平滑,效果也更加理想。
总结

这次面试整体来说比较顺利,我的编程能力和项目经验得到了认可。但是在技术面试中,我发现自己在算法上还有一些欠缺,需要加强。此外,我的沟通能力还有待提高,需要更多的练习。总之,我会继续努力,争取成为一名优秀的工程师。