Tips for CS internship application

After applying to 20+ companies, I nearly felt that I had taken up a module in coding interviews. And yes, it is definitely the most intensive one among all other UCL modules. Initially I worried a lot about summer unemployment. Luckily, I received the offer from Google, Amazon, Morgan Stanley and Goldman Sachs. A big thank you to my friends who supported me, listened to my complaints and answered my endless spam of programming questions. I would like to provide some tips here for those who are going to apply for internships in the next cycle.

Tip 1: prepare early

I came to UCL without knowing that there is a terminal in the computer. In my first year, I was fairly intimidated by my classmates with a decade of programming experiences who seemed to know about everything. I thought I would just take my time to learn things at my own pace. I completed all assignments but did not do much extra pratice. When coming to internship applications, I realised that it was a mistake. I should have practised coding by myself, participated in open source projects and hackathons so that I would not panic in the last minute. Here is the ideal timeline which I did not manage to adhere:

Tip 2: apply early

Most companies hire at a rolling basis. If you apply late and the companies have filled in all their internship spots, you will not get an offer even though they have met all their requirements. Yet, there is always a trade-off between preparation time and how early you apply. Personally, I recommend applying to the companies you don’t want to go in late September, apply to companies you really want to go by mid October and finish all applications by mid November. If you want to apply to companies in the United States, the deadline is normally one month earlier.

Tip 3: apply to companies you don’t want to go first

It is really easy to bomb the first few interviews. In my first phone interview, the interviewer asked me about JVM, memory management and garbage collection in Java which I was not familiar with. Even worse, I forgot the time complexity of inserting an element in an array list. Therefore, I got rejected soon.

After knowing what to expect, I improved interview after interview. It is highly likely that interviewers will ask similar questions in programming concepts and time complexity. So make sure to review the concepts you do not know after each interview.

Tip 4: do not spend too much time on the CV

I have friends who spend too much time on polishing up their CVs, and hence they keep delaying their application to companies. While it is definitely important to have a professional formatting, I think CV just needs to be concise, clear and solid. There is no need to make it very fancy or add in too much unnecessary detail.

Tip 5: some resources for internship preparation

  1. Cracking the Coding Interview: read this book to get started. If you have a tight timeline, just read the introduction for every chapter and some selective questions.
  2. Leetcode: there are 400+ top interview questions on leetcode and please practise as much as you can. Even though everyone has a different learning curve, I think generally 50 questions are needed to give you an intuition about how to approach a problem, eg. when to use dynamic programming/recursion/regular expression. If you are not from a solid programming background, aim for more than 100 questions.
  3. Hackerrank: if you find leetcode questions hard, complete the 30 Day of Code and Cracking the Coding Interview track in Hackerrank first. Do check out this video series by Gayle McDowell too. Some companies will send you a Hackerrank link to complete their online coding assessments. Therefore, getting familiar with the coding environment is quite important.
  4. Geek for Geeks: the website has a comprehensive collection of articles on concepts you should know for coding inteviews.

Tip 6: the language to choose

You are free to choose any language you are comfortably with. It is better to be one of the mainstream languages like Java, Python, C and C++ that interviewers are likely to be familiar with. For me, Java is the best option as we’ve already learnt it in UCL. Moreover, Cracking the Coding Interview is written in Java and you can find a lot of leetcode answers written in Java too. The verbosity of Java also gives me a psychological advantage that I can always declare something before writing the actual algorithms. As I have more words to type, I can continue thinking about the algorithms I am going to use while still giving the interviewer the false impression that I have the fluency in thinking and coding.

Tip 7: the must-knows

Most companies will provide a list of the concepts you should know. Therefore, I just want to emphasize a few concepts which I think are super important.

  1. HashMap is arguably the single most important data structure for coding interviews. Make sure you remember the definition and memorise every method.
  2. Time complexity of basic operations on array list, tree, hashmap, linked list and etc; Time complexity of sorting algorithms; be able to reason about the time complexity of the solution you have coded

Tip 8: how to get into Google and other tech companies

Google’s hiring process is very competitive as it can afford to choose among the most brilliant candidates. It is possible to have perfect results and outstanding programming skills but still get rejected. To increase the chances:

  • Get a referral
  • Parcticipate in programming related events which are sponsored by Google. I presented at Lovelace Colloquim at Aberystwyth University in March 2016. During the event, I spoke to a Google recruiter at the booth regarding internship application. After more than half a year, it turned out to be that the same recruiter screened my CV and she still remembered me.
  • If you are ready, apply as soon as the portal is open.
  • Prepare for it like how you prepare for exams
  • Pay attention to your coding style

Tip 9: how to get into Morgan Stanley and other banks

Unlike tech companies, banks care a lot more about your holistic development, i.e. your teamwork skills and how you would respond to a particular scenario that you may encounter when working at the companies.

Morgan Stanley assessment centre consists of 2 technical interviews, 1 behavourial inteview and 1 group discussion. My group discussion was about debating how the company should allocate a limited budget to different projects. The interviewers will sit at the corner and take down notes on how you present your ideas. If you are not good at talking about your own experiences and motivations or arguing in such a scenario, make sure to practise with your friends.

Tip 10: dealing with pending offer and upcoming interviews

It is a common situation that you have a pending offer, but you are still waiting for your dream company’s next round of interview. Once you receive an offer, immediately notify all the companies you are still interviewing with and ask them to expedite the process. Selecting candidates is also a game among the recruiters. One offer makes you more desirable and more likely to be offered a place by other companies.

All the best :)