Table of contents
Even though, there is a plethora of articles on Google SWE Internship interview experience online, I am still frequently asked the following questions:
How did you crack Google SWE Internship?
Which resources did you follow?
Can you share some interview tips for my upcoming interview?
Was it on-campus or off-campus?
... and many more. So, I decided to pen down my thoughts so that I can share this article next time someone asks me anything about my SWE Internship.
What can you expect from this blog?
These are the few things that I would like to cover in this blog
How I optimized my resume.
How I approached (or, usually approach) referrals.
Resources I referred to while preparing for DSA.
NOTE: Although this article is about Google, the recommendations will be useful if you apply to other product-based companies.
Hi, I am Arnab Sen, a Software Developer from India 🇮🇳. I interned at Google as an SWE for the summer of 2022 and even grabbed a Pre-Placement Opportunity. I will join Google India as a Full Time, in July 2023. When I was in my third year Google, unfortunately, didn't visit our campus. So I had to take the off-campus route to land at Google and here is my journey:
Decoding the Google Application Process
Let's understand how Google usually hires candidates for the Software Engineering Role:
Online Aptitude Round
I'll go through each round and talk about what happened and how I prepared.
The same rounds are usually followed by most of the Product based companies like Microsoft, Amazon, Meta .etc.
Round 1: Resume Shortlisting
It was in Aug 2021 that I came across the Google India SWE Intern opening in Google's career portal and I applied with a referral from one of my seniors.
Resume building tips
Your resume is the first thing that creates an impression. Even if you are super talented and skilled, a poor resume can negate all your abilities. So, you need to create a kickass resume that showcases your talents and impresses everyone!
Originally I used to create my resume in LaTeX but later on, it became a hassle to maintain and make updates. Hence I moved on to this website called flowcv.com.
Their interface is user-friendly and offers pre-defined templates while allowing ample options for personalizing your resume. Check out the template I personally used.
I prefer a single-column resume. If you want to stick to LaTeX and you are looking for a resume template, my suggestion would be to use DeedyCV. It looks very professional and compact.
Resume tips to keep in mind
Here are some of my tips for your resume:
If you wanna look like a pro, make sure your stuff doesn't have any spelling or grammar mistakes. You can use tools like Google Docs spelling check or Grammarly to help you out.
Just get straight to the point and don't use fancy words. Nobody cares about your language skills, they just want to know what you can do as a developer.
It would be great if you could add some proof to your work. If you have built a project, published a paper, or completed a certification, you must provide a link for the respective work.
Don't stuff everything into one page of your resume. Leave some space to breathe. It's totally fine to use 2 pages if you need to. I checked with some Google peeps and recruiters and they all said it's all good to have a 2-page resume if one page just ain't cutting it.
Now, let me share with you some hacks that can use:
If you don't have achievements, try to take part in Leetcode, GFG, Hackerrank, or HackerEarth contests or contests of college fests. You can put those ranks in your achievements. To know the upcoming contests, check out clist.by.
If you don't have projects, try to take part in hackathons with your peers. "I can't think of a good project" is what I hear from a lot of my juniors. Right now, if I ask you to think of anything, you won't be thinking of anything. But if I asked you to think of a fruit, you might be thinking of a banana, apple, mango, etc. Every hackathon has a unique theme, so by the end of the hackathon you will have a somewhat unique project. You can find such hackathons at Devpost.
If you don't have enough work experience, pick up a good open-source project from GitHub and try to make contributions to that for like 1-2 months. By the end of it, you will have enough experience and contributions that you can put it under the "Open Source Experience" category.
If you are interested to know what my resume looks like, check out: arnabsen.dev/resume.
Elevate your referral game
Companies like Google actually let their own employees refer potential candidates. Although a referral doesn't necessarily guarantee you a job offer, it does mean your application will stand out from the rest of the applicants, which can only mean one thing - your chances of getting hired just got a whole lot higher. In some cases, a Good Resume + Referral can fast forward in the application rounds. In my case, I was directly skipped to the Technical Interview rounds.
Now few things to keep in mind:
The number of referrals doesn't matter. It's the quality of the referral that makes the difference. I'm familiar with Google's internal referral portal. Employees must respond to questions such as, why do you believe this candidate is a good fit, have you previously worked with the candidate, and so on. Hence, if the person referring you understands your strengths and weaknesses, the referral will be stronger, and your chances will be better.
I was lucky enough to have a senior in my college who was ready to refer me. We knew each other since day 1 of my college so he was able to write a good referral for me. Shoutout to Suryansh Gupta ✨. So you can always reach out to your seniors regarding referrals.
If you don't have such seniors in your college, no worries, you can get referrals over LinkedIn, Twitter, etc. When asking for referrals make sure you provide all the necessary information:
The job id of the role you are applying for.
Your achievements and relevant skills.
Why do you think you are a good fit for the role?
College tip: active interaction with seniors in your college can have a positive effect on your career. So, don't be shy.
Now, let's say your resume got shortlisted. Then what?
Round 2: Online Aptitude Round
Even though I skipped the OA round, here are some preparation tips:
Google usually asks pretty standard questions which are of the Leetcode Medium-Hard difficulty. So don't just solve easy questions. Also, no need to waste time by solving very difficult questions either.
Make sure you know all the standard algorithms, I will share the list after this.
I also prepared by participating in Competitive Programming contests, especially from Atcoder and LeetCode. This was done to ensure that I could answer the questions swiftly and within the time limit, exactly like an actual OA.
My advice would be to go through the past OA rounds questions. Here is the list I referred to for Google's questions:
You can find similar collections of questions for other companies as well.
Standard topics to prepare for OAs
Linked list, Stacks, Queues, Two pointers/Sliding window
Ad hoc/string manipulations
Trie (good to know)
Segment trees/Fenwick trees (good to know)
Bitmasks (good to know)
Once you are done with the OA you will be taken to the 3rd round.
Round 3: Telephonic Round
So, for this round, they're gonna call you up and hit you with some theoretical Data Structures and Algorithms questions. Some might even have multiple-choice answers. They might throw in some programming language questions too. Here are some examples of questions that you can expect to get an idea:
What are the pros and cons of using an adjacency list over an adjacency matrix for a graph problem?
What is the data structure used in a priority queue?
What is the difference between Binary Search Tree and Heap?
How is a C++
unordered_mapfrom an implementation point of view?
Which algorithm would you use for a network flow problem?
What are the time complexities of Bellman-Ford and Dijkstra's algorithm?
If you have a strong fundamental understanding of Data Structures and Algorithms then these won't be very difficult for you.
Resources to study DSA
I studied DSA mainly from these two sources:
So, I made sure to take notes while watching those videos and reading the book chapters. And when I got stuck with any problem, I just Googled it and checked out the first link - be it an article or a video.
Once you complete the telephonic round you will be invited for the technical interview rounds.
Round 4: Interview Rounds
It was on 13th September I received a mail stating that I have my interview lined up after a week. I freaked out a little. Because first, I didn't expect to hear back from them. And second, how am I supposed to prepare for a Google interview in 7 days?
I took a smart approach. I checked out other people's experiences with Google Interviews and saw that they like to ask about DP, Graphs, Binary Search, Lazy Sum, and Sliding Windows stuff. I went back and reviewed all the notes I took from that MIT course and honed in on those types of questions. I practiced topic-wise from LeetCode itself.
Another question I get is if LeetCode premium is really worth it. To be honest, in today's time it isn't anymore. There are tonnes of other platforms which have similar questions for free that are only available in LeetCode premium. But 2 years back, I felt spending Rs 10.5k for 1 year of LC premium might be worth it. Because if I am able to crack a job like Google, that amount invested will be just a fraction of the monthly salary. So, I got 1 year of LC premium.
My style of practicing for interview
After discussing with my seniors I realized that solving a question in an interview setting is completely different than practicing questions by myself. Most of these Google interviews happen on an editor-based portal where you cannot run the code and it also doesn't support intellisense. So, I would create a Google doc where I would solve all the questions and write code. This way I didn't have the privilege of syntax highlighting or intellisense. As they say, "Hope for the best, Prepare for the worst".
The strategy of breaking down Google interviews
A Google Interview happens for 45 mins and they usually ask 2 questions. So, I divided the total time into (20 + 20 + 5) mins. 20 mins for each question and 5 mins as a buffer (for an emergency like network issues or Q&A at the end).
Within those 20 mins, I would spend 3-5 mins understanding the question asking clarifying questions, and explaining my approach. 10 mins for implementing the optimized solution and 5 mins for dry running or debugging. Note that you have to come up with the optimal solution as quickly as possible. So, I would insist on not wasting time trying to implement the brute-force solution.
So, even during practice when I was solving the questions myself I followed the same strategy. I would pretend that I am in an interview setting. I would try to read my thoughts out loud and explain everything. I even made the habit of doing a dry run every time I wrote the final code for a problem.
Mock Interviews are an absolute necessary
To succeed in any field, preparation is key. Just as astronauts undergo rigorous training to prepare for the unique conditions of zero gravity, so too must job seekers prepare for the challenge of a job interview. One effective way to do this is by practicing mock interviews. That way you can know your weakness, and you can prepare for them before the actual interview.
I also watched a lot of Mock Interview videos on Youtube to give me an idea of what it would be like during an interview setting. I created a playlist of all the videos that I referred to.
I gave a bunch of mock interviews (around 5-6) by taking the help of my seniors and using online free platforms like Pramp.
Importance of clarifying questions
The initial question that will be given to you, will be intentionally very vague. They will expect you to ask some clarifying questions to identify the fine details of the question. Let's take a very simple example, you are given an array of n numbers, and you have to find the subarray with the maximum sum.
Now, your first thought might be using Kandane's Algorithm. But wait, what if all the numbers are positive? In that case, the answer is simply the entire array. As you can see one small change in the constraints, had a big effect on the final solution. So always practice asking clarifying questions.
Interview tips to keep in mind
Treat the interview more like a conversation with a fellow software developer and not like a viva. This will also help you tackle your nervousness.
During the interviews, you should also think about other ways to improve the solution. Share the different options or tradeoffs that you're considering.
Think out loud because that way the interviewer will know your thought process and can give you signals if you are going in the wrong direction.
Discuss tradeoffs if possible. How would you improve your solution? How do you make it faster? How to optimize the space complexity? Know the time and space tradeoffs of the solution/data structures that you are picking.
Try to avoid taking hints, but always remember solving with hints is much better than not solving at all.
Avoid syntactical errors like missing semicolons, not closing parenthesis, wrong indentation, etc. Even though they are not deal-breakers, writing high-quality code can showcase your skills as a developer.
Finally, use proper variable names and if required add meaningful comments. But remember you have limited time so just don't spend minutes trying to come up with an appropriate variable name.
Make it a habit to always calculate the Time and Space complexity of your solution.
If you don't remember the exact syntax of a library class or method, that is fine. You can just let the interviewer know, and replace it with a meaningful substitute.
All of these points might be hard to keep in mind during the interview, which is why the more mock interviews you give, the better you get at remembering these subtle points.
Here are some more resources that I referred to:
For some last-minute revision, I also followed this collection of LC questions.
My interview experience
I cannot reveal the actual questions because of NDA, but in my first interview, I had a question on Sliding Windows and Dynamic Programming.
In my second interview which was held the next day, I had 3 questions. One was a Scheduling Problem based on the heap, the second was again a DP question. I was able to quickly answer these 2 questions, and there were around 10-12 mins left. So the interviewer gave me another DP question for which he just asked me to write the recursive function and how I would memoize it. I was able to do that as well.
Both my interviews went well from my end, I didn't take any hints, wrote high code quality, and was able to successfully dry run all my solutions with edge cases.
Round 5: Hiring Committee
After I finished my interviews, I had a long wait. According to what I've heard, there is a hiring committee that comprises four to five persons that have prior interview experience and are familiar with the hiring standards. They would review your resume, your code during interviews, and the feedback from the interviewers before making a final decision.
For me, it was a long long wait. I very clearly remember the day. It was Maha Shasthi (the onset of Durga Puja), I woke up to a mail saying:
"Congratulations on your SWE Summer Intern offer with Google India!"
It was a perfect blessing to me. I was ecstatic and overjoyed. It was an absolute dream come true moment for me and my family. Looking back I remember I felt very depressed when I was rejected by Microsoft twice. I gave my best in the Microsoft Engage Aptitude round yet wasn't even selected for the project building round. Then again when Microsoft came on-campus I was rejected after the OA round which still baffles me. But as they say "Whatever happens, happens for Good".
So whenever something unexpected or bad happens to you, remember these lines:
I hope you liked my blog, do follow me for more such content. I wrote another blog sharing some tips on how to convert your internship to PPO.
You can learn more about me at arnabsen.dev/about. Have a nice day !!