经验分享:从面试全挂到面试全过
来自其他站点
大家好, 我是一个养老公司,非常普通的螺丝钉。 没有名校背景, 没有厉害的项目经验。去年尝试裸面跳槽, 全部挂彩, XD。 通过一年长期且懒散的准备,我通过了6/17 ~ 7/17全部面试.
在一亩三分地学习了非常多的东西, 现在我写这篇文章回报大家~
>>面试 timeline
2018/03 ~ 2018/06
Onsite 挂: wish, aws, rubrik
phone 挂: Groupon, intuit, apple, stripe, alipay, vudu(part of walmart)
第一年简历非常差劲,倒腾倒腾hadoop ETL, 写了几个没有技术含量的组内用网站. 同组小伙伴走了, 而且领导施压让我做operational的活, 很不开心就决定跳槽。 最后, 全部挂彩。。
失败的3个原因:
1. 刷题不到位。 找实习时大概做了200题左右, 而且是以AC为目标的自以为是做题法。 没有总结套路, 不会一题多解,不会算复杂度,不会优化,很容易写出bug, 而且写出bug就会很慌张的无法修正。
2. 英语差劲。 因为组里都是中国人, 没有机会练口语。 面试解释算法啊, 聊天啊, 经常紧张,语无伦次。
3. 简历很差。根本说不出来什么有趣,有难度的项目。 多次讲完简历后,被面试官鄙视, 然后丢一个非常奇怪的难题给我,让我自生自灭。
4. 经验不足。 因为不是在正统engineer组, 没有做任何产品,0合作经验。被问基本behavior questio,完全胡说八道, 前后编的内容都不一致。
2018/06 ~ 2018/07
内部换组
2019/03 ~ 2019/04
面试热身
roblox:
几乎拿到了offer, 最后挂在了hr上。
失败原因:
HR问我,你选offer最看重什么, 我很傻的回答: “钱”。。 于是, 就没给我钱。 哈哈。。。
应该答:我比较看重个人成长, 和我能make的impact. 而且我个人非常喜欢游戏, 我觉得你们公司的产品非常有潜力,我很有兴趣. 钱的话,当然多给就好了,但不是重要因素。
RIOT(英雄联盟)
挂在onsite behabior
失败原因:
没有认真准备BQ. 有一些答得过于真实, 不好听。
BQ的核在于,精心准备你的故事,保证你的每个故事都能突出你是一个优秀的程序员。 不用保证你的故事100%真实,你要学会在自己的故事里加sauce.
一个加了sauce的BQ故事的例子:
发现了系统performance issue, 自己做research 研究, 然后和TL讲。 TL不同意, 于是我做了prototype benchmark, 证明了我的想法是正确的, 于是领导很满意的让我做这个project, 我成功做出,把latency 从2s 提升到了20ms, 内存消耗减少了10%。对面感兴趣, 我会说中间用了这个open source, 那个open source, 每个设计间的取舍和trade off。
真实情况是, 这个side project做了一半, 我就准备面试没时间做了。。 哈哈~ 但是我确实有整体设计的思考过程,如果给我时间,我是可以做完的。
2019/06 - 2019/07
正式面试。
拿到offer:
Google, Apple, AWS, Lime, Uber
通过Phone, 没去onsite:
Twitter, DoorDash, Airbnb(6月底面的,面完说过了,但上半年没坑了,过两周再说。后来面试太多, 我就忘记sync up了)
match 组失败:
Dropbox(他家经验轮,挖的真是深,最后得出了我是做full stack的结论。。。 onsite后, HR说我的经验适合去做CICD或者FullStack, 我说没兴趣, 就不给offer了)
>>面试准备 timeline
-- 算法 --
2018/05 ~ 2019/01 leetCode 第一遍
- 每天坚持下班 20:00 ~ 24:00 做3 ~ 5题, 跳过一切数学题和贪心题, 这段时间做了leetcode 800+ 题。
- 每天都非常煎熬, 经常被难题搞得崩溃,看discussion也不明白。有的时候内心崩溃,我会提交2sum来欺骗自己今天完成了任务。。。 哈哈。。。。
- 我做每道题都保证尽量用英文思考解题思路。 最开始很困难, 后来经常看discussion看大家的表达习惯,和英文用法,慢慢就习惯了。 这一个训练,让我面试的时候可以很自如的用英文解释我的算法思路。
- 做了400+的时候, 大部分题,只要有了思路,实现基本没有bug. 于是更换做题的方法,先看题, 然后用脑子想这题的解法, 然后直接看答案,看看自己的解法是不是对的,如果是对的,我再实现。
- 大概从11月开始,我每周都会去参加比赛。 从最开始的2000+名, 到后来稳定100 - 200吧。 但偶尔出什么贪心, 和奇怪的DP, 我还是做不出,会到500+ 开外...
2019/01 ~ 2019/04 leetcode 第二遍
- 做每个题目类型tag里的高频题。 总结相同题的多种解法, 比如 dp 题总可以用 backtracking + cache. 树的题可以top-down or bottom-up. 等等, 然后了解每种解法的trade off.
2019/04 ~ 2019/07 做公司面经题
- 到地里看面经题, 刷面经题。做了很多奇怪的题, 什么设计电梯啊, 设计multi transaction db, 设计nested transaction db, token bucket...
- 刷面经题的时候, 我都带着批判的态度去看答案。 大部分都是自己的思路, 自己的实现,因为我讲的明白。 因为我发现很多题的广为流传的解法,并没有那么易读, 解释不清。。。 很多朋友都在背答案的感觉。。。
- leetcode 按tag 刷面经题。 airbnb 和 linkedin 每道题我刷了至少3遍。。。 结果airbnb 只面了电面, linkedin主动勾搭我的HR, 现在都没给我约上phone screen, 极度差评!!我都想举报他了!!
算法总结
- 我浪费了很多时间去研究难题,怪题,add-hoc。 对面试没太多帮助。。。真正面试的题, 都是常规的题。 就算是难题, 也是高频常见的难题。 所以,大家在准备的时候,可以跳过让你觉得不适的低频题。。
- 如果对面给你丢怪题了, 说明对面不喜欢你。我第一年好多题, 都是委婉拒绝题,就是leetcode好多dislike那种水平的题, 我现在做也未必做得出。 XD...
- 交流很重要。 我都会从最暴力的解法开始讲,然后接着讲怎么优化到最后的解法。 然后要慢慢说,确保对面能明白,我会一直问面试官你觉得我说的make sense嘛, 有疑惑嘛? 有几场面试,因为我算法,时间复杂度,解释的很好,面试官直接说你不用写了, 我知道你会, 我们聊天吧。。。
- 代码除了正确性,要保证代码整洁性,易读性。 我在可以用电脑写代码的时候,在每个必要的地方都会写注释, 然后有些思路, 我会先在注释里walk through思路,方便面试官理解,也方便我自己实现。 其余怎么实现代码整洁性,就是基本功了。。
- 先写测试。 我经常会先写测试用例, 再写代码。 TDD. 尽量展示自己平时上班是怎么work的。
- 速度和bug free. 这个没啥说的, 多练就好啦。我面试一般都会request laptop做coding题, 一是实现快, 二是可以秀一下我打字蛮快的。。。 所有面试里,只有谷歌有无穷无尽的follow up, 根本做不完... 其他公司, 我讲完思路,写完代码,跑完测试,都会剩下蛮多时间的。
-- 系统设计 --
因为准备时间比较长, 用了很多零碎的时间看educative.io。 具体timeline不记得了。
书籍:
每本书看两个月左右的样子,很认真的看的,但是大部分东西消化不了
Operating system - three easy piece
Designing Data-Intensive Application
课程:
- hiredintech.com
- educative.io (这个讲的蛮好的, 我看了好多遍)
- github.com(这个基础知识讲的不错, 但是具体例子一般)
- Distributed Systems in One Lesson(Safari上有完整版, 4小时左右, 讲的很好)
Youtube视频:
刷题刷累了, 我就看着这些视频当消遣。。。 蛮有趣的。。 比做题有趣的多。。。
- Scalability Harvard Web Development
- Gaurav Sen
- Tushar Roy - Coding Made Simple
- Tech Dummies - Narendra L
- Coding Tech
微信公众号:
- 架构师之路(强推!!!)
- 51CTO
深入研究了以下几个component:
虽然实际工作中没有怎么用, 但是因为简历里有提到,所以我认真看了官方文档, 设计文档,各种教学视频...
我主要关注architecture, 而不是api应用。
- Kafka
- Cassandra
- Consul
我自己的educative.io套路:
1. 讨论用户是谁
2. 根据用户讨论feature
3. 问一下系统需要handle 的traffic, 问问需不需要进行计算。 面了8次系统设计,只有roblox 要求计算。其他都不要。。。
4. 根据feature讨论系统需要存储和serve哪些data, 这些data用什么存, 讨论sql/nosql/cache/object storage/hdfs 取舍, 巴拉巴拉。。。
5. 根据数据, 设计service。 画图。
6. work through一个use case, 把所有service连起来, 同时修改刚才画好的图。 比如 做uber eats, 讨论用户要order 一个食物,到餐馆接到订单, 到司机接到订单。。。。
7. 讨论use case细节, 比如 uber eats司机进入某个区域怎么识别啊, cache里怎么存啊。面试官全程都会drive你的design的, 不会丢你在那里自言自语。
8. 面试官会问, 某些环节挂掉了,怎么处理。 无非就是1. 要么replica, master slave, active-passive 或者 2.周期存snapshot 在磁盘上,然后存action log... 挂了可以重新恢复。。。
9. 一些环节怎么scale... multi instance, partition 这些呗。。 偶尔说说service mesh...
onsite面试经验:
- 我面的8次系统设计体验都很好, 面试官会drive design全程, 他会不停的问你小问题带你走。 当然他也会根据你的设计不停的提出小问题。 交流交流交流啦~
- 有的时候面试官会质疑你的设计。 此时有两种解法, 1. 解释自己为什么这么做, 让面试官认同你的做法 2. 想一想是不是哪里做的不对, 面试官是不是再给你hint,要换一种设计。 具体情况具体分析啦。。。
- 我至少3次面试,解释了consistent hash 和 virtual node 怎么回事。。 不懂得朋友, 学学看哈。。
- 每个公司的系统设计面试题都蛮固定的。 提前好好刷以下面经,准备准备。
我2014 ~ 2018,认识我的人都知道,我因为腰间盘突出做了手术, 我不能出去运动,也不能出去和小伙伴玩。。。 所以基本,所有业余时间都在家里打LOL。。。 2018-2019开始认真准备面试,就是把所有打lol的时间,都用来学习了。。。 LOL的瘾也戒掉了。。。 现在就玩玩自走棋就好了。。。
准备面试就是个砸时间,砸精力的过程。 只要时间用到了, 就没得问题啦!!而且一劳永逸。。。 估计在硅谷,以后要跳槽的技术面,除了domain knowledge, 我这一年准备应该够用了。。。
有问题请留言哈。。 我会尽量回复的!!
补充内容 (2019-7-19 08:04):
最后决定去🐶啦! 包裹比较诚意。。
在一亩三分地学习了非常多的东西, 现在我写这篇文章回报大家~
>>面试 timeline
2018/03 ~ 2018/06
Onsite 挂: wish, aws, rubrik
phone 挂: Groupon, intuit, apple, stripe, alipay, vudu(part of walmart)
第一年简历非常差劲,倒腾倒腾hadoop ETL, 写了几个没有技术含量的组内用网站. 同组小伙伴走了, 而且领导施压让我做operational的活, 很不开心就决定跳槽。 最后, 全部挂彩。。
失败的3个原因:
1. 刷题不到位。 找实习时大概做了200题左右, 而且是以AC为目标的自以为是做题法。 没有总结套路, 不会一题多解,不会算复杂度,不会优化,很容易写出bug, 而且写出bug就会很慌张的无法修正。
2. 英语差劲。 因为组里都是中国人, 没有机会练口语。 面试解释算法啊, 聊天啊, 经常紧张,语无伦次。
3. 简历很差。根本说不出来什么有趣,有难度的项目。 多次讲完简历后,被面试官鄙视, 然后丢一个非常奇怪的难题给我,让我自生自灭。
4. 经验不足。 因为不是在正统engineer组, 没有做任何产品,0合作经验。被问基本behavior questio,完全胡说八道, 前后编的内容都不一致。
2018/06 ~ 2018/07
内部换组
2019/03 ~ 2019/04
面试热身
roblox:
几乎拿到了offer, 最后挂在了hr上。
失败原因:
HR问我,你选offer最看重什么, 我很傻的回答: “钱”。。 于是, 就没给我钱。 哈哈。。。
应该答:我比较看重个人成长, 和我能make的impact. 而且我个人非常喜欢游戏, 我觉得你们公司的产品非常有潜力,我很有兴趣. 钱的话,当然多给就好了,但不是重要因素。
RIOT(英雄联盟)
挂在onsite behabior
失败原因:
没有认真准备BQ. 有一些答得过于真实, 不好听。
BQ的核在于,精心准备你的故事,保证你的每个故事都能突出你是一个优秀的程序员。 不用保证你的故事100%真实,你要学会在自己的故事里加sauce.
一个加了sauce的BQ故事的例子:
发现了系统performance issue, 自己做research 研究, 然后和TL讲。 TL不同意, 于是我做了prototype benchmark, 证明了我的想法是正确的, 于是领导很满意的让我做这个project, 我成功做出,把latency 从2s 提升到了20ms, 内存消耗减少了10%。对面感兴趣, 我会说中间用了这个open source, 那个open source, 每个设计间的取舍和trade off。
真实情况是, 这个side project做了一半, 我就准备面试没时间做了。。 哈哈~ 但是我确实有整体设计的思考过程,如果给我时间,我是可以做完的。
2019/06 - 2019/07
正式面试。
拿到offer:
Google, Apple, AWS, Lime, Uber
通过Phone, 没去onsite:
Twitter, DoorDash, Airbnb(6月底面的,面完说过了,但上半年没坑了,过两周再说。后来面试太多, 我就忘记sync up了)
match 组失败:
Dropbox(他家经验轮,挖的真是深,最后得出了我是做full stack的结论。。。 onsite后, HR说我的经验适合去做CICD或者FullStack, 我说没兴趣, 就不给offer了)
>>面试准备 timeline
-- 算法 --
2018/05 ~ 2019/01 leetCode 第一遍
- 每天坚持下班 20:00 ~ 24:00 做3 ~ 5题, 跳过一切数学题和贪心题, 这段时间做了leetcode 800+ 题。
- 每天都非常煎熬, 经常被难题搞得崩溃,看discussion也不明白。有的时候内心崩溃,我会提交2sum来欺骗自己今天完成了任务。。。 哈哈。。。。
- 我做每道题都保证尽量用英文思考解题思路。 最开始很困难, 后来经常看discussion看大家的表达习惯,和英文用法,慢慢就习惯了。 这一个训练,让我面试的时候可以很自如的用英文解释我的算法思路。
- 做了400+的时候, 大部分题,只要有了思路,实现基本没有bug. 于是更换做题的方法,先看题, 然后用脑子想这题的解法, 然后直接看答案,看看自己的解法是不是对的,如果是对的,我再实现。
- 大概从11月开始,我每周都会去参加比赛。 从最开始的2000+名, 到后来稳定100 - 200吧。 但偶尔出什么贪心, 和奇怪的DP, 我还是做不出,会到500+ 开外...
2019/01 ~ 2019/04 leetcode 第二遍
- 做每个题目类型tag里的高频题。 总结相同题的多种解法, 比如 dp 题总可以用 backtracking + cache. 树的题可以top-down or bottom-up. 等等, 然后了解每种解法的trade off.
2019/04 ~ 2019/07 做公司面经题
- 到地里看面经题, 刷面经题。做了很多奇怪的题, 什么设计电梯啊, 设计multi transaction db, 设计nested transaction db, token bucket...
- 刷面经题的时候, 我都带着批判的态度去看答案。 大部分都是自己的思路, 自己的实现,因为我讲的明白。 因为我发现很多题的广为流传的解法,并没有那么易读, 解释不清。。。 很多朋友都在背答案的感觉。。。
- leetcode 按tag 刷面经题。 airbnb 和 linkedin 每道题我刷了至少3遍。。。 结果airbnb 只面了电面, linkedin主动勾搭我的HR, 现在都没给我约上phone screen, 极度差评!!我都想举报他了!!
算法总结
- 我浪费了很多时间去研究难题,怪题,add-hoc。 对面试没太多帮助。。。真正面试的题, 都是常规的题。 就算是难题, 也是高频常见的难题。 所以,大家在准备的时候,可以跳过让你觉得不适的低频题。。
- 如果对面给你丢怪题了, 说明对面不喜欢你。我第一年好多题, 都是委婉拒绝题,就是leetcode好多dislike那种水平的题, 我现在做也未必做得出。 XD...
- 交流很重要。 我都会从最暴力的解法开始讲,然后接着讲怎么优化到最后的解法。 然后要慢慢说,确保对面能明白,我会一直问面试官你觉得我说的make sense嘛, 有疑惑嘛? 有几场面试,因为我算法,时间复杂度,解释的很好,面试官直接说你不用写了, 我知道你会, 我们聊天吧。。。
- 代码除了正确性,要保证代码整洁性,易读性。 我在可以用电脑写代码的时候,在每个必要的地方都会写注释, 然后有些思路, 我会先在注释里walk through思路,方便面试官理解,也方便我自己实现。 其余怎么实现代码整洁性,就是基本功了。。
- 先写测试。 我经常会先写测试用例, 再写代码。 TDD. 尽量展示自己平时上班是怎么work的。
- 速度和bug free. 这个没啥说的, 多练就好啦。我面试一般都会request laptop做coding题, 一是实现快, 二是可以秀一下我打字蛮快的。。。 所有面试里,只有谷歌有无穷无尽的follow up, 根本做不完... 其他公司, 我讲完思路,写完代码,跑完测试,都会剩下蛮多时间的。
-- 系统设计 --
因为准备时间比较长, 用了很多零碎的时间看educative.io。 具体timeline不记得了。
书籍:
每本书看两个月左右的样子,很认真的看的,但是大部分东西消化不了
Operating system - three easy piece
Designing Data-Intensive Application
课程:
- hiredintech.com
- educative.io (这个讲的蛮好的, 我看了好多遍)
- github.com(这个基础知识讲的不错, 但是具体例子一般)
- Distributed Systems in One Lesson(Safari上有完整版, 4小时左右, 讲的很好)
Youtube视频:
刷题刷累了, 我就看着这些视频当消遣。。。 蛮有趣的。。 比做题有趣的多。。。
- Scalability Harvard Web Development
- Gaurav Sen
- Tushar Roy - Coding Made Simple
- Tech Dummies - Narendra L
- Coding Tech
微信公众号:
- 架构师之路(强推!!!)
- 51CTO
深入研究了以下几个component:
虽然实际工作中没有怎么用, 但是因为简历里有提到,所以我认真看了官方文档, 设计文档,各种教学视频...
我主要关注architecture, 而不是api应用。
- Kafka
- Cassandra
- Consul
我自己的educative.io套路:
1. 讨论用户是谁
2. 根据用户讨论feature
3. 问一下系统需要handle 的traffic, 问问需不需要进行计算。 面了8次系统设计,只有roblox 要求计算。其他都不要。。。
4. 根据feature讨论系统需要存储和serve哪些data, 这些data用什么存, 讨论sql/nosql/cache/object storage/hdfs 取舍, 巴拉巴拉。。。
5. 根据数据, 设计service。 画图。
6. work through一个use case, 把所有service连起来, 同时修改刚才画好的图。 比如 做uber eats, 讨论用户要order 一个食物,到餐馆接到订单, 到司机接到订单。。。。
7. 讨论use case细节, 比如 uber eats司机进入某个区域怎么识别啊, cache里怎么存啊。面试官全程都会drive你的design的, 不会丢你在那里自言自语。
8. 面试官会问, 某些环节挂掉了,怎么处理。 无非就是1. 要么replica, master slave, active-passive 或者 2.周期存snapshot 在磁盘上,然后存action log... 挂了可以重新恢复。。。
9. 一些环节怎么scale... multi instance, partition 这些呗。。 偶尔说说service mesh...
onsite面试经验:
- 我面的8次系统设计体验都很好, 面试官会drive design全程, 他会不停的问你小问题带你走。 当然他也会根据你的设计不停的提出小问题。 交流交流交流啦~
- 有的时候面试官会质疑你的设计。 此时有两种解法, 1. 解释自己为什么这么做, 让面试官认同你的做法 2. 想一想是不是哪里做的不对, 面试官是不是再给你hint,要换一种设计。 具体情况具体分析啦。。。
- 我至少3次面试,解释了consistent hash 和 virtual node 怎么回事。。 不懂得朋友, 学学看哈。。
- 每个公司的系统设计面试题都蛮固定的。 提前好好刷以下面经,准备准备。
我2014 ~ 2018,认识我的人都知道,我因为腰间盘突出做了手术, 我不能出去运动,也不能出去和小伙伴玩。。。 所以基本,所有业余时间都在家里打LOL。。。 2018-2019开始认真准备面试,就是把所有打lol的时间,都用来学习了。。。 LOL的瘾也戒掉了。。。 现在就玩玩自走棋就好了。。。
准备面试就是个砸时间,砸精力的过程。 只要时间用到了, 就没得问题啦!!而且一劳永逸。。。 估计在硅谷,以后要跳槽的技术面,除了domain knowledge, 我这一年准备应该够用了。。。
有问题请留言哈。。 我会尽量回复的!!
补充内容 (2019-7-19 08:04):
最后决定去🐶啦! 包裹比较诚意。。