New grad with MSc in CS from top 50 university in US with no previous internship or work experience.
I started to prepare on mid-January, 2021. My goal was to solve 50% of easy, medium, and hard questions. At that time, I believe there were around 1700 questions on LeetCode. I planned to solve 10 questions per day and do it for 90 days (I think I didn't skip a single day, but sometimes I did more questions on one day and took the next day off). I started with easy questions, once I solved more than half of them, I moved to medium questions and then hard. Around mid-April, I had already solved more than 900 questions, the goal was reached, so I stopped.
Algorithms classes were one of my favorite topics at college. I genuinely enjoyed solving these type of questions. Since I enjoyed solving LeetCode questions, it was somewhat easy for me. I would say on average, I spent around 4-5 hours per day to solve 10 questions. If I got stuck on a problem more than 15-20 minutes, I would just look at the solution, try to understand it, copy the code and then submit it. I also LOVE working with graphs and graph problems. Towards to the end, it was kinda sad that there weren't any graph problems left :( Also towards to the end, I got lazy: I'd look at the question, solve it in my head, then look at the solution and copy the code from there lol.
Since I didn't have previous experience, I waited for a few months for new grad positions to open up. I started applying around August 2021. On daily basis, I'd go to LinkedIn and apply most of the new grad positions for software engineer from no-name companies to FAANG. Initially, I was keeping a record of the campanies I applied in a spreadsheet. But in a few days, I lost the track of it and didn't record them anymore. I still don't know how many companies and positions I have applied.
I was confident that if I could get an interview, I'd most likely pass it because of my preparation. But there was one big problem: I was not getting any interviews. Most of them were ghosting me. I was at a point where receiving rejections was making me happy (they at least took the time to reject me even thought it was likely an automated email). I think it was because of the fact that I didn't have any internships experience in the industry (I stayed at the university and did "research internships" all summers).
One of the places I applied was Google. I managed to get a referral from an acquaintance and applied via it towards the end of August for Software Engineer Early Career Campus position. I have also done a Google Summer of Code a couple of years ago. At the end, they give you a one time referral that can be used to apply Google. I used that referral as well. Towards the end of September, I got an email for the snapshot survey and online coding exercise. I had one week to submit them.
In the coding exercise, there were two questions: one LeetCode hard, one LeetCode medium level. But they weren't on LeetCode. I managed to solve the hard one in optimal time, but the second one I couldn't find the optimal solution (did brute force). However, I messed up the submission proccess and I think only my solution for the medium level question was submitted. I reached out the snapshot help, but they weren't much helpful. I thought that was the end of it. However, in a few days I got an invitation for the onsite interviews. I scheduled it for a month later.
This time I decided to buy LeetCode premium and solve all Google tagged questions that were asked in the last 6 months. I solved all of the Google tagged questions that were asked in the last 6 months and most of the questions that were asked in the last year. Since I have solved more than 900 questions previously, most of the tagged questions were already solved. Like before, I tried to solve 10 questions per day. I think I solved close to 200 questions. In total, since the prep start I have solved around 1100 LeetCode questions.
I also went over all of the questions in the Cracking the Coding Interview book (I skipped the sections such as system design, testing, databases, threads and locks, which aren't asked in new grad interviews). I had seen most of them or their variations on LeetCode, so it was kinda easy. I'd solve them in my head, quickly double check with the solution and move on to the next question. I did the same thing for Blind Must Do 75 LeetCode questions list (I have already solved almost all of them).
To prepare for behavioral interview, I read the relevant section in Cracking the Cracking Interview book and few online posts. I also prepared answers for common questions by using the STAR method.
Two days before the interview, I skimmed through the top 50 most frequently asked Google tagged questions again. In the last two days, I just rested and slept well.
The interviews were virtual: 1 behavioral (30 minutes) and 4 coding rounds (45 minutes each). The coding rounds were conducted in a barebone custom IDE that only supports syntax highlighting, nothing else.
As a result, I thought I had a chance, but I was really worried about coding round 3. But there wasn't much I could do other than wait for the results. I was slightly pissed off too, because I didn't get more graph questions (usually Google loves to ask graph questions and I love them too :)).
Two or three days after the interview, my recruiter said that my package was sent for the internal review. After three weeks, my recruiter called me out of blue and delivered the good news. Product area matching took just two days. I signed the offer letter a few days ago. The whole process from applying to signing the offer took about three months including one month for my preparation.
In conclusion, Google was the only company to interview me and I was able to pass it (even thought it is considered one of the hardest to crack)! I believe that hard work always (probably noy always, let's say most of the time) pays off. Sometimes, I think I could have solved all the asked questions without any preparation, but probably I'm wrong.
Good luck in your further interviews!