My two cents on preparing for SWE Internships

My guide to tailoring one's resume, applying to SWE internships, and preparing for them

Featured on Hashnode

Hello everyone! I'm Khushboo Gupta, and I recently graduated from IIT Goa as a CSE Undergraduate. I have previously interned at Google and MathWorks, and I would like to share some tips I followed and learned from my preparation.

Preparing for SWE internships and getting your dream offer is truly an exhausting process. However, the process can become a tad easier with the right guidance and hard work. During my preparation days, I skimmed over many such articles to grab any useful information I could. Since the internship season is right around the corner, this is my way of giving back to the community by curating information that helped me during my preparation!

In this article, I will mainly focus on tech companies that follow the conventional DSA-based interview process and not on remote startups, which have a much different hiring process (often based on testing your knowledge on particular tech stacks).

Getting that Interview call

Before applying for an internship, the first and foremost step would be to build your resume. Your resume is that "one" document that will speak the most about you to get shortlisted, and hence, building a strong resume is of utmost importance.

Building your resume

For an individual applying to internships or for new grad roles, a resume should ideally be not more than one page. I prefer single-column resumes more; this is one of my most preferred templates.

Brownie tip: Always get your resume reviewed by at least 1-2 of your mentors or college seniors since they would be able to point out any errors or anything that you could have missed!

Now comes the more interesting part. What would differentiate your resume from a pool of candidates while applying? This is where building meaningful projects, open-source contributions, working under professors, participating in hackathons and activities conducted by your college's coding club come into play. Moreover, getting appreciable ranks in contests on competitive programming sites like Codeforces, Atcoder, etc., will help your resume stand out. Getting good ranks in Leetcode contests also helps a lot.

Getting a referral

Before applying for off-campus internships at big tech companies, it is always better to apply with a referral. It is important to note that in the case of a referral, the person who will be referring you will most probably share a link through which you will have to apply and not directly on the portal. That's why asking for a referral before applying to the company is important. You can get a referral from your college seniors, alumni, and even strangers on LinkedIn. Also note that interns cannot refer you in most cases, so to be safer, messaging Full Time Software Developers would be the best way to go! It is important to be respectful and crisp while asking for referrals, so I usually go about using this template as follows:

Hello! My name is [name] and I am currently a [year] year student majoring in [degree] from [college name]. My technical interests include [2-3 of your interests]. I recently saw an opening (mention Job ID) at [company name] and I was really interested in the opportunity as it aligns well with my career goals. But since [company name] does not come to my college, I would be very grateful to you if you could refer me for this role. I am also attaching my resume for further reference (resume link). Thank You!

Preparing for the OAs and Interviews

Congratulations, you are shortlisted for the interview process! Although some companies directly shortlist for interviews, some companies also have online assessment rounds. Solving questions within a particular time frame matters most here, and hence, the best way to practice would be to give contests. Continuously attempt Div. 2 contests on Codeforces and Leetcode contests. Upsolve questions you couldn't solve during the contest, especially if they are medium-hard speaking in Leetcode language and C-D level when it comes to Codeforces.

Regarding interviews, this is the time to revise your Data Structures and Algorithms concepts and be thorough with things mentioned on your resume! Internship interviews mainly focus on DSA, a little about your projects or any past work experience that you might have done, and some CS fundamentals often taught in college. Let's go over this step by step:

Pointers to ace DSA:

One of the most important concepts often overlooked during our preparation is time and space complexity. Getting a question's time and space complexity wrong during an interview does not leave the best impression on the interviewer (speaking from personal experience...). To avoid such situations, it is better to compute the time and space complexity of every question that you are solving (brownie tip: while solving questions on Leetcode, cross-check your computed complexity from any one of the most voted solutions available on the discuss tab). Two resources that I would highly recommend when it comes to understanding and testing your knowledge of time and space complexity are:

  1. Cracking the Coding Interview's Big O section

  2. Interviewbit's time complexity section

Make sure to revise the time complexity of common operations for different data structures. For instance, insert and delete operations of an unordered map if you are using the STL library in C++. You can refer to this cheatsheet for this.

Leetcode is hand down the best site for preparing for interviews. The site has one of the best communities, which actively posts about the most recent interview questions, experiences, detailed descriptions of the rounds, etc. One life-changing tip that I had gotten from my mentor was to go through the most voted answers in the discuss tab of every question. These solutions are very well written and consist of different concepts, patterns, and even several ways to approach the same problem. These key learnings often help in solving other questions as well and help in understanding the underlying patterns across DSA questions. I have listed certain important DSA concepts (which, in my opinion, are a MUST DO) below:

Covering all the topics in a breadth-wise manner and then jumping depth-wise helped me tremendously. For a particular topic, start with the easy questions (about 10-12), and once you have a little confidence, proceed to the medium (where the majority of the time should be spent) and, eventually, the harder ones (about 10-12). There are already several topic-wise lists available on Leetcode that you can clone. Other than that, solving one SDE sheet fully would make you much more prepared rather than juggling between several. These are a few sheets that thoroughly helped me during my preparation:

  1. 175 Leetcode Patterns list (great resource!)

  2. Fraz 250 DSA Sheet

  3. Blind 75 list (for revision)

  4. Striver 30-day sheet (for revision)

Regarding resources for certain topics, I strongly recommend Aditya Verma's Playlist [Must do!] and Striver's Playlist for Dynamic Programming, and Striver's Playlist for Graphs.

Preparing for CS fundamentals:

Along with DSA, many companies often ask for core CS concepts like Object Oriented Programming, Operating Systems, Database Management Systems, and Computer Networks. According to me, OOPs concepts and Operating Systems are the most important ones (although this differs from company to company, so I recommend checking out their past interview experiences and preparing accordingly).

Many companies test OOPs' knowledge by asking candidates to design systems like Hospital Management System, Parking Lot, etc. I recommend going through GeeksForGeeks and Leetcode discuss sections to find such questions.

GateSmashers and KnowledgeGate playlists are the best resources to revise core CS concepts. These are also often taught in college if you are majoring in computer science, so course notes are another resource.

Strategy for 1.5-2 months before your interviews:

When you have only about 1.5-2 months before your internship coding rounds and interviews, it would be great to get started with InterviewBit. Compared to Leetcode, InterviewBit has a more comprehensive and selective question bank with top-notch quality questions. It is a great way to test your strengths and weaknesses regarding different topics in DSA for the upcoming interviews when you have limited time.

During this period, you absolutely cannot miss giving Leetcode bi-weekly and weekly contests (although I would recommend starting giving them much before!). Even if you miss the actual contest, always make sure to attempt the contest virtually. The level and topics of these questions are pretty close to what is actually asked in interviews and will help you determine which areas require more practice. Make sure to upsolve the questions as well.

Reading company-wise interview experiences on Leetcode and GeeksForGeeks just before your scheduled interviews would help you know what you can expect in the interview. I would also recommend practicing on a Google doc since sometimes companies don't use IDEs for their interviews. Ensuring the correct indentation and writing readable code becomes extremely important in this case.

Going the extra mile:

The first thing you are asked in the interviews is to introduce yourself. So preparing a crisp and strong introduction beforehand would help you. It should include your interests in the technical field, any notable achievements, and one line about your non-technical interests or hobbies.

Remember to remain calm during the interview and let your interviewer know what you are thinking at each step! They are genuinely there to help you out, and leaving long amounts of blank spaces would only cause unwanted stress. So let them know your thought process, walk them through different approaches, and discuss any time and space trade-offs.

While writing code, ensure that you write modular and readable code. Use meaningful variable names and write comments wherever necessary. Break your code into functions and reuse these functions if possible! Remember to mention your solution's time and space complexity, and always dry-run your solution with an example! Mentioning the temporary variable values in comments in the code would help you explain your solution better and will also help you catch any errors beforehand.

Also, several companies have an HR round to assess whether you'll fit the company culture well. I recommend creating a document beforehand with points regarding answers to common HR questions like your strengths, weaknesses, any project where you displayed leadership qualities, handled conflict, etc. You can easily find a list of questions online. This makes it easier to just open the document for any upcoming interviews rather than writing new answers each time.

Understanding the company values and what they stand for will also give you an edge and help you stand out. So I recommend reviewing company values and mottos before the interview and trying to frame your answers to highlight those values.

Finally...

Grabbing that dream internship offer is a lot of work and requires constant dedication and perseverance. Just remember to constantly put in your hard work and believe it will be worth it one day!