Ajio | SDE2 | Bengaluru | Experience
Summary
I interviewed for an SDE2 position at Ajio in Bengaluru, which involved problem-solving, an intense Java and distributed systems discussion, and a system design round. Although I successfully cleared all technical stages, the expected offer was indefinitely delayed by HR.
Full Experience
I interviewed for an SDE2 role at Ajio in Bengaluru, bringing 4 years of experience, having previously worked as an SSE at a tech startup. The interview process, which took place on June 7th, 2023, was structured into three distinct rounds.
The first round focused on Problem Solving, where I was presented with two LeetCode problems of easy-to-medium difficulty. I successfully solved both within the allocated time and was informed that I had cleared this stage.
The second round, a Technical Discussion, was intensely Java-based. This round was particularly challenging for me as my background wasn't strongly rooted in Java. The interviewer delved into core Java concepts, asking questions like "How JVM works?", "What is reflection in Java?", and "What is a functional Interface in Java? What is the lambda internal implementation?". A significant part of the discussion revolved around implementing the Singleton design pattern, followed by questions on how to intentionally break it using reflection and serialization, and crucially, how to prevent such breaches. We also discussed the behavior of `Map` when storing two objects with identical data, questioning whether it creates duplicate entries or a single one, and the fundamental "Difference between hashcode and equals." Given my prior experience, I also faced questions about Kafka's working principles and was asked "How would you choose between Kafka and RabbitMQ?" I openly admitted my limited knowledge of RabbitMQ, focusing on Kafka's pros and cons based on my experience. Despite feeling quite grilled on Java, I surprisingly cleared this round. Post-interview, I dedicated time to thoroughly study all the discussed concepts, which proved to be a valuable learning experience.
The third round was a Technical Discussion with a Manager. This began with a deep dive into one of my recent projects, where I was asked to explain its High-Level Design (HLD) and the various design decisions I had made. Following this, I was tasked with designing a Low-Level Design (LLD) for a parking lot system. We had a productive discussion, during which I detailed the models, data layer, and API layer. The round concluded with a salary discussion, where their proposed budget aligned perfectly with my current compensation expectations.
Subsequently, HR informed me that an offer letter would be extended within two weeks. However, this never materialized. Despite my persistent follow-ups, the HR representative continuously delayed the offer. While the technical interviews were engaging and informative, the overall HR experience left much to be desired.
Interview Questions (8)
Explain how the Java Virtual Machine (JVM) works.
Implement the Singleton design pattern. Discuss how to break a Singleton instance using reflection and serialization, and explain the methods to prevent these breaches.
What is reflection in Java? Provide examples of its use cases.
What is a Functional Interface in Java? Explain the internal implementation of Java lambdas.
What happens if you store two objects having the same data (but potentially different references) in a Map? Will it create two entries or a single entry? Explain the underlying mechanism.
Explain the difference between hashCode() and equals() methods in Java, and their contract.
How would you choose between Kafka and RabbitMQ for a given use case? Discuss their pros, cons, and typical scenarios where each excels.
Design a Low-Level Design (LLD) for a parking lot system. Detail the models, data layer, and API layer.
Preparation Tips
I prepared by focusing on general problem-solving and understanding my past projects deeply. After a challenging Java-focused round, I specifically deep-dived into core Java concepts such as JVM internals, Reflection, Functional Interfaces, Singleton pattern, and the hashCode() and equals() contract. My experience with Kafka also helped with related questions, allowing me to discuss its working principles and comparative advantages against other messaging systems.