What to Expect in a Programmer Interview

What to Expect in a Programmer Interview

(This post (and more like it) can be found on my blog at jasonroell.com)

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???! Won't 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.) Too 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! Let's get to the questions!

I’ve broken them up into a few different topics so that I might see a candidate's 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.

General Technical

  • 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?

 

 

Development/Design questions

  • 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!

If you liked this post, please share it with others! That is the biggest compliment I could receive. 

This article originally appeared on my blog at jasonroell.com. Please subscribe if you are a technology enthusiast! 

Nicole Spicer (Retired)

Equity, Inclusion, Kindness

9 年

Great article as always!

Dana M.

Hi! I'm a technical Artist with special focus on VR applications. I'm a creative coder that loves math and new technology platforms.

9 年

I had my first tech interview for an internship. He asked me to write out a binary tree sorting algorithm... I choked, he won't be calling me back most likely.

回复
Brian Bowman

Music, German Shepherds, Tech -- Distinguished Engineer (retired) -- Storage Layer, Distributed Systems, Database Internals/Integrations

9 年

Morten, I think the answer to your question very much depends on the type of IT job you are seeking. When I got started as a programmer 32 years ago, there was a lot of diversity in backgrounds. I would say 50% had undergrad computer science degrees, 20% had physics or math degrees, and the rest had various degrees including bachelors in Info Systems. My first employer was very generous with tuition reimbursement and sending us to a very in-depth operating system and database internals courses. As time went on there was less of that, and by the early 90s the demand for software engineers/programmers was so high that one could enter the profession with an Associates degree and a couple of certifications. Then the Internet became ubiquitous and a huge pool of talent was needed to support networking and web infrastructure. It seemed to me that through that. Which extended well into the early 2000's, that having a whole pile of certifications was almost more important than a computer science degree. At least that was true in organizations that were not doing deep proprietary development. I think that there's no way you can lose by getting an undergrad in computer science, especially from a University with a reputable engineering program. It provides the necessary mathematical, conceptual, and logical background to solve a wide array of problems. If a student really applies themselves to the computer science material, and does outside work (e.g. open source projects, internships, etc.) then my observation has been she/he will have an outstanding chance of getting hired into an interesting full-time position Having a computer science degree and/or studying the foundation material and getting the degree over time while working in the profession, is the best possible foundation for a long successful career doing real software engineering. However, if your goal is to do IT network maintenance or more generic "coding" then an associates degree and a bunch of certifications can probably get you there.

回复
Morten Toudahl

Chief Software Engineer

9 年

Hm, for some reason i see no reply button on your reply Jason Roell. The reason for my question is that I found these questions surprisingly easy. And I've still got one year left of my "datamatiker" education. Which is one step below a bachelors here in Denmark. There was only 1 database question that I am unable to answer, and 5 of the algorithm questions - which is to be expected, since it is not on our curriculum. My impression was that in the US most people needs more than a bachelor in computer science to get hired - is that incorrect?

回复
Raheem Francois

Software Engineer at American Express

9 年

This post was great. Thank you!

回复

要查看或添加评论,请登录

Jason Roell的更多文章

社区洞察

其他会员也浏览了