This blog post is part of our Interview Laid Bare series:


Software engineering questions

Describe the difference between a thread and a process. Can a process start a thread? Can a thread start a process? 🧠 ↗️

What issues can appear when using multiple threads and how can they be mitigated? 🧠 ↗️

What is strong-typing versus weak-typing? Which is preferred? Why? 🧠 ↗️

What is Unicode and what does it help with? 🧠 ↗️

What is a hashtable and how does it manage to look up stuff in O(1)? 🧠 ↗️

Given an array of integer numbers how do you find a given number’s position? What if the array were sorted, does this help you find the number faster? What is the complexity of the search? 🧠 ↗️

What’s the difference between Optimistic and Pessimistic concurrency models? 🧠 ↗️

What does encapsulation mean in OOP and how does it help concretely? 🧠 ↗️

What is an abstract class and an interface. Differences and similarities. When would you use one or the other. 🧠 ↗️

What is polymorphism and how does it help us? How many types of polymorphism exist? Any disadvantages? 🧠 ↗️

Elaborate on Inheritance vs Composition. 🧠 ↗️

What is unit testing and how is it done? Frameworks, tools? Mocks vs stubs? 🧠 ↗️

Continuous integration and/vs continuous delivery. 🧠 ↗️

What is source control and how can it help us? How does “git rebase” work and how could it be helpful? 🧠 ↗️

What does refactoring mean? 🧠 ↗️

How should code reviews be done? 🧠 ↗️

Suppose you read an infinite sequence of characters from a stream, one at a time, like so: G, X, A, C, X, F, G… At some later point in time (potentially much later), someone asks you: what was the 2nd character that didn’t repeat in the stream? Write a small program to handle reading the characters and be able to answer this question. 🧠 ↗️

In a SCRUM team, who’s the manager? 🧠 ↗️

What are design patterns? What is their purpose and what are their benefits? 🧠 ↗️

Explain the use of one of the following patterns: Abstract Factory, Factory Method, and Builder. Advantages vs disadvantages in practice. 🧠 ↗️

Explain the use of one of the following patterns: Facade, Proxy, and Bridge. Advantages vs disadvantages in practice. 🧠 ↗️

Explain the use of one of the following patterns: Strategy, Observer, Visitor. Advantages vs disadvantages in practice. 🧠 ↗️

Explain one (or more) of the following:

How would you persist a tree structure in a relational DB? What about a document-based DB? 🧠 ↗️

Given the following pseudo-code…

	class PersonController()
	{
		public save(Person person)
		{
			new Database().save(person);
		}
	}

…if you are asked to write a unit test for the save() method in isolation (I.e. without having a Database handy), how would you change the code to be able to write the test? Note: you may change ANYTHING in the code above 🧠 ↗️

What is Domain Driven Design and how can it help? Are there situations where you shouldn’t use it? 🧠 ↗️

What is an Aggregate Root? What about a Domain Service? What about an infrastructure service? 🧠 ↗️

When modeling an application using DDD should you start by creating the database structure first? 🧠 ↗️

Resources


Distributed applications

Suppose you have a service running in the cloud and it’s stateful (in-process storage). Now you need to scale it out. How do you deal with the state? 🧠 ↗️

Should cloud services be stateful or stateless in general? 🧠 ↗️

Explain what Leader Election is and how it could be implemented. 🧠 ↗️

How can you implement service-to-service communication? How about RPC? How do you deal with transient failures, out of order delivery and guaranteed delivery? 🧠 ↗️

How should API versioning be handled? 🧠 ↗️

What is CQRS and how can it help in practice? 🧠 ↗️

What is event sourcing and how can it help in practice? 🧠 ↗️

What is eventual consistency and how do you handle it from a customer/consumer perspective? 🧠 ↗️

Contrast relational vs document vs blob storage. 🧠 ↗️

Explain the Saga pattern and how it is useful. 🧠 ↗️

How can high availability be implemented in distributed applications? How about disaster recovery? 🧠 ↗️

What is multitenancy and how can you implement it? 🧠 ↗️

What is the concept of noisy neighbor? 🧠 ↗️

How and when would you implement caching? 🧠 ↗️

How can you scale distributed caching? 🧠 ↗️

How do you scale a DB? 🧠 ↗️

How can you achieve better resiliency in a distributed application? 🧠 ↗️

What is serverless? 🧠 ↗️

What are containers and how are they useful for distributed applications? 🧠 ↗️

What is a service mesh and how can it help? 🧠 ↗️

Resources


Web security

What is OWASP? 🧠 ↗️

Explain sql injection and how we can defend against it. 🧠 ↗️

Explain XSS and how we can defend against it. 🧠 ↗️

Explain CSRF and how we can defend against it. 🧠 ↗️

What is over-posting and how we can defend against it. 🧠 ↗️

Resources

Written by:
Adi.jpg
Adrian Hara

Managing partner and geek wannabe