The Coding Interview FAQ: preparation, evaluation, and structure
Tags: interview, career, beginners
Published: 2020-09-14 21:49:02

With the coding interview being so prominently used by tech companies, it's no wonder that software engineers spend months preparing. However, for many, the coding interview can seem like a nebulous process. *What is it? How do I prepare?* Because a coding interview is different for each company, it can be difficult to have a good overview of the coding interview as a whole. 

So, we've compiled the **most frequently asked questions** you may have about the coding interview and attempted to distill simple answers. 

This article **does not** answer technical coding questions but rather is a resource for those curious about the coding interview process. If you are looking for coding questions, please check out some of our resources found [below](#next).

**We'll be covering:**
- [What is the coding interview?](#what-is)
- [What does the coding interview evaluate?](#evaluate)
- [What concepts are tested for the coding interview?](#concepts)
- [What should I do before the coding interview?](#before)
- [What language should I use for a coding interview?](#language)
- [Where can I learn what questions each company will ask me?](#company)
- [What's the timeline to prepare for the coding interview?](#timeline)
- [What tools do I need for a coding interview?](#tools)
- [What's the general structure of a coding question?](#structure)
- [Can I switch programming languages during an interview?](#switch)
- [What should I do after the coding interview?](#after)
- [What resources will prepare me?](#resources)
- [Wrapping up and next steps](#next)

<a name="what-is"></a>

## What is the coding interview?

**The coding interview** is a problem-oriented, technical interview used to assess potentially employees.

When you're looking to land a job as a software engineer, you'll have to go through the company's coding interview process. In the coding interview, there will be a high emphasis on testing your understanding of concepts like [data structures](https://www.educative.io/blog/javascript-data-structures), [algorithms](https://www.educative.io/blog/data-structures-algorithms), and [system design](https://www.educative.io/blog/system-design-tinyurl-instagram). Though many tech giants like Google and Amazon have similar coding interview processes, no company has the exact same interview process. So, you should make sure to reach out to your interviewee beforehand to get a better picture of the structure of your interview.

> Check out [Coding Interview](https://www.codinginterview.com) for detailed guides on the coding interviews at various top tech giants.

Typically, in the coding interview, you will be given a series of technical questions from your interviewer. You going to answer these questions by writing code through a real-time, collaborative editor or on a whiteboard, depending on whether it's on-site or online.

<br>

<a name="evaluate"></a>


## What does the coding interview evaluate?
The coding interview allows for companies to evaluate your technical skills and understanding on various computer science concepts. The concepts they will evaluate you on depend on the level of the position in question (i.e junior developer, system architect, etc). The interview allows interviewees to identify the applicants with the strongest abilities to translate their skills on the job.

Because the coding interview has a high emphasis on answering problems, the interview process identifies those with strong problem solving skills and cognitive abilities, testing for your abstract thinking, willingness to learn, curiosity, and overall horsepower to grind out a problem.


The [behavioral interview](https://www.educative.io/blog/behavioral-interviews-how-to-prepare-and-ace-interview-questions), which is often a vital part of the overall coding interview process, attempts to further evaluate your fit with the company beyond the technical aspects. 

<br>

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/aha6nfxdh472t3zd76lw.png)

<a name="concepts"></a>


## What concepts are tested during the coding interview?

The coding interview will have a strong emphasis on your understanding of data structures and algorithms. Here's what you should study.

1) **Big O Complexity:** Before diving into data structures and algorithms, you need to first learn about algorithmic notation to describe the time and space complexity of an algorithm. You are expected to understand this concept, especially because the runtime of a program or its memory usage will be of importance when you’re working on the job.

2) **Arrays:** You should already be familiar with arrays. If not, you should have a good understanding of the purpose of an array, how to manipulate it, iterating through an array, etc. A classic problem is to check if a given array is a permutation.

3) **Strings:** Like arrays, you should be familiar with strings. You should know how to manipulate strings, and be familiar with problems involving rotation and concatenation.

3) **Advanced data structures:** Now, you’re going to have to learn more of the fun stuff. Refresh your understanding of data structures like Linked Lists, Hash Tables, Stacks, Queues, Heaps, Binary Trees, and more. These data structures are important because you will have to know which one to implement when faced with questions during the coding interview.

4) **Algorithms:** You should learn sorting algorithms (bubble, heap, merge, etc.) and searching algorithms (binary search, linear search), which you may also be asked to implement. Also learn techniques like backtracking, brute force, dynamic programming, and divide & conquer.

5) **System Design:** System design questions are now a typical part of the coding interview process. This is a particular area of struggle for many engineers because of the complexity of the problems. 

<br>

<a name="company"></a>

## Where can I learn what questions each company will ask me?

As I mentioned, the coding questions asked in an interview will differ based on the company the position in question. It's important to figure out in advance what common question are asked for the company you're interviewing with. Generally, you can find this information in a few places:
* **The job description:** to gauge the focus of the questions. For example, an entry level developer will be asked far more questions on data structures than a senior developer. Sites like Glassdoor will sometimes provide common questions as well. 
* **Coding Interview:** This site provides detailed guides and question breakdowns for many big tech companies. You can read up on the unique processes alongside the top coding questions. 
* **The company website:** most companies will provide details on their interview process, including lists of common behavioral and technical questions. You should also look at a company's "Values" page.
* **Current/former employees:** online forums, blogs, and the like are a great resource, as current or former employees commonly discuss their interview process. 
* **Online video/course tutorials:** many online tutorials offer in-depth guides for company-specific interviews. Just may sure that the site explains where they are getting their information (i.e. are they a former employee or recruiter?)
* **Ask the recruiter:** if you are in contact with a recruiter, you can ask them directly for resources and lists of questions. They may provide this to you when you agree to an interview, but it can't hurt to ask. 

<a name="before"></a>


## What should I do before the coding interview?

The single most important thing is to practice, practice, and practice. There is no trick to passing the coding interview. It simply comes down to the amount of time you spend mastering the important computer science topics and learning coding interview patterns. 


You’ll want to be comfortable with a mainstream coding language like C++, Java, or Python, though companies will also accept other languages like JavaScript. It’s important that you stick with the language that you choose as you prepare to make your learning more effective!

<a name="language"></a>

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/h0p0h3yo5h4qq219y48k.png)

## What language should I use for a coding interview? 

There's no perfect language to use for a coding interview. The key is to use the one most comfortable with you, so long as it is a mainstream language. Most big companies will offer a list of the languages they prefer, so you can make a selection from there. If you are applying to entry level jobs, the most mainstream languages are appropriate, and a company will assume that you can learn more on the job. 

If you want to go one step above and beyond, or you are applying for a specialized position, you may consider using a language  specific to that company's technology. For example, if you are interviewing at Google, you may consider interviewing in [Golang](https://www.educative.io/blog/golang-tutorial), or if you want to work at Apple, you could master Swift.

It's important to acknowledge that you will be stressed and anxious during an interview. If a certain language requires you to think too much, you're more likely to make errors. Pick one that makes you feel safe, knowledgeable, and comfortable.  

**Remember!** It's not really about having a ton of languages under your belt; it's about showing that you know how to think like a computer.  

<br>

> ## Succeed in your coding interview. 
>
> Avoid waiting another 6 months to apply by taking our coding interview course. Educative's text-based courses are easy to skim and feature live coding environments - making learning quick and efficient. 
> 
> <b>[Grokking the Coding Interview: Patterns for Coding Questions](https://www.educative.io/courses/grokking-the-coding-interview)</b>

<a name="evaluate"></a>


## What’s a timeline to prepare for the coding interview?

Preparing for any coding interview must be strategic, especially if you’re seeking to land a dream job at a tech giant like Google or Amazon. You’re going to have to strategically prepare for several months to ensure that you’ve mastered the necessary skills and concepts. Here’s a [12-week prep plan](https://www.educative.io/blog/coding-interivew-preparation-bootcamp) for you.

- **Week 0:** Before starting your preparation, pick a programming language that you are comfortable with and is commonly used by the company you are being interviewed at. Some common languages are C++, Java, and Python.

- **Week 1:** Once you’ve selected a programming language, you should review the basics of the syntax and functionality of the language.

- **Week 2 & 3:** After brushing up on the basics of your selected programming language, it’s time to dive into data structures and algorithms. These two weeks should be solely focused on that.

- **Week 4 & 5:** Now, it’s time to utilize your learning of data structures/algorithms and use sites like [Educative](educative.io/explore) to practice coding challenges. First, begin with easier coding problems and slowly move up to the more difficult problems.

- **Week 6-8:** For these next three weeks, practice complex coding problems. While timing yourself, also be sure to consider things like runtime and memory complexity, which you will be tested on by your interviewer. 

- **Week 8 & 10:** Study system design questions, which are now incredibly common in the coding interview. The key here is to learn common patterns and mimic known systems.  

- **Week 11:** Review your understanding of OS and concurrency, which are concepts used to gauge your overall hiring level. Mastering these concepts will allow you to stand out among other prospective applicants.

- **Week 12:** Finally, study object-oriented programming and design questions, which will focus on testing your critical thinking abilities and problem solving skills.

Remember, this is just a general timeline. For those who are more experienced, you may be able to be ready for an interview sooner than 12 weeks. 


<br>

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/mtcxejqv4ehg8moy5sqm.png)

## What tools do I need for a coding interview?

For your phone screening, you'll need a strong internet connection, charged phone, and notes with your main talking points. I recommend having this nearby during your call so you can reference them as needed. 

Similarly, for a virtual interview, you will need internet, a computer, a code editor (based on the company), access to Zoom/Skype, and any notes you want to the side. It's recommended to do some research on a company's values and note them on a sticky note. 

In-person interviews are usually conducted on a white board, but virtual coding interviews will be over a shared document like Google Docs (for Google) or a site like Codility and HackerRank. You should ask what platform the company will use in advance.


<br>

<a name="structure"></a>


## What’s the general structure of a coding question?

To perform optimally, we’ll break down the interview into five aspects: introduction, understand, search, code, and ask.

### 1. Introduction	
This is the initial phase of the interview, which typically lasts three to five minutes. The interviewer wants to learn more about who you are, your background, your projects, etc. This is your moment to present yourself and leave a lasting impression on the interviewer, so don’t underestimate the importance of this step. 

Be true to yourself. Talk about your projects and more about the whys and hows. The interviewer wants to learn about why you’re interested in your coding projects or how you were able to accomplish something.

### 2. Understand

Understand the problem as well as you can. The interviewer will continue the interviewing process by introducing the problem that you will have to solve. The problem statement will be concise, in which you won’t have many details about the constraints, corner cases, and more. So, it’s your duty to build clarity on any ambiguities so that you can effectively tackle a problem. Some questions to ask:
- How big is the size of the input?
- How big is the range of values?
- Are there duplicates within the input?
- What are some extreme cases of the input?

### 3. Search
After you’ve taken the time to understand the problem, determine an optimal solution. This is where all your weeks of practice comes in. Which data structure or algorithm can you apply to develop the best solution?

Many of your interview questions may be similar to the ones that you’ve practiced on Educative, so you’ll be more familiar with these problems than you think!

### 4. Code
Now that you’ve determined a solution, it’s time to code it. If you want to do well here, you must be comfortable with the language that you’re coding in. Sometimes, companies will ask you to write your solution on a whiteboard, meaning that you have to memorize the syntax of the language that you’re using.

Make sure that your code is concise and clean, making it easy for the interviewer to review. It’s likely that you’ll be asked to explain your solution to the interviewer or fix a bug.

### 5. Ask

After finishing the problem, it’s your turn to ask the interviewer if you have any questions. This is a great opportunity for you to learn more about the company and job itself. Here are some questions that you can ask:
- What do you like most about your job?
- How do you find the culture of the company?
- Do you get to choose which projects to work on?
- What project do you normally give to interns?

<br>

<a name="switch"></a>


## Can I switch programming languages during an interview?

The short answer is **yes**.

But, you need to articulate why you are switching language. Say you cannot solve a problem in Java and choose to use C++ instead. Explain why the initial choice was not effective from the point of view of the technology itself, and the articulate why you thought C++ was a better solution. 

If you jump to a new language just because you're stressed, it shows that you didn't properly evaluate the problem at the start. As we discussed above, it is recommended to sketch out a design of the questions first so the interviewer understands your process. They may assist you in your language selection if you take that time. 

If you choose not to write in multiple languages, it will not necessarily reflect poorly on you or suggest that you are limited. In fact, it's better to take it slow and answer question with consistency than to show off with a bunch of scattered languages. A depth of knowledge is preferred to a breadth of knowledge in this case. 

> **Remember!** There is a difference between primary and secondary skills. Any good interviewer will know that. The point of an interview is not to *show off*. The point is to prove that you can accomplish what they want from that role.  

<br>

<a name="after"></a>


## What should I do after the coding interview?

Before finishing the interview, make sure that you have the needed contact information. This way you can contact them for any follow ups on the interview or the decision. Ask your recruiter for a followup for any feedback.

It's also recommended to send a follow-up email thanking the interviewers for your time and refreshing them on your skills. This should generally be sent within 48 hours of the interview. 

Also, take some time to reflect how you did. This is especially helpful for future interviews. **Were there some concepts that you should’ve practiced more? How could you have done better?** 

You should also evaluate how you felt about the company. It's perfectly okay to reach the end of the interview and decide not to pursue a company that doesn't match well with you. **Does the company align with your career goals? How would you fit in with the company culture?**

<a name="resources"></a>


## What resources will prepare me?

Cracking the coding interview is not easy. Prepping alone for the coding interview is possible but difficult. The best way to practice is from others and be actively engaged in the explanations to answers. Read articles and forums about coding interviews. In the past, LeetCode was a common way to prepare, but it is now a bit out of date. 

If you want to streamline your coding interview preparation, I recommend the following interactive courses. 

- [Grokking the Coding Interview: Patterns for Coding Questions](https://www.educative.io/courses/grokking-the-coding-interview)
- [Grokking Dynamic Programming Patterns for Coding Interviews](https://www.educative.io/courses/grokking-dynamic-programming-patterns-for-coding-interviews)
- [Grokking the Machine Learning Interview](https://www.educative.io/courses/grokking-the-machine-learning-interview)
- [The JavaScript Interview Handbook: 100+ Interview Questions
](https://www.educative.io/courses/javascript-interview-handbook)

<br>

<a name="next"></a>


## Wrapping up and next steps 

Now, you should have a good idea of what the coding interview entails, as well as an idea of what you need to do next. When it comes down to it, it's all about practice. It's going to require hours upon hours for you to nail down the important concepts. So, make sure you plan well and study ahead. **Good luck!**

There is no golden ticket to coding interviews. It's important to practice, prepare for behavioral questions, and understand how a company will evaluate you based on their own standards. It's okay if you don't land the job the first time around. Sometimes, the extra practice can actually better prepare you for the job!

<br>

### Continue reading about coding interviews

- [5 tried and true techniques to prepare for a coding interview
](https://www.educative.io/blog/5-tried-and-true-techniques-to-prepare-for-a-coding-interview)
- [Acing the JavaScript Interview: top questions explained
](https://www.educative.io/blog/acing-the-javascript-interview-top-questions-explained)
- [50 Python Interview Questions and Answers
](https://www.educative.io/blog/python-interview-questions)
- [Cracking the top Amazon coding interview questions](https://www.educative.io/blog/crack-amazon-coding-interview-questions)
- [Cracking the Google Coding Interview: the definitive prep guide](https://www.educative.io/blog/google-coding-interview)