Adobe | MTS-2 | Interview Experience | Noida | Offer

adobe logo
adobe
MTS-2NoidaOffer
June 5, 202524 reads

Summary

I successfully interviewed at Adobe for the MTS-2 role in Noida and received an offer. The process spanned four rounds, covering Data Structures & Algorithms, Java core concepts, Low-Level Design, and in-depth discussions on my past projects and technical expertise.

Full Experience

My interview journey at Adobe for the MTS-2 position in Noida was a comprehensive process, culminating in an offer after about three weeks.

Round 1: Data Structures & Algorithms

This round was primarily focused on DSA. I was first asked to solve the Maximum Product Subarray problem. After successfully solving it, the interviewer asked for a slight modification: to also return the actual subarray itself, not just the maximum product. Following this, I was tasked with implementing an LRU Cache in O(1) time in Java. The interviewer then extended this by asking me to design the code such that a user could select different caching algorithms, like LRU or LFU, with maximum code reuse.

Round 2: Java & Low-Level Design

This round specifically tested my Java proficiency and LLD skills. I started with a discussion on OOPS concepts, followed by questions on abstract classes, their implementation, and the key differences between abstract classes and interfaces. I was also asked to implement an interface. I then tackled some complex code snippets related to abstract classes and interfaces, which truly tested my core Java understanding. A specific question was whether two interfaces can be implemented by an abstract class. We then moved on to implementing polymorphism and discussing various ways to create threads in Java (extending Thread, implementing Runnable, and Callable).

Towards the end of this round, I was given an LLD snapshot with API contracts and had to design the models, their data types, and pseudo-code for the repository, service, and controller layers. The interviewer then asked me to adapt my design to use SQL for data implementation, moving away from in-memory storage. This led to questions about different types of SQL Joins and their distinctions.

Since my previous role involved Node.js, I was also asked to explain how a server runs in Node.js and the principles of the HTTP protocol. The interviewer seemed satisfied at the end of this extensive round.

Round 3: Managerial Round

This round began with introductions and quickly moved into a deep dive into my past projects. We discussed my specific roles and implementations. The interviewer was particularly interested in understanding my contribution in terms of business impact, asking if I measured my work in GMV (Gross Merchandise Value) terms. I was also asked about my involvement in open-source projects. Standard behavioral questions were part of this round. Finally, there was a discussion about potential use cases for AI in my current role.

Round 4: Directorial Round

This was arguably the most challenging round. The director rigorously questioned me about a project involving MySQL to Cassandra migration. We delved into the differences between these two databases, their respective benefits and shortcomings, and the various types of keys used in Cassandra. The interviewer went deep into each project I mentioned, even asking about the underlying mathematics behind some of the functions I had implemented.

The entire interview process took approximately two weeks. In the third week, I received the call informing me of my selection and offer.

Interview Questions (9)

Q1
Maximum Product Subarray
Data Structures & AlgorithmsMedium

Given an integer array nums, find a subarray that has the largest product, and return the product. The test cases are generated so that the answer will fit in a 32-bit integer. A subarray is a contiguous non-empty sequence of elements within an array.

Q2
LRU Cache Implementation with Pluggable Cache Algorithms
Data Structures & AlgorithmsHard

Implement an LRU Cache with O(1) time complexity for get and put operations in Java. Additionally, design the code in a way that allows a user to select different caching algorithms (e.g., LRU, LFU) and maximize code reuse.

Q3
Abstract Class vs. Interface Comparison and Implementation
OtherEasy

Explain the differences between an abstract class and an interface in Java, and demonstrate how to implement an interface.

Q4
Implementing Multiple Interfaces with an Abstract Class
OtherEasy

Can an abstract class implement two interfaces in Java? Explain and provide reasoning.

Q5
Java Thread Creation Methods
OtherEasy

Discuss and demonstrate different ways to create threads in Java, including extending the Thread class, implementing the Runnable interface, and implementing the Callable interface.

Q6
Low-Level Design with API Contracts and Database Integration
System DesignMedium

Given an LLD snapshot and API contracts, design the models, their data types, and implement repository, service, and controller layers using pseudo-code. Subsequently, adapt the design to use SQL for data persistence instead of in-memory storage.

Q7
SQL Joins and Their Differences
OtherEasy

Explain different types of SQL JOINs (e.g., INNER, LEFT, RIGHT, FULL OUTER) and describe the differences between them with examples.

Q8
Node.js Server Execution and HTTP Protocol
OtherEasy

Explain the process of how a server runs in Node.js and describe the fundamentals of the HTTP protocol.

Q9
MySQL vs. Cassandra Migration and Database Deep Dive
System DesignHard

Discuss the differences between MySQL and Cassandra, including their benefits and shortcomings. Explain the types of keys used in Cassandra and the considerations involved in migrating a project from MySQL to Cassandra.

Discussion (0)

Share your thoughts and ask questions

Join the Discussion

Sign in with Google to share your thoughts and ask questions

No comments yet

Be the first to share your thoughts and start the discussion!