一年被layoff两次辛路历程和一些面试经验

avatar 278409
FakeRebecca
32553
41
今年被layoff了两次,所以心中深知今年找工作的艰辛与不易。在最后紧要关头非常非常幸运签了Meta。在这里分享一些我的面试体会,希望可以帮助到在寒冬中还在努力找工作的每一个人。

首先,心态
有很多朋友替我打抱不平过,他们说:为什么是你?我也在一亩三分地看到过一些帖子在分析什么样的人会被layoff。我自己则没有花一秒钟在思考这个问题,因为我相信自己不是因为工作能力被layoff的,从manager给我的反馈我知道自己表现的很好。第二次layoff更是一整个组被解散了,就更不可能是能力的问题。我不是表现最好的那个人,但是我也不差。最后,根据控制二分法,人不应该花任何时间在自己不能控制的事情上面。在这一点上面我觉得自己做的很好,希望你也是。


刷题
1. 刷什么题:面经,Leetcode Tag题目
有些公司出的都是面经题,比如Chime, 问的都是原题,把这个帖子读一遍帮助很大:instant.1point3acres.cn
Leetcode Tag我觉得挺准的,我把Meta,Doordash和Tiktok近6个月的题目都刷了,如果时间多可以都刷,如果时间紧我感觉可以刷高频前30题
如果你没有任何面试,我觉得可以刷techinterviewhandbook.org 来作为一个开始,我年初面Apple的时候很多里面的题目。
另外这里一个小tip:我觉得Tiktok喜欢问topological sort,我被问过两次

2. 算法题面试技巧
我Meta的电面自己感觉不是特别好,但是recruiter给了我feedback,对我之后的面试帮助很大,面试,不仅仅是把题目做出来而已,你要知道在考什么,学会踩点,下面是我总结的几个重点
  • 做题前:问问题:input是否为空呀,integer的正负呀,overflow呀。然后跟面试官沟通自己的解题思路:算法+数据结构,以及为什么要用这个算法和数据结构。
  • 做题时:先处理corner case,很多leetcode的题都有限制条件,比如s != null, 但是面试的时候要么你在做题前搞清楚限制条件,要么在代码里处理好各种corner case
  • 做题后:自己run code + 分析time/space complexity 并且自己写下来,写下来很重要。
  • 努力给出最优解,我感觉几乎所有公司都要求最优解。最优解的思路我感觉有:使用binary search优化时间,很多用stack的题目都可以不用stack之类的,可以多看看leetcode的讨论,如果有比自己解法好的解法,一定要花时间看一看,因为那很有可能就是面试的考点。


系统设计
1. 学习资料
我其实觉得市面上没有什么好的系统设计资料,我能找到的最好的就是Alex Xu的两本书,DDIA我也买了和看了,但是我只有1个多月找工作的时间,真的没时间把DDIA看完,如果大家时间有限的话,我感觉把Alex Xu第一本,加上第二本的1,2,6,7,11钻研透了我感觉也够了。在这里我想强调,也是我刚开始面试的时候犯的错误。就是不是把书看完,把 Alex Xu写的每一句话看懂就意味着你的系统设计准备好了。你要做的是,搞清楚要面试的公司用的是什么画图工具,(大多数是excalidraw.com 和Google draw) 然后在这两个软件上面熟练地练习+mock至少10个系统设计的题目。

2. 面试技巧
我有个自己总结出来的大概流程,在这里分享了,不过仅代表我个人观点
Session1
Questions: Main feature/requirements of the system? Scale of the system ?Do we need to store data?
Functional Requirements
Non-functional requirements
Estimations
Session2
Protocol: HTTP ? WebSocket?
API Design
DB/Storage Selection
DB schema
Session3
High Level Design + explain each component
Diagram
Walkthrough
Session4
Discussion:
Tradeoff
Scale the system
Fault tolerant/handler
我感觉要搞清楚每个系统设计题目的自己的独特考点,比如,Newsfeed就一定会问push还是pull model。Chat service的关键是websocket的使用等等。

Behavior Question
BQ非常非常重要,也极其容易被人忽视,但是我感觉准备1-2天就够了,下面是我总结的问题列表,一定要建一个文档,把所有这些问题的答案按照STAR-L原则写下来,所谓STAR原则,即Situation(情景)、Task(任务)、Action(行动)和Result(结果)以及Learn(你从中学习到了什么)
  1. 自我介绍
  2. 为什么选择XXX公司:非常非常重要,我就有一次feedback是面试官反馈感觉我并不想去他们公司, 建议参考 instant.1point3acres.cn 来回答
  3. 你最骄傲的一个项目
  4. 你对下一份工作的期许是什么
  5. 你的优点和缺点分别是什么
  6. 你的一次错过deadline的经历
  7. 你和同事|老板的一次矛盾
  8. 你喜欢独自工作还是和大家一起工作
  9. 谈及一次你需要做tradeoff的经历
  10. 你是怎么学习新的技术的
  11. Customer问到你不懂的问题怎么办
  12. 你有什么问题问我?


时间分配
人总是倾向做容易的事情。
相对于刷题,系统设计和BQ准备起来都不是那么容易,我自己在初期就是感觉马上就要面系统设计了,我还没准备好。
我建议按照2:2:1:1的时间来准备面试,比如刷1个小时的算法题目,准备1个小时系统设计,然后半小时BQ,休息半小时。这样一天学习12个小时,可以准备4轮。

我所有面过的公司(10月中旬到12月初)
列在这里,说明这些公司应该还是招人的
TikTok
Chime
Notable
Captions
Doordash
Meta
Axon
Nordstrom
Upstart
Nuro

希望这篇帖子对找工作的你有些许帮助,祝大家圣诞快乐,新年快乐。
2023年终于要过去了。
  • 723
41条回复