amazon 三轮vo 过经

视频面试

刚刚收到亚麻的offer啦!

Timeline:

9.6海投
9.11收到incomplete application邮件
9.20 oa1 invitation
9.24 finish oa1
9.25 oa2 invitation
9.29 finish oa2
9.30 oa3 invitation
10.4 finish oa3
10.18 pass oa3
10.30 vo invitation
11.4 三轮vo
11.8 dashboard move to another job
11.9 offer email

第一轮:
两道bq:

  1. quick decision,我把准备回答deadline问题的答案变了变
  2. 帮助别人的经历,我把准备回答disagreement问题的答案变了变,变成最后怎么帮助他们了。

coding:
一个matrix代表warehouse,1是障碍物,0可以通过,某一点放了一个扫地机器人,问哪些格子能被机器人扫到。
recursive dfs秒答。
follow up1是stackoverflow了怎么办,于是又用bfs写了一遍,其中他还提到了dfs的iterative写法,但是楼主平时没练过不敢写。后悔没用dfs iterative写,这样空间复杂度更低。
follow up2机器人可以随便选一个地方放,要求被放置以后clean的area最大,就是lc刘久武。楼主当时看答案只记得dfs recursive的写法了,bfs的写法直到最后才想起来。(以后刷题再也不用dfs recursive写法了呜呜)。
简单描述了一下bfs的解法就没时间了。问问题环节问了bias for action出了问题谁负责,答如果action是reversible的那么没关系,如果action不是reversible,比如说影响了很多的用户,而用户的心一旦失去就很难恢复,那么会比较谨慎。面试官回答问题也紧扣custom obession,牛逼。

第二轮:

  1. 有没有学什么东西,如何学习的,为什么学习
  2. 讲一个需要向别人寻找帮助的例子

coding:
这一轮是design,相当曲折。design一个set,每个entry有一个过期时间。
楼主上来clarify,问要实现什么功能以及需不需要一个clean method周期性检查,面试官说“do whatever you want”。从此开始放飞自我,用了lc上的treemap以time为key的解法。
然而面试官似乎对这个解法有意见,并且死活不让用treemap的submap方法。
然后开始问我你这个map key和value要不要换一下,你这个加入功能要不要先检查一下,你需不需要个get功能,你这个get功能是不是缺少了啥。于是乎基本上是在面试官全程手把手的教学下换成以entry为key的解法并实现了其他功能。
follow up1如果内存有限制怎么办。设计了一个变量,满了才运行clean method。
follow up2多线程怎么办。楼主回答的是要想办法不让两个加入的功能interleaving导致满了还在插入,面试官语塞。
最后问了下时空复杂度。
结束的时候面试官露出奇怪的表情(两种解读:1鄙视,2对你放水太过),wish me good luck,超时下线。

这一轮答完十分慌张,以为要挂。
反思:
没有clarify是clean periodically还是lazy delete,以及每个方法call的频率。
对lazy delete思路不熟,因为平时lc上很少有人这么设计。实际上面试官一开始只要一个entry到time的map,我想过头了。
多线程的地方后来和别人讨论应该先考虑读写的问题,比如如何在写入(add,get,remove)的地方分别加锁,我答的有点跳步了。。。。

第三轮:

  1. 最近在做什么项目
  2. Tell me a time you took a calculated risk and what you did to mitigate that risk,实在答不出,最后说了一个自己的一个项目一开始不确定有没有市场,实现后一开始没访问量后来改了feature就有访问量了,硬扯到risk上去,面试官说这个还可以。

coding:
给一个stream of characters,寻找firstUniqueWord。
先写了一个naive解法的,然后面试官说空间复杂度太大了,让我压缩,直到最后几分钟终于想出来了,但是是two pass,好在面试官说主要压缩空间复杂度,时间复杂度已经ok了。
然后面试官问了test cases。最后回答了几个问题下线。想到第二轮没答好,第一轮和第三轮又只是在最后一刻才搞定最优解,跟面试官讲了自己挺worry的,他安慰我最后是要一起讨论的,一轮没答好也没关系。

事后去看lc对这道题的讨论,最多的解法是用linkedhashmap,可以做到one pass。又跟别人讨论了一下,因为linkedhashmap实际上是两个数据结构所以空间复杂度也不见得更低,再加上每一个操作时间上overhead更大,所以我这个解法也是可以接受的吧。

刷题要点:
光刷lc是不行的,因为亚麻这样的公司follow up问你数据量大了怎么办,leetcode的有些答案不合适。

coding回答要点:
面试官像心中有一个list,答到哪些点就是有加分的,所以得多交流,就像简答题得多写一下,指不定哪个点就是加分点。

bq答题要点:
我的面试官都挺好的,每次都是说到他们要听到的点才让过,不然的话会再让我换个例子,直到他们说“这个例子还可以”。然后你说的时候有的面试官会开始噼里啪啦的打字,应该是每一个细节都会被记录下来,所以应该可劲吹自己,这样他们可以写到report里面。

new grad没有项目怎么办:
自从收到oa1以后开始疯狂寻找附近的hackathon,每个周末去参加,在面试前一共参加了三个,这样communication,leadership,teamwork,disagreement,deadline,initiative啥的题全有了。最后手头上一共有六个项目,最好的准备方法是每一个项目都能够回答所有问题,这样的话虽然项目少,但是六道题也可以做到项目不重样。我有一轮用了同一个项目答两道题,就被要求换一个。据说有多少个不重复的项目也是考察点。

最后感觉亚麻还在大量招人哇,祝大家offer多多!!

补充
第二题比较像lc散误纠。我最后的实现更像 求教一道狗家的面试题 这个帖子里讨论的。不过清理的标准是expireTime < curTime。

补充内容 (2019-11-9 12:53):
第三题是这个https://leetcode.com/discuss/int … rest-of-the-stream/

Q2 foollow up多线程那个重点是在哪里呀,大意是说,假如容量还剩几个,然后多线程同时执行插入就会爆容量是吗,那你的方法是不让interleave的意思是把插入的方法加锁之类的吗?

我是这样答的,但是可能没答在点上,而且答完了面试官很无语。

他的问题很笼统,就是如果是多线程怎么办?

感谢!顺便问下楼主这道题是怎么实现two pass的?我想到的是用trie,也是two pass,一遍建树,一遍查询?

我是弄了一个hashmap记住word和index,重复的word的index就标为-1表示不在考虑范围内,然后对map的key过一遍根据最小的index去update result word。