The hiring process for an open position can often span several weeks, involving multiple rounds of interviews with multiple engineers, recruiters, and hiring managers. When interviewing for a technical job (i.e. software developer/engineer, project manager, data scientist, etc), you should expect at least one of these rounds to be a technical or coding interview.
The technical interview is the employer’s chance to put your hard, analytical skills to the test and get a feel for how you solve problems. Many first-time interviewees think of the technical interview as an intimidating barrier to entry to their dream job, but it’s a hurdle that can be overcome with practice and preparation. Below are a few helpful hints to help you get ready for your technical interviews.
HOW TO PREPARE FOR A TECHNICAL INTERVIEW
- Do your research. Look up information about the work being done at the company. This can often provide clues about the skills they will be looking for in a new employee. Also, be sure to read the job description thoroughly. The job posting will likely include a list of skills that the employer expects all applicants to have.
- Brush up on your basics. If it’s been a while since you’ve taken an algorithms or data structures class, review the material! Everyone gets rusty with skills they don’t use every day.
- Practice whiteboarding. It is very likely that you will be asked to code live on a whiteboard during your technical interview. If you aren’t used to working/problem-solving in front of others, have a couple of friends watch while you solve some practice questions on a whiteboard.
- Be ready to discuss your resume in depth. The interviewer isn’t going to just ask about what you did in previous jobs or projects. They are going to want to hear about challenges you faced, failures you overcame, successes that you are particularly proud of, leadership roles you took on, etc.
- On the morning of your interview, choose your outfit accordingly. In addition to assessing your ability to answer technical questions, interviewers are also assessing your cultural fit with the company — can they see you working in the company’s environment? For most companies in the tech world, business casual dress is acceptable for interviews. For most start-ups, you can skew more toward casual dress. If you are interviewing with a company in the financial sector, suits are still expected. If you are unsure of the company’s culture, business casual is a good bet.
WHAT TO DO DURING A TECHNICAL INTERVIEW
- Take your time. Don’t feel like you have to start working immediately as soon as a question is asked. Take a minute or two to gather your thoughts, think about the ‘big picture’ of the question, and determine how you will set out to solve it. But don’t solve the whole thing in your head! The interviewers will want to see your thought process in action, and it’s safe to assume they aren’t mind readers.
- Communicate. While you are solving a problem, talk through your thought process and the solution at which you arrive. This will show the interviewers exactly how you approached the problem, and if you start to go wrong somewhere, they will be able to catch it and nudge you in the right direction. If you can’t clearly communicate the work that you do, you won’t be considered a strong candidate, even if you come up with the correct solution.
- If you don’t know the answer to a question, be honest and say that you don’t know. It will look worse if you try to fumble your way through an answer. But if you admit to not knowing something, it is important to demonstrate your willingness and interest in learning. Doing some post-interview research and following up with a solution will show that you are invested in the work and eager to broaden your skill set.
- Ask questions. Interviewers want to see that you are engaged in the process and not just going through the motions. If something is confusing, ask for clarification.
- Cracking the Coding Interview
- The Interview and Beyond section has general interview strategies and technical questions and offers negotiations (highly recommended) – Prioritize Chapters 1-4, 8, 9, and 11. These cover core topics
- Code Complete: A Practical Handbook of Software Construction
- Widely considered one of the best practical programming guides – The Second Edition is fully updated and revised with new code samples
Online Coding Practice Tools:
- HackerRank – the leading end-to-end hub of technical practice problems (highly recommended)
- Collaborative & Hands-on experience with general programming interview-level questions
- Leetcode – a versatile platform for enhancing fundamental coding skills (highly recommended)
- One of the largest pools of coding questions, along with structured fundamentals training
- Firecode.io – daily technical interview practice with an emphasis on fundamentals
- CareerCup – peer forum for interview questions and a mock interview service
- Python Tutor – programming fundamentals and code visualization
- Pramp – coding interview practices and live feedback & exercises
- Algorist – A helpful wiki page that you can use as a self-study guide and resource
- HackerRank – the leading end-to-end hub of technical practice problems (highly recommended)
Resources by Topic:
- Most companies do not require that you know any specific programming language before interviewing for a tech position. However, familiarity with a prominent language is generally a prerequisite for success. You should be familiar with the syntax of languages such as Java, Python, C#, C/C++, or Ruby. You should also know some of the languages’ nuances, such as how memory management works or the most commonly used collections, libraries, etc.
- A lot of work at large companies involves storing and providing access to data in efficient ways. This requires a strong background in data structures. You’ll need to understand the inner workings of common data structures and be able to compare and contrast their usage in various applications. You will be expected to know the runtimes for common operations as well as how they use memory.
- Interviews typically will not be focused on rote memorization of algorithms. However, having a good understanding of the most common algorithms will likely make solving some of the questions a lot easier. Consider reviewing common algorithms such as traversals, divide and conquer, and breadth-first search vs. depth-first search and understand the tradeoffs for each. Knowing the runtimes, theoretical limitations, and basic implementation strategies of different classes of algorithms is more important than memorizing the specific details of any given algorithm.
- Expect to be asked to write syntactically correct code—no pseudo code. If you feel a bit rusty coding without an IDE or coding in a specific language, it’s a good idea to dust off the cobwebs and get comfortable coding with a pen and paper. The most important thing a Software Development Engineer does is write scalable, robust, and well-tested code. These are the main evaluation criteria for your code. Make sure that you check for edge cases and validate that no bad input can slip through. This is your chance to show off your coding ability.
- Good design is paramount to extensible, bug-free, long-lived code. Employers know it’s possible to solve any given software problem in almost limitless ways, but when software needs to be extensible and maintainable, good software design is critical to success. One way to build lasting software is to use object-oriented design best practices. You should have a working knowledge of a few common and useful design patterns, along with how to write software in an object-oriented way. You likely won’t be asked to describe the details of how specific design patterns work, but expect to have to defend your design choices.
- Many of the challenges tech people face arise when figuring out how to most efficiently retrieve and store data for future use. You should be familiar with broad database concepts and their applications. The more you know about tradeoffs between relational and non-relational databases, the better prepared you will be.
- Systems have to work under very strict tolerances at a high load. It’s important to have an understanding of a few basic distributed computing concepts. Understanding topics such as service-oriented architectures, map-reduce, distributed caching, load balancing, and others will help you formulate answers to some of the more complicated distributed architecture questions you might encounter.
- You typically won’t need to know how to build your own operating system from scratch, but you should be familiar with some OS topics that can affect code performance (e.g. memory management, processes, threads, synchronization, paging, and multithreading).
- Employers expect their engineers to be familiar with the fundamentals of how the Internet works. Brush up on how browsers function at a high level, from DNS lookups and TCP/IP to socket connections. Having a solid understanding of the fundamentals of how the world wide web works is a requirement.
- Expect to be asked about data-driven modeling, train/test protocols, error analysis, and statistical significance. For example, given a problem definition, you should be able to formulate it as a machine-learning problem and propose a solution, including ideas for data sources, annotation, modeling approaches, and potential pitfalls. Understand the basic AI/ML methods and algorithms – revisit your favorite ML and AI textbooks.
- Example/Standard Q: How would you design Facebook Newsfeed Ranking?
- The most important here is to know your ML basics really well. But be sure you can talk in detail about your favorite classification and regression algorithms. (How do you train it? SGD? What’s the cost function? How do you assess your model’s performance? How do you know if your model is overfitting/underfitting, and how do you address it? Do you regularize? How? Etc..)
- Mashable – How to Ace Your Technical Interview
- Forbes – How to Ace Your Technical Interview
- About.com – Top 50 Tech Interview Questions
- Vault – 6 Interview Tips From Tech Recruiters
- Google Recruiters Share Technical Interview Tips
- CareerCup – Recent Interview Questions
- Business Insider – How to Nail an Interview in Software Engineering