Context:
This post focuses on how I went from not being able to reverse a linked list to getting 4 six-figure plus offers (1 at a BigN, 1 at a unicorn, 1 at a prop shop, and 1 company in SF).
Sophomore Year:
I go to my first career fair in the Fall and give some companies my elevator pitch. I have a solid GPA, have a few class and hackathon projects listed on my resume, and am a TA for Intro CS. I get a few interviews at non-tech companies like AT&T and MasterCard. I get pretty far with AT&T after passing fizzbuzz and reverse a string, but I failed the last question cause I couldn't reverse a linked list on the spot. I fail MasterCard behavioral because I didn't know the STAR method. In the Spring, I somehow manage to convince the CEO of a tiny startup to allow me to help code some plug-ins his wordpress website at out startup career fair because I learned PHP in one of my web development classes.
Junior Year:
All right, last year's recruiting cycle didn't go that well. I had to change my strategy, so I started reading posts on this sub and hear about the magical website called leetcode which apparently is the key to getting those highly coveted silicon valley internships. I do ~40 leetcode problems that were mainly easy difficulty so that I don't mess up questions like reverse a linked list. Even though I did those problems, I didn't feel like I learned any common patterns among the questions and had to look up the answer often. I decided to TA DS&A to keep the info fresh as well. I manage to get an onsite at a BigN because of campus recruiting but ultimately fail all the problems. I knew that I needed to use BFS/DFS or merge sort to solve the questions they gave me, but I couldn't code them on the whiteboard because I had never practiced mock interviews. I fail another BigN online assessment I got through a referral because I freeze up on LC medium tree and array questions. I felt stupid because one of my friends got the BigN without ever doing a leetcode. I did get a few other interviews at non-tech companies, and I got a job at a healthcare tech company because they didn't ask any leetcode style questions.
Junior Year Summer:
Last year went better, but it still wasn't exactly what I wanted. I decided I would double down on leetcode after work over the summer and I would try my best to practice effectively. I tried learning as much as possible during work about how to work in a team, learning from code reviews, asking my mentor and senior engineers tons of questions, learning how this company structures their code to be maintainable, efficient, and modular. Most importantly, I tried to learn how these engineers made their decisions. What was their thought process? I knew everything I learned during work was a talking point for behavioral questions for my next round of interviews, so I made the most of it.
After work, I'd hit the gym, get dinner, and work from 7pm-10pm fully caffeinated and brushed up on common algorithms and doing leetcode by category. I learned tree traversals, graph traversals, merge sort, recursion, two pointers, sliding window, greedy, etc. I learned each algorithm's time and space complexity. I realized I didn't really understand recursion until this summer, and I am just amazed at how useful it is for a ton of these problems. Once I actually learned the concepts behind the categories, doing these leetcode questions became much more enjoyable and I was cranking them out quicker. I framed my learning based on Jeremy Aguilon's article. Thanks so much Jeremy! Jeremy is soooo right about how 80% of leetcodes can be done by knowing several strategies and 20% are the annoying "gotcha" questions everyone hates. All the leetcode questions I got in my real technical interviews senior year fell into the 80% category, and it's crazy how doing them in 30-45 minutes becomes more and more realistic once you figure out the patterns.
Side note about working after work and if the leetcode grind is worth it:
I worked around 7pm-10pm Monday-Thursday, took Friday off, and 11am-4pm on Saturday and Sunday. This wasn't a super strict schedule, though. I still had a ton of fun over the summer on my nights off turning 21 and hanging out with friends. I was bored 7pm-10pm Monday-Thursday and weekend afternoons anyways. I found a balance that worked for me, and I think you can too.
I took on the grind because I knew that putting in a few months of after work grinding would pay off getting a good tech company would pay off so much more working 60 hours a week for years climbing the ladder in a non-tech company. That combined with the awful habit of me comparing myself to my peers causing anxiety and how I didn't want to waste spending tens of thousands of dollars on a private school education to get an average job was what motivated me, lol.
Senior Year:
Now it was crunch time. I still continued doing a few leetcodes in the beginning of the school year and had done about ~80 easy and ~80 mediums and 4 hards total by the end of my preparation, distributed across the categories I mentioned, before I started interviewing. I took an easier class load anticipating a lot of interviews. August-September I focused on doing mock interviews while applying to companies through our university job website and finessing the recruiters at the career fair. I gotta say this video by the TechLead was one of the most influential videos to demystify the "thought process" everyone talks about. I think it's actually more important than if you can get the most optimized solution for the problem. The thought process boils down to talking about tradeoffs and having a bulletproof reason for each line of code you write. You can't believe how easy it is to impress interviewers when you talk about all the possible ways you can tackle the problem, the strengths and weaknesses of each approach, and making your decision of what to use based on the constraints of the problem. Gayle was soooo right in CTCI about the thought process and the best conceivable solution as well.
I probably did about 10 mock interviews with friends, taking turns being the interviewer and the interviewee. It was interesting being on the other side because it forced you to think about what the interviewer wants to see. We gave each other medium problems to do with a strict 45 minute time limit. I can't stress how much doing mock interviews helps you develop the skills needed to whiteboard and explain your code as you're coding. I can go into more detail about what I think the interview essentials are, but honestly TechLead's video and CTCI goes over them pretty well, and this post is getting super long.
This time I only applied to coveted high-paying companies in cities I wanted to live in maximizing the salary to work-life balance ratio. This included the BigN, a few prop shops in Chicago, and a handful of midsize/unicorn tech companies in SF and Seattle. I focused my applications on places I had referrals to, companies that came to my career fair, and at the least, companies that were listen on my university job listing page. I found I would get a much higher chance of getting interviews through these channels rather than spamming applications online. I had referrals to 2/3 BigN's, some prop shops in Chicago came to my school's career fair, and I found a few companies in SF/Seattle in my university job listing page.
In the end, I got interviews to 9 companies. I passed the coding challenge, phone screen, and/or on-campus interview for 6 of those companies. I knew I screwed up my first BigN onsite, but one interviewer there gave me the advice that helped me more than anything for the rest of my interviews:
"Hey, I could tell you were pretty nervous during this interview trying to tackle this hard problem. We don't deduct points for nervous candidates, but remember that every one of these interviews is going to be hard. The sooner you accept that the sooner you can focus on doing your best to solve the problem rather than letting your nerves affect your thought process."
Doing my best to follow his advice and be confident, I managed to secure the next few onsites. It is much easier to follow that advice after you get your first offer lol.
In total, I had 25 technical assessments counting coding challenges, phone screens, technical interviews at onsites. I tried learning what I did good and bad in each one and fixing it for the next one. If you combine that with my ~10 mock interviews that is about 35 total interviews. The most important algorithms to know are graph traversals, tree traversals, and the sliding window/2 pointer technique in my opinion. Honestly, after practicing the "thought-process" it is very possible to at least get an answer even if it's not the most optimized to most questions.
Final Thoughts:
The interview grind isn't for everyone. A lot of people hate on it, but it is what it is. For me, it was worth it because I was able to nearly double my compensation from the return offer I had from my previous company, which was around ~$70k, after several months of grinding, mind COL differences. Not gonna lie though, I did learn a ton throughout this process. I am definitely lucky though that I genuinely enjoy computer science and building things. Everytime I learn a new way to solve a leetcode problem or a design pattern from my internship, I am like "Holy shit that so cool! Now I can use that new thing I learned for the next thing I build!" I'm also lucky in a ton of other ways, but I could go on and on. Regardless of the school you go to though, nearly everyone goes through the grind. I remember meeting someone from Waterloo at one of my onsites and he said he cracked open CTCI on his daily commute and did those problems on paper and that's the only reason he got the internships he did.
Lastly, I definitely could not have done this alone. Recruiting season is hell for everyone. It is super easy to feel absolutely worthless when you don't get the job you wanted or feel so stupid when you can't understand an interview problem, and I gotta thank my friends and family for being supportive during the lows. Thank you so much to everyone in leetcode, Jeremy Aguilon, TechLead, Gayle, and Jarvis! I know that reading other people's stories on this sub helped me out a ton, so I figured I'd write one of my own. I don't really post ever, but I do have more details I left out advice about behavioral interviews, making a good resume, and doing personal projects. Let me know if you're interested!