After all that the leetcode community has done for me, I really wanted to pitch in with my personal experience interviewing and how each company seemed for me.
Background
Just finished my CS degree at a pretty unknown university (worldwide). One internship done in ML + 1.5 yoe (part time) working as a Data Scientist for a startup. Never did any competitive programming, also wasn't too interested in data structures or algorithms prior to Feb/March 2020.
My journey interviewing at FAANG
2018
This is when I really "discovered" FAANG and what it meant to work there, started applying to every single internship I could find. The only ones who reached out were FB.
Phone interview was a total disaster, had very bad internet and had almost no preparation (I hadn't heard about Leetcode back then). Obviously, no offer then.
2020
February
Applied to some new grad/junior roles. The only ones who reached out at this point were Google. Scheduled an interview for March so I'd have time to practice. Had to reschedule for April due to personal issues.
On the 25th of February I signed up for Leetcode. For about a month, did 1-2 problems on avg per day (some days I did none, some days I did 20). At this point I had barely any memory of any data structure that isn't a string, tree, dictionary or array. I mean, I did remember the general ideas about lots of DS's, but I had 0 practice. To better understand my situation, I avoided all graph & tree problems for the first month, as they were too complicated for me.
March
Amazon
Did 2 Online Assessments for Amazon, they finally reached out to start the interview process for a Solution Architect position. A few days later I got an automated email saying they want to proceed to a phone interview.
Phone Interview
Wasn't sure what it was gonna be about, ended up having to answer a lot of network related questions, a bit of basic algorithm trivia and a lot of behavioural questions. I wasn't asked to write a single line of code. Answered all but 2 questions (more than 20) quickly and clearly. Behavioural wise, I had read a lot about their principles and was prepared to answer all the questions that he did ask. I thought I did really well, the interviewer seemed very pleased. Was sure I was gonna get to the onsite round.
Result
One week goes by, no news. I checked the career website and the position was archived (No longer under consideration). Another week later got an email saying they won't proceed with my application.
My feelings
Overall I was disappointed with the whole process at Amazon. Emails were all automated, no recruiter contact. Also, the fact that nobody reached out to tell me I won't be moving forward with the application (had to find out a whole week prior to the automated email that was sent to me) made me pretty happy they said no. Tbh I was given the feeling that candidates don't mean anything to them - and were treated as just an expendable resource. Won't be applying there again in the future.
The failure at Amazon made me miserable for a few days, but then it gave me a lot of motivation to do better in the future, and this is when I started leetcoding pretty seriously (19th of March is when the grind started for me).
April
The Google interview was coming up, I was leetcoding for at least 5h every day, and reading chapters from Corman's Introduction to Algorithms. Some days everything made sense, and I would do even 20 problems or more a day. But other days, especially when faced with a new topic, I could barely solve 1 or 2 problems.
So I decided to get a yearly premium subscription for Leetcode, thinking that if I do get the job now, I won't care about the money and they will have been well spent. If I don't get the job, I'll need the subscription in the future. It was a win-win for me. I mainly wanted this to see which kind of problems will be given and to take advantage of the solutions provided and of the mock interview feature (specific for companies).
Google
About a week before my interview, besides leetcode, I started doing mock interviews with my friends and I can't stress this enough: THEY REALLY HELP. It was great being able to do this first with familiar faces, and I was able to see how I'm reacting under pressure and learned how to gain control of my emotions.
A few days before the interview I read a leetcode article from someone saying they'd contacted their recruiter one year later and they ended up getting an interview, so I decided to email my recruiter from FB from the year prior, hoping to get an interview. She redirected my email to another recruiter, who was happy to schedule an interview for me.
Phone interview
Had solved about 150 leetcode problems by then.
This interviewer was so nice, we joked a lot, talked a lot. Really nice guy.
The problem statement was something on the lines of:
Given two dictionaries, merge them into one.
I asked a lot of questions and came up with a lot of solutions, most of them of the same complexity. Ended up talking a lot about each of them and wasting too much time with that. Realized 20 minutes in that I hadn't a single line of code. Panicked, decided to just start implementing one. Coded it right on the first try. After testing, received a follow up about nested dictionaries. Spent a lot of time discussing what I'd change, didn't realize how much time I'd spent. Changed my code very quickly, barely managed to go through one example before time ran out. Also didn't have time to write an auxiliary function that I said I'd use, but I explained it very carefully.
Towards the end of the interview, I felt like I was just doing a mock interview with one of my friends. It was very genuine. The interviewer even said he had a great time during the interview. I had a pretty good feeling about this interview, too.
Result
One week later, recruiter calls me to offer feedback. Said I was really close to making it, and that they love my personality and I definitely have the "google-ines". Told me that I should manage my time better, and that they decided to say no this time because I spent too much time explaining stuff. Also said the interviewer was impressed with how fast I wrote the code, but he thought I needed "a few more months of real-life experience" to make it at Google. Had a really nice chat with him, and he urged me to stay in contact and reapply for that specific job in 1 year time, but said he'd be glad to hear from me for other job openings in the future (I mentioned I wanted to apply for a new grad position in the fall).
My feelings
Was pretty bummed, not gonna lie - not even making it to the onsite rounds. Especially since my best friend made it (she had very similar DS&Alg knowledge with mine, in some areas better, in some worse). And by this time, both my boyfriend, my best friend and another close friend had gotten jobs at Amazon and Microsoft. I was feeling really behind (and kinda dumb).
May - Burnout & No Time
Final exam session, had very little time to leetcode. My FB interview was scheduled for the middle of June, knowing that I would have very little time to prepare in May. Did maybe 1-2 problems every other day. Sometimes I'd do more on weekends.
Applied to some other companies, had a few interviews in May, June & July, none FAANG, none special or worth mentioning. It was great to have more interviewing experience, I'd advise everyone to apply for as many positions as they can, it's great practice.
June
Since I had little time to prepare the month prior, I set my goals to only make it to the onsite round - and I'd be happy with that. I was already thinking about reapplying in fall once all the new grad positions would re-open.
I had very low motivation to do anything, following these previous failures. But I did anyway. Not as much as before, I was feeling the burnout more and more.
Phone Interview
Had solved about 220 leetcode problems by then.
Won't be giving too many details, there were 2 problems, 1 data structure design and a very common leetcode question that I'm sure all of you already know.
Got an email 2h later informing me we'll be moving on to the virtual onsite round. We scheduled for 1.5 weeks later.
I had reached my goal. I was so happy.
Unfortunately, I had some issues which resulted in me spending half the time left before my interview in bed, sleeping. I did do some problems the days before the interview, but at this point the burnout was too much to handle and I was at peace knowing that I'll do my best, and if that's not enough right now, it's okay.
Virtual Onsite
Won't be giving any problem specific details since I signed an NDA.
Had solved about 240 leetcode problems by then.
Round 1: Behavioural only got one problem to solve. As soon as I saw the problem I knew exactly how to solve it (hadn't seen it before, but it was nothing too difficult). Interviewer seemed pleased, but couldn't really read him.
Round 2: Coding This one was by far my favourite interview ever. The guy was the nicest ever, we had a lovely time chatting and I think our personalities really clicked. I also realized how to solve the problems pretty fast, also wrote the code pretty fast. Had time to go through examples, optimize & all that. In hindsight, I think this interviewer was my biggest advocate, it really felt like he was my friend.
Round 3: Coding I was so happy with how the first two rounds had gone, and I went into the third interview with a lot of confidence. Aaaand I met an interviewer with whom I simply couldn't click: I'm very talkative, he wasn't. I generally need feedback or reassurance before I take any decisions or change stuff (I ask things like should I start implementing this, or do I try to find something better). The first problem I did right. Forgot about an edgecase, realized during testing, changed my code. At this point, I really started thinking I might get the job.
But behold, the last problem. It wasn't hard by any means, but I had no idea how to solve it optimally. I spent around 15 minutes trying to come up with good solutions, none worked. Interviewer informed me I had 5 minutes left. I said "I give up, I'm sorry, I can't solve this better, I'll do the bad solution I previously mentioned". Wrote it in literally 2 minutes, only had time to write some tests, not actually go through them and verify my code. Ultimately, the code worked. But I felt I reached a horrible solution (complexity-wise) and that I spent too much time on trying to find something better - and failed at it.
My feelings
Was so bummed after the last interview. Everyone kept telling me about how high the bar is at FB, and how they want you to do everything perfect. I was sure they were gonna say no. My best friend had an interview for the same position 2 months prior, she had the impression she did everything right, was expecting an offer, and then they said no. So how could they say yes to me, since I had "failed" so bad at the last problem (meaning it wasn't perfect).
Spent the next 2 weeks convincing myself I wasn't gonna get it, I was 99% sure there was no way they'd say yes. I refreshed my email almost every 15 minutes, waiting for them to send the email, putting me out of my misery.
July - Result
Recruiter sends me an email saying the're still gathering the feedback, but that she'd call me on the phone the following week.
She calls, starts by thanking me for my interest in Facebook and for my effort. This is exactly how rejections are formulated most of the time, so it was going exactly how I thought it would. 30 sec into the call she adds "all these being said, you did great in your interviews and we'd like to offer you the job". I was speechless. Honestly, I feel so blessed.
All I want to say is that I know job searching is a struggle, and that burnout is a real issue. And sometimes, rejections feel like the end of the world. But they're not. And I'm the living proof that it's possible, you just need to do your best. I'm not by any means a competitive programmer or someone that's been doing this for a long time. 4 months ago I had no idea how to use a heap.
But hard work (paired with just a little bit of luck) always pays off.
TL;DR
Rejected by FB 1.5 y ago (because I was a noob).
Rejected by Amazon & Google. Big burnout. 3 months of grinding and 1-2 of doing Leetcode now and then.
Interview at FB, thought wouldn't pass the bar, but I did. Offer
I really hope this motivates some of you guys! Just keep working and what's set aside for you (like, in the big scheme of the universe) will eventually be yours, just do your best and don't give up!
LATER EDIT:
Advice
Contacting recruiters:
Set one of those alerts on the google career site for when a new job based on your criteria shows up. The timing of when you apply is very important. If you apply for a job that's been posted a month ago, chances are they're already interviewing a bunch of candidates. But if you apply for a job that's been posted yesterday, it's much more likely that someone's gonna read your CV and give you a shot! (same applies for most companies).
If I had to do it again, I'd just go on Linkedin and search Google/FB/Amzn Recruiter, and send out connection invites to as many people as Linkedin will let me. Then, for those who respond, I'd write them a message saying who I am, what my background is and what kind of roles I'm interested in, and then ask for their help. I know people who did this and it worked for them.
Once you get the email of a recruiter, you can pretty much keep emailing them from time to time asking to be considered for a job, or to be referred to somebody who'd consider you for a job.
My advice would be to create a network as big as possible on linkedin and to make sure that you have all your information there and that your profile would be attractive to recruiters, then reach out to them yourself. Pretty sure at least 1-10% would respond, and you only need one recruiter from a company to say yes, and then getting interviews in the future should be much easier.
Recovering from Burnout:
I tried taking a mental break from all of the things that were stressing me out. Had about a 5 day period in which I did absolutely nothing. Then I tried to get back into it slowly. Couldn't keep up with the expectations I set for myself, so I set new ones. I tried to also do things that made me happy, and to give myself time. It's important to be patient with yourself, I can't stress this enough! I also tried meditating and that helped a lot. Sleep enough, drink a lot water, go outside. Best advice I ever got! And remember why you're doing what you're doing, what the end goal is. Or try to find something that motivates you.
Failure:
A lot of people at big companies failed! Failure only tells you how well you did at a specific point in time, it doesn't define you, your knowledge or your capabilities. Some people spend years applying for the same role, and then they make wonderful software engineers.
Clarifications: