The more and more I talk to developers and other software engineers, I noticed that reoccurring theme. They all wanted to know the key to doing well in technical interviews.
This is a good topic to understand because if you don’t take interviewing seriously, you will quickly find yourself having to stick with the job you have for the rest of your life or, even worse, not getting a job at all.
“But what about my all-star resume???! Wont that be enough to get me the dream programmer job that I’ve always wanted?”
And the simple answer is: NO. Not with a respectable company interested in hiring great candidates.
So what should you do? Well the first thing would be to start preparing yourself for these interviews so that you can get better at them. Few people really enjoy interviewing. A lot of times even the interviewer is uncomfortable (no one likes watching someone else sweating and shaking because they are so nervous).
I’ve been on both sides of the technical interviewing table so I want to share with you what you need to expect going into one of these so that you are not caught unprepared and blindsided.
Recently, I have been given the task of tech interviewing all of the programmers and software engineers, senior to junior level, for any open technical positions we have in our company. I have developed a list of interview questions and topics that I feel allows me to really gauge how well the candidate would preform technically. Some of these questions I have been asked myself in interviews and some of these are just some that I made up because I believe they give the candidate an OPPORTUNITY to showcase what they know.
Notice how I said opportunity. As an interviewer I don’t want you to fail. If we have an open position for the company I want you to succeed with flying colors and then I can present you to my boss and say “I’ve found him! He is wonderful and will be great at this company! Woohoo!” (feel free to replace “him” with “her” btw. I have interviewed some great women as well.) To many candidates think that the interviewer is solely out to make them look stupid and stump them with impossible questions. That’s not the case! We just need to separate the good from the great and not so great. If you prepare with the topics and questions that I will provide below you should be well on your way to being one of those candidates classified as “great”.
Now before you go over this list and say to yourself “These are just trivia questions!” or “No one uses that anymore” or “Why would I need to know that??” or just “These are stupid questions”, remember that I’ve comprised this list from REAL-WORLD interviews that I have given and have received. Also, most of these questions will be language agnostic. I am a firm believer that what makes a great developer is not how well he understands a particular language (that is just syntax, and while it is nice, doesn’t alone make you a good developer and most importantly a great PROBLEM SOLVER). I’ve related before to the analogy of someone know multiple human languages – just because Johnny can speak mandarin fluently doesn’t make him a smart individual or problem solver in the mandarin culture.
After my interview I should be able to answer these questions about the candidate:
- Is this someone I can see myself work with daily?
- Is this someone that would be a good fit in the existing team?
- Is this someone that has a desire to do a good job and learn more?
- Is this someone who is motivated?
- Is this someone that really knows their stuff?
- Is this someone who would be a good fit for the position we’re filling? Or are they too advanced and would be bored or frustrated?
Alright enough already! Lets get to the questions!
I’ve broken them up into a few different topics so that I might see a candidates strengths in different areas. These areas are:
- General technical questions
- Development/design questions
- Database or storage questions
- algorithms and data structures.
Please realize that many of these questions may be geared to senior candidates and aren’t expected to be fully understood by a junior candidate – but I would like them to hopefully be familiar with some of the more advanced topics.
- What Source Control systems have you worked with?
- How do you react to people criticizing your code/documents?
- Describe, in as much detail as you think is relevant, as deeply as you can, what happens when I type “cnn.com” into a browser and press “Go”.
- How do you go about troubleshooting issues today? Give me an example.
- What was the most difficult technical issue you’ve faced in your last project and how did you solve it?
- What is something substantive that you’ve done to improve as a developer in your career?
- Are you still writing code? Do you love it?
- You’ve just been assigned to a project in a new technology how would you get started?
- What do you do to stay abreast of the latest technologies and tools?
- Describe a software development life cycle that you’ve managed.
- Whose blogs or podcasts do you follow? Do you blog or podcast?
- Tell me about some of your hobby projects that you’ve written in your off time.
- What is the last programming book you read?
- You have two computers, and you want to get data from one to the other. What are some ways you could do it?
- What’s the difference between a thread and a process?
- What is SOLID? Can you explain what each letter stands for and the reasoning behind it or why its important?
- What is Inversion of Control? How does that relate to dependency injection?
- Why are interfaces important? When might you use them over a base class?
- What are some alternate ways to store data other than a relational database? Why would you do that, and what are the trade-offs?
- What is SQL injection and how do we prevent this in our application code?
- What’s the difference between unit test and integration test?
- What is Refactoring? Have you used it and it is important? Name three common refactorings.
- Name three primary attributes of object-oriented design. Describe what they mean and why they’re important.
- What is the Repository pattern? The Factory Pattern? Why are patterns important?
- What are some examples of anti-patterns?
- Who are the Gang of Four? Why should you care?
- How do the MVP, MVC, and MVVM patterns relate? When are they appropriate?
- Explain the concept of Separation of Concerns and it’s pros and cons.
- You have just been put in charge of a legacy code project with maintainability problems. What kind of things would you look to improve to get the project on a stable footing?
- Show me a portfolio of all the applications you worked on, and tell me how you contributed to design them.
- Explain the differences between stateless and stateful systems, and impacts of state on parallelism.
- What’s the difference between asynchrony and concurrency?
- What is Continuous Integration? Have you used it and why is it important?
- Are you familiar with ORM’s? What problem do they solve?
Database Questions (mostly relational DBs)
- What kind of database technologies are you familiar with? What are the pros and cons of each?
- What is an index?
- What is a view?
- Do indexes always help performance? Please explain.
- What is the difference between a clustered index and a non-clustered index.
- How many clustered indexes can you have on a table. Why?
- Is it important to have primary keys and foreign keys? What are they for?
- What is normalization? What are the pros and cons of it?
- Which is faster: inserting one million rows of data or updating one million rows of data?
- What steps would you take to make a query faster?
- What is the best way to import a lot of data into a DB?
- Tell me what your change process is for a new database change or migration.
- How do you assess overall database health? What are the day-to-day items to keep an eye on? Can you automate any of that?
- Do you have a Database Recovery plan? How do you test it?
- Can you describe the difference between the different types of JOINs in SQL (INNER, LEFT and RIGHT OUTER, FULL, CROSS)
- Can you explain what TRIGGERS are and when you might use them?
Algorithms and Data Structures
- Implement a <basic data structure> using <some language> on <paper|whiteboard|notepad>.
- Which sorting algorithm has the slowest rate of growth relative to its input: Selection Sort, Merge Sort, Bubble Sort, Insertion Sort…What is its worst case asymptotic Big-O time complexity? Are there any other sort algorithms that you are familiar with that can perform better on average?
- What is a binary tree? What is it good for?
- Are you familiar with Dijkstra’s algorithm? What is it used for?
- What is the difference between a Stack and a Queue data structure? Can you give examples of some in real applications?
- In terms of asymptotic time complexity, please list in order which algorithms are the slowest growing to the fastest growing: O(n^2), O(n), O(n log n), O(log n), O(1), O(2^n)
- Would you be able to explain how Merge-sort works?
- If I have N sorted arrays of N length, can you implement an efficient algorithm to combine these into 1 sorted array?
Well this post got waaaaaaayyyyy longer than I anticipated…. but then again there is a lot to go over for tech interviews, which is why many people find them difficult. However, if you take time to become an expert in what you do, most of these problems will come pretty easily to you.
I will tell you from experience that most of the people I interview have the most trouble with the algorithm and data structures section. Many people don’t believe knowing the computer science aspect of programming is as important (not sure why), but these can quickly get you in trouble if you start implementing algorithms that are having quadratic O(n^2) or even, god forbid, exponential O(2^n) complexity algorithms!
Anything worth having takes some effort to achieve. So learn your craft and become an excellent programmer/software engineer to get that dream job you’ve always wanted!
I hope this list of questions, topics, and interviewing tips helps every one of you in your career path whether you are the interviewer or interviewee.
P.S. These are not a list of all the questions you will see BY FAR! These are just some of the ones I like and see more often. Cheers and happy coding!
Good post Jason.
Finally, I think it’s worth mentioning that many developer interviews have other aspects than just answer questions. These can be examining code you’ve written, peer programming with the interviewer, white-boarding exercises, coding a small solution on your own, etc.
Great read. Keep this going!
Great point Wes! I knew someone would bring that up and im glad you did because it’s an very important point. I was trying to keep it as technology agnostic as I could but I obviously went into some technologies deeper than others. I honestly wasn’t sure when to stop! As you can see the post was getting very long.
I think I will take your advise and follow up with a more technology focused post especially more towards the front end aspect. You’ll notice that I did not have many C# or .Net specific questions either. I’m glad you liked it though and I definitely agree that there are other great ways to gauge a great developer in an interview. I think white boarding is one of the best! It can show the ability to work under pressure and without an editor. Also think what you said about looking at code the developer has written in the past is a great idea.
Thanks for the advice and comment!