Adobe interview experience | Noida | 7 yrs exp | Sr. Software Engineer | Offer accepted |
Summary
I recently interviewed at Adobe for a Senior Software Engineer position in Noida, leveraging my 7 years of experience. The interview process covered multiple technical rounds including coding, concurrency, system design, and a hiring manager discussion, and I was ultimately extended an offer.
Full Experience
My Adobe Interview Experience
I recently went through the interview process at Adobe for a Senior Software Engineer role. The process consisted of several rounds, which I found to be quite comprehensive and technically challenging. I've slightly modified the questions due to NDA.
1. Coding Round
This round involved two coding problems:
- The first problem was based on Reverse Nodes in k-Group, but with an interesting twist. The interviewer asked me to reverse nodes in alternating sets of size
xandy. For example, I needed to reversexnodes, then reverseynodes, and so on. - The second problem involved building an auto-complete system based on frequency. Given product names and their frequencies, I had to return the top 3 product names that matched a given prefix, sorted by frequency. The interviewer suggested a similar problem to consider was Longest Common Suffix Queries, but the core problem was distinct.
2. Concurrency Round
Adobe has a dedicated round focused on multi-threading, which I found quite in-depth. I was tasked with creating a task scheduler that supports two main functionalities:
- Single execution: Tasks should be executed once at a given start time, or as soon as a thread becomes available.
- Periodic execution: Tasks needed to be executed repeatedly after a given delay, for a specified number of iterations.
Initially, I proposed a min-heap solution where worker threads would continuously poll for tasks. However, the interviewer specifically guided me to implement a solution using Java's wait(), notify(), and notifyAll() methods. We also had a detailed discussion about the usage and implications of volatile and synchronized keywords in Java.
3. System Design Round
The system design problem involved designing a comprehensive webinar platform. The platform needed to cater to three types of licenses: Silver, Gold, and Platinum. Each license tier would determine:
- The maximum number of participants allowed per individual webinar.
- The overall participant limit for all ongoing webinars a user could host simultaneously.
For instance, a Gold license would permit 100 participants per webinar and a total of 300 participants across all of a user's active webinars. Additionally, the platform had a global constraint of 60,000 active users that needed to be accounted for in the design.
4. Hiring Manager Round
This round was more technical than I had anticipated. The hiring manager presented a real-world problem their team was facing: scaling a legacy monolithic system. The system was originally built for a maximum of 100,000 users, but now they needed to scale it to 1 million users. The critical constraint was that the existing monolith couldn't be modified. I proposed an approach where we could deploy 10 instances of the monolith, with each handling 100,000 users. An intermediate microservice would be responsible for directing users to the correct instance using consistent hashing based on the user's email. To ensure uniqueness, the user ID from the monolith would be combined with the instance number.
Interview Questions (5)
Design an auto-complete system that, given a list of product names and their corresponding frequencies, returns the top 3 product names matching a given prefix, sorted by frequency in descending order.
Design and implement a multi-threaded task scheduler that supports two types of execution: single execution (tasks run once at a given start time or when a thread is available) and periodic execution (tasks run repeatedly after a delay for a specified number of iterations). The implementation must utilize wait(), notify(), and notifyAll() for synchronization. Additionally, discuss the use of volatile and synchronized keywords.
Design a scalable webinar platform that supports Silver, Gold, and Platinum license tiers. Each license dictates the maximum number of participants per individual webinar and the total participant limit across all ongoing webinars for a user. For example, a Gold license allows 100 participants per webinar and a total of 300 participants across all webinars. The platform also has a global limit of 60,000 active users.
Given a legacy monolithic system built for a maximum of 100,000 users, design a solution to scale it to 1 million users. The critical constraint is that the monolith itself cannot be modified. Propose an architecture and strategy to achieve this scaling.
Preparation Tips
For my preparation details and strategies, I referenced my Google interview experience blog, which outlines my study approach.