大龄转码经验(32岁)

avatar 217208
foggerwoody
38385
104
已经转码3年了,最近又开始新一轮的面试, 分享一下最初转码的过程和心得给大家, 希望能帮到在这条路上的同学。

2010年楼主EE毕业后就来到bay area从事半导体研发,那时硬件软件待遇差别还没有那么大, 有同学去了flag收入和我们基本持平或者略高。 浑浑噩噩过了7年后发现即使我在最好的硬件公司收入也只能是软件的一半有时还不到。 忍痛放弃自己的专业为了更好的物质条件开始了漫长的转码之路( 这一点我很鄙视自己)。经过一年的努力终于成功上岸,SDE3入职亚麻。

基础:
虽说是EE出身,工作中只需要写一下简单的script, 算法基础为0, 编程能力也几乎为0. 当时在youtube上找了UCB的CS61B跟着学算法的同时也学习了Java。 因为有computer architecture的基础, 基本的数据结构,算法理解起来很容易, 第一对自己转码有了很大的信心。 大概花了三个时间把61B的lecture和project做完了。 现在回想起来,这三个月其实挺关键的, 学习了很多基础和细节的东西,如果直接就开始LC刷题的话很大可能就忽略了。大家一定要注意在面试的时候基础的东西比如时间空间复杂度一定要答对, 否则就是red flag。顺便插一句, 当时的基础差到我是在半年以后才领悟到databa是用来做什么的。

刷题:
补了补基础之后就开始了漫长的刷题之路直到拿到offer。 遇到的第一个拦路虎就是递归,当时一直从硬件的角度去理解递归,把整个出栈入栈的过程画出来, 简单题还好, 遇到medium的基本上就把自己也递归进去了。 总结了很多模板,但其实并没有真的理解递归算法的精髓, 题目稍微一变, 比如要去重,就歇菜了。 好在刷题也是一个量变出质变的过程,一刷400题之后总算把思维模式转变了, 能比较自然的写递归而不去想stack了。

期间发生了一件特别有趣的事情,和同时转码的朋友一起去吃饭,他问了我一个经典的上楼梯问题(就是可以上一节或者两节,一共多少走法)的题目。 听完他讲DP我就震惊了,第一次感受到了算法的魅力。 同时也遇到了第二个拦路虎--DP, 几乎花了一个礼拜的时间才把经典的regex match解法看懂。 因为智力实在有限没能领悟DP的精髓,当时只能套用从讲座上听来的模板, 先写状态转移方程, 然后根据这个方程写code。 好在刷题也是一个量变出质变的过程, 有一天终于领悟到DP和递归其实是一个东西, 所谓的状态转移方程就是递归函数。

朋友门面试的时候一定要先写递归, 把递归写好,剩下的看面试官脸色加memory或者把递归函数翻译成bottom up的dp就可以了。 当然了遇到2维以上的dp这个方法可能就不好用了, 不过我从来没遇到过这么变态的。

拿到offer的时候, 前400的题目刷了两遍加上400以后的公司tag题。 前400甚至前200的题目真的非常的经典, 面试套路基本都涵盖了, 后面的题目大多都是重复。

System Design:
已经有了7年工作经验的缘故, SD是必考的。 推荐转码的同学先把database是什么, 怎么用,搞懂。可以先花点时间看一下SQL对于RDMS有一个感性的认识。 我面试过一个朋友设计的db就只有一个item,里面是一个很长的list。

大家也不要把sd想的太复杂, 基于现在的micro service趋势,大部分系统其实就是一个bussiness logic server + database。 对于SDE2而言, 能设计出一个条例清晰end to end 的working system,并且加上一些优化比如cache, message queue 异步处理就已经达到hire的标准了。 SDE2的很多面试官其实自己也不懂ACID,consistency,partition。 如果是面Sr或者以上那就另当别论。

切记不要把时间放在load balance, consistency hashing这些细节的地方, 有机会提一下,表示我知道就可以了。 对于SDE2, 推荐groking System design 按照上面的套路基本就没问题了。还有youtube上面一个口音比较重的东欧人, 他讲的是干货(知道的朋友请把link放到回帖)。 Sr。或者以上,个人不是很推荐grok, 上面的solution很多并不是scalable。 推荐熟读宝典DDIA。

聊回到自己, 我当时面试的时候对于SD的知识全部来源于网上资源, 完全没有实践经验。 一轮面下来完全不知道表现如何。 这个是老年转码跨不过去的坎,我觉得唯一可以做的就是多学习,把能找的有关system design 的视频都看一遍。面试的时候保持条理清晰, 列举一下选择的原因, pros and cons。 把自己能想到的,知道到全说出来, 之后就听天由命了。 好在SD也是一个量变出质变的过程, 学的东西多了,能扯的东西多了, 总能有几样是落到点子上的。

失败:
失败其实是我最想说的话题。 刷完第一轮后, 这时应该大概花了半年的时间, 我就开始面试了。 结果就是所有的湾区大公司全部fail。 对于一个大龄龟公来说一年的冷冻期真一个非常大的打击,当时确实有一种被压得喘不过气的感觉。 好在半年以后amazon就有recruiter愿意打捞,并且SDE3成功上岸。 转码,面试是一个艰难的过程,而每一次的失败都是外界的一次否定,多多少少会影响自我定位。 朋友们要注意调整好心态,offer不用多有一个就够了。 学习如何面对失败, 积极的和recruiter沟通争取多拿一些面试feedback提高下次成功率。

转码快三年后,现在成功拿到了两家pre ipo公司的Sr和staff offer, 有关面试的话题欢迎朋友回帖讨论!

补充内容 (2021-03-20 01:34 +8:00):
求点大米, 积分太低了很多帖子都看不了

补充内容 (2021-03-20 09:11 +8:00):
有朋友回帖问我没有相关经验怎么能面上SDE3,质疑我是否能胜任现在的工作。其实这个正是帖子想要表达的内容,朋友们不要应为年龄,经验去限制别人,这样更是限制了自己。面试遇到很多的挫折

补充内容 (2021-03-20 09:15 +8:00):
接上条补充:
和自我否定。特别是转专业的朋友,在这过程中很容易低估自己的价值。 我的例子就证明了,在自己专业勤勤恳恳耕耘的经验是可以移植的!
  • 355
104条回复