I think the way i prepare myself for those interviews might interest you. I decided to create this topic to both gather last seconds advice and also share my experience. I'm a father, husband and a senior sde at amazon SF (which mean i have not a lot of free time), and I'm an imposter. I'm happy at amazon but i want to try to succeed outside to confirm or not that I'm an imposter, i actually dont plan to accept offers. I feel i have been hired because of luck, and when i was new college hire. Now i want to succeed a higher level (hr mentioned L5 for G, E6 for FB, Sr for Snap). I mostly prepare myself with my phone by installing apps like ileetcode and Wikipedia. My plan was split in two: learning the theory and practicing. For the theory, I've learned how to understand and implement all those types of algorithms : Simple recursive algorithms. Backtracking algorithms with Memoization. Divide and conquer algorithms. Dynamic programming algorithms. Greedy algorithms. Brute force algorithms. Randomized algorithms. With all the sort and dfs/bfs algorithms. For each algorithm I've drawn them and i could rewrite a dijkstra or a A* from scratch without thinking much. And how to implement in multiple ways all those datastructures like hashtable, graph, heap, bloom filter, btree, trie etc... In depth (i could write on top of my head multiple hash function that are pretty solid). I even did a lot of bit exercises. Then I've been practicing 100% of the overall questions that my apps on my phone could give me. About 450 i think. To do so, i would just read the question when I'm in a commute or in the shower or during lunch break and then close my eyes and solve it in my head. At first it seems hard but it actually become easier over time. What i like about this approach is that you can exercise yourself everywhere. The down side is that i kind of loss some sleep quality lol. On top of it i studied design. To do so i just thought about basic stuff and how i would design it. Like how is memcache implemented? And mysql? And SQS? And Dynamo? Etc... And every time i would actually go on github (or internal git) and read the source code. It often had some threading and operating system code attached to it so I ramped up on this too. Now i have to say, I'm exhausted. And I'm terrified. If i fail, after all this prep, fuck this. I wouldn't be mad at myself but i need to realize I'm an imposter. I'm afraid to have missed something, for example often i find a super DP solution but i found out online that simple math could solve the problem. What is your last recommendation? The leetcode question that are "difficult" are still hard to crack for me. What level of questions should i expect?
just take a deep breath, tell your wife to cook something tasty for you, kiss your kiddo, and ... try to enjoy.
Tell your wife to cook something for you? I think you should learn something about unconscious bias and sexism.
You should use Amazon Restaurants to order your dinner instead of making your wife cook.
Is everyone preparing like I do? Im asking to know what would be the interviewers expectations. Also do you see any flaw in my prep? Thanks
Your prep looks good, but don't forget that any google engineer only has 50% of succeeding an ItW, so don't be mad if you fail!
Is it real data?
I've been prepping some, but not as much as you. One thing I discovered is that I have a couple of go to coding styles and revisiting algorithms and data structures has helped me realize that and should make me a better coder. That said, a good design is easy to code and a great coder can't make a bad design good. My area of focus is micro services and I use a combination of OO principals and func decomp while taking into account the protocol (usually REST like). I have found that looking at public APIs (and judging them) then designing that system is good design practice. Good luck.
Relax. It is all luck based
Agreed. I recently scored very nice offers from G/FB without even doing 1/3 of this.
Agree. I got my LinkedIn offer by luck.
Amazing prep! I'd love to interview someone like you for my SF team. You don't just do the "monkey exercise work", you go the extra mile to look under the covers of real systems and connect the dots. Like other people said, take a deep breath, you'll be fine. Good luck!
I think you have all the necessary ingredients to succeed in your interviews except that now you need few practice interviews to get your confidence going. Then, it's a matter of time before you crack something.
Totally agreed - practice by interviewing at a company you don't think highly of. That will take the 'I need to succeed' pressure away. Once you have an offer the next one quickly piles on. Good luck!
Relax. Try to enjoy. It's always a plus for me if the candidate shows enthusiasm and is having fun solving problems.
Not smart IMHO to prep this way. I've never prepped and have gotten an offer from all those companies save snap, including your current employer. I've also conducted 100s of interviews. Overprepped engineers are immediately discernable to anyone with experience, and have a disadvantage IMHO. When I determine a candidate is in recall mode, I extend the questions and use a higher bar when evaluating them because I exclude the portions of their answers that were driven by recall.
People say this but you have to keep in mind that this is a perfect example of faking it till you actually make it. If you overprep to an extreme degree you end up at a point where you actually know your shit.
Source: Me
OP, it seems you are ready to actually interview with those companies. how long did it take for you to prepare? weeks, months?
6 months
I think a very important part of those interviews isn't about coding but talking about your background and how you manage to be successful. This is usually to test if you can be good inside the company. System design is also very important. The coding part tend to be less important comparative to system design and past experiences.
My job is to design distributed system at scale for aws, so i hope this will be ok. For the behavioral test there is not much i can prepare.
system design is like luck interview. I like coding interview better as it can be precisely proved correctly.