蠢货的超长篇幅面经 amazon video (附包括Wayfair等多家公司面经)

昨天下午一口气面完了 Amazon, Wayfair 两家的 final round. 身体和精神都已经到了极限,心情没有想象中的轻松,反而更加压抑和疲惫,现在把面经回馈,希望能帮到大家.
time line:

10/13/15 找学长refer -> 10/15/15 confirmation email -> 11/15/15 因为一直没有消息 换同学继续refer(但据同学说,并因为有信息提示没有refer成功,这里真的是感谢两位仗义帮我refer的同学) -> 11/20/15 等了很长时间 没有消息 发邮件给TechRC5催OA -> 11/24/15 清晨收到 OA1(12/01/15 due) -> 12/01/15 做完OA1 24小时准时收到OA2(12/08/15 due) -> 12/06/15 做完OA2 -> 一直没有消息 -> 12/21/15 第一次给TechRC1发邮件催 -> 蠢货楼主一直以为没有消息 -> 12/30/15 第二次给TechRC5发邮件催 下午就在 spam里发现回复 说让我再等四到五周.(这个时候估计亚麻的大姐们都在想妈蛋怎么来这么个蠢货,明明已经给他安排面试) -> 1/5/16 也就是前天,楼主无意中在浏览 spam的时候,发现怎么有一个以前没看到过的TechRC1的邮件 Video Interview Invitation 回复日期是 12/22/15 复是的,你没看错,蠢货楼主让video邀请信在 spam里不仅躺过了一个圣诞节顺道还跨了个年.

信里详细内容是: 让我在 12/30 1/4 1/5 1/12 几个时间挑一个时间video,看完邮件 楼主立马和室友商量 给Lauren 发了一个邮件问可不可以重新set up一次时间,立马Lauren大姐就回复说absolutely可以的,然后说恰好最后一分钟手头上明天有一个时间avaiable问我可不可以,我回复说 可以 她说 好 就这样安排了第二天视频面.

说说video准备:

本来 6号下午一点已经安排了 Wayfair的 final round 电面,安排好video以后,楼主立马投入到了 亚麻的code review里面,把以前的OA三个coding代码找出来 爬相关题目的 video面经 整理成文档 为了确定自己能对着屏幕脱稿说明思路并默写代码 楼主那天晚上投入了极大的精力 并把每一次的说明录音 思考如何把logic描述的更加简单易懂 反复听自己的录音 反复思考如果被问题如何回答 有没有需要准备的behavior question 一直到第二天 下午六点面试前 除了 Wayfair电面中间的一到两个小时 其余时间就算是趴着休息也不停的自问自答 三个问题代码的思路 因为准备时间太短 楼主不想浪费或者松懈任何一秒钟时间 这样下来总共 mock了大概 7到8遍的录音, 并且不用任何思考就可以把三个问题的代码里每个part在collabedit里写出来. 如果你没有才能,那起码你一定要比别人勤奋.

video面经:

Pacific time 3pm,Jabber响起,面试官是 SF AWS echo组的manager 一个充满活力的白人大叔. 说话很有条理,他说我们今天有四件事情要做:

  1. 检查一下ID
  2. 他对亚麻和自己的情况做一个自我介绍
  3. 问代码
  4. 让我问他想了解的问题
    现在说一下第三个部分: 楼主OA2的两道题分别是 Min Sum Path 和 Round Robin(详细注释代码已经放在附件,包括多种解法,均可跑通)
    首先白人大叔问 你还记不记得自己的代码 我说记得 然后他表示同意吐槽说 我面的其他人 有的人说居然不记得自己写的代码 真是不可理解. 我这时笑了.
    说完Min Sum Path 白人大叔说,实在不知道该问什么 你的代码 简单有效(因为是recursion嘛), 让我们 move forward 下一个问题吧,然后我有说完了 Round Robin,其中我主动提到 我自己当时忘记加某一个循环条件 后来很快找到 bug改正过来 他说是的 然后 白人大叔说 你说的很好哦 然后我还发现你做的很快哦 我当时心里想 我明明拖了半个小时才提交也能叫快啊 我表示同意说其实Round Robin有一个 challenge就是question understanding 这点很重要 因为操作系统课上学过 这个 disk scheduling 算法 所以比较容易掌握思路 他说确实 题目里 Round Robin 的 definition 其实都不太全 真的是很为难那些不理解的学生. 然后让我问问题.
    问题没有做太多准备 主要是几个常规问题 然后在他的回答里挑问题 比如 design coding JUnit test 这三个日常工作中的环节 在SF 和 seattle工作氛围的区别(白人大叔说SF的好处就是你想啥时候来上班就啥时候来上,没有约束,还把自己的T恤兜起来说 你看我们两个地方的T恤logo都不一样) 楼主又问 那么亚麻的文化是如何在员工特别是工程师上体现的呢 白人大叔回答说 我们是 一边要抓客户 一边要赚刀了 不像其他一些公司只赚刀了 楼主这时又笑了 并说 leadership principle里也有很详细的介绍 我表示同意 然后差不多已经33分钟了,他说还有一点时间 问我还有没有问题 我说没有了 就这样愉快的结束了(楼主打心里希望确实是愉快的结束的!!!)
    另外因为楼主是在学校的图书馆面试的,所以信号非常好,Jabber也没有出现说的崩溃的情况.

说说OA准备以及对video和group的影响

楼主是幸运的,半年多的转专业找工作里在最后一个时间拿到了等到许久的面试. 但是幸运并不能改变一切,这里楼主说一说自己OA准备的经验.
楼主在去年暑假七月份的时候 已经开始做po出来的OA面经里出现的coding题,那个时候,不像现在已经有现成的题干和确定的输入输出 大部分都要一边跟发帖人讨论 一边根据他的描述整理出或者说 自己编出一个coding题目来 然后自己想思路写代码 写test case. 现在看来 后期重新整理面经的时候 那些代码大部分因为信息不全或者不匹配 是不能直接用到OA coding题目里的 但是这并不代表这段时间没有意义 楼主从来不相信什么东西努力过的会是无用功 不管怎么样 退一万步 你提前准备 起码让你见识了新题 锻炼了你的算法能力.
真正准备OA 是从拿到OA1邀请那个时候开始,楼主花了一整个感恩节的时候准备和整理面经 具体流程是 爬所有的楼 包括每一个有用信息的回复贴 自己写每一行代码 多写几个test case 在ide里测试(这里一定要多写几个test case,有时候自己写的程序不容易发现问题 case可以跑但换其他case说不定其实并不正确) 研究每一个回复帖里提供的思路 选择最优解或者是最能体现特色的思路 找小伙伴求可以确认跑过的代码 因为楼主比较极端 甚至在后期临做题前 发现全是 k closest cpoint 跑挂的面经 绞尽脑汁的去思考 问题和缘由 不停的发私信问人 并希望 自己不会碰到 k 那题,结果 根据墨菲定律 楼主还是碰到了 k 那题,心里一万匹草泥马呼啸而过,仔仔细细写完代码 结果发现正正常常的跑通, 这里楼主想提醒的是 用心但是也不要太极端或者自己吓自己 跟平时写代码一样写就可以的 毕竟OA的coding题 真的不难
接着说一下 logic 和 work simulation,第一点是 一定要自己踏踏实实去爬楼去看面经,往往题干和答案就在里面 感恩节的时间是宝贵的,为了不影响心情,楼主白天把手机关机 每天读帖和整理文档并不间断的限定时间模拟考试做题(主要是数字找规律和字母题,脑子一定要活要快) 抽时间就阅读下载的截图,培养一个做题的环境氛围 最后做完所有的功课以后 整个OA的考试题目题干选项 都已经有了非常清楚的概念 这里真的还要感谢 那些第一时间提供面经提供截图提供思路的前辈(楼主也会挑一些自己认为重要的陆续分享) 最后一句话 找工作是自己一个人的事 也是只能你一个人完成的事 别人没法帮助你 也没有其他的解决途径 唯一的办法只能是自己提前学习 多花时间 勤于思考
debug七道题 太简单 不说了 就算不准备 时间也完全够你一个一个 run 看 output找bug改代码.

想谈一下楼主对video和group的理解
我想先说一下我自己的具体做的情况,OA1 debug 卡点提交 logic 卡点提交,遇到一道新题 coding 卡点提交 OA2 work simulation 3道题不确定 coding 半小时到四十分钟提交.
下面说一下自己的理解,OA1 很重要 logic 是大头,可以说比其他任何part都重要 楼主的OA1 logic里遇到一个新题: 具体题干是 关于管理层和基层的信息沟通 选的是一个比较合理的选项 管理层和基础的信息沟通存在问题. 除开一道新题 其他都是面经出现的题干甚至原题. 很多人说logic读不完 时间不够 楼主可以确定 那是你根本没做充分的准备(实力派忽略我).
有人说 logic 和 work simulation 很重要,楼主非常同意,但更认为 logic 是唯一的头,为什么这样说,第一 work simulation 并不开启摄像头! 就只有这一个原因. 楼主的work simulation可以说是做的糟糕无比(即使提前做过准备), 遇到一个题: 你要和不同组一块开会 每个组的代表碰巧出差到各个不同国家 给你几个解决方案. 有同学说过一句很经典的总结: work simulation并不是找最优解 而是让你根据某个原则去给选项排序. 对的,选项有: a 让几个组重新安排自己部门的代表 b 问几个组能不能重新安排自己部门的代表 c 直接用远程视频对话
上面一个题目大家会如何排序呢 关键是这一个题是开头的前几个题,如果没有立马进入氛围很容易选择错误,比如楼主,我当时评5分的是c 直接用远程对话 我看到这个选项的时候 心想卧槽 这不是科技时代最好的解决办法吗 当我自信满满点了提交以后 进入下一个题 脑子飞快运转起来 为什么会有两个选项 都是让几个组重新安排代表 这两个选项有区别吗 答案是有的: 区别在于语气 work simualtion 考察的是collaborate 能力 当然也包括沟通的语气 楼主立马冷汗直冒 差点虚脱.
另外两个不确定的题是 关于如何优化 JUnit 代码那部分两个问题 是后期 翻面经 有人说 要选最长 楼主顿时晕厥 楼主恰恰选的是俩最短.

综上所述, work simulation 实在不能是考察的重点 反而logic肯定是一个炒鸡炒鸡大的大头.
天啦撸,那那些已经做完OA1还在纠结OA2 coding节奏的同学们咋办,楼主认为 coding必须是能 compile过的(邀请邮件里也有提到这个要求),其他就不要管啦,根据经验,如果没有compile过,系统会自动发拒信的. 至于是不是有人工review code,楼主猜测的情况是,不太可能在决定给你group前人工阅卷 因为也有OA2做完打鸡血第二天拿video的例子. 人工会有怎高的效率. 三目神童吗. 也有人说要写出有特色的代码,这点楼主是非常同意的,虽然楼主的代码并不一定非常有特色,甚至Min Sum Path用的还是最普通的 recursion(虽然也准备了iteration代码,但是担心实际考试跑不过,害怕需要花时间改bug,所以没用), 但是能写出最优解写出自己的特色,对于以后每一个码工来说,是必须的,不管亚麻有没有要求. 你写代码,不是为了亚麻.

说说催

从 timeline里的信息可以看出来 楼主有很多催的经验 其实楼主都是在众人催完以后 实在没有办法 才催的. 记住 每一次催以前都得熬过一段漫长的等待.
第一次是催发OA 眼看着周围同学都拿到OA 楼主那个心里着急的心情啊 而且在十月十一月左右确实有一段很长的空窗期没有人拿到OA 楼主那个着急的心情啊.
于是 催了第一次,催了第一次效果还行 立马来了OA. 做完提交 又是那一个等啊,可以说 不管是找工作本身 还是等OA的过程 都是一个熬的过程,熬到一个时间节点,自然就有汤喝.
第二次是做完OA2 等不来结果. 同学说过 OA发放是有一个窗口期,去年第一批是感恩节,那我想着是不是圣诞节也有一批呢,于是等啊啊,等到要过节啦,还没有消息,有人说 lauren妹子是发OA的啊,那我做好最坏的打算在放假前催了一封, 结果人家是立马回复了,可惜我没看到… 大家一定要养成翻垃圾箱的好习惯 一定要每一页垃圾箱都翻不能是翻第一页! 说说楼主没看到以后咋办把,楼主想,难道真的是我work simualtion那三个题目的问题吗,虽然已经准备到这种程度,但是既然做错了就不能怪别人挂掉你. 后来心思丰富的楼主又考虑到,说TechCR1是只负责发feedback的,真正决定分配的是TechCR5,想说难道是发错地方啦? 加上有同学给1发然后被转发给5,说明确实是这样,1-5都有自己明确的分工. 顿时想完蛋,那我过完节再催一封把. 看到这里,你就会明白一个道理,人如果太蠢,是不能怨天尤人的. 楼主现在深深地明白到了这个道理.
至于用pending offer去催的问题,大家不要纠结了,楼主同学有同时拿相同公司 pending offer去催的,结果按一比一开. 该是你的总会是你的.

汇报一下目前的找工情况:

从九月份投简历到现在,前前后后一共投了快150家公司. 挑几个说一说.
FLAGT 抱歉,一个都还没敢投.
bloomberg(它家是六月份面的): 那是水平太渣 电面挂
Cerner: 网上海投,正式找工的第一家电面,中部堪萨斯城的一个跟Epic类似的医疗公司,考OOD和 behavior. HR面挂 至今不知原因.
Wepay: OA挂,那时还不会用 Hackerrank (可想楼主有多外码当时)
Liveramp: OA做完就挂
HP Vertica: 现在已经并入HP enterprise,小数据库公司,校招和engineer聊得不错,里面大部分是phd,需要熟悉 java 的I/O grep 和 Parser
Yahoo: 电面挂. Linkedin上找前排内推,很可惜给的是组内面试,除了一道算法题,全是system desgin, totally gg. 准备再重新投一下 new grad的.
Indeed: 电面挂. 最想去的一家公司,没有之一. 九月底十月网上海投,十一月才给的OA,做完以为很快拿到电面,本来安排的是十一月中旬,但是因为和亚麻OA时间冲突,所以和HR一直拖到十二月初才电面. 非常可惜 题目包括两个follow up 都写出来代码 最后一个 followup 因为时间不过没有写出完整的优化. 仍然很欣赏它家的文化和价值观,一直低调,而且它家OA都是完全人工review code,非常重视代码优化的一家公司. (面经后面会详细给出,并没有遇到所说的万年不变的电面题和其他电面题,当天有面经有两个人和楼主同一天电面,题目都是reverse html,可以也说是楼主的不幸运,即使如此,仍然想去奥斯汀和东京)
Wayfair Labs: 同样是昨天面完的最后一轮.
报一下time line: 10/15/15 网上海投 简历拒,
10/22/15 网上海投 简历拒, 10/29/15 网上海投 ->
对 你没看错,楼主完完整整在网上投了三遍,不带改简历的反复投,因为,它家没有理由拒我. 以后小伙伴如果简历被拒,心里应该都反问一句 凭啥子.(其实也是因为楼主那个时候实在米有啥子公司可以投了) -> 等了整整两个月 12/16/15 hr面 要求提交 source code -> 12/18/15 OA -> 12/31/15通知 电面 -> 昨天 1/6/2016 电面
OA的面经就不说了,说下昨天的电面,心里话说,昨天面的非常糟糕. 常规流程是
1 问简历
2 讲OA 代码思路
3 rearrage array(区分正负数)
4 读php代码楼主在花了一周的时间在面试前把 glassdoor里所有出现过的算法题,写了一遍代码,想优化方法,跑ide测试 保险起见也花了两天在youtube里过了几个视频把php的基本用法熟悉了一遍. 结果昨天的情况是 过完前两part,时间就过了一半,直接给我贴上一段php代码,问我输出和如果改,代码不难,有两个key word不懂 一个是 PHP_EOL 换行符 一个是 implode 作用类似array.toString(). 我本来以为只需要说一下代码的意思,结果浪费了一段时间,当他让我写output的时候,我又出了一个小错误,他就说让我再想想,又浪费一段时间,改完以后完全正确了,他确认了跑了一下,结果时间也到了. 因为完全没时间被问到算法题,当时的心情非常糟糕. 求一个顺利.
snapchat: OA(前几天刚拿到,还没做)

下面说一下半年转专业找码工的一点思考.
第一点,除了讨论下题目,相互鼓励一下,别人没法帮你,找工作这事儿,最后还是靠你自己加油.
第二点,非计科没有编程经验转专业找码工,很辛苦,很花时间,这个时间比之前还图样的我想象的要长的长得多. 但是你不能原地踏步,与其踏步还不如多扔几封简历.
第三点,每一次都要充分准备面试. 因为前期抱着试水的心态投了很多公司,面试都五花八门,到十月份以后才陆续来一些正经面算法题的公司. 所以我有一个习惯,就是面每一家公司以前,我都会把论坛里,glassdoor里的所有的面经链接爬下来,放到一个文档,然后一个一个的读,一个一个的写代码. 每一家公司知识面的侧重都不一样,比如OOD,JUnit, System Design,一开始都不知道,都是后来刷面经的时候研究的. 再比如做算法题,因为刷过几遍lc,有整理的文档,再刷面经的时候就可以类比着想. 即使没被问到,起码你自己学到了. 码工,从职业发展的角度来讲,说到底还是一个积累. 与其入职以后,不如现在就开始干.

事实是 Lift is a shit, just like past. 但是 the best is always yet to come. Never give up and find the shit job.

引一段海贼里特别喜欢的一句话自勉和共勉,”苦难接踵而至,正是世间常理. 不要以为只要你解释一下,就会有人来帮你. 如果失败了,就只能说明我只不过是这种程度的男人.”

十分感谢你的分享,祝好运

15年的面经啊这是