And I knew exactly what to do. But in a much more real sense, I had no idea what to do.

Ashutosh Kumar Singh
11 min readOct 11, 2022

--

Hello! I am Ashutosh Kumar Singh, a 4th-year dual-degree student from the Department of Computer Science and Engineering at IIT Kharagpur. I will be interning at Rubrik, Inc. as a Software Engineer Intern in the summer of 2023. I received offers from both Rubrik and Google, and I accepted the offer from Rubrik. Through this blog, I aim to describe my preparation and experience of the CDC internship process. I am sure it will prove helpful to anyone aspiring for a software development internship through the on-campus drive.

Background and Preparation

2nd Year

I had reasonably good knowledge of C/C++ by the end of my first year by virtue of PDS and some YouTube playlists. I started competitive programming in April 2020, when Covid struck. I spent a good amount of time mastering C++ STL, and I believe the only way to master STL is to solve implementation problems. At that time, I mostly used to take part in CodeChef’s Long Contests. As a beginner, I found it really helpful, where I could spend hours thinking about a problem and coming up with a solution. Meanwhile, I also started participating in contests on Codeforces. By September 2020, my 3rd semester started, and I had to pause competitive programming due to the hectic online semester. I again started practicing in the winter, but it was not very serious, and the same continued till the end of my 2nd year. In the summer of 2021, I also got the chance to intern at a startup remotely.

3rd Year

By the start of my 5th semester, I was around 1700–1750 on Codeforces. I could never devote sufficient time to competitive programming during the semesters. I am not saying it is not possible, but you need to decide what you value more, your CG or CP. It was possible for me to devote more time to academics as I am a dual-degree student, and I had an extra year. Still, I highly recommend that B.Tech students focus on competitive programming.

At the beginning of the 5th semester, I closely observed the CDC process for 2 of my B.Tech batchmates and I learned a lot from their experiences. I also started participating in Google Kickstart rounds (highly recommended and important). My serious preparation began in December 2021. I devoted the entire winter to learning new topics (from cp-algorithms.com and Codeforces blogs) and practicing more problems on the topics I needed to master (like DP and graphs). I also started solving problems on InterviewBit. I was intimidated by its vastness and hence decided to start early. During this time, I participated in almost all contests on Codeforces and AtCoder. However, there wasn’t a massive increase in my Codeforces rating at this point.

I continued practicing, though at a lower frequency, during my 6th semester. For CS students, I would advise focusing on the Operating Systems and Computer Networks courses in the 6th semester. They are crucial if you are a dual-degree student or targeting systems roles in HFTs. After my courses, I did not have to prepare anything extra for OS and Networks.

Summer after 3rd Year

I had already completed InterviewBit and decided to go over it again. During these 3 months, I followed a plan wherein I solved 2–3 topics entirely from InterviewBit every week and solved 2 past contests (A — D/E of each) from Codeforces daily. I ensured not to miss any Codeforces or AtCoder contests. I also participated in all GOC contests and would advise everyone to do so. I had reached 1900 on Codeforces by now. I also revised OOPs concepts from the slides of the Software Engineering course and brushed up OS and Networks. I had not taken DBMS as an elective and planned to prepare for it using online resources. However, I did not get sufficient time for it.

I did not prepare extensively for quant roles as I was more interested in software/systems roles. Still, I revisited Probability and Statistics in the last 2–3 weeks (from Harvard’s Stat110). I also solved Heard on the Street and 50 Challenging Problems in Probability.

Fun Fact: I was also actively applying for internship roles for the summer of 2022 throughout my 5th and 6th semesters. I must have applied to at least 60 companies. Most of them rejected me for not being in my pre-final year. I even interviewed with a few (including Hudson River Trading) but did not get an offer from any of them. In hindsight, I believe it was for the best, as I would have been unprepared for CDC had I been busy with a summer internship.

Coding Tests

  • Uber: It had 4 problems and was 1.5 hours long. There was one easy implementation problem, another on partial sums, and a nice binary search problem. I solved all 3 of them entirely. The fourth problem was a good tree problem. However, the test cases were being generated using a generator code already provided, which had some indexing issues, and needed to be fixed manually. Here, I managed to get only half the points.
  • Quantbox: It was a common test for both profiles. The first coding problem was an approximate-solution problem. The second one was a difficult problem. I started with the second one and solved it completely, but I had no time left for the first one. Also, in this test, everyone was facing some issues with the Hackerrank compiler. The second section had many problems where we needed to tell the output of the code snippets given. The time was very less, and I solved approximately 80% of the problems.
  • Rubrik: This was a difficult test. There were 4 problems, and the time was 1.5 hours. The first problem was a nice greedy problem, the second was a DP problem, and the third was a good observation-based problem involving xor and trees. I solved all three of them quite fast. However, the fourth problem was extremely challenging. An easier version of the same problem is a Div. 2 F on Codeforces (rated 2400). I managed to get 10/24 test cases passed for this. However, people solving the first 3 problems completely were also shortlisted.
  • Graviton (Software): There were 2 problems. The first was an easy-medium problem involving number of divisors. The second problem was quite good, involving a modified Dijkstra on a grid. I solved both of them in less than 30 minutes.
  • Graviton (Quant): 4 hard subjective problems. The problems revolved around Pigeonhole principle, combinatorics, probability distributions, and discrete mathematics. I could solve 3 out of 4.
  • A.P.T. Portfolio (Software): This was an interesting test. There were no CP problems. Instead, they asked some design questions and asked us to code them using sound design practices. The code was being checked manually. There were also a few problems where we needed to reason the output and behavior of some code snippets.
  • A.P.T. Portfolio (Quant): One of the best tests. Surprisingly, there were 6 coding problems for the quant profile, and the time was 2 hours. All the problems were quite good and on the medium-hard level. I solved 5 completely and 9/14 test cases of the 6th.
  • Goldman Sachs: This is possibly the only test where I did not have a good experience. There were 2 difficult coding problems in the first section with only 30 minutes allotted, and the other sections had MCQs with ample time. I could get only 11/12 cases passed for one problem and could not even look at the other problem. The sections were individually timed, but you could pause a section, move to another section, and then return to the first section. I did not know about this hack. But some people used this hack to transfer time from the MCQs to the coding section.
  • Google: Everyone received 2 problems from a pool of 5 problems. My first problem had an excellent meet-in-the-middle idea on grids, and co-incidentally my second problem, which was on graphs and reachability, also had a meet-in-the-middle solution. It was quite implementation-heavy with a lot of cases. I completed both problems in around 25 minutes. Later, I came to know even brute-force solutions were being accepted for the second one.
  • AlphaGrep: This, too, was a common test for both profiles (software and quant). There were 5 medium coding problems to be solved in 1 hour. However, in this test, the Hackerrank compiler was lagging a lot. I managed to solve all of them in around 45 minutes.
  • Jane Street: They shortlisted candidates primarily based on CGPA, JEE rank, or olympiads. Some had to appear for a test, whereas few, including me, were called directly for a 1-hour long interview. The interviewer asked me two game-based problems, where I had to devise an optimal strategy to maximize the reward for the player(s). I answered both problems correctly and required a few hints for the follow-ups. However, I was not shortlisted for further rounds.
  • Quadeye: CV shortlisting. However, it was almost entirely based on CGPA.
  • Glean: CV shortlisting.

Interviews

I was shortlisted for interviews with Rubrik, Glean, Google, Uber, Graviton, AlphaGrep, Quadeye, Quantbox, A.P.T. Portfolio, Microsoft, D.E. Shaw, Nutanix, Sprinklr, Morgan Stanley, and Goldman Sachs. In all the HFTs, I was shortlisted for both software and quant. I finally appeared for interviews with Rubrik, Quadeye, and Google.

Rubrik

Round 1: It began at 6 a.m. and lasted for 45 minutes. After introductions, they dived into the problem. I was asked many variations of a problem regarding permutations of an array. I had to code all the solutions in an online IDE. I successfully solved all of them and coded them, except for the last follow-up.

Round 2: I was immediately called for Round 2, which lasted around 55 minutes. Again, after introductions, I was given an IDE link. One of the interviewers pasted the problem description and explained the problem. From the problem description, it seemed to me that it was a DP problem. Hence I started with the recursive procedure and then memoized the solution. My code was executing successfully on the sample cases. The interviewer then told me that he was expecting another solution (without DP). I realized that he was asking to come up with a greedy solution. I started with a few observations on the right track, slowly building up to the solution. However, I required a few hints from the interviewer too, and we had a lively discussion. The solution was very involved and had a lot of details and beautiful observations. I started to code it with 7–10 minutes remaining. I wrote almost 80% of the code. However, I could not complete coding it. The interviewer seemed satisfied, but I was quite upset and worried because I could not complete my solution.

Round 3: This was an HR round. It lasted for around 15 minutes. The interviewer was a Senior Engineering Manager, and she was the same lady who was in Rubrik’s company presentation. She asked me questions regarding the projects on my CV, my future plans, and my goals and ambitions. The interview ended on a good note.

Quadeye

I was not sure about my performance in Rubrik. So instead of waiting for the result, I decided to go for Quadeye’s interview. The interview lasted around 1 hour and 10 minutes and had 3 rounds. The interviewers kept changing on the same Google Meet call.

The first round was a rapid-fire round having questions from modern C++ features (like smart pointers), Computer Networks (TCP, UDP, DNS), Computer Organisation and Architecture (caching), and Operating Systems (virtual memory, process management). I was asked a lot of questions about each of these topics. The 2nd round had a similar pattern. I was also asked 1 or 2 coding problems, apart from which the entire round was focused on OOPs concepts and Networks. The 3rd round, too, had many questions regarding C++ fundamentals and Operating Systems. There was little feedback from the interviewers, and I felt the interview was a bit rushed.

Google

Round 1: After an introduction, I was given a problem with strings and two-pointers. I came up with a solution, after which the interviewer modified the problem. It took me some time to arrive at an algorithm for the modified problem. I was then also asked to code up my solution in Google Docs. The interview lasted for 45 minutes. Note that if you are targeting Google, try to have some practice writing code in Google Docs (I wish they provided an IDE).

Round 2: The problem involved graphs and connected components. I came up with the solution fairly quickly and was also able to code it up in around 5 minutes. The interviewer then asked me to dry-run my code on a few sample cases. I explained the various steps during the dry run, and he was satisfied. The interview lasted for around 25–30 minutes.

I had an offer from Rubrik by noon and learned about the Google offer at night. I did not get to know Quadeye’s result, probably because I already had an offer from Rubrik by then. After some thought, I finally accepted the offer from Rubrik.

Very Important Points

  • Competitive programming is the most essential skill required for CDC internships. Personally, I believe AtCoder is very underrated, and I think it can be very beneficial for beginners. Stick to one or two platforms, preferably Codeforces and AtCoder.
  • Do not pause CP for a long time. Try to solve a few problems, even 1–2, at least every alternate day.
  • Do not stress too much about your Codeforces rating. I have observed a pattern where your rating stays constant for a long time, then jumps suddenly, and then again remains almost constant for some time before jumping again. The jumps happen when you start solving an extra problem. Suppose you used to solve only A, B, and C till now, and now you are able to solve D. As a next step, to maintain and increase that rating, you will have to try to solve D fast.
  • Maintaining a high CGPA never hurts. I had a CGPA of 9.91, and I believe it helped me in getting shortlisted in several places. It can sometimes even make up for your lesser proficiency in competitive programming.
  • If you are from a circuital department, do not worry too much about your CV. Do not stress if you don’t have too much content/projects to add to your CV. In tech, your coding skills and CG are the primary factors, and your CV is secondary.
  • It is suggested you have a good night’s sleep before the interviews, and I concur with this advice. Still, I do not believe that is realistically possible, given the schedule of things and anxiety the night before the interviews. You will almost surely be sleep-deprived during the interviews and even during some of the coding rounds. Try to condition yourself to be effective even when you are not functioning at your best by giving live contests even when you are sleepy or feeling tired.
  • Prepare and memorize a short introduction stating your background, interests, and experience, which you can say in around 40–60 seconds.
  • Think carefully and meticulously while filling in your company preferences before Day 1. Talk to seniors and consider your long-term plans and ambitions before making a decision. However, the CDC interview process is very unpredictable, so be prepared for whatever comes your way.
  • Have a small group of 2–3 people targeting the same thing as you. I cannot stress enough the importance of this point. Your group will help you when you are stuck and push you to achieve more, even when you feel content.

Final Words

I cannot thank my friends enough, who have been with me at all times during these 3 years — Vanshita, for being my constant source of support and being there whenever I have felt low, and Suhas and Parth, for being my peer group and because of whom the entire CDC process seemed so easy (They got offers from Quantbox and Rubrik US, respectively!). I am incredibly grateful to my seniors — Sahil (18CS) and Tanmay (18CS) — for clearing my doubts at every step. Lastly, I would thank my 10-year-old sister, without whose blessings, I don’t think this would have been possible.

To everyone reading this, feel free to reach out to me through Messenger or email for any queries.

All the best, everyone!

--

--