This is from October-November of 2020 but I just wanted to share my experience of how a nobody like me was able to somehow make it into FAANG.
To start off, you can do it. Most definitely can. The fact that I did means anyone who has the drive can. So believe in yourself for real. I hope you are proud of how far you have come :)
The SWE offers I got were from the following companies in this order:
Nordstrom [DECLINED]
Apple (Thermal team) [ACCEPTED]
Apple (Performance team) [ACCEPTED]
Microsoft (Azure security team) [ACCEPTED]
My studying process:
I began leetcoding for the first time around November 2019, and did not do any real prep until my first Amazon interview offer that I got in February of 2020. I really began my leetcode grind than, two or so weeks before my interview. I focused on easy questions since I was still a beginner, and mainly did string manipulation, array, linked list, and two pointer questions. Trees and graphs were scary.
I failed the interview lol, but my desperation grew, and I started expanding my studying slowly. I did stack and queue questions, brushed up on BFS and DFS and tried out those questions. I took an algorithms class from March to June which covered stuff like dynamic programming, divide and conquer and greedy algorithms so I got a nice introduction to those topics in school.
I took June off to focus on my internship, and decided to leetcode again starting July. It was really hard sticking to leetcoding everyday, especially when I lost motivation whenever I couldn't solve problems, but I truly worked hard, leetcoding almost every day from July to November.
I started easy with string and array questions, then would do mediums and ramp up to two pointer, binary search and others of the harder techniques. I then would switch gears for a personal change by going through BFS and DFS and stack and queue questions, starting easy and moving on to mediums. I felt pretty comfortable after some time and felt good about myself, which is very important by the way; leetcoding is hard, even if you genuinely love coding, so it's good to do problems that make you feel good sometimes (aka you get them right pretty quickly). Sometimes, this meant doing problems I had already done before again. This reinforces concepts and builds confidence. My personal goal was to gain a general foundation in all the major topics and then build enough confidence to think "I can solve this if I keep thinking" during my interviews.
I moved onto trees but I had a really hard time with trees. The easy questions were soooo hard for me, and I would understand the solution after seeing it but I couldn't imagine how I could come up with that. Yet, I persevered and tried tackling as many tree questions as I could. I could almost never figure them out lolllll, but it was a learning process. I would do occassional graph questions to mix it up a bit as well.
I moved onto dynamic programming questions, which I ended up enjoying because it kinda felt like there was a clear pattern between questions, sometimes more clear than other topics. And I found the concept of dp really cool and really smart, so my fascination with it made studying it a lot easier and more fun.
After 2.5 months of constant leetcoding and going through topics one by one like I listed above, I felt pretty good about myself. I was still not coding amazingly or anything, but my problem solving skills had drastically increased and I was less bewildered when faced with difficult questions. But trees were still an issue lolll, and I continued leetcoding.
I got an interview offer with Nordstrom after a series of virtual not-in-person interviews which were coding and behavioral rounds. My first technical interview of the season, I was dead nervous but got a question I had seen before so it went well and I got the offer. I was thankful I had one offer for the following summer so I felt a little less nervous about upcoming interviews.
I interviewed with Microsoft, and my first interview was an absolute disaster in my eyes. My interviewer was super nice, but I couldn't get the question. However, I remained really positive; I spoke through my flawed thought process, and when he corrected me, I acknowledged and accepted that he was right, and showed enthusiasm to his advice. He guided me to finding the right answer, but I made a lot of silly mistakes along the way, and couldn't answer really basic questions due to nervousness. Yet, I think my attitude carried me throughout; I think I showed that I was a good person to work with, that I admit when I am wrong but will work hard to fix my mistakes. The rest of the interviews (2 45 min interviews) were conducted on my birthday LOLL which was kinda a rip but they surprisingly went well. I had done a couple system design problems before but not as much as I wished, and my first interview was a object-oriented design question. I panicked for a second at first because I had barely practiced these, but I think that all my time on leetcode built up general coding confidence for me, which brought down the panic really fast. If you can train yourself to not panic, I'd say you're already 30% there. Relax and think straight, and don't worry if you can't get the question. Just focus in the moment and believe in yourself, as cheesy as this sounds. This belief helped me through my first interview, but even so during my second interview which was oh no a tree problem, my greatest fear 😂. I practiced tree problems two weeks before this interview and something clicked, I finally was getting the hang and pattern with tree questions, and I trusted my experience during this interview. I answered the question the wrong way first, and thought hard and picked myself up right before the interview ended, getting it right. Man, thank god I didn't panic, cuz I really had it in me. Then it was birthday time.
My apple interviews were similar experiences - I got most of the questions asked of me thanks to leetcode, and went well. Nothing crazy there.
If you made it this far, the reason I am writing this all is because I hope that you will keep persevering! Leetcoding is hard, but you're gaining valuable critical thinking and problem solving skills, as well as expertise in your chosen coding languages. So keep going, keep working hard, and don't give up, it will definitely happen eventually :) If you ever need advice or help or information or anything, hit me up as well!