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


Prequel questions

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?

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.

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


Software engineering questions

Describe the difference between a thread and a process. Can a process start a thread? What about a thread 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)?

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?

What does “beautiful code “ mean to you?

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:

  • SRP: The Single Responsibility Principle
  • OCP: The Open/Closed Principle
  • LSP: The Liskov Substitution Principle
  • ISP: The Interface Segregation Principle
  • DIP: The Dependency Inversion Principle

Explain one or more of the following:

  • REP: The Reuse/Release Equivalency Principle
  • CCP: The Common Closure Principle
  • CRP: The Common Reuse Principle

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

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