[Declined] - Adobe interview experience

adobe logo
adobe
mts 2Withdrew
July 24, 20250 reads

Summary

I interviewed at Adobe for an MTS 2 role, which involved three comprehensive rounds covering DSA, system design, and behavioral aspects. I ultimately received an offer for a Release Engineer position but decided to decline it due to receiving a better offer elsewhere and the role not aligning with my career goals.

Full Experience

I applied for several roles at Adobe, primarily MTS 2, and received a callback from a recruiter after about a month. The interview process at Adobe is structured with sequential rounds.

Round 1: DSA, System Design, OOPs, DBMS

My first round focused on Data Structures & Algorithms, System Design, Object-Oriented Programming (OOPs), and Database Management Systems (DBMS). I was asked a LeetCode medium-hard question:

  • Find Median from Data Stream: I clearly built the solution using two priority queues and explained my approach, writing pseudo code.

Then, the interviewer delved into various system design questions covering scaling, performance, concurrency, load balancers, CAP theorem, and DBMS concepts like locking, SQL vs NoSQL, normalization, OS-level locks, and atomicity. I also had to implement an LRU cache, again providing pseudo code. This round lasted approximately 70 minutes.

I received an email for Round 2 the same day.

Round 2: DSA, CI/CD, AWS, Kubernetes, Docker, Kafka

The second interviewer was very approachable. They posed a medium DSA question that was quite lengthy to read but essentially involved backtracking with proper constraint handling. I had to write the full code and test it with sample cases. My second question was LeetCode 825 (Friends Of Appropriate Ages), which I solved and demonstrated with provided inputs. Following this, we discussed my experiences with Jenkins, CI/CD pipelines, build processes, production tools, AWS, Kubernetes, Docker, scaling, and Kafka.

Two days later, I received an email for Round 3. By this point, I had already secured a better offer, so I approached this round very calmly, mostly out of curiosity.

Round 3: Hiring Manager (HM) - Projects, Behavioral, Release Engineering

This was a hiring manager round where I was thoroughly grilled on my projects and past experiences. The questions covered ownership, challenges encountered, end-to-end project involvement, leadership skills, innovation, voluntary acts, and debugging skills.

The HM then informed me that the role was primarily for a Release Engineer with a strong focus on Jenkins, which significantly diminished my interest in joining Adobe. Despite this, I maintained a facade of interest, and they proceeded with Jenkins-specific questions.

  • Job Scheduling (Two Schedulers): Given an array of job times, I was asked to determine the minimum time to complete all jobs using two schedulers, where each scheduler can perform one task at a time. I solved it and explained my approach.
  • Job Scheduling with Dependencies: The next question involved tackling job scheduling when jobs have dependencies. I discussed using topological sort and how the presence of a loop would make the problem unsolvable, outlining my strategy to handle this.

The interviewer seemed pleased with my responses.

After another two days, I received an email stating I had cleared all rounds, with only a director round remaining (described as similar to a standard HM round). However, I ultimately declined the offer as I decided not to proceed further.

Overall, my experience was positive. The HR team was very accommodating and adjusted interview times promptly upon my request. Interviewers were friendly and provided ample time for me to think through and articulate my approaches.

Interview Questions (5)

Q1
Find Median from Data Stream
Data Structures & AlgorithmsHard

Given a stream of integers, design a data structure that supports adding new integers and finding the median of all elements so far.

Q2
LRU Cache
Data Structures & AlgorithmsMedium

Implement the LRU Cache data structure. Design a data structure that follows the constraints of a Least Recently Used (LRU) cache. Implement the LRUCache class: LRUCache(int capacity) initializes the LRU cache with positive size capacity. int get(int key) Return the value of the key if the key exists, otherwise return -1. void put(int key, int value) Update the value of the key if the key exists. Otherwise, add the key-value pair to the cache. If the number of keys exceeds the capacity from this operation, evict the least recently used key.

Q3
Friends Of Appropriate Ages
Data Structures & AlgorithmsMedium

There are n persons on a social media website, and they are numbered from 0 to n - 1. You are given an integer array ages where ages[i] is the age of the i^th person. A person x will not send a friend request to a person y (and vice versa) if any of the following conditions are true: age[y] <= 0.5 * age[x] + 7 OR age[y] > age[x] OR age[y] > 100 AND age[x] < 100. Otherwise, x will send a friend request to y. Note that if x sends a request to y, y will not necessarily send a request to x. Also, a person cannot send a friend request to themself. Return the total number of friend requests sent.

Q4
Minimum Time to Complete All Jobs with Two Schedulers
Data Structures & AlgorithmsMedium

Given an array of integers representing the time required to complete each job. You have two schedulers, and each scheduler can perform one task at a time. Determine the minimum time in which all jobs can be completed.

Q5
Job Scheduling with Dependencies
Data Structures & AlgorithmsMedium

How would you schedule jobs if they have dependencies on each other? Consider how to handle the existence of a loop in dependencies.

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!