新鲜出炉,Amazon SDE 面经(电面+Onsite)
刚刚参加完Amazon的面试,来写一下自己的面试过程。我申请的是SDE-1的职位。面试流程是2轮电面,4轮Onsite.
一开始是电面。
第一轮 电面 1
- 翻转字符串 reverse words in a string。
- LintCode原题:http://www.lintcode.com/en/problem/reverse-words-in-a-string/
- 参考答案:http://www.jiuzhang.com/solutions/reverse-words-in-a-string/
- follow-up: 翻转的时候如何处理空格
- 划分数组。
第二轮 电面2
- 链表求和。要求O(n)的时间复杂度。
- Find all ancestors of LCA. 给出两个节点,打印出两个节点的所有公共祖先节点,算法也就是找出最近公共祖先(LCA),然后打印root到LCA的所有节点。
- LintCode原题:http://www.lintcode.com/zh-cn/problem/lowest-common-ancestor/
- 参考答案:http://www.jiuzhang.com/solutions/lowest-common-ancestor/
- follow-up: 问了一些关于堆和宽度优先搜索(heap & BST)的知识点。像是什么时候用宽度优先搜索,这个在《九章算法班》有讲。
电面结束后几天,HR告诉我面试通过了,并安排我去参加Onsite.
第三轮 Onsite 1
面试官先是问了我一些简历上的问题,比如我简历上的项目经验,问的还算比较细。
接着问了1道算法题。
- 一道链表求和的题。假定用一个链表表示两个数,其中每个节点仅包含一个数字。假设这两个数的数字顺序排列,请设计一种方法将两个数相加,并将其结果表现为链表的形式。 要求不可以改变链表的顺序
第四轮 Onsite 2
面试官先问了我为什么想来amazon,接着问了我一些以前的实习经验。
然后问了两道算法题。
- Find smallest range containing elements from k lists
- 在一个文件中,找出所有的Anagram
第五轮 Onsite 3
这一轮纯粹是写代码。
- Ftinding max and 2nd max in an array by minimum times.
- 实现一个类似于并查集的数据结构,可以合并一些点的集合,并且查询点所在集合的点个数等等
第六轮 Onsite 4
问了两道算法题,都要求分享时间复杂度了。
- 题目不是记得很清楚了。是一道排序的题目。跟Lintcode这道题目有点像:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。给你一个数组,求出这个数组中逆序对的总数。
LintCode 题目地址:http://www.lintcode.com/zh-cn/problem/reverse-pairs/。
相似问题的参考答案:http://www.jiuzhangcom/solutions/reverse-pairs/
2. 是一道数据结构的问题。类似于设计一个LRU。
1. LintCode 相似问题:http://www.lintcode.com/zh-cn/problem/lru-cache/
2. LintCode 相似问题的参考答案:http://www.jiuzhang.com/solutions/lru-cache/