Having a solid handle on the answers to the engineering/computer science questions is a prerequisite for moving forward. Due the nature of the projects we are involved in, we use the specific engineering knowledge they highlight on a daily basis. We are a flat organization, so we expect from our colleagues to be able to come up with architecture/design proposals on features, vertical slices or end-to-end applications. Hence our deep focus on software engineering.?
- 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.
- 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
23. 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?
- 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?
- 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.
Should you have any questions about our process, drop us a line!