Advice & Resources for CS Students prepping for Technical Interviews
Compiled September 2019
Nick Chkonia ’19
Business Automation Associate Engineer @ Lucid
Cracking the Coding Interview is no longer a valid resource, as the industry has become more nuanced and the technical interviews have become more complex than knowing rudimentary data structures and algorithms. It now focuses heavily on complex application of these foundations, on the spot.
Leetcode: I would recommend Leetcode as the primary resource for practicing problems (over Hackerrank, especially), as the problems posted on Leetcode are more relevant, i.e. there are filters to match problems to those typically asked at large tech companies, and in-general the problems posted there are more nuanced than asking for rudimentary knowledge (as per the point I made in the bullet point above)
Introduction to Algorithms (MIT Press) by Cormen, Leiserson, Rivest and Stein: this was the textbook used in Prof. Strash's Algorithms class when I took it last semester, and I would say that it is the textbook for learning and understanding the foundational algorithms and algorithmic analysis. I believe that any student looking to learn more about this crucial topic, or looking to review what they already know should absolutely get this book.
Below, I will list my recommendations for practice, from personal experience over what worked for me and from asking friends who went through the same process preparing for the technical interview:
- Pick one topic - an Algorithm or Data Structure (i.e. Breadth-First Search, Linked Lists, Hashmaps, etc.) and focus on that one topic for 1 week on Leetcode (as mentioned in the previous section, I would recommend the problems on Leetcode) I believe this is crucial, as it will focus your mind to fully dissect, digest, and understand one area before moving to another, better preparing you for the actual interview.
- Do these problems in such a manner, to best prepare for the live interview setting (obviously the process will differ by individual, this is only meant as an example of what worked for me, and what I think is a good way to practice):
- Get a timer ready
- Spend the first 5 minutes planning on how to solve the problem, communicating your approach verbally (beyond testing coding ability and conceptual knowledge, technical interviews test the applicants communication and problem solving skills: in the industry, no one cares if you're the best at what you do, what matters more is that you can communicate your approach and show good problem-solving skills)
- Start the timer and do as much of the problem at one try as you can all the while communicating your process out loud - stop when you are really stuck and would need to get help (in the interview setting you are only given between 15 minutes to 1 hour to work on a problem or a set of problems. This varies by company and role the applicant is applying for. In general, you only get one shot at a problem, so it is important to train your ability to manage time and code under this pressure.)
- Before submitting your answer, add comments on the algorithmic runtime of each component of your solution - this will require knowledge of algorithmic analysis, which can be learned by the Algorithms course offered by Prof. Strash (that is where I personally learned it). This is crucial to success in the interview and in the industry; the Algorithms textbook I mentioned earlier is a fantastic resource to learn and review this.
- Submit your answer and scan for errors; do not fix your errors, but just understand them, write down your submission and any thoughts on where you made mistakes and what could be improved somewhere on your computer
- Go back to the problem after a break and repeat steps 1-5 without looking at your previous submission (most technical problems are nuanced variations on core problems, i.e. a particular nuanced application of Binary Search - once you know how to solve a Binary Search problem quickly and efficiently, you can tailor your approach to a solution to the particulars of a problem)
- Once a solution has been written that passes all of the tests, do one more algorithmic analysis of the solution and spend ~5 minutes explaining the solution
Below is a non-exhaustive list of topics, in no particular order, that I have found appear often in the practice materials, interviews I have had, and that I have heard from friends and online forums appear frequently at many company interviews (take this with a grain of salt. I would recommend additional research be done on this end): As I mentioned in point 5. in the previous section, many problems are nuanced variations on the core implementations of these algorithms and/or data structures
- Binary Search
- Sorting (focus on Merge Sort as it is the most common and general-purpose efficient algorithm)
- Algorithmic Analysis for every operation in every algorithm and every operation in each data structure
- Dynamic Programming
- Linked Lists
- Stacks and Queues
This is a lot. It is meant to be a lot. This is a difficult process, as it is a difficult major, and a difficult field to work in. Everyone who prepares for these interviews goes through a similar process - it is part of the process. I would strongly encourage students get into groups to help each other prepare for this, as it can be very difficult to handle alone (as it has been for me). Obviously, this is a non-exhaustive list of recommendations, taken from my personal experience. That being said, I am very, very glad that the College is taking initiative in helping these students get the resources and attention to better prepare students looking to work in the industry.
Drew McArthur ’19
Software Engineer @ TripAdvisor
The single most important resource is a book called Cracking the Coding Interview. You can get it on Amazon but it exists in .pdf all over the internet, especially on github.com. They should read through the book; I crammed the whole thing in a few weeks, but at least a month of really reading through it and understanding the concepts would be best. If you can solve the problems in the book well, then most interviews shouldn’t give you much trouble.
General advice for these interviews:
- Ask questions - it shows understanding, and might reveal a simpler solution. For example, if a problem involves an array, always (unless it’s already specified) ask if the array is sorted.
- Unless it’s a homework problem (no one is there watching you), you should think out loud. At no point should you be silent, you should always be explaining your thought process, because they care more about that than your actual answer.
- If you realize a mistake, don’t hide that. Employers would rather have someone that will admit and fix their mistakes than try and brush them under the rug.
- As a follow up, don’t be afraid to see where an idea takes you. It’s perfectly fine to have an idea, then realize that it won’t work (and explain why it won’t) and then move onto a new solution. They’re more concerned with your ability to notice the mistake in your first solution than the fact that you came up with an idea initially that won’t work.
- Don’t be afraid to ask for a hint or help. The majority of my work right now is asking coworkers for a clarification or how to accomplish something; as much as Googling works to figure out programming concepts, a lot of your work might be on code that works in a company-specific way, which you won’t find on Google or stackoverflow.
- Overall, the process and showing you know how to think like a programmer is more important than the answer itself.
Tom Parker ’19
Software Engineer @ Wayfair
This is a typical suggestion, but also one that is typical for a reason. I highly recommend the book Cracking the Coding Interview. I didn’t do any of the practice problems in the book (though they are great), but what I think really makes the book invaluable is just the first 50 pages or so where it gives more general technical interview advice and advice on what particular topics to prepare for. So whether or not you use the practice problems to do that preparation, you know what you need to do, which is probably one of the hardest parts, at least for me.
I can’t think of any other resources per se, but I do want to add that if you apply somewhere where you have a referral, you really should definitely talk to your referrer for advice.
Also make sure to have good questions and answers to questions. I think it’s really easy for people in computer science to forget that technical interviews will also have some parts other than coding. Even if there are regular interviews elsewhere in the process.
Miller Kinlin ’19
Cybersecurity Consultant @ EY
Go through the entire Cracking the Coding Interview book. All the technical interviews I completed were covered in that book.
Minh To ’19
Software Engineer at BlackRock
Cracking the Coding Interview (it might be helpful to lend out this book to students to review and practice interview questions)
https://leetcode.com/ (you can find and practice with tons of problems on this site)
In terms of job boards, I find the following rather helpful:
https://www.intern.supply/ (a compilation of open/available internships at notable companies)
https://www.jopwell.com/ (great platform for Black, Latinx, and Native American students)
I would also recommend students to reach out to current Computer Science professors for interview prep. I know that Prof. Strash did a presentation in the past about interview tips. He also offered to help students if they need extra help finding or solving with technical questions. The Women in Computer Science club is also a great resource for ALL CS students. It is a great space for students to exchange interview experience and help each other hone their problem solving skills. Last year when they were at Hamilton, they held multiple interview prep and internship-related workshops. They had mentioned they were going to expand more. I'm not sure what events they are planning to hold this year, but I would recommend students to keep an eye out for those opportunities.
Benjamin Parfitt ’19
Software Developer @ Applied Software, Inc.
The book Cracking the Coding Interview is a great resource for learning and understanding the format and innards of technical interviews. In the last month I have worked through the contents of the book and it has helped me immensely. Additionally, working through coding problems on websites like Hackerrank is very helpful. I would also suggest that students perform mock interviews with each other, and pose coding and technical questions for each other that they have not seen before. This will help widen their perspective on how to approach these problems as they see other people tackling them.
Oliver Keh ’19
Software Engineer @ Amazon
I’ve completed many technical interviews and recently accepted a software engineering job at Amazon, so I’m able to provide you with some lessons I’ve learned that have helped me. I’ll preface this message by saying it is just as important, if not more important, to learn and develop programming and computer science skills on your own and not just rely on what you’re taught in the classroom. While a computer science curriculum is incredibly important in developing strong fundamentals, we just don’t have the time or resources to learn industry skills like web development and architecture. This is one of the reasons why I founded the Coding Team.
The first thing to note about interviews for software engineering jobs is the process you’ll have to go through before receiving an offer. Larger tech companies will more structured processes that typically start off with a non-technical phone screen with a recruiter, then one to two technical phone screens with current software engineers, and then finally an on-site day where they will fly you out to their offices and you’ll participate in a full day of technical and non-nontechnical interviews (4-6 hours long in total). Smaller companies, like tech startups, try to imitate these processes but their recruiting teams are typically less mature, and referrals will carry a much greater influence. Otherwise, the structure of the interviews will be more or less the same. It’s also important to understand that monetary compensation and growth opportunities will be very different between these two kinds of companies.
The next thing is to understand your audience. For example, are you interviewing for a SaaS company or a microprocessor manufacturer? Different audiences will require very different skill sets and knowledge and they will be looking for those things in your answers. A web-based company will expect you to understand HTTP, web servers, and scalability, among other things. Learning these things on your own can be daunting, but you won’t be able to get by without deep expertise in the technology used in the industry. It’s also very possible you’ll be asked these questions in an interview setting (I’ve been asked these kinds of questions many times). A good understanding of the underlying technology is key to problem solving in these kinds of environments.
Finally, the most important part of doing well in technical interviews is your knowledge and expertise in algorithms and data structures. You won’t be able to answer technical interview questions well unless you can come up with multiple different data structures and algorithms to solve the problem and defend your choices. There are pros and cons to every algorithm/data structure and your interviewers want to hear about why you made certain design decisions over others. There’s lots of resources you could use to learn these skills both inside and outside of the classroom. In the classroom, the most important class I took at Hamilton was Algorithms with Professor Strash. I encourage every CS student to take this class and really apply themselves despite how hard it can get. I spent many sleepless nights working through proofs and algorithms problems and am much better off because of it. Outside of the classroom, there are many resources you could use to develop these skills. A good starting point is a book titled “Cracking the Coding Interview”. Reading this book cover to cover will give you a general understanding of how to approach technical interview questions and the tools you can use to solve them. Other than that, the only other way I can recommend to master these skills is experience. Build your own projects (even if they’re stupid), contribute to open source, and figure out how things get built.
Maya Montgomery ’18
Software Programmer @ Syn-Apps LLC
Technical interviews are a very tricky obstacle for CS students looking to enter the software field. Many companies rely on an interview format that is unlike any real life situation, in that interviewees must rapidly solve riddle-like problems on the spot while writing code without references and presenting their thinking simultaneously. The only way to prepare for these interviews is to practice for them specifically (as opposed to just studying for practical, real-world CS, unfortunately).
Hamilton used to have a once-a-week partial credit course called Programming Challenges in which students could work together to quickly solve programming problems. It was dropped in maybe 2015 (I never got to take it). Re-adding a class or organizing a group like that could be very helpful. The prompts were taken from ACM, I believe, recycled from hackathons / school programming competitions.
Websites like Hackerrank and Leetcode are good resources for practicing the problem solving. There's also a famous book called Cracking the Coding Interview. However, for some people the hardest part of these interviews is solving the problems aloud, speaking the whole time. I realize it would probably be difficult for a non-CS career advisor to simulate this, as opposed to more generic interview practice, but I really think Hamilton CS students would benefit from practice interviews where they solve programming problems before an audience. That's why I suggest bringing back the partial course.
Grace Woolson ’20
I've spent a lot of time speaking with recruiters and industry professionals over the past few weeks and these resources were mentioned multiple times.
- Cracking the Coding Interview: it is a book that I have heard is amazing and really prepares you for everything about a coding interview. I have yet to read it myself but I have been told it is almost a necessity to read if you truly want to feel prepared when you walk into an interview, especially coming from Hamilton.
- HackerRank: this is a platform that MANY companies use as a first round screening. They'll send you a one or two hour HackerRank exercise that you have to finish in one sitting while on a time limit. They have sample questions on the HackerRank website (which is free to make an account with) so that students can get familiar with the environment and also work on problems that may be similar to what they are tested on.
- LeetCode: A platform very similar to HackerRank. I have less experience with this one, but it is free to sign up and they have practice problems. Some technical interviews will take their questions straight from this website so if students prepare with this they may have already answered the question(s) they get asked. There is a premium version that allows for mock technical interviews, more questions, and some other perks, so if the career center is looking for a resource for CS students this may be beneficial to students.