1st Round: Interview with Hiring Manager
- Ensured high level technical fitness by asking high level questions about Microservices architecture. How will you ensure high availability, reliability and scalability of microservices?
- A brief discussion about my last companies, assignments and challenges I had faced and overcame.
- Behavioural questions for a Technical Lead : conflict management with Manager, peers and customers.
2nd Round: Microservices theoretical questions and System Design (no coding)
- Started with theoretical questions about Microservices such as caching, circuit breaker, CQRS, CAP theorem, authentication\JWT\OAuth basics.
- The next part was about System Design:
- Design a facebook like feature where a user can have multiple friends.
- Whenever the user logs in, he will see latest posts from his friends.
- It can have millions of users and each one can post hundreds of posts per day.
- Key pointers here are that this is a read heavy system so think about CQRS.
- Think in terms of granular microservices interacting via message queues.
- It's not super critical system, so eventual consistency is OK.
- Instead of calculating the top N posts the user can see on the fly, think about having its snapshot.
- What KPI's will you used to monitor the system?
- If the performance is dropping, which KPI will help? Hint message queue size.
3rd Round: Coding
1. Preferred languages are Java, Go, C++. However, they are open for other languages too.
2. In 50 minutes, write a program to find the shortest path from a given node in the map to all other nodes.
4th Round : System Design Round where you can take the assignment to your home and submit it within 2 working days. After which, there will be the in person discussion on it ; typically 1-2 hours. The other option is to directly go for the in-person round for system design which may be 5-6 hours long round.
- My problem statement was to design API to parse and analyze a file based on the given input file id. Extract other file ids from it, check if they are present on the disk and return them..
- Write a small working program for that.
- How will you implement the same functionality on a global scale now?
- How will you deploy the solution?