I have recently been on the job hunt (and come out of it with a new job, thanks for asking). I talked to a number of interesting organisations and answered a proportionally interesting number of questions. No less interesting is that fact that nearly all of these questions, whilst being ideal interview material, were also the kind of questions that would come up every day as part of the job.
In random order and proportions.
- How long would it take to get 1 terabyte of data from one side of the country to another?
- Tell me about a time when you faced a conflict at work and what you did to resolve it.
- Explain how CloudFront works internally.
- Tell me in as much detail as you want what happens when you visit a web page.
- How you would write a hash table implementation that was threadsafe? What atomicity and performance bottlenecks are there? How would you improve them?
- What was the last book on software engineering that you read?
- Why would you use S3?
- Given the behaviour of virtual memory, what factors are important when designing data structures if you wanted to ensure good performance?
- How would you make a caching framework for pages that featured a high number of components each of which might be updated often?
- How do you make sure clients are kept up to date with projects?
- With reference to some Python code, how would I identify and improve bottlenecks in parsing large numbers of XML documents?
- Tell me about a time when you had to persuade someone of something.
- Describe an algorithm that would help with the partitioning of a large threaded comments system.
- How would I identify scaling problems in a web application? How would I arrive at metrics for evaluation? How would I enforce them? What would I do if I had such problems?
- Tell me about security considerations in web applications.
- This program takes X minutes to run over this data. Is that reasonable?
- Given two sorted lists of integer intervals, how would I calculate the set of intervals that mutually overlap? How would you optimise if there were very large gaps between overlaps? What’s the time complexity in each case?
- How do you ensure you understand exactly what a client wants?
- What do you make of the dynamic vs static language debate?
- What is the persistence method of Redis and how would you optimise usage to exploit that?
- If you’re writing code for use by other developers, how do you ensure that it’s what they need?
- If I wanted to perform batch operations on a multi-gigabyte dataset held on a remote networked drive, how would I go about doing it?
- What are the practicalities of deploying a project in Go?
- Would you mind being on call between 7 and 10PM on a rota?
- How would you choose between Go and Scala when creating a web service?
By far the best:
- Tell me about project X*.
- Where X is the name of a project. You’d never catch me talking about the real ‘Project X’.