Summary
I recently interviewed for the MTS-2 role at Adobe, completing four rounds focused on DSA, LLD, and behavioral aspects. Despite clearing the initial rounds, I ultimately received a rejection after one of my LLD rounds didn't go as well as planned.
Full Experience
I recently went through the interview process for an Adobe MTS-2 role. After an initial call from HR, she scheduled my first two technical rounds for the following week.
Round 1: DSA
This round focused on Data Structures and Algorithms. I was asked two specific tree-related problems. The first involved finding the minimum time for a message to reach all employees in a hierarchical organization with the CEO as the root, where messages are passed in parallel from parent to child. The second was a variation where messages were passed sequentially, with a time increment for each successive child (e.g., CEO at t=0, first child at t=1, second at t=2). I provided solutions for both questions and coded them out, and the interviewer seemed satisfied with my performance.
Round 2: LLD+DSA
This round combined Low-Level Design with some DSA elements. The main task was to implement an an in-memory file system, including core functions like ls, mkdir, addFile, and getFile. I successfully coded a working solution for this. Following this, the interviewer asked how I would modify the code if the data type of the file content changed (I had initially assumed it to be a string). This part was essentially a question about Java generic datatypes. I cleared both these rounds and received confirmation for the next two rounds.
Round 3: LLD
This round was dedicated to Low-Level Design. I was tasked with designing a warehouse system where a warehouse contains multiple spaces, and these spaces are then rented to firms. The design needed to handle optimal space allocation and be able to process orders for items within the warehouse. Unfortunately, this round did not go as well as the previous ones, and I believe this round ultimately led to my rejection.
Round 4: HM round
The Hiring Manager round was less technical. He mostly asked about some of my resume projects and then delved into a few theoretical Springboot questions, as Springboot was part of the job description. Finally, he asked some behavioral questions. This round lasted about 40 minutes and, overall, I felt it went quite well.
Verdict: I received a rejection a few days later.
Interview Questions (4)
Given a tree hierarchy of an organization with the CEO as the root, find the minimum time for a message to reach all employees. Messages are passed from parent to child in parallel.
Same question as the previous one, but now messages are passed sequentially. Suppose the CEO receives the message at t=0, then the first employee under the CEO will receive it at t=1, and for the second employee it will be t=2, and so on.
Implement an in-memory file system with support for files and directories. Include core implementation functions like ls, mkdir, addFile, and getFile. Additionally, I was asked how I would modify the code if the data type of the content of a file changed (I had initially assumed it to be a string), essentially a question on Java generic datatypes.
Design a warehouse system where a warehouse contains multiple spaces, and these spaces are then rented to firms. The system needs to optimally allocate these spaces and be able to process orders for items stored within the warehouse.
Summary
I recently interviewed at Adobe for a CS1 role, an experience that unfortunately concluded with a rejection. The interview process was comprehensive, spanning multiple technical rounds focused on data structures, algorithms, system design, and core Java concepts.
Full Experience
I recently had an interview experience with Adobe for a CS1 role. I have 4 years of experience and was interviewing for their ALM Org. The process involved three distinct rounds, each testing different facets of my technical and behavioral skills.
Round 1 (Technical)
This round focused on data structures and algorithms. I was presented with a problem related to identifying active users within a sliding time window from a continuous stream of application logs. I had to implement a function that would report the number of unique users active in the last 5 minutes based on their event timestamps.Round 2 (Technical)
The second technical round was quite diverse. It started with a LeetCode problem: 'Most Stones Removed with Same Row or Column'. Following that, we delved into core Java concepts. Questions included handling concurrency when multiple threads modify the same data structure (like List, Array, or Map), and the differences between shallow and deep copies of objects, requiring examples. The discussion then shifted to SQL and database architecture. I was asked about ways to establish connections to an SQL server, how to identify and improve slow-running SQL queries, and details about JDBC, including writing code for its usage. We also discussed SQL database consistency, master-slave architecture, and data isolation.Round 3 (System Design & Behavioral)
The final round was a mix of system design and behavioral questions. I was asked to describe my most complex project, draw its High-Level Design (HLD), and answer follow-up questions. They probed into situations where I might have had a design conflict with a senior SDE and how I resolved it. We also discussed my approach to designing solutions. Finally, the behavioral part covered standard questions like 'Why Adobe?' and 'Why are you looking for a change?'. A significant portion of this round was dedicated to designing the detailed schema for a 'BookMyShow' type application, including navigating the entire flow of finding a movie ticket and outlining the necessary table schemas step-by-step.Interview Questions (10)
You are building an analytics component that processes a continuous stream of application logs in real time. Each log record represents a user activity event within the system.
Input:
You receive a stream of log entries, each represented as a tuple: (timestamp, userId, eventType)
where:
timestamp — an integer representing the event time in seconds (increasing over time).
userId — a string or integer identifying the user who performed the event.
eventType — a string describing the type of event (e.g., 'login', 'view', 'click', etc.).
Task:
Implement a function that processes this event stream and, at any given point in time, reports the number of unique users active in the last 5 minutes.
A user is considered active if they have generated at least one event within the past 5 minutes relative to the current event’s timestamp.
Discussion on handling multiple threads attempting to modify the same data structure (list/array/map) concurrently in Java, and strategies to address potential concurrency issues.
Explain the concepts of shallow and deep copy of objects in Java, providing illustrative examples for each.
This section covered various aspects of SQL and database architecture, including:
- Ways of establishing a connection to an SQL server.
- Methods to identify and improve slow-running SQL queries.
- Details about JDBC, including writing code examples.
- Discussion on SQL database consistency.
- Master-slave architecture and consistency models.
- Concepts of data isolation.
Describe your most complex project, including drawing its High-Level Design (HLD) and answering subsequent questions about the design.
Describe a situation where you had a conflict in design with a senior software development engineer and how you handled it.
Discuss the key considerations and principles you apply when designing a technical approach or solution.
Explain your motivations for wanting to join Adobe and the reasons behind seeking a career change.
Detailed schema design for a 'BookMyShow' type application, covering the entire flow of finding and booking a movie ticket, along with the step-by-step table schemas required at each stage.
Summary
I recently interviewed for the MTS 2 role at Adobe, going through six challenging rounds including technical discussions on DSA, system design, and C++ concepts, culminating in behavioral rounds with the hiring manager and director, eventually receiving an offer.
Full Experience
I recently had my interview experience for the Adobe MTS 2 role, which spanned a total of six rounds and took two months to complete.
ROUND 1: Technical Interview
This round involved a medium-level question primarily focused on the Disjoint Set Union (DSU) data structure, followed by several follow-up questions to delve deeper into my understanding.
ROUND 2: Technical Interview - Toughest Round
This was by far the toughest round for me. It covered a wide array of in-depth topics:
- Extensive questions on Multithreading.
- Detailed discussion on B+ trees.
- Problems related to Bipartite graphs.
- Questions on Virtual Destructors in C++: what they are, why they're needed, and how they function.
- The infamous Diamond Problem in C++.
There was a significant number of questions from these topics, pushing my knowledge boundaries.
ROUND 3: Technical Interview
This round also had a strong focus on C++ concepts. Key areas included:
- Numerous C++ questions.
- A problem based on the Two-Pointer technique.
- Questions regarding Connected Components in graphs.
- One Low-Level Design (LLD) question: designing a garbage collector in C++.
ROUND 4: Technical Interview
Similar to previous rounds, this one also heavily featured C++ questions. A lot of focus was placed on Smart Pointers. Additionally, I faced one question that required a Backtracking approach.
ROUND 5: Hiring Manager Round
Having successfully navigated four technical rounds, this round was purely behavioral. The Hiring Manager posed many tricky questions, which I tried to answer as diplomatically as possible. I must admit, I fumbled quite a bit due to panic, but I tried my best to maintain composure.
ROUND 6: Director Round
In stark contrast to the previous rounds, especially Round 2, this was the easiest. I had a very pleasant and insightful discussion with the Director, who seemed like a genuinely nice person – a rare trait to find at such a senior position. After this discussion, I felt quite confident about receiving an offer.
True to my feeling, after two days, the HR informed me that I had successfully cleared all rounds! I was absolutely thrilled to receive the offer.
Interview Questions (12)
A medium-level question related to the Disjoint Set Union (DSU) data structure.
Questions on advanced multithreading concepts, synchronization primitives, and their practical applications.
Questions related to the structure, operations (insertion, deletion, search), and use cases of B+ trees, particularly in database indexing.
A problem related to bipartite graphs, potentially involving properties, detection, or algorithms applicable to them.
Explanation of what a virtual destructor is, why it is necessary in polymorphic hierarchies to prevent resource leaks, and how it functions internally.
Discussion and resolution of the diamond problem in C++ multiple inheritance, including virtual inheritance.
A problem involving finding connected components in a graph or similar data structure, potentially using algorithms like DFS or BFS.
An Low-Level Design (LLD) question focused on designing and outlining the implementation of a garbage collector in C++.
In-depth questions on smart pointers (e.g., std::unique_ptr, std::shared_ptr, std::weak_ptr), their uses, benefits, ownership semantics, and potential pitfalls.
A problem requiring a backtracking algorithm for its solution, typically involving exploring all possible paths to find a solution or all solutions.
Various behavioral questions, likely focused on past experiences, conflict resolution, teamwork, handling failure, and problem-solving approaches under pressure.
A discussion-based round with the director, likely covering broader career goals, leadership qualities, company culture fit, and high-level technical insights.
Summary
I interviewed for an MTS-2 role at Adobe after receiving a referral. The process included rounds on DSA, LLD, and system design, where I encountered various algorithmic and design challenges, but ultimately received a rejection.
Full Experience
Round 1: Data Structures & Algorithms
I was presented with two questions. The first problem asked me to minimize the sum of array elements after performing a division operation K times. I solved this LeetCode easy question using a PriorityQueue, achieving a time complexity of O(N log N) and space complexity of O(N).
The second question was a slight variation of the classic Knapsack Problem, which I approached with a 2D DP solution and some optimizations, resulting in O(N) time and O(1) space complexity.
Round 2: Low-Level Design (LLD)
In this round, I was asked to design a configuration management service, detailing the class designs, attributes, methods, and appropriate design patterns.
Round 3: Low-Level Design (LLD)
This round also focused on LLD and included two questions. The first was to design an auto-complete search system that predicts Top K elements based on search frequency. I tackled this problem using a Trie data structure with some variations, identifying it as a LeetCode hard question. The second question involved designing the Java implementations for Linux commands like mkdir, ls, and delete for files and directories. I used a Tree Data Structure for this, but unfortunately, I could only complete one function within the given time.
Despite my efforts, the final verdict was a rejection.
Interview Questions (4)
Given an array of integers, you can perform the following sequence of operations K times: 1. Fetch an element from the array. 2. Divide it by 2 (ceil division). 3. Put the element back into the array. The goal is to minimize the sum of all elements finally in the array after K operations.
Design a configuration management service. I needed to share the class designs, attributes, methods, and design patterns.
Design an auto-complete search system with Top K elements as predictions. The Top-K should be based on the frequency of search.
Design the Java implementations for Linux commands related to file and directory creation, navigation, and deletion (e.g., mkdir, ls, delete).
Summary
Secured a Machine Learning Engineer (MLE) role at Adobe after a multi-round interview process. The interview included a mix of technical design, coding, system design, and behavioral rounds.
Full Experience
As a Data Scientist/MLE with 3+ years of experience and a B.Tech from IIT (non-circuital branch), I went through a structured interview process at Adobe. The first round was an end-to-end design question focusing on image + text (document-type) data, requiring a complete pipeline to predict aspect ratio from the given data/document. The second round included a Python coding question followed by a deep dive into LLMs, transformers, and attention mechanisms. The third round was a managerial discussion on projects, teamwork, and behavioral questions. The fourth round involved a system design question to create a color suggestion system, along with team and work-related discussions. I was offered the position and will share compensation details in another post soon.
Summary
I interviewed for a Senior Android Design Engineer position on the Spectrum Design Team at Adobe and was unfortunately ghosted after the third round.
Full Experience
My interview process for a Senior Android Design Engineer role on the Spectrum Design Team at Adobe consisted of three rounds.
Round 1: Hiring Manager Round
This round was with a very friendly Hiring Manager. We discussed my previous experiences, with a particular focus on Jetpack Compose and my experience with Design Systems. The manager was especially interested in the interoperability between View systems and Compose.
Round 2: Android Coding
In this coding round, the interviewer asked me to implement a Compose function. The question revolved around drawing objects on the screen and ensuring they were retained correctly during orientation changes. Key concepts discussed included remember, rememberSaveable, and Custom Saver.
Round 3: Android Coding
For this coding round, I was allowed to use Android Studio with auto-complete, which was helpful. The core problem was about retrieving data from a given endpoint and then efficiently populating that data into a list view.
Throughout the coding rounds, the focus was heavily on Android Jetpack Compose View concepts such as Stable and Immutable states, as well as performance considerations for views, including efficient data handling, pagination, and lazy loading. There were no DSA (Data Structures & Algorithms) rounds.
Interview Questions (2)
Implement a Jetpack Compose function that draws objects on the screen. The key challenge is to ensure that these drawn objects and their state are correctly retained and restored when the device undergoes an orientation change. Concepts like remember, rememberSaveable, and Custom Saver are highly relevant.
Develop an Android application feature that retrieves data from a given API endpoint. Once the data is successfully fetched, it should be efficiently populated and displayed within a list view (e.g., using a RecyclerView or LazyColumn in Compose).
Summary
I interviewed with Adobe for an MTS2 C++ role on August 26th, and despite the interview going well, I haven't received any further updates regarding my application.
Full Experience
I had my first interview round for an MTS2 C++ position at Adobe on August 26th. The interview felt positive, and I believe I performed well during the session. However, since then, there has been no communication or notification from their side regarding the outcome or next steps.
Interview Questions (2)
I was asked to solve the problem of finding the K closest points to the origin (0,0) in a given set of points.
I was questioned extensively on C++ concepts including Smart Pointers, specifically Unique Pointers and Shared Pointers. The discussion also covered general Memory Management, Structures, Classes, Constructors, and Destructors.
Summary
I interviewed for a CS1 position at Adobe, experiencing three rounds. The first round involved DSA and API design, which seemed to disappoint the interviewer. After navigating some HR challenges, I progressed to a successful second DSA round. However, the third round was cancelled due to a no-show from the interviewer and ongoing HR communication issues, leaving my application status in limbo.
Full Experience
I applied for the CS1 position through Adobe's career site. About 15 days later, I received a call from HR to schedule an interview.
Round 1 (DSA)
The first round focused on Data Structures and Algorithms. I was asked a variation of the Max water trapped problem. I was able to code the solution efficiently, from a brute-force approach to the most optimal one, within 20 minutes, including a proper dry run. The interviewer then asked me to write edge cases, even after I explained that my code inherently covered them. I eventually added a specific edge case condition, but the interviewer drilled me on C++ internals related to vector size checks (e.g.,v.size()<=2 to v.size()-2<=0), which I found challenging to answer point-by-point.Following this, I was given a Design problem. I needed to design three APIs:
Get(id), Add(id,name), and Delete(id), all requiring O(1) time complexity. I proposed a Hashing solution, but the interviewer disagreed, citing potential collisions that could degrade performance to O(n). Overall, the interviewer didn't seem satisfied with my performance in this round.After this, there was a silent period. I tried contacting HR multiple times. Eventually, she picked up, and I explained the situation. She agreed to move me to the second round.
Round 2 (DSA)
This round was much better. I had a very good discussion with the interviewer. I was asked to Reverse words in a sentence, carefully handling spaces. I solved it efficiently in exact O(n) time by iterating from the end of the sentence. Towards the end, the interviewer asked a time zone-related question: 'Suppose you are in India and the time server is in the USA, how would you overcome latency?' I proposed multiple approaches, and the interviewer seemed satisfied with my answers.Round 3
I joined the call on time for the third round, but the interviewer never showed up, even after waiting for almost 15 minutes. I tried calling HR again, but she wasn't picking up. After some time, I received a call back and explained the situation. She told me she would call me back in 5-10 minutes and asked me to leave the meeting, which I did. I waited for an hour, but no call back, so I called again, but still no answer.The next day, there was no response until evening. I called again, and HR picked up but astonishingly asked, 'Who is this?' It was truly disheartening, as it indicated they hadn't even processed my status or knew who I was. I re-explained the entire situation. She said they would re-conduct the round, and I'm currently waiting to see how it goes.
I wish for luck that the hiring team responds in a timely manner!
Interview Questions (4)
Design a solution for the Max Water Trapped problem. The problem involves calculating the maximum amount of water that can be trapped between vertical bars of varying heights. Implement the solution from a brute-force approach to the most optimal one, ensuring proper dry runs and handling edge cases.
Design a system with three APIs:
Get(id): Retrieve an item by its ID.Add(id, name): Add a new item with an ID and name.Delete(id): Remove an item by its ID.
Reverse the order of words in a given sentence. Ensure that spaces are handled correctly (e.g., multiple spaces, leading/trailing spaces). For example, 'the sky is blue' should become 'blue is sky the'.
Suppose you are in India and the time server is located in the USA. How would you design a system or strategy to overcome or mitigate the latency challenges when synchronizing time or performing time-sensitive operations?
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)
Given a stream of integers, design a data structure that supports adding new integers and finding the median of all elements so far.
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.
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.
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.
How would you schedule jobs if they have dependencies on each other? Consider how to handle the existence of a loop in dependencies.
Summary
I recently completed the interview process for the Computer Scientist II role at Adobe and received an offer. The process included an online coding assessment, a live coding and CS fundamentals round, low-level design, high-level design, and a hiring manager interview.
Full Experience
Hi everyone, I recently completed the interview process for the Computer Scientist II role at Adobe and wanted to share my experience. I have around 8 years of experience in backend development, working with technologies like Java, Spring Boot, Kafka, Redis, and AWS. I’ve been leading a backend team for the past couple of years and was referred internally for the Noida office.
Interview Process Overview:
Round 1: Online Coding Assessment This was hosted on HackerRank. There were two medium-level DSA questions (one based on sliding window and one involving graph traversal) and a short design-based coding task to implement an LRU cache. I focused on writing clean and modular code and completed all three with optimal or near-optimal approaches.
Round 2: Live Coding + CS Fundamentals This round started with a coding problem that was a variation of the merge intervals question. I walked through my approach, discussed edge cases, and iterated with the interviewer. We also had a quick discussion on system fundamentals — threads vs processes, memory paging, database indexing, and REST API basics. The conversation was friendly and didn’t go too deep; it felt more like a warm-up for the design-focused rounds ahead.
Round 3: Low-Level Design (LLD) Prompt: Design a Notification System supporting Email, SMS, and Push. I approached this by defining clear interfaces for Notifier and NotificationChannel, and used the strategy pattern to support multiple channels. I created a central NotificationService that handled orchestration. We discussed extending it with support for retries, rate-limiting, and asynchronous execution using Java's ExecutorService. I also explained how I’d unit test the logic and handle dependency injection. The interviewer appreciated the clarity and asked how I’d integrate a message queue like Kafka down the line.
Round 4: High-Level Design (HLD) Prompt: Design a scalable file storage system (similar to Dropbox or Google Drive Lite). I started by defining basic functional requirements such as file upload/download, link sharing, and optional versioning. I broke the system into services: API Gateway, Auth Service, File Upload Service, Metadata Store, Link Generator, and Object Storage. We discussed chunked uploads, deduplication using content hashes, and storing metadata in RDS with Redis caching. We also went over monitoring, retry handling, consistency guarantees, and security via signed URLs. The interviewer pushed me on trade-offs and scaling decisions but kept it collaborative throughout.
Round 5: Hiring Manager Round This was more conversational and focused on my past projects, how I handle production issues, mentoring responsibilities, and experiences with cross-functional teams. I spoke about a few systems I had built end-to-end, decisions I had to defend in design reviews, and my role in driving architectural changes. The hiring manager also explained how Adobe’s teams are structured, what the CS2 role typically involves, and what they expect from someone at this level — primarily strong ownership, technical depth, and mentoring junior engineers.
Offer and Outcome: I received the offer about a week later. The role was for Computer Scientist II at the Noida office.
If you’re preparing for a CS2-level role at Adobe or a similar company, I’d recommend spending most of your time on LLD and HLD. Practice open-ended design questions, review your own past system decisions, and be ready to talk through them in detail. DSA is still useful but not the main focus.
Hope this helps someone who’s preparing.
For those curious — I got referred through a combination of platforms like LinkedIn and https://boostmyreferral.com. If you're actively looking, exploring referral networks definitely helps open doors, especially for roles with internal referral bias.
Interview Questions (4)
A short design-based coding task to implement an LRU cache.
A coding problem that was a variation of the merge intervals question.
Design a Notification System supporting Email, SMS, and Push. I approached this by defining clear interfaces for Notifier and NotificationChannel, and used the strategy pattern to support multiple channels. I created a central NotificationService that handled orchestration. We discussed extending it with support for retries, rate-limiting, and asynchronous execution using Java's ExecutorService. I also explained how I’d unit test the logic and handle dependency injection. The interviewer appreciated the clarity and asked how I’d integrate a message queue like Kafka down the line.
Design a scalable file storage system (similar to Dropbox or Google Drive Lite). I started by defining basic functional requirements such as file upload/download, link sharing, and optional versioning. I broke the system into services: API Gateway, Auth Service, File Upload Service, Metadata Store, Link Generator, and Object Storage. We discussed chunked uploads, deduplication using content hashes, and storing metadata in RDS with Redis caching. We also went over monitoring, retry handling, consistency guarantees, and security via signed URLs. The interviewer pushed me on trade-offs and scaling decisions but kept it collaborative throughout.
Preparation Tips
If you’re preparing for a CS2-level role at Adobe or a similar company, I’d recommend spending most of your time on LLD and HLD. Practice open-ended design questions, review your own past system decisions, and be ready to talk through them in detail. DSA is still useful but not the main focus.
Hope this helps someone who’s preparing.
Summary
I had an interview experience at Adobe for the Computer Scientist 1 role in Noida. Despite solving technical problems, the process was marked by extreme disorganization, repeated reschedules, an unusual question about my Chrome search history, and an interviewer's resistance to my optimal solution, ultimately ending in rejection and ghosting from HR.
Full Experience
Some interview experiences help you grow. Others help you develop patience. This one helped me question reality.
It began like any other opportunity — a call from HR for the Computer Scientist 1 role. She outlined a standard process: 4–5 technical rounds, including interactions with a Manager and a Director.
I was optimistic. I shouldn’t have been.
Round 1: DSA + C++ Fundamentals
The interview was rescheduled by an hour.
It began with some classic C++ theory:
Difference between pointer and reference
What is a stack overflow? Can it happen without recursion?
What is heap memory?
**DSA Problems:
- House Robber – Leetcode**
2) A string-to-integer conversion problem with edge-case handling:
Ignore leading/trailing spaces
Only valid if all characters are digits or a leading '-'
Handle overflows (return INT_MAX if invalid)
Cannot assume fixed integer size (compilor-dependent, some use 2 Bytes some use 4 Bytes of integer)
I solved both, clean and clear.
And then came the plot twist: “Can you please click on your Chrome search bar and show me your recent search history?”
Yes, really.
Apparently, cracking DSA problems live isn't enough. The real test is whether you've Googled too much lately. I half-expected a pop quiz on my Amazon order history next.
Round 2: A Masterclass in Mismanagement
This round would’ve been funny — if it wasn’t real. It was rescheduled four times, each for a different reason:
-
Interviewer had a health issue , rescheduled.
-
I joined on time, waited 30 minutes, no one showed ,HR was unreachable via call or email Hours later: “It’s rescheduled again.”
-
Interviewer was “busy” , rescheduled again
-
HR wasn’t sure whether the interviewer was busy or not , rescheduled again 🤯
It felt like I was part of a mockumentary on corporate disarray.
After all that chaos, the actual round started.
Quick experience chat, then two DSA problems:
1) Count of Smaller Numbers After Self — solved via stack
2) https://leetcode.com/problems/container-with-most-water/description/ — I used the optimal two-pointer approach
What happened next made me question if I was being tested on code — or on my ability to deal with intellectual stubbornness.
The interviewer seemed dead set on a stack-based solution . I explained my approach using multiple test cases, walked through logic, and offered alternate examples. Still, the same questions came again — not with curiosity, but resistance.
It was clear: I hadn’t misunderstood the problem — I had outpaced her expectations. And maybe, unintentionally, her ego.
She closed with a lecture on how "interviewers know all approaches" and that "candidates should just listen."
I waited to ask follow-up questions, but she cut the call with a cold “bye” and muted herself. I was left speaking into silence — and then, the screen.
Post-Interview: The Final Vanish
Days later, a rejection email quietly landed. I reached out for feedback — the HR literally cut my calls everytime(called multiple HRs). I emailed again. No response. Just… silence.
No clarity. No closure. Just a strange emptiness — the kind only a truly broken process can leave behind.
Interview Questions (7)
What is the difference between a pointer and a reference in C++?
What is a stack overflow? Can it happen without recursion?
What is heap memory?
Leetcode problem: House Robber.
A string-to-integer conversion problem with edge-case handling: Ignore leading/trailing spaces. Only valid if all characters are digits or a leading '-'. Handle overflows (return INT_MAX if invalid). Cannot assume fixed integer size (compiler-dependent, some use 2 Bytes, some use 4 Bytes for integer).
Count of Smaller Numbers After Self.
Summary
I interviewed at Adobe for a frontend MTS-2 role, clearing all five rounds and receiving an offer which I accepted due to my 2 years and 10 months of experience.
Full Experience
Background I’m currently a frontend developer at a fintech startup with 2 years and 10 months of experience. I recently interviewed at Adobe for the CS-1 role. I cleared all five rounds with positive feedback, but since CS-1 requires a minimum of 4 years of experience, I was offered the MTS-2 role instead, which I accepted.
Round 1: JavaScript Fundamentals This round focused on JS core concepts like closures, the event loop, async behavior, and context binding. Coding questions:
- Implement a debounce function
- Flatten a deeply nested object using dot notation
- Compose async functions with chaining support (
composeAsync) We also talked about memory leaks in large React apps, garbage collection, and retry strategies for flaky APIs. The feedback was positive.
Round 2: React Implementation I was asked to build a nested comment section with support for replies, like/dislike, auto-saving drafts, and keyboard accessibility. Follow-up questions included:
- Custom hook for infinite scroll with cursor-based pagination
- Optimizing re-renders using
React.memo,useCallback, and virtualization - Handling large lists and conditional rendering for better performance The interviewer appreciated the way I structured and explained the solution.
Round 3: Frontend System Design I had to design a content management dashboard with real-time updates and access control. We discussed:
- Component-level architecture
- Polling vs WebSocket trade-offs
- Caching strategies
- List virtualization
- Handling offline mode and sync conflicts
- Tracking frontend performance using tools like Sentry and Web Vitals Feedback from this round was strong.
Round 4: Manager Round The first part of the round focused on my current work, team dynamics, and expectations from Adobe. DSA questions:
- Search in a 2D sorted matrix
- Follow-up: Replace the found element and restore sorted order with minimal operations
- Hard DP problem: Given a grid with obstacles, find the number of unique paths from top-left to bottom-right, with at most one obstacle allowed to be removed I solved the matrix problem completely and walked through the DP approach verbally for the unique paths question. The manager was satisfied with my reasoning.
Round 5: Director Round We had a casual discussion about my projects, interests, and why I wanted to join Adobe. DSA problem: Reverse nodes in k-group in a linked list Follow-up: Modify to solve using iterative method with O(1) space Bonus DP question (asked verbally): Given a string, find the minimum number of cuts needed to make all substrings palindromes (Palindrome Partitioning II) I gave a detailed breakdown of the approach using bottom-up DP and space optimizations. The director appreciated the clarity.
Final Outcome All rounds were positive. Since I had just under 3 years of experience, Adobe moved ahead with the MTS-2 offer instead of CS-1. I accepted it as the team, scope of work, and growth path felt right.
Interview Questions (12)
Implement a debounce function.
Flatten a deeply nested object using dot notation.
Compose async functions with chaining support (composeAsync).
Build a nested comment section with support for replies, like/dislike, auto-saving drafts, and keyboard accessibility.
Design or discuss a custom hook for infinite scroll with cursor-based pagination.
Design a content management dashboard with real-time updates and access control.
Search for an element in a 2D sorted matrix.
Follow-up to 'Search in a 2D Sorted Matrix': Replace the found element and restore sorted order with minimal operations.
Given a grid with obstacles, find the number of unique paths from top-left to bottom-right, with at most one obstacle allowed to be removed.
Reverse nodes in k-group in a linked list.
Follow-up to 'Reverse Nodes in k-Group in Linked List': Modify to solve using iterative method with O(1) space.
Given a string, find the minimum number of cuts needed to make all substrings palindromes.
Summary
I interviewed for Adobe (CS-1) and was selected after a comprehensive 5-round process that included Data Structures & Algorithms, Low-Level Design, High-Level Design, managerial discussions, and a director round. The entire process spanned three weeks.
Full Experience
Round 1(DSA):
This round was primarily focused on DSA. Started with intro and questions on projects from resume. Interviewer asked 1 medium Leetcode problem with working code on Hackerrank. Coded with optimal approach & edge cases. Then asked minimum cost to cut sticks problem, for which I explained and told that this is standard DP problem. So he changed question to create binary tree using preorder and inorder traversal. Explained approach but didn't ask for code. Then was asked 1 more leetcode medium question. Explained approach but wasn't able to write complete working code due to time constraints but interviewer was satisfied. In end, he asked on how to handle multi-concurrency in java.
Round 2(Design):
LLD round on how to design Train ticket booking(IRCTC). Several use cases like book trains between stations, find trains, how to assign seats, routes, letting users book tickets if user dropped in between and seat is vacant post certain station etc. Majorly started from DB schema and how overall usecses would work via sql queries.
Round 3(Design):
LLD round on how to create Checkout system after adding items to cart. Should handle authentication and authorization for all API calls. Started with entities and was asked for Producton ready code. Wrote modular services with abstraction, interfaces. Used patterns, asked for more patterns so that this could be improved. Explained on that part. Interviewer was satisfied. Didn't ask to run the code.
Round 4(Managerial Round): The interview started with the introduction. We had discussions around my project and several questions on it. Then it was HLD and LLD round on how to schedule meetings on google calender. Input: N users having vacant meeting slots. Schedule a meeting so that all/max users are available. It was more of how to approach the problem. Started with usecases, Schema design, SQL queries to power usecases and mix of Merge intervals algorithm.
Round 5(Director round): Started with intro. Discussed how previous interviews went, discussed questions on projects. Behavioural questions like why Adobe, challenging thinks I worked upon etc. Went pretty well.
Overall it was a good interview experience. The overall process took 3 weeks. Accepted the offer.
Overall Verdict: Selected
Feel free to add comments if you want to ask something. Will add compensation details soon.
Interview Questions (7)
The interviewer asked the 'minimum cost to cut sticks' problem.
Create a binary tree using preorder and inorder traversal.
How to handle multi-concurrency in Java.
Design a Train ticket booking system (IRCTC). Use cases included booking trains between stations, finding trains, assigning seats, managing routes, and handling scenarios where users drop off and seats become vacant post certain stations. The discussion mainly focused on DB schema and how overall use cases would work via SQL queries.
Design a Checkout system after adding items to the cart. It should handle authentication and authorization for all API calls. The design started with entities, and I was asked for production-ready code, writing modular services with abstraction and interfaces. Patterns were also discussed for improvement.
Design a meeting scheduler similar to Google Calendar. Input: N users having vacant meeting slots. The goal was to schedule a meeting so that all or the maximum number of users are available. The approach covered use cases, schema design, SQL queries to power use cases, and incorporated a mix of the Merge Intervals algorithm.
Behavioral questions included 'Why Adobe?' and 'Challenging things I worked upon'.
Summary
I interviewed at Adobe for a CS-1 role and was eventually offered the MTS-2 role due to falling short of the experience requirement, clearing all five rounds with positive feedback and accepting the offer.
Full Experience
Background - Currently working as a frontend engineer at one of India’s leading quick-commerce companies with 2 years and 11 months of experience.
I interviewed at Adobe for a CS-1 (Computer Scientist 1) role. I cleared all five rounds with positive feedback, but due to my years of experience falling short of their CS-1 requirement (minimum 4 years), I was eventually offered the MTS-2 (Member of Technical Staff - 2) role instead.
Round-1
(JS Fundamentals and Coding)
This round focused on core JS concepts:
Topics: Closures, this context, call/apply/bind, event loop, etc.
Problem 1: Based on closure
Problem 2: Related to prototype chaining
We also discussed web security and frontend performance optimizations.
Feedback: Positive
-> It was a positive feedback
Round-2
(React machine coding round)
I was asked to:
Build a custom hook to support pagination with hasNext, cursor, pageSize, etc.
Implement infinite scrolling where nextPage is triggered on scroll end.
I completed it within 45 minutes. The interviewer was happy with the result.
We then had a casual chat about Adobe’s culture, which was really helpful and positive.
-> It was again positive feedback
Round-3
(Web system design round)
This was divided in two halfs
In first half i need to design a app which will sort of config driven
Had discussion on BFF layer, pros and cons, how we can achieve, how we can optimize that by using caching and all
Second half, she asked me to design facebook feed page
I approached it step-by-step:1. Functional & non-functional requirements
2. MVC architecture
3. BFF and API interfaces
4. Real-time data with sockets or polling
5. Rendering optimizations
6. Accessibility concerns
The interviewer was from the Acrobat Android team, so we went deep into the BFF integration aspect.
-> Again a positive feedback
Round-4
(Manager Round)
first half -> More about my work, which team i am going to join, hows the culture and what is my expectations
second half -> 1 Dsa problem
Search in 2D sorted matrix
was able to solve it in 15 mins, Then he extended the problem by saying: after finding the element, I need to replace it with a new number, and after that, the sorted order of the matrix must be maintained with the minimum number of operations.
I was able to discuss about how i can approach it optimially, he was satisified by the verbal approach and asked me to dry run once
-> Positive feedback and hr asked me if i am available for the director round on the same day, i was ready so i said yes
Round-5
(Director round)
It was pretty chill round
Discussion on my projects, why i want to join adobe, what is motivation at work daily, and he tell me more about the team and the people
After that he asked me one DSA problem
Reverse linked list in k group, i wrote down the code in js
The HR called the next day with highly positive feedback.
However, they informed me that I’d be offered the MTS-2 position instead of CS-1 due to my YOE being just under 3 years (CS-1 requires 4+ years minimum).
Though initially it felt odd (as I had interviewed for CS-1 and cleared all rounds), I was still happy to accept the offer and excited to be part of Adobe. 🎉
Interview Questions (7)
Build a custom hook to support pagination with hasNext, cursor, pageSize, etc.
Implement infinite scrolling where nextPage is triggered on scroll end.
Design an application that is configurable via a configuration system.
Design a Facebook feed page.
You are given an m x n integer matrix matrix with the following two properties: Each row is sorted in non-decreasing order. The first integer of each row is greater than the last integer of the previous row. Given an integer target, return true if target is in matrix or false otherwise. You must write a solution in O(log(m * n)) time complexity.
Given a 2D sorted matrix, after finding an element, replace it with a new number, and then maintain the sorted order of the matrix with the minimum number of operations.
Preparation Tips
If you're preparing for frontend interviews or targeting product companies like Adobe, I’d highly recommend brushing up on:
- JS fundamentals
- React + custom hooks
- System design (esp. BFF patterns)
- Core DSA problems (LeetCode mediums)
Summary
I had a frustrating interview experience with Adobe where the interviewer struggled to understand my solutions for a problem similar to Jump Game II, even after I optimized it from O(n^2) to O(n).
Full Experience
I appeared for an interview with Adobe few days ago.
The interviewer herself has no idea how the question has to be solved.
She kept on asking random questiond around the logic and even though i pointed out multiple times she keeps coming with invalid input for the question.
I gave her brute force which was working for all the scenarios except her invalid ones, with O(n*n) TC.
Then i optimized the solution to O(n), for which also she was stuck with invalid test cases only.
I clearly told her multiple times this was not within the given questions constraint and in order to handle those scenarios the whole question approach will be changed.
Still, suggested her the variation that will be possible to accomodate her changes and told the approach with the optimized tc.
Didn't expected such an experience from Adobe.
Question was some variation of https://leetcode.com/problems/jump-game-ii/description/
Summary
I encountered a Data Structures & Algorithms problem during an interview at Adobe, which involved finding the maximum jumps to reach the end of an array.
Full Experience
You have been given an array and you are at index 0.
print the maximum jumps too reach the end
Ex: - [2, 3, 1, 1, 4] -> 2->3->4
Ex: - [5, 1, 1, 4, 2, 2, 1]-> 5->4->1
TC: - O(N)
sc: - O(N) for vector
Interview Questions (1)
You have been given an array and you are at index 0.
print the maximum jumps too reach the end
Ex: - [2, 3, 1, 1, 4] -> 2->3->4
Ex: - [5, 1, 1, 4, 2, 2, 1]-> 5->4->1
TC: - O(N)
sc: - O(N) for vector
Summary
I applied for the MTS-2 Java role at Adobe and had a virtual interview. The first round was a DSA elimination round, where I was asked two LeetCode problems. I was rejected after this round.
Full Experience
Exp : 3 Years
Application Process: Applied on Instahyre
Virtual Interview -
Round 1- DSA
Question-1
https://leetcode.com/problems/majority-element/description/
Question-2
https://leetcode.com/problems/count-unreachable-pairs-of-nodes-in-an-undirected-graph/
I had 2 more rounds scheduled later for that day but didn't happen as this round was elimination round. Most optimal space & time solution was expected. Code should be runnable and pass the test cases.
Verdict : Rejected
Interview Questions (2)
Summary
I interviewed for a Computer Scientist 1 role at Adobe in Bangalore, going through four technical and managerial rounds. Despite receiving positive feedback, I was informed that an internal candidate was selected, and the recruiter is attempting to align me with another team.
Full Experience
College : Tier 1.5
Current Experience : 4 years and 10 months at MNC
Team I was interviewing for - Illustrator
Round 1 Technical Feedback - positive:
This round focused mainly on DSA and C++. For the DSA part pseudo code was needed not the working code.
DSA questions were as follows -
- Buy and Sell Stock - and its further variations Buy and Sell Stock II, Buy and Sell Stock III.
- House Robber - and its variation House Robber II, .
- Single Number - and its variation Single Number III (difficult to arrive at if you haven't practiced bit manipulation. I had done this question earlier, so knew the concept behind it.)
Then there were C++ questions related to mutex locks and a code snippet to print a specific order of output from 2 different functions in a multi-threaded environment. I had to apply the mutex locks to do this. This round went very well.
Round 2 Technical Feedback - positive:
Some questions regarding unique_ptr and move semantics. 1 questions regarding the output of a code snippet. I had to fix it. It was related to unique_ptr and move semantics Some questions on memory managerment.
- Find Cousins of a node in a binary tree - I was able to propose 1 pass solution. Mix of pseudo and working code was required.
Then the inteviewer asked to design an elevator system (more on the logic side rather than high level design) which is time efficient as well as energy efficient. I gathered the requirements. Wrote downt the use cases/scenarios. Explained them.
This round also went pretty well.
Round 3 Manager(Techno Managerial) Feedback - positive:
Asked about my projects a bit. Problems faced, how did you solve them, etc. There were some C++ questions - regarding memory management, etc. Asked me one DSA question-
Then there were C++ questions regarding singleton class. Write a class where each object has a unique ID. Copying/assigning an abject should also lead to unique ID. Could not implement it fully.
This round went well apart from the last question.
Round 4 Director(Techno Managerial):
The round was supposed to take place at 10 AM. The interviewer didn't join till 10:15. I called the recruiter, I was told that the interviewer won't be able to join. As I was leaving for office, I recieved a call that can you join now, interviewer is available. I joined at 10:35, the interviewer joined at 10:45 or 10:50.
After that everything was in a rush. Asked about my projects a bit. Problems faced, how did you solve them, etc.
Then asked the 3 priests and 3 devils puzzle. He just wanted the steps. Asked me to solve it and then "just tell me the steps, don't tell me the result after every step".
Then he showed me a feature of the Illustrator software. Asked me to implement it. I was able to write something. I wasn't sure how much was it correct. The interviewer seemed a bit satisfied with my approach though.
Verdict
Didn't receive any feedback for a week. The recruiter kept on saying that she hasn't received any feedback. After one week I called again, the recruiter said that yout feedback is positive but the team has identified a candidate internally (WTAF). I was so pissed. The recruiter then said that she'll try to align me with some other team as my feedback had been positive. Only a 30 minutes director round would be needed more if she finds a team. It has been a week since then. She said that she doesn't have any updates as of yet and she'll update me when there is any change.
TL;DR:
Adobe made me go through 5-6 hours of interview process just to tell that although my feedback was positive but they have internally identified a candidate. The recruiter is trying to find some other team but hasn't received any update(I don't know how much truth is there to this but I'm now just waiting).
Too much frustrated as this has happened to me twice now in a span of two weeks. The other experience - https://leetcode.com/discuss/post/6811285/oracle-epm-senior-software-developer-ban-lsd3/
Interview Questions (15)
A code snippet was provided, and I had to apply mutex locks to print a specific order of output from 2 different functions in a multi-threaded environment.
A code snippet related to unique_ptr and move semantics was provided, and I had to fix its output.
Find Cousins of a node in a binary tree.
Design an elevator system focusing on logic, aiming for time and energy efficiency. I gathered requirements, wrote down use cases/scenarios, and explained them.
Design a class where each object has a unique ID. Copying/assigning an object should also lead to a unique ID.
Solve the Three Priests and Three Devils puzzle. The interviewer wanted only the steps, not the result after every step.
The interviewer showed me a feature of the Illustrator software and asked me to implement it. I wrote something, but I wasn't sure how much was it correct.
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)
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.
Explain the differences between an abstract class and an interface in Java, and demonstrate how to implement an interface.
Can an abstract class implement two interfaces in Java? Explain and provide reasoning.
Discuss and demonstrate different ways to create threads in Java, including extending the Thread class, implementing the Runnable interface, and implementing the Callable interface.
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.
Explain different types of SQL JOINs (e.g., INNER, LEFT, RIGHT, FULL OUTER) and describe the differences between them with examples.
Explain the process of how a server runs in Node.js and describe the fundamentals of the HTTP protocol.
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.
Summary
I interviewed for the MTS 2 role at Adobe in Noida, successfully completing four rounds focused on DSA, C++ fundamentals, system design, and project discussions, ultimately receiving an offer.
Full Experience
Round 1: This round was primarily focused on DSA.
- Trapping Rain Water: https://leetcode.com/problems/trapping-rain-water/
- Given an OBJ_ID(key) which is really long number and cannot be represented in primtive types like long long, int, etc. Implement a data structure which performs get, insert and delete in constant time. Keep in mind that don't use unordered_map since in worst case it can go till O(n).
Note: In second question, I was stuck on the unordered_map approach and after a lot of discussion with the interviewer why it would not work and the possible scnearios. The trie approach hit me and I discussed that with the interviewer and he was satisfied.
There were also very basic questions around C++ fundamentals.
Round 2: At the start of the interview, I was bombarded with a lot of questions around data types, in which part of the memory are static, global variables stored, smart and raw pointers comparison. Some coding questions:
- Given a number n, find the number of trailing zeroes at the end od n factorial.
- Give a working code where using a raw pointer is leading to a memory leak and then using a smart pointer fixes it.
- https://leetcode.com/problems/coin-change/description/
Round 3(Managerial Round): The interview started with the introduction. We had discussions around my project and what was my role in it. Then we jumped onto the coding questions:
- https://leetcode.com/problems/intersection-of-two-linked-lists/ (Immediately gave the approach and interviewer asked not to code it and jumped to next question)
- The scenario is something similar to above and the point is now you have large number of linked lists and they can merge at any point with any linked list. Keep in mind that interviewer was completely against using any extra space, by which I mean is O(n) and time Complexity of O(n) was expected. Return the vector<vector> which merge at some point. (PS: I think this was a tricky question if not seen beforehand, solution would be to store the tail and the correspoding list in an unordered_map. I initially started thinking into a graphical/tree approach. Took me a while to come back and think simple). After this, there was discussion around AI which was something general.
Round 4(Directorial Round): In depth project discussion based on the technicalties and how specific things were handled. Design the Acrobat Desktop file system. I asked some clasrifying questions and scope of the problem. Was able to quickly implement it and it ended fairly early.
Overall it was a good interview experience. The overall process took a week for me.
Overall Verdict: Selected
Interview Questions (9)
Given an OBJ_ID(key) which is really long number and cannot be represented in primitive types like long long, int, etc. Implement a data structure which performs get, insert and delete in constant time. Keep in mind that don't use unordered_map since in worst case it can go till O(n).
Questions around data types, in which part of the memory are static, global variables stored, smart and raw pointers comparison.
Given a number n, find the number of trailing zeroes at the end of n factorial.
Give a working code where using a raw pointer is leading to a memory leak and then using a smart pointer fixes it.
The scenario is something similar to above and the point is now you have large number of linked lists and they can merge at any point with any linked list. Keep in mind that interviewer was completely against using any extra space, by which I mean is O(n) and time Complexity of O(n) was expected. Return the vector<vector> which merge at some point.
Design the Acrobat Desktop file system. I asked some clasrifying questions and scope of the problem. Was able to quickly implement it and it ended fairly early.
Summary
I detailed my multi-round interview process for an MTS-2 role at Adobe, covering Data Structures & Algorithms, Low-Level Design, and a Hiring Manager round, ultimately leading to my selection for the position.
Full Experience
Hi community,
From long time I have been reading leetcode interview experience section but i guess this is the time to contribute.
College: Tier 1
Current Organsation: PBC(Startup)
YOE: 2 years 1 month
Recently an Adobe recruiter reached out to me and for MTS-2 role and she mentioned that all the rounds will be in single day only as it is a hiring drive.
Round 1: Problem Solving(DSA)
Given an array of words and an array of sentences, calculate how many sentences can be created by replacing any word with one of its anagrams.Note: • Two words are said to be anagrams of each other if one can be created by rearranging the letters of another word, using all the original letters exactly once.
wordSet = ['listen', 'silent', 'it', 'is'] sentences = 'listen it is silent', 'silent it is silent'
wordSet = ['cat', 'act', 'is'] sentences = 'cat is tac', 'act tac is cat'
Write the countSentences function in the editor below.
countSentences has the following parameters: • string wordSet[n]: an array of strings • string sentences[m]: an array of strings
Returns: • int[]: an array of m integers that denote the number of sentences that can be formed from each sentence
Question 2:
Imagine you are designing the organizational hierarchy of a large company. In this structure, each node represents a department, and the edges represent direct managerial relationships between departments. • The company consists of n departments, labeled from 0 to n - 1. • You are given n - 1 manager-subordinate relationships in the form of an array edges, where each element [a_i, b_i] indicates that department a_i is the direct manager of department b_i, or vice versa. This structure forms a tree (i.e., there are no circular managerial chains).Task: Your goal is to choose the most efficient department to serve as the central management hub for the entire company. The height of the hierarchy represents the longest managerial chain (in terms of reporting lines) from the central management department to the most distant department. In a well-designed organizational structure, you want the central management department to be as close as possible to all other departments, minimizing the distance (in terms of reporting lines) to any department.
Objective: You need to identify which departments can serve as the best central management hubs. These are the departments that, when selected as the central hub, result in the shortest longest reporting chain to the most distant department. This ensures that communication and decision-making processes are as efficient as possible.
Output: Return a list of all the departments (node labels) that can act as the best central management hubs for the company. The answer can be returned in any order.
Input: n = 4, edges = [[1,0],[1,2],[1,3]] Output: [1]
Input: n = 6, edges = [[3,0],[3,1],[3,2],[3,4],[5,4]] Output: [3,4]
I answered both of them and within 10 minutes i got email to appear for
Round 2: Problem Solving(DSA)
Question 1:
Imagine you are designing the organizational hierarchy of a large company. In this structure, each node represents a department, and the edges represent direct managerial relationships between departments. • The company consists of n departments, labeled from 0 to n - 1. • You are given n - 1 manager-subordinate relationships in the form of an array edges, where each element [a_i, b_i] indicates that department a_i is the direct manager of department b_i, or vice versa. This structure forms a tree (i.e., there are no circular managerial chains).
Task: Your goal is to choose the most efficient department to serve as the central management hub for the entire company. The height of the hierarchy represents the longest managerial chain (in terms of reporting lines) from the central management department to the most distant department. In a well-designed organizational structure, you want the central management department to be as close as possible to all other departments, minimizing the distance (in terms of reporting lines) to any department.
Objective: You need to identify which departments can serve as the best central management hubs. These are the departments that, when selected as the central hub, result in the shortest longest reporting chain to the most distant department. This ensures that communication and decision-making processes are as efficient as possible.
Output: Return a list of all the departments (node labels) that can act as the best central management hubs for the company. The answer can be returned in any order.
Input: n = 4, edges = [[1,0],[1,2],[1,3]] Output: [1]
Input: n = 6, edges = [[3,0],[3,1],[3,2],[3,4],[5,4]] Output: [3,4] O(Number of nodes)
Question 2:
Imagine you're working with an e-commerce platform that tracks customer interactions with products. The platform collects data about which products users view, add to their cart, and purchase. As part of the product recommendation system, you need to identify the most popular products, i.e., the products that are viewed the most often.
Problem Statement: Given an array nums representing the product IDs that customers have viewed, and an integer k, you need to identify the k most frequent product IDs. These products are the ones that are viewed most often, and they will be recommended to users.
Example: • Product Views (nums): [1, 2, 3, 1, 1, 4, 2, 2, 5, 6, 2] • k: 3 Output: [2, 1, 3]
Cleared this round as well, within another 10 minutes got call for appearing in another round.
Round 3: LLD Round
Interviewer asked my current organisation project, and said you have to design something like you might have seen in your current organsation.
So design LLD of Notification Service.
The notification will be sent to multiple platform such as SMS,WHATSAPP,PUSH notification.
Discussed the approach,Design patterns I will use and he asked some follow up questions.
Then wrote the high level classes for them , drew a diagram as well.
He asked some question on tracking activity of the user on the notification.
Verdict: Selected
Round 4: HM Round
He asked me some general questions, then asked me some questions related to microservices as I worked too much on them, then asked me why you created this microservice as this can be accomodated in single monolith.
I answered this question but he was not satisfied, as after a point of time he asked me who took the decision of creating this microservice, I told upper management, So he asked me
Tell me about a time when you did not agree with your upper management.
I told him a scenario.
Then he asked me one damn wierd questions on which I went kind of blank.
Design a water bottle.
I was like what dude what you are asking.
Then he gave me some hint, shape, color,material, way of opening closing, capacity these will be there in water bottle, how you will use encapsulation,inheritance in the classes you wrote.
In the end he was not completely satisfied.
Verdict(Self): Lean Hire
Interview Questions (8)
Given an array of words and an array of sentences, calculate how many sentences can be created by replacing any word with one of its anagrams.
Note:
• Two words are said to be anagrams of each other if one can be created by rearranging the letters of another word, using all the original letters exactly once.
wordSet = ['listen', 'silent', 'it', 'is']
sentences = 'listen it is silent', 'silent it is silent'
wordSet = ['cat', 'act', 'is']
sentences = 'cat is tac', 'act tac is cat'
Write the countSentences function in the editor below.
countSentences has the following parameters:
• string wordSet[n]: an array of strings
• string sentences[m]: an array of strings
Returns:
• int[]: an array of m integers that denote the number of sentences that can be formed from each sentence
Imagine you are designing the organizational hierarchy of a large company. In this structure, each node represents a department, and the edges represent direct managerial relationships between departments.
• The company consists of n departments, labeled from 0 to n - 1.
• You are given n - 1 manager-subordinate relationships in the form of an array edges, where each element [a_i, b_i] indicates that department a_i is the direct manager of department b_i, or vice versa. This structure forms a tree (i.e., there are no circular managerial chains).
Task:
Your goal is to choose the most efficient department to serve as the central management hub for the entire company. The height of the hierarchy represents the longest managerial chain (in terms of reporting lines) from the central management department to the most distant department.
In a well-designed organizational structure, you want the central management department to be as close as possible to all other departments, minimizing the distance (in terms of reporting lines) to any department.
Objective:
You need to identify which departments can serve as the best central management hubs. These are the departments that, when selected as the central hub, result in the shortest longest reporting chain to the most distant department. This ensures that communication and decision-making processes are as efficient as possible.
Output:
Return a list of all the departments (node labels) that can act as the best central management hubs for the company. The answer can be returned in any order.
Input: n = 4, edges = [[1,0],[1,2],[1,3]]
Output: [1]
Input: n = 6, edges = [[3,0],[3,1],[3,2],[3,4],[5,4]]
Output: [3,4]
Imagine you are designing the organizational hierarchy of a large company. In this structure, each node represents a department, and the edges represent direct managerial relationships between departments.
• The company consists of n departments, labeled from 0 to n - 1.
• You are given n - 1 manager-subordinate relationships in the form of an array edges, where each element [a_i, b_i] indicates that department a_i is the direct manager of department b_i, or vice versa. This structure forms a tree (i.e., there are no circular managerial chains).
Task:
Your goal is to choose the most efficient department to serve as the central management hub for the entire company. The height of the hierarchy represents the longest managerial chain (in terms of reporting lines) from the central management department to the most distant department.
In a well-designed organizational structure, you want the central management department to be as close as possible to all other departments, minimizing the distance (in terms of reporting lines) to any department.
Objective:
You need to identify which departments can serve as the best central management hubs. These are the departments that, when selected as the central hub, result in the shortest longest reporting chain to the most distant department. This ensures that communication and decision-making processes are as efficient as possible.
Output:
Return a list of all the departments (node labels) that can act as the best central management hubs for the company. The answer can be returned in any order.
Input: n = 4, edges = [[1,0],[1,2],[1,3]]
Output: [1]
Input: n = 6, edges = [[3,0],[3,1],[3,2],[3,4],[5,4]]
Output: [3,4]
O(Number of nodes)
Imagine you're working with an e-commerce platform that tracks customer interactions with products. The platform collects data about which products users view, add to their cart, and purchase. As part of the product recommendation system, you need to identify the most popular products, i.e., the products that are viewed the most often.
Problem Statement:
Given an array nums representing the product IDs that customers have viewed, and an integer k, you need to identify the k most frequent product IDs. These products are the ones that are viewed most often, and they will be recommended to users.
Example:
• Product Views (nums): [1, 2, 3, 1, 1, 4, 2, 2, 5, 6, 2]
• k: 3
Output: [2, 1, 3]
Interviewer asked my current organisation project, and said you have to design something like you might have seen in your current organsation.
So design LLD of Notification Service.
The notification will be sent to multiple platform such as SMS,WHATSAPP,PUSH notification.
He asked me why you created this microservice as this can be accomodated in single monolith.
Tell me about a time when you did not agree with your upper management.
Design a water bottle.
He gave me some hint: shape, color,material, way of opening closing, capacity these will be there in water bottle, how you will use encapsulation,inheritance in the classes you wrote.
Summary
I shared my interview experience with Adobe for a Full Stack Java Developer role, detailing the technical questions asked during the rounds.
Full Experience
Hey LeetCoders! 👋
Following up on my recent Goldman Sachs Java Interview Questions (Link), I wanted to share another experience — this time with Adobe, where I interviewed for a Full Stack Java Developer role.
These are the questions I was asked during the technical rounds:
- How is a thread created in Java?
- How would you maintain concurrency when multiple requests come to your server?
- How do you convert a
HashMapinto aConcurrentHashMap? - What is the difference between class lock, object lock, and method lock in Java?
🧠 Know the answers?
Drop your thoughts and explanations in the comments section below. Let’s create a learning hub for everyone preparing for similar interviews. 💬
🚀 Also check out:
🔗 My Goldman Sachs Java Interview Experience
Happy coding and good luck with your interviews! 🙌
#Adobe #Java #Concurrency #FullStack #InterviewExperience #LeetCode
Let me know if you'd like help cross-posting this to LinkedIn or Medium too!
Interview Questions (4)
How is a thread created in Java?
How would you maintain concurrency when multiple requests come to your server?
How do you convert a HashMap into a ConcurrentHashMap?
What is the difference between class lock, object lock, and method lock in Java?
Summary
I interviewed for the Computer Scientist 1 role at Adobe, focusing on C++, OS, and problem-solving, which included a deep dive into smart pointers and a coding question on Cousins in Binary Tree. Despite completing the coding task, I was rejected.
Full Experience
Technical Interview – Problem Solving, C++, OS
Interviewer Experience: ~19 years
Status: Rejected
Recruiter told : There is no detailed feedback as of now. If there is anything that can be shared, we will make sure to do so as soon as possible.
I don't know what does it mean. It's been more than two days.
C++ Question (15–20 mins)
The interviewer started with a deep dive into C++ smart pointers, specifically focusing on std::unique_ptr and move semantics.
He shared a code snippet and asked:
Will this code compile and work? If not, why? How would you fix it?
We discussed various things around ownership transfer,and how std::move interacts with unique_ptr.
Also, about modern C++ memory management.
Pass by refernece and pass by value.
Coding Question: Cousins in Binary Tree - Given a binary tree and a target node ptr, return all its cousins
I first proposed a 2-pass BFS approach. We then briefly discussed how it could be optimized to a 1-pass BFS by tracking parent and level simultaneously. There was a bit of miscommunication while I was trying to explain the 1-pass version, so the interviewer asked me to code the 2-pass approach, which I completed.
Link to Round 1 Interview Experience : https://leetcode.com/discuss/post/6722120/adobe-computer-scientist-1-round-1-inter-xjos/
Recruiter didn't share any feedback
Interview Questions (2)
The interviewer started with a deep dive into C++ smart pointers, specifically focusing on std::unique_ptr and move semantics. He shared a code snippet and asked: Will this code compile and work? If not, why? How would you fix it? Discussion included ownership transfer, how std::move interacts with unique_ptr, modern C++ memory management, pass by reference, and pass by value.
Given a binary tree and a target node ptr, return all its cousins.
Summary
I interviewed for a Computer Scientist 1 role at Adobe. The interview consisted of rounds on C++ fundamentals, a challenging coding problem, and operating system concepts. I received positive feedback from the recruiter.
Full Experience
Adobe Interview Experience – C++ (CS-1 Role)
YOE: 3
The interviewer started with a quick introduction and then moved on to C++ fundamentals. We discussed:
- vector vs list vs queue: use-cases, internal structure, and time complexity of operations.
- ordered_map (i.e., std::map) vs unordered_map, including internal implementations (Red-Black Tree vs Hash Table).
- What is a VTable and how virtual functions are implemented in C++.
- Implement a Singleton class in C++, covering thread-safety. Asked for some real use case , I tolder Logger.
Coding : I believe it was a hard-level problem. Problem: Minimize the Maximum Beauty of K Subarrays Given an array, divide it into k contiguous non-empty subarrays. The beauty of a subarray is defined as: beauty = max_element × length For each split, compute the maximum beauty among the k subarrays. Among all such splits, return the minimum possible maxium beauty.
I told the approach and coded but couldn't make it work, but he was satisfied with the thought process and approach.
Toward the end, the interviewer switched to OS questions, such as:
What is virtual memory? Paging and Segmentation
Questions based on code snippets: I was asked to analyze a few C++ code pasted in the editor .
Recruiter reached out with positive feedback.
Interview Questions (7)
Discuss use-cases, internal structure, and time complexity of operations for C++ std::vector, std::list, and std::queue.
Discuss std::map (ordered_map) vs std::unordered_map, including their internal implementations (Red-Black Tree vs Hash Table) and performance characteristics.
Explain what a VTable is and how virtual functions are implemented in C++.
Implement a thread-safe Singleton class in C++. Discuss real-world use cases, such as a Logger.
Given an array, divide it into k contiguous non-empty subarrays. The beauty of a subarray is defined as: beauty = max_element × length. For each split, compute the maximum beauty among the k subarrays. Among all such splits, return the minimum possible maximum beauty.
Explain what virtual memory is.
Explain paging and segmentation in operating systems.
Summary
I interviewed for a CS 2 role at Adobe in Noida and was selected. The process involved multiple rounds covering coding, low-level design, C++ concepts, and system design based on real-world scenarios.
Full Experience
Previous Experience: SDE 2 at FAANG (7 YOE)
Recruiter reached out after an Employee Referral. Process took 2 weeks
Round 1 - Coding
Question 1 - https://leetcode.com/problems/nested-list-weight-sum/
You are given a nested list of integers nestedList. Each element is either an integer or a list whose elements may also be integers or other lists.
The depth of an integer is the number of lists that it is inside of. For example, the nested list [100, [20,2], [[3], 2],1] has each integer's value set to its depth.
Return the sum of each integer in nestedList multiplied by its depth. Example 1: Input: nestedList = [[1,1],2, [1,1]] Output: 10
Explanation: Four 1's at depth 2, one 2 at depth 1. 1x2 + 1x2 + 2x1 + 1x2 + 1x2 = 10.
Example 2: Input: nestedList = [1, [4, [6]]] Output: 27 Explanation: 1x1 + 4x2 + 6x3 = 27
Question 2 - https://leetcode.com/problems/valid-palindrome-ii/description/
Round 2 - LLD
Was asked LLD for chess. Had discussions around classes, data members and member functions. Was asked to write the classes and method signatures.
Round 3 - HM Round
- He asked about my most critical project.
- Few C++ thoery questions - null pointer, dangling pointer, void pointer, memory management and smart pointers.
- Few C++ output based questions, like what is the output of this code snippet.
- Few C++ debugging questions - There was a bug in pasted snippet. I had to find out the bug
- Coding question - https://leetcode.com/problems/string-compression/description/
- Coding question - https://leetcode.com/problems/compare-version-numbers/description/ (Same question but the number of dots were fixed to 2)
- In Coding questions, the focus was on running the code on complier. Had to write main functions, input, output, imports everything.
Round 4 - Director Round
- Started with one behavioral questions around my past projects. (10 mins)
- After that - https://leetcode.com/problems/lru-cache/description/ (They didn't asked me directly this question. Gave a real world scenario and had discussion on what algo to use to solve this and then asked me to write the class and methods. Expectation was working code in C++)
Recruiter confirmed next day that I have cleared the interviews.
Interview Questions (11)
You are given a nested list of integers nestedList. Each element is either an integer or a list whose elements may also be integers or other lists.
The depth of an integer is the number of lists that it is inside of. For example, the nested list [100, [20,2], [[3], 2],1] has each integer's value set to its depth.
Return the sum of each integer in nestedList multiplied by its depth. Example 1: Input: nestedList = [[1,1],2, [1,1]] Output: 10
Explanation: Four 1's at depth 2, one 2 at depth 1. 1x2 + 1x2 + 2x1 + 1x2 + 1x2 = 10.
Example 2: Input: nestedList = [1, [4, [6]]] Output: 27 Explanation: 1x1 + 4x2 + 6x3 = 27
Design a low-level system for a chess game. Discuss classes, data members, and member functions. Write down class and method signatures.
Discuss your most critical project.
Questions on C++ concepts including null pointer, dangling pointer, void pointer, memory management, and smart pointers.
Given a C++ code snippet, determine its output.
Identify and debug a bug in a given C++ code snippet.
Behavioral questions related to past projects.
Summary
I interviewed for an SDE-3 Frontend position at Adobe Noida. The process involved three technical rounds covering HTML/CSS, DSA (custom stack with O(1) deletion), and a managerial round with a logic puzzle. Despite clearing all rounds, I received a rejection without feedback.
Full Experience
Adobe SDE-3 Frontend Interview Experience (4 YOE, 75 LPA Expected)
Total Rounds: 3 (All in one go, then Manager Round later) Mode: Entirely virtual – no calls, no role clarity, minimal communication
Recruiter Outreach: Got a cold email from Adobe’s recruiter asking for basic info – CTC, current location, experience, etc., and if I was available that Friday. No intro call, no JD shared, no explanation of the process or expectations.
My Profile:
4+ Years of Experience
Frontend-heavy background
Expected CTC: 75 LPA Previous CTC: 60 LPA
🧪 Technical Rounds (Back-to-back, same day): 1️⃣ HTML/CSS Round (8 mins) Had to recreate a simple figure using plain HTML & CSS. Straightforward if you’ve done basic layouting – wrapped this up quickly.
2️⃣ DSA Round – Leetcode Medium Build a custom Stack with support for deletion at any position in O(1) time. ➡️ Required a Doubly Linked List Solid DSA knowledge and quick debugging helped me solve it within time.
Managerial Round (Delayed & Rescheduled multiple times) Took place several days later due to availability issues.
Discussed my resume briefly.
Ended with a fun logic puzzle about finding the top 3 fastest horses with limited race tracks – standard version of the problem.
Outcome
After clearing all rounds and waiting for updates – got a rejection. No explanation. No feedback. No follow-up call. Nothing.
📝 Final Thoughts:
-
No JD or role clarity upfront.
-
Rejection without reasoning, after completing everything, felt very disrespectful to the candidate’s time from such a big organization
Interview Questions (3)
Had to recreate a simple figure using plain HTML & CSS.
Build a custom Stack with support for deletion at any position in O(1) time. Required a Doubly Linked List.
A fun logic puzzle about finding the top 3 fastest horses with limited race tracks – a standard version of the problem.
Summary
I received an offer for the MTS-2 role at Adobe after a 3-week interview process consisting of four rounds focusing on coding, system design, and project discussions.
Full Experience
Previous Experience: a MNC(2+ Years)
Recruited reached out directly.
Whole process took 3 weeks from the first interview to last.
1st Round: 1 coding question(given i/p arr of len n of all positve numbers. You need to check if you can convert it to a zero array. You are also given a 2d array of queries having elements as (i, j) representing range. This is the range where we will be reducing the numbers in the original array by 1. Return if a zero array could be formed) + question about amazon s3 and some ML questions(due to my ML background)
2nd round: 1 coding question (https://www.naukri.com/code360/problems/the-celebrity-problem_982769) + design a universal query maker.
3rd round: 1 coding question(https://leetcode.com/problems/subsets/description/)+ questions on resume + questions on past projects + creating an api signiture for a chat completion + give positive and negative test cases for the api.(This was the worst round I had)
4th round: 1 coding question( https://leetcode.com/problems/cousins-in-binary-tree/ but instead of a binary tree an N-ary tree was given)
questions about resume, past projects, rough HLD about a basic flask app, behavioral questions. (This was the best round I had)
Verdict: Recieved the call from the recruiter after a 2-3 days with an offer.
Interview Questions (9)
Given an input array of length 'n' of all positive numbers. You need to check if you can convert it to a zero array. You are also given a 2D array of queries having elements as (i, j) representing range. This is the range where we will be reducing the numbers in the original array by 1. Return if a zero array could be formed.
Question about Amazon S3.
The problem can be found at: https://www.naukri.com/code360/problems/the-celebrity-problem_982769
Design a universal query maker.
The problem can be found at: https://leetcode.com/problems/subsets/description/
Creating an API signature for a chat completion.
Give positive and negative test cases for the API.
A variant of the LeetCode problem "Cousins in Binary Tree" (https://leetcode.com/problems/cousins-in-binary-tree/) but instead of a binary tree an N-ary tree was given.
Rough HLD about a basic flask app.
Summary
I interviewed for the MTS-1 role at Adobe, which involved four technical rounds covering data structures, algorithms, core computer science concepts, project discussions, and system design. I successfully cleared all rounds and accepted the offer.
Full Experience
The interview process for the MTS-1 role consisted of four technical rounds, starting with an initial phone screening by HR. The HR representative explained the job profile, collected details on relevant experience, and scheduled the upcoming interviews.
Round 1 and Round 2 were technical interviews focused on data structures, algorithms, and core computer science concepts.
Round 3 was a managerial round, which involved both technical deep-dives and project-related discussions.
Round 4 was the Director's round and interviewer was a senior manager, where both technical knowledge and career motivations were evaluated.
Each round progressively increased in depth and complexity and each one was elimination round. After clearing all rounds, a final confirmation call was made by HR informing the selection for the role.
Interview Questions (14)
A DSA question was asked on finding the length of the longest substring without repeating characters using the sliding window technique, followed by printing either the first or last such substring.
Questions were asked from DBMS (ACID properties, locks, indexing).
Questions were asked from Operating Systems (deadlocks, multithreading).
Questions were asked from Distributed Systems (load balancing).
I was asked to find the diameter of a binary tree, including the class construction.
Conceptual questions on pass-by-reference and how it works in Java and C++.
The interviewer asked the Next Greater Element question along with a detailed dry run.
Topics such as multithreading in Java and C++ were covered.
Topics such as JavaScript’s async/await behavior, and how JS handles asynchronous operations in a single-threaded environment were covered.
The producer-consumer problem and its solutions were discussed.
Questions on REST APIs, HTTPS requests, API design, and API contracts.
A system design question on designing a lift system.
Two DSA questions were asked: KMP Algorithm, which required complete code implementation.
Two DSA questions were asked: Kadane’s Algorithm, which required complete code implementation.
Summary
I had an interview with Adobe Noida for the Computer Scientist 1 role. Despite solving two coding questions, including an optimized version for the second, I was unexpectedly rejected based on feedback that I didn't solve the first and the second wasn't optimized.
Full Experience
I had an interview with Adobe Noida for the role of Computer Scientist 1.
Round 1:
They asked me two questions:
1. https://leetcode.com/problems/spiral-matrix-ii/description/
2. https://leetcode.com/problems/implement-queue-using-stacks/description/
I solved both questions during the interview.
For the first question, the interviewer showed me the full spiral matrix and explained that this is what needs to be printed. I might have misunderstood, and instead of printing the matrix only , i generated the matrix and print the matrix. When I clarified this with him, he said it’s okay since the logic is the same.
For the second question, I initially gave a working solution, but he wasn’t satisfied as it wasn’t optimized. After that, I explained and implemented the optimized version. I even submitted it on LeetCode after the interview and it worked perfectly. It was a slightly different approach from the official solution, but it was optimized.
However, to my surprise, when I reached out to the recruiter, she mentioned the feedback said I didn’t solve the first question and that the second solution wasn’t optimized.
It’s disheartening when things like this happen. I don’t memorize solutions — even for popular problems. I focus on understanding and solving them myself. i have solved 1000+ quesiton on leeetcode still i missed to solved this second question. I don't know whether he was expecting me to solve immediately as it was famous question.
Interview Questions (2)
I was asked to implement a queue using stacks. I initially gave a working solution, but the interviewer wasn’t satisfied as it wasn’t optimized. After that, I explained and implemented the optimized version. I even submitted it on LeetCode after the interview and it worked perfectly. It was a slightly different approach from the official solution, but it was optimized.
Preparation Tips
I don’t memorize solutions — even for popular problems. I focus on understanding and solving them myself. I have solved 1000+ questions on LeetCode.
Summary
I recently interviewed for an SDE-2 C++ Developer role at Adobe. The process involved four rounds: two technical, one hiring manager, and a director round. Despite a smooth and well-organized process, I was ultimately rejected.
Full Experience
Adobe SDE-2(C++) Interview Experience
Recently, my resume was shortlisted for the SDE-2 role at Adobe. The interview process was smooth and well-organized. Within 24 hours I received verdict of prev round and next rounds timings.
There were 4 rounds->
- First two technical
- Third HM(Techno Managerial Round)
- Director Round
Round 1 (Technical Interview 1 hour)
- Design a Logger class
- What is a virtual function( VPtr, Vtable )?
- What is unique_ptr?
- How do you delete a copy constructor?
There are two ways:
- By making the constructor private
- Using the delete keyword
- Function Overloading (with a code example)
- Operator Overloading (with a code example)
- Create static and dynamic objects
Note: You are expected to write code for all the above questions.
Round 2 (Technical Interview 1 hour)
This round covered both conceptual and coding questions:
C++ Basics: Questions on fundamental C++ concepts
- diamond problem and virtual functions
Operating System Concepts: Paging, Mutex, and Semaphore
Coding Problems:
- Mirror Tree
https://leetcode.com/problems/invert-binary-tree/description/ - Given an array, determine if it can be split into two separate arrays such that both have unique frequency distributions.
I gave brute better both approaches and he wants me to code for better one. - KMP Algorithm for String Matching
I gave brute and better both approaches and he was happy with my code as well.
I told about time and space complexities as well.
Hiring Manager (HM) Round 45 minutes
Rate yourself in C++
Justify your rating by giving relevant experience where you individually tackle any problem in your project and solved it too(P.S :This will make good impact).
Discussion on past experience and projects
She asked many questions from resume.
General questions about my approach to problem-solving
Advise: You must know everything you written in your resume.
Final Verdict: ❌ Rejected
Although I didn’t make it this time, the experience was insightful. I will focus on improving my C++ fundamentals and problem-solving skills for future opportunities🚀
Interview Questions (15)
Design a Logger class. You are expected to write code for this question.
Explain what a virtual function is, along with VPtr and Vtable.
Explain what unique_ptr is.
How do you delete a copy constructor? You are expected to write code for this question.
Explain Function Overloading with a code example. You are expected to write code for this question.
Explain Operator Overloading with a code example. You are expected to write code for this question.
Create static and dynamic objects. You are expected to write code for this question.
Questions on fundamental C++ concepts, specifically the diamond problem and virtual functions.
Questions on Operating System Concepts: Paging, Mutex, and Semaphore.
Given an array, determine if it can be split into two separate arrays such that both have unique frequency distributions.
Implement or explain the KMP Algorithm for String Matching.
Rate yourself in C++ and justify your rating by describing relevant individual problem-solving experiences from your projects.
Discussion on past experience and projects from my resume.
General questions about my approach to problem-solving.
Summary
I recently had my first interview experience with Adobe for an MTS 2 JAVA role in Noida, which unfortunately resulted in a rejection. The process involved two problem-solving rounds focusing on data structures, algorithms, and Java concurrency concepts.
Full Experience
I interviewed with Adobe for an MTS 2 JAVA role, coming from a Tier 3 college with 2+ years of experience. This was my first time interviewing with the company.
Round 1 (Problem Solving)
This round started with my introduction, followed by questions about my projects at my current company. After that, I was given two coding problems:- Tell whether at least two non-overlapping increasing subarrays of length
kexist in an array. - Find the maximum length of a subarray such that it contains at least two non-overlapping increasing subarrays.
Round 2 (Problem Solving - Java Focus)
This round delved into more specific Java concepts, particularly around concurrency. The interviewer asked several questions about concurrency, multithreading, race conditions, and the reader-writer problem. Following the conceptual questions, I was asked to implement two problems:- Implement a concurrent HashMap with
get,put, anddeleteoperations. - Given a tree where each node has left, right and parent pointers, implement
lock()andunlock()methods for a node. The condition for locking a node was that all its ancestor nodes and all its descendant nodes must be unlocked.
Despite my efforts, I was not selected for the role.
Interview Questions (4)
Given an array, determine if there exist at least two non-overlapping increasing subarrays of a given length k.
Given an array, find the maximum possible length of a subarray that contains at least two non-overlapping increasing subarrays.
Implement get, put, and delete operations for a concurrent HashMap.
Given a tree where each node has left, right, and parent pointers, implement lock() and unlock() methods for a node. A node can only be locked if all its ancestor nodes and all its descendant nodes are currently unlocked.
Summary
I recently interviewed for a MTS 2 Frontend role at Adobe, undergoing five rounds of interviews focused on JavaScript fundamentals, React, system design, data structures & algorithms, and a machine coding problem. I successfully received an offer.
Full Experience
Hi, this is my first post on any platform sharing my recent interview experience for an MTS 2 Frontend role at Adobe. I went through five rounds, and I'm thrilled to share that I was selected!
Round 1: Technical (Frontend & DS Algo)
This round started with introductions, followed by questions on JavaScript fundamentals. The interviewer presented a scenario to gauge my understanding of the event loop rather than directly asking about it. We also discussed closures and React fundamentals. Towards the end, I was given two data structures and algorithms questions: one related to trees (medium difficulty) and another involving array manipulation (easy-medium).Round 2: Technical (System Design & DS Algo)
After introductions, the discussion shifted to system design, specifically how we handle cache invalidation in my project. I then had to explain the end-to-end process of how our project serves millions of users daily, from deployment to the user's device. We also delved into in-depth questions about frontend optimizations I've implemented. Finally, there was another DS-Algo question, again related to trees (medium problem).Round 3: Hiring Manager (Behavioral & DS Algo)
This was a hiring manager round. After introductions, I was asked to explain one of my projects that I'm most proud of and articulate why. Following this, I faced two more DS-Algo questions: one required me to code the bottom view of a binary tree from scratch, and the other was a binary search-related problem, similar to 'Aggressive Cows'.Round 4: Senior Hiring Manager (Technical & Reasoning)
The senior hiring manager round began with introductions. I was asked to explain my current project in detail. This was followed by a frontend machine coding problem (medium difficulty) in React. After that, a reasoning problem was posed: 'A 4x4x4 cm cube is given; how many 1cm³ cubes can be cut from it?' The follow-up question was, 'If we paint that cube from all sides, how many of the cut cubes would have all 3 sides colored?' Finally, there was one more DS/Algo question related to trees (medium).Round 5: Design & Architect
I had anticipated general system design questions like 'Design WhatsApp' or 'YouTube,' but the round started with a discussion about my previous interview experiences. The interviewer then asked about my project, specifically the impactful changes I was proud of. I had to explain the entire project flow in a drawing tool, essentially creating a high-level design (HLD) of my own project. We discussed various aspects like design choices and potential alternatives. There was also a discussion about why I hadn't used the Lodash library in my project, and I was asked to implement one of its functions. The last problem was to print the Fibonacci sequence without storing any numbers, meaning if I called `fib(10)`, it should print the first 10 Fibonacci numbers without using any storage. I approached this using recursion and some additional logic.Interview Questions (13)
Explain the behavior of the JavaScript event loop when given a specific scenario.
Questions related to JavaScript closures.
Questions related to React fundamentals.
Describe how cache invalidation is performed in your current project.
Explain the end-to-end process of how your project is served to millions of users daily, from deployment to the user's device.
Explain one of your projects that you are proud of and articulate why.
Code the bottom view of a binary tree from scratch.
A binary search related problem, similar to 'Aggressive Cows'.
Explain your current project.
Given a 4x4x4 cm cube, how many 1cm³ cubes can be cut from it? Follow-up: If the original 4x4x4 cube is painted from all sides, how many of the 1cm³ cubes that were cut would have exactly 3 sides colored?
Explain the whole project flow in a drawing tool, creating a high-level design (HLD) of your own project. Discuss impactful changes, design choices, and alternative approaches.
Discuss reasons for not using the Lodash library in your project, then implement one of its functions.
Given a function fib(n), print the first n Fibonacci numbers without storing the numbers anywhere (e.g., in an array or map). For fib(10), it should print the first 10 Fibonacci numbers. Candidate used recursion with extra logic.
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.
Summary
I recently interviewed at Adobe for the MTS 2 role, undergoing four technical rounds that tested my skills in JavaScript fundamentals, system design principles, and core data structures and algorithms.
Full Experience
My interview journey for the MTS 2 role at Adobe consisted of four comprehensive rounds.
Round 1 focused heavily on JavaScript. I was asked about object manipulation using destructuring, creating a polyfill for the Promise.all API, and handling event triggering during scroll and window resize, specifically discussing throttling techniques including naive and timestamp-based implementations.
Round 2 continued with a mix of DSA and JS. I had a problem on finding the Lowest Common Ancestor (LCA) of a Binary Tree. We also discussed Critical Rendering Path (CRP) and asynchronous operations. Further JavaScript concepts like the event loop, objects, call, apply, and bind were covered.
Round 3 began with a data structures question, specifically Level Order Traversal of a Binary Tree. The latter part of this round involved discussions about my past project experiences.
Round 4 was primarily focused on algorithms. I was tasked with reversing words in a long string, finding all direct and indirect flights from a given source to destination, and inverting a Binary Tree.
Interview Questions (11)
Concepts and practical application of JavaScript object manipulation, specifically focusing on destructuring.
Implement a polyfill for the Promise.all API functionality.
Discuss how to handle events triggering on scroll and window resize. Explain throttling, its implementation strategies, including naive and timestamp-based approaches.
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.
Discussion on Critical Rendering Path (CRP) and handling asynchronous operations in web development.
In-depth discussion on core JavaScript concepts including the event loop, objects, and the usage of call, apply, and bind methods.
Perform a level order traversal (breadth-first traversal) of a binary tree.
Discussion about past project experiences, design choices, challenges faced, and lessons learned.
Given a string, reverse the order of words. For example, 'the sky is blue' becomes 'blue is sky the'.
Given a list of flights (direct connections), find all possible flights (direct and indirect) from a given source city to a given destination city.
Invert a binary tree, swapping left and right children for all nodes.
Summary
I successfully navigated the Adobe MTS-2 interview process in Noida, which covered data structures, algorithms, system design, and behavioral aspects, culminating in a job offer for the MTS-2 role.
Full Experience
Adobe MTS 2 Interview Journey
I recently had the opportunity to interview for the MTS-2 role at Adobe in Noida. The process began after HR contacted me via Instahyre regarding an SDE position. Following an initial call, my first technical round was scheduled.
Technical Round 1
This round primarily focused on algorithmic problem-solving and included two challenging questions. The difficulty ranged from medium to hard on LeetCode. First, I was asked to find the longest continuous sequence in an array, a classic problem requiring a strong understanding of array manipulation and dynamic programming. Fortunately, I had encountered and solved this problem previously, which helped me complete it efficiently.
The second question was directly from LeetCode: "Apply Operations to Make Two Strings Equal." This problem tested my string manipulation skills and required an analytical approach to find an optimal solution. We spent about 10 minutes discussing various approaches before I wrote the code, which successfully passed the test cases presented by the interviewer.
Technical Round 2
The second technical round was again centered on Data Structures and Algorithms, with a particular emphasis on modified binary search. The interviewer presented an interesting twist: the mid-point in the binary search was generated by a random function. My task was to write code for numbers that would be searched appropriately with this modified binary search approach. The discussion also included follow-up questions aimed at identifying elements in an array that would be correctly found using this particular binary search method.
EM Round
The third technical round, led by an Engineering Manager, delved into system design and practical scenarios related to my prior job experience. The interviewer asked questions on operating systems to assess my understanding of core concepts and their real-world applications. We also discussed my current job responsibilities and past projects, which provided insight into my professional background. I was asked to elaborate on the system design of WhatsApp, which naturally led to discussions about message queues and scalability challenges. Furthermore, I shared my long-term career goals and explained why Adobe was an ideal fit for my aspirations.
Director Round
The final round was with a Director, starting with general discussions about job-related queries before moving into technical discussions on data structures and system architecture. The conversation began with designing an airline system, focusing on graph theory and complexity analysis. Additionally, we talked about caching mechanisms and on-call support, addressing practical challenges encountered in software development and maintenance. I also shared my perspectives on monitoring tools and request authentication mechanisms, demonstrating my understanding of industry best practices and emerging trends.
Verdict
I later received a call from HR confirming my selection for the MTS-2 role, which was a very satisfying outcome.
Interview Questions (5)
I was asked to find the longest continuous sequence in an array. This is a classic problem requiring a keen understanding of array manipulation and dynamic programming techniques.
I was given the LeetCode problem "Apply Operations to Make Two Strings Equal," which focused on string manipulation and required an analytical approach to devise an optimal solution.
The interviewer introduced a novel twist wherein the mid-point in the binary search was generated by a random function. I was asked to write code for numbers that would be searched appropriately with this modified binary search approach. We also discussed follow-up questions aimed at identifying the elements in an array that would be correctly searched using this modified binary search.
I was asked to elaborate on the system design of WhatsApp. This led to an exploration of message queues and scalability challenges inherent in such a system.
The conversation began with designing an airline system, specifically focusing upon graph theory and complexity analysis.
Summary
I recently interviewed for an SDE2 position at Adobe, but unfortunately, I was rejected. The interview process covered various topics including data structures, algorithms, system design, and core Java concepts, and while I performed well in most areas, a slight mess-up in the system design round ultimately led to my rejection.
Full Experience
My interview process at Adobe consisted of three intense rounds.
Round 1 was focused on Data Structures and Algorithms, along with some system design concepts. I was asked to solve the Best Time to Buy and Sell Stock IV problem, which I managed to solve. Another DSA problem was Amount of Time for Binary Tree to Be Infected, for which I discussed both BFS and DFS approaches. Additionally, there was a discussion about the cons of Microservices over Monolith.
Round 2 was a mix of DSA, SQL, Java internals, and design patterns. I tackled questions on implementing a Thread-Safe LRU Cache and finding the Two-Sum in a sorted Doubly Linked List. I also had to demonstrate my SQL knowledge with a query involving various joins like LEFT OUTER JOIN, where I explained the logic, though I wasn't completely sure about the exact syntax. We discussed why Java doesn't allow two parent classes in inheritance and how to implement a thread-safe Singleton Design Pattern.
Round 3 was purely focused on system design. I was asked about the benefits, features, and USPs of Redis. The main challenge was the Low-Level Design (LLD) of Kafka as a message queue. I successfully discussed and implemented Publisher, Subscriber, and Topic classes using the Observer Design Pattern, but I struggled with implementing the offset logic for multiple subscribers of a topic.
Ultimately, the slight mess-up in Round 3 with the Kafka LLD offset logic led to my rejection. The bar at Adobe is indeed quite high these days.
Interview Questions (10)
Discuss the cons of a microservices architecture compared to a monolithic architecture.
Design and implement a Least Recently Used (LRU) cache that is thread-safe.
Given a sorted doubly linked list, find if there exist two nodes whose sum equals a target value.
Write an SQL query involving combinations of joins, specifically including LEFT OUTER JOIN.
Explain why Java does not support multiple inheritance for classes.
Design and implement the Singleton design pattern in a thread-safe manner.
Discuss the key benefits, features, and unique selling points (USPs) of Redis.
Perform a low-level design of Kafka as a message queue, focusing on Publisher, Subscriber, and Topic classes, potentially using the Observer Design Pattern. Consider implementing offset logic for multiple subscribers.
Summary
I successfully interviewed for a Computer Scientist 1 (SDET) role at Adobe in Bangalore, securing an offer after four technical rounds that covered automation frameworks, data structures, system design, and Python-specific challenges.
Full Experience
I hold a B. Tech. degree from a reputable state-level college. Currently, I'm working as an SDET-2 at a prominent enterprise security & CDN product firm, with approximately 5 years and 4 months of experience.
During my notice period with other offers in hand, a recruiter from Adobe reached out to me for a white box testing role. I dedicated a few days to refreshing my Python skills, and the entire process took about three weeks. I requested the recruiter to expedite the process to help me make a decision regarding my existing offers.
Round 1
A Senior Computer Scientist conducted this round. The focus was primarily on the implementation aspects of both frontend and backend automation frameworks within my current projects. I was asked how I would implement such a framework from scratch using Python. Despite being out of touch with Python for over a year, I explained the latter part reasonably well, and the interviewer delved into fine details. Towards the end, I was presented with the Decode String problem. Having not seen it before, I devised a stack-based solution and coded it up. While a few edge cases failed, the interviewer was satisfied, and we quickly moved on to discussing test cases.
Round 2
Another Computer Scientist 2 led my second round. We began with relational databases, covering topics like DB indices and B-Trees. I provided satisfactory answers, although I hadn't extensively prepared in that area. Following this, I was given a medium-difficulty SQL query question, which I managed to solve after some thought. The round then shifted to a backend framework design problem for a book subscription and online reading service.
I started by outlining the necessary APIs and their payload structures. I explained how to handle various scenarios such as subscription management, integrating payment gateways, and implementing reading limits for non-subscribers. I then detailed my approach using class diagrams to create a backend test framework for the service. The interviewer asked several design-related questions, which I addressed comprehensively. I chose a Java-based design as I felt more comfortable with it in an interview setting compared to Python.
Both the first and second rounds took place on the same day. The recruiter contacted me the next day to schedule another technical round, emphasizing that each round was an eliminator.
Round 3
I believe another Senior Computer Scientist conducted this round. It started with Python-specific questions, where my answers were not entirely spot-on. He then inquired about creating CI/CD pipelines, test reporting metrics, and Jenkins. After that, I was asked to solve a problem involving reading lines from a large file using Python. I provided an answer but struggled with the Python syntax – I later realized I should have leveraged generators for better efficiency. Finally, he asked an easy binary tree question, which I solved using Java.
My performance in the Python section of Round 3 might not have been up to par, so the team took a week to evaluate me alongside other candidates. I proactively asked the recruiter to schedule another technical round if needed. After a week, the recruiter called to schedule the managerial round.
Round 4
This round involved standard managerial questions about my past projects and experiences. I was again asked an API framework design question for a service, which I answered verbally. I also used this opportunity to inquire about the role and other specifics. The call concluded about 20 minutes earlier than scheduled.
The team deliberated for two days on a hire/no-hire decision, noting my strength in Java-based frameworks but relative weakness in Python, which was a requirement for the role. Ultimately, the recruiter informed me that they would like to offer me the position.
I received the offer in October 2022 for the Computer Scientist 1 level in Bangalore. The total compensation package included a base salary of ~30.5L (including Employer PF + Gratuity), signing bonuses of 3L + 3L (second part after 12 months), an Annual Incentive Pay (AIP) of 15% of base (~4.2L), and stock options worth 75k USD over 4 years (~14.8L annually). The total first-year compensation was approximately ~55L, along with standard Adobe benefits. I had previously received offers from Visa, Fi.Money, and PingIdentity, all in the 35-37L ballpark.
I successfully negotiated once, getting the joining bonus and stocks bumped up. The base salary seemed a bit low, but I couldn't negotiate further on it, likely due to not having a similar competing offer that matched Adobe's total compensation.
Interview Questions (4)
Given an encoded string, return its decoded string. The encoding rule is: k[encoded_string], where the encoded_string inside the square brackets is being repeated k times. k is a positive integer. You may assume that the input string is always valid; No extra white spaces, square brackets are well-formed, etc. Furthermore, you may assume that the original data does not contain any digits and that digits are only for repeat numbers, i.e. there are no '3a' or '2[4]' like encodings.
Design the backend framework for a book subscription and online reading service. This includes defining APIs, payload structures, and handling scenarios such as subscription management, payment gateway integration, and reading limits for non-subscribers. Develop a backend test framework for the service.
How would you read lines from a very large file efficiently using Python?
Design an API framework for a service.
Preparation Tips
I took a few days to brush up on Python, which was the main preparation I did for this opportunity.
Summary
I interviewed for the MTS-1 role at Adobe. I successfully completed the first technical round but withdrew my candidacy before the second round because I accepted an offer from another company.
Full Experience
I went through the initial screening process for the MTS-1 position at Adobe. My first technical round focused on problem-solving. I was presented with a classic grid-traversal problem. After successfully navigating that round, I made the decision to withdraw my application before proceeding to subsequent rounds, as I had already secured a position with another firm. Overall, it was a valuable experience.
Interview Questions (1)
Given a grid of n x m dimensions with 0 and 1, where 0 represents a cell you can step on and 1 represents a blocked cell. The task is to return the total number of unique paths one can take to reach the bottom-right corner starting from [0,0].
Summary
I interviewed at Adobe for a CS1 role in Bangalore with 4.5 years of experience and successfully received an offer. The interview process involved multiple technical and behavioral rounds, covering data structures, algorithms, and system design.
Full Experience
I recently interviewed for a CS1 position at Adobe in Bangalore. My experience level is 4.5 years of experience, and I'm pleased to share that I received an offer after completing five rounds.
Round 1: Data Structures & Algorithms
This round focused on my problem-solving skills with two coding challenges. I was given the following problems:Round 2: Data Structures & Algorithms
Similar to the first, this round also consisted of two coding problems designed to test my algorithmic knowledge:Round 3: System Design
This round delved into system design, specifically revolving around a concurrent systems design problem. While the exact problem statement isn't detailed, the discussion covered the architectural aspects of concurrent systems.Round 4: Technical & Behavioral
This was a mixed round where I tackled a specific system design question and also engaged in behavioral discussions. The technical challenge involved designing a mobile plugin, which was quite interesting.Round 5: Behavioral with Director
The final round was a dedicated behavioral interview with a Director, focusing on my past experiences, teamwork, and approach to various situations. Ultimately, I was extended an offer for the CS1 role within the Adobe Creative Cloud team.Interview Questions (4)
There are several cards arranged in a row, and each card has an associated number of points. The points are given in the integer array cardPoints.
In one step, you can take one card from the beginning or from the end of the row. You have to take exactly k cards.
Your score is the sum of the points of the cards you have taken.
Given the integer array cardPoints and the integer k, return the maximum score you can obtain.
Design a Cricbuzz mobile plugin that is installed on a mobile device and keeps on fetching the current score of a given match from the Cricbuzz website.
Summary
I applied for a CS1 role at Adobe via employee referral and underwent a 4-5 week interview process comprising technical, system design, and hiring manager rounds, ultimately resulting in a rejection.
Full Experience
I applied for a CS1 position at Adobe through an employee referral and received an interview call within two weeks. The entire process lasted about 4-5 weeks.
Round 1: Technical
This round focused on data structures and algorithms. I was asked to solve two LeetCode problems: Group Anagrams and Merge Intervals.
Round 2: Technical
Another technical round where I tackled the Median of Two Sorted Arrays problem.
Round 3: System Design
The focus here was on the Low-Level Design (LLD) of a client-side rate limiting library. The interviewer expected me to code a rate-limiting algorithm. I designed and explained a complete, thread-safe solution with a driver class demonstrating client ID-based rate limiting. We then discussed potential test cases for this code, including how to test threaded clients here, etc.
Round 4: Hiring Manager
This round started with extensive discussions about my previous work experience. The interviewer asked some quick questions on concurrency, binary semaphores, and mutexes.
Then, an open-ended question about linear search in an array was posed. I was asked to write an algorithm to search an element in an unsorted array, then modify the loop to be unbounded, and finally, address potential issues without using try/catch blocks. I explained that an unbounded loop would eventually lead to memory issues like stack overflow or integer overflow. I suggested increasing JVM memory or breaking the loop under certain conditions, but acknowledged that the linear search algorithm itself would eventually fail for some test cases. I attempted to use some things like bit manipulations or 'hacks' to control the infinite loop by decrementing the loop variable, but these weren't what the interviewer was looking for. I realized I wasn't clear on their expectations, which I believe was a turning point. Later, typical operational questions followed, such as how I handle conflict, what my manager would say about me, and how I react to not receiving credit for my work. I answered these confidently.
Verdict: Rejected!
Interview Questions (7)
I was tasked with the Low-Level Design (LLD) of a client-side rate limiting library. The interviewer expected me to write and explain the complete, thread-safe code for a rate limiting algorithm with a driver class demonstrating client ID-based rate limiting. We also discussed potential test cases for this code, including how to test threaded clients.
I was given an open-ended question on linear search in an array. First, I had to write an algorithm to search an element in an unsorted array. Then, I was asked to make the loop in this algorithm unbounded. Finally, the challenge was to solve potential issues/errors in this code without using try/catch blocks. The interviewer's main focus was on how try/catch works internally and how to control the unbounded loop effectively without explicit error handling.
I was asked quick questions about concurrency, binary semaphores, and mutexes.
I was asked typical operational questions: how I tackle conflict, what my manager would say about me if the interviewer called them, and how I would react if I didn't get enough credit for my work.
Summary
I interviewed for the MTS 2 role at Adobe in Noida, undergoing five rounds that covered DSA, System Design, and OS questions. Unfortunately, I was rejected due to challenges with the OS questions and a critical mistake in the Lowest Common Ancestor problem.
Full Experience
I had an interview experience at Adobe for the MTS 2 position, holding 1 year and 8 months of experience. The interview process consisted of five rounds, covering various aspects of technical knowledge.
Round 1
This round focused on LeetCode Medium problems. I was given two specific problems: one was the Longest Substring Without Repeating Characters, and the other was Get the Maximum Score. There were also some standard C++ questions.
Round 2
In this round, the interviewer presented a problem involving a running stream of integers. The task was to fetch the rank of an integer, where rank means the count of elements less than the current element. The discussion heavily focused on the choice of data structure and the time complexity implications. I was asked to write the code from scratch.
Round 3
This round involved a system design question: I had to design a movie booking system, specifically outlining the classes I would use and their interactions. Following this, I was asked to solve a problem: given a file, print the last 'n' lines from it. There were also some questions on memory management.
Round 4
The fourth round again involved coding problems. I was asked to solve the Longest Palindromic Substring problem and the Buy Sell Stocks III problem.
Round 5
The final round started with questions on Operating Systems and the time complexity of various sorting algorithms. I then had to solve a problem where, given an array, I needed to find triplets that sum to a given target without sorting the array. The last coding question was about finding the Lowest Common Ancestor (LCA) of a Binary Search Tree (BST).
Ultimately, I was rejected. I struggled to answer the OS questions sufficiently in the last round, and made a stupid mistake by writing the code for the LCA of a general binary tree instead of specifically for a BST. Despite the outcome, the interviewers were very friendly and helpful throughout the process.
Interview Questions (9)
You are given two sorted arrays of distinct integers nums1 and nums2. A valid path is defined as follows: Choose a path that starts at an element in either nums1 or nums2, traverses only along elements present in the same array, and can switch arrays only at a common element. The score is the sum of all unique elements in the chosen path. Return the maximum score you can obtain. Since the answer can be very large, return it modulo 10^9 + 7.
Given a running stream of integers, I was asked to implement a data structure that efficiently fetches the rank of any integer. The rank of an integer is defined as the count of elements less than or equal to the current element in the stream observed so far. The interviewer focused on the choice of data structure and time complexity.
I was asked to design a movie booking system. The focus was specifically on identifying the core classes that would be involved and describing their interactions, rather than a full-fledged system design.
Given a file, I needed to implement a function to efficiently print the last 'n' lines from it.
Given a string s, find the longest palindromic substring in s.
You are allowed to complete at most two transactions. Find the maximum profit.
Given an array of integers, I needed to find all unique triplets such that their sum equals a specific target value, without sorting the array first.
Find the Lowest Common Ancestor (LCA) of two given nodes in a Binary Search Tree (BST).
Summary
I interviewed for the MTS-2 role at Adobe in Noida, successfully clearing all technical and managerial rounds to receive an offer. The interview process focused on a mix of data structures & algorithms, C++, and OS concepts.
Full Experience
My interview journey for the MTS-2 role at Adobe in Noida was insightful. I hold a B.Tech in CS and have 3.5 years of experience as an SDE in a product-based company. The process consisted of four rounds.
Technical Round 1 (1 hr):
This round included questions based on Binary Search, with a specific constraint to use exception handling for certain cases. I also encountered a variation of the chocolate distribution problem. Additionally, the interviewer delved into C++ and OS concepts.
Technical Round 2 (1 hr):
During this round, I was asked to implement a function to copy a linked list with random pointers. I had to write multiple test cases and dry run them until the interviewer was satisfied with my explanation. A significant portion of this round also involved questions on C++ and OS.
Manager Round (40 mins):
I tackled the Balanced Parenthesis Problem and a puzzle involving 100 people in a circle, which is essentially the Josephus Problem, requiring me to write generalized code for it. This round also included more questions on OS.
Director Round (1 hr):
The final round involved some behavioral questions and a discussion about my projects. C++ and OS concepts were revisited. A notable question involved implementing a solution to safely share a variable between multiple threads, similar to the Reader-Writer problem, which I had to compile and run on an IDE.
Overall, my opinion is that Adobe generally asks easy to medium level coding problems, but their primary emphasis is on OOP concepts.
Interview Questions (4)
In this round, I was challenged to implement a function that creates a deep copy of a linked list where each node contains both a 'next' pointer and a 'random' pointer. The task involved not only coding the solution but also demonstrating its correctness by running multiple test cases and dry-running them for the interviewer.
During the Manager Round, I was given the classic problem of determining if a string containing various types of parentheses (e.g., '(', ')', '{', '}', '[', ']') is 'balanced' and valid. I had to provide an efficient solution for this.
I was presented with the famous '100 people in a circle' puzzle, which is a variation of the Josephus Problem. My task was to develop a generalized code solution to determine the survivor given an arbitrary number of people and elimination pattern.
The Director Round included a practical coding challenge: I needed to implement a mechanism to safely share a variable between multiple threads, essentially an application of synchronization primitives related to the Reader-Writer problem. I had to demonstrate the working solution by compiling and running it on an IDE.
Preparation Tips
Based on my experience, for C++ roles at Adobe, a strong understanding of the following topics is crucial:
- C++: Multithreading, virtual functions, smart pointers and their implementations.
- OS: Virtual memory, memory management, deadlocks.
Summary
I recently interviewed for a software engineering position at Adobe in Bengaluru. The interview process spanned four rounds, covering coding, low-level design with multi-threading, and a managerial project deep dive with further coding challenges. I am currently awaiting the final feedback from the directorial round.
Full Experience
Round 1: Coding and Problem Solving
This round focused on my coding and algorithmic skills. The interviewer presented two problems:
- First, I was asked to determine if there exists any contiguous subarray within a given array that sums to zero.
- Following that, the second question built upon the first, requiring me to find the longest contiguous subarray within the array that sums to zero.
Round 2: Low Level Design
This round delved into my object-oriented design capabilities. I was tasked with designing a single entry-exit, single-floor parking lot, emphasizing OOP principles. A follow-up to this question introduced multi-threading, where I had to explain how parking slots would be assigned to multiple vehicles concurrently, testing my knowledge of concurrent data structures, synchronized keywords, and locks.
Round 3: Managerial Round
The managerial round started with a deep dive into my past projects, discussing their architecture, challenges, and my contributions. After the project discussion, I was presented with two more programming questions:
- I needed to find the minimum number of jumps required to reach the end of an array, with a specific instruction to solve it using a greedy approach in O(n) time complexity.
- The second problem involved finding the largest mountain subarray within a given array.
I found it important to maintain extreme calm and composure during this round, as it could become frustrating at times.
Round 4: Directoral Round
I recently completed my directorial round and am currently awaiting feedback. I will update this post once I receive the outcome.
Interview Questions (4)
Design a single entry-exit, single-floor parking lot catering to the Object Oriented Principles. As part-2, the interviewer introduced Multi-threading: how would assigning parking slots to multiple vehicles work concurrently, checking knowledge on Concurrent Data Structures and Synchronized Keywords/Locks.
Summary
I successfully cleared my Adobe Product Intern interview process, which comprised an online assessment, a resume review, and a final video interview with technical questions on OOP, OS, DSA, and coding. I received a selection mail confirming my offer the very next day.
Full Experience
Eligibility Criteria
- CGPA: 60% in 10th, 12th and 70% in UG & PG
- No Standing Arrears
- Pre-Final Year Students
- Degree: B.Tech & M.Tech (All Branches)
Round 1: Online Assessment (MCQ + CODING)
The online assessment was conducted on CoCubes, and it was mandatory to attempt all three tests:
- Cognitive: 20 Questions, 20 min
- Computer Fundamentals: 20 Questions, 20 min
- Coding: 2 Questions, 45 min
- Gamified Assessment: 3 Tasks, 23 min
After this round, out of 600 candidates, only 27 were shortlisted for the Product Profile Interview based on their assessment scores.
Round 2: Resume Review
Next, I was asked to share my resume. An Adobe talent partner reviewed the applications holistically. After a long wait of 12 days, I received an email informing me that I had been chosen for the final interview process.
Round 3: Video Interview
The video interview was conducted on MS Teams. It began with the classic "Tell Me About Yourself" question, for which I was well prepared. Following that, I was asked to discuss the major differences between Compile-Time Polymorphism and Run-Time Polymorphism, which I explained in great detail. I also faced some questions related to Operating Systems, specifically explaining the concept of Paging and Scheduling Algorithms.
Moving on to the programming part, I was asked to share my screen and code on my preferred IDE. The first problem was to convert an Infix Expression to Postfix Expression. The second question was to write the code to Reverse a given Linked List. I successfully solved both coding questions and proceeded further.
Next, I was asked to differentiate between Arrays & Linked Lists. After that, I was presented with a scenario: if I had to write the code for UNDO & REDO functionalities, which Data Structure would I use and why? I answered STACK, explaining it was due to the LIFO principle, and the interviewer seemed quite satisfied. He then moved on to questions about Non-Linear Data Structures like Binary Trees and Binary Search Trees. He also asked about the worst-case form of a BST, to which I replied Skewed Tree. The follow-up question was how to solve this problem, and I mentioned Tree Rotations.
Before the interview concluded, the interviewer asked if I had any questions for him, and then he signed off, wishing me luck.
Result
In just 1 day, I received my selection mail from Adobe for the role of Product Intern '22, and I was incredibly excited. It was an overall incredible process that turned out to be the best thing that happened to me.
Interview Questions (7)
Discuss the major differences between Compile-Time Polymorphism and Run-Time Polymorphism.
Explain the concept of Paging and various Scheduling Algorithms in Operating Systems.
Given an Infix Expression, convert it to a Postfix Expression.
Write code to reverse a given Linked List.
Differentiate between Arrays and Linked Lists, discussing their characteristics, advantages, and disadvantages.
If you had to implement UNDO & REDO functionalities, which Data Structure would you use and why?
What is the worst-case form of a Binary Search Tree (BST), and how can this problem be solved?
Preparation Tips
Tips I shared for preparation:
- Be confident and clear in your answers.
- You cannot master everything, so remain calm before your big day.
- Be honest with whatever you present.
- Practice mock interviews, as they genuinely help.
Summary
I successfully interviewed for a CS2 role at Adobe in Noida, India, covering data structures, algorithms, low-level design, and C++ concepts across multiple rounds, ultimately receiving an offer.
Full Experience
First Round (~1Hr)
I was asked to code standard LeetCode questions with a bit of follow-ups and a code walkthrough. The problems included a LeetCode hard question similar to reversing nodes in a group of K, Course Schedule, and LRU Cache.
Second Round (~50Mins)
In this round, I was grilled on various C++ concepts. The primary focus was on Multi-threading (mutex, condition variable), Smart Pointers, lambda internals, and move semantics. I was also asked to code a multi-threaded program and answer a question based on a priority queue.
Third Round - Low Level Design (~1.5Hr)
This round was with the hiring manager. My task was to design a file explorer within an IDE. I was probed on various design patterns relevant to the problem and asked to write skeleton classes, ensuring the right abstraction. Behavioral questions were also included in this round.
Result & Final Round
I received positive feedback and was scheduled for a director round. The final round consisted of behavioral questions, a discussion on my current work and accomplishments, and some open-ended technical questions. I received an offer.
Interview Questions (6)
There are a total of numCourses courses you have to take, labeled from 0 to numCourses - 1. You are given an array prerequisites where prerequisites[i] = [ai, bi] indicates that you must take course bi first if you want to take course ai. Return true if you can finish all courses. Otherwise, return false.
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.
I was asked to implement a multi-threaded program, likely involving concepts such as mutexes, condition variables, and smart pointers for synchronization and resource management.
I was tasked with designing a file explorer functionality within an Integrated Development Environment (IDE). This involved discussing various design patterns, suitable abstractions, and outlining skeleton classes for the implementation.
I was asked a series of behavioral questions, including discussions on my current work and accomplishments. These questions aimed to assess my soft skills, past experiences, and how I handle various situations.
Summary
I underwent two interview rounds for a C++ developer role at Adobe, which involved LeetCode problems like Jump Game IV and Open the Lock, alongside specific C++ concepts such as class compilation and constructor types.
Full Experience
I recently interviewed for a C++ developer position at Adobe, which consisted of two distinct rounds.
In the first round, I was presented with a problem from LeetCode, specifically Jump Game IV. I attempted to solve this problem but was not able to fully complete it during the interview. Following that, I was given a small C++ question involving class instantiation and asked to identify if it would compile successfully. The code snippet was:
Class A{
}
int main(){
A obj;
A *obj=new A();
}
The second round featured another LeetCode problem, Open the Lock. Additionally, I was questioned about various C++ constructor types and tasked with implementing them for a custom String class.
Interview Questions (4)
Given the following C++ code, determine if it compiles successfully and explain any errors:
Class A{
}
int main(){
A obj;
A *obj=new A();
}
You have a lock with 4 wheels, each wheel has 10 slots '0' - '9'. Each slot can be turned forward or backward. You are given a list of deadends which are combinations that will cause the lock to be permanently locked. You are also given a target combination. Starting from '0000', return the minimum number of turns to reach the target combination, or -1 if it's impossible.
Explain different types of C++ constructors (e.g., default, parameterized, copy, move) and provide an implementation for a custom String class that correctly handles these constructors.
Preparation Tips
Based on my interview experience, future preparation should heavily focus on LeetCode problems, particularly those of medium to hard difficulty. A strong emphasis on graph traversal algorithms like Depth-First Search (DFS) and Breadth-First Search (BFS) is highly recommended, as these topics frequently appeared in the questions I faced.
Summary
I interviewed for the Computer Scientist II role at Adobe in Noida, India, which involved two technical rounds covering C++, data structures, algorithms, system design, and OS concepts. Unfortunately, I didn't receive any feedback after the second round and assume I was rejected.
Full Experience
I recently interviewed for the Computer Scientist II position at Adobe, located in Noida, India. My total experience at the time was over 10 years. The virtual interview was conducted using BlueJean.
Round 1 (1 hour)
The first round covered a mix of probability, puzzles, system design, and data structures:
- We discussed a basic probability question involving biased dice.
- A puzzle based on the Lucky 7 dice game was presented. I was asked about the strategy for this game.
- I was asked to design the classic Snake game, with expectations for both high-level architecture and low-level class diagrams.
- Finally, there was a question involving a BST tree where each node had additional information about the number of children in its left subtree. With limited memory, the interviewer wanted to know how to divide the tree into multiple pages (files/parts) given a maximum number of nodes per page. I implemented a solution using a
getPagemethod, and you can refer to my code via the provided link.
Round 2 (1 hour)
The second round focused heavily on C++ internals, operating system concepts, and more design challenges:
- We discussed move semantics in C++.
- The difference between
std::moveandstd::forwardin C++ was questioned. - I was asked about methods pre-generated by the compiler in C++, specifically regarding C++11 and C++14 standards.
- The interviewer inquired about the
mutablekeyword in C++. - Variadic templates in C++ were also a topic of discussion.
- I had to explain the differences between static linking and dynamic linking.
- The "copy on write" operating system concept was brought up.
- A design problem involved creating a class with the restriction that only two objects of it could be instantiated, followed by a discussion on how to handle this in multi-threaded environments.
- The final question required designing a class for managing meeting room intervals, including methods for adding/deleting intervals and getting the number of rooms, both generally and for a specific time range.
After completing Round 2, I did not receive any feedback call from HR. Based on this, I concluded that I was rejected for the position.
Interview Questions (12)
Describe the concept of move semantics in C++ and its benefits.
Explain the differences between std::move and std::forward in C++ and their appropriate use cases.
Discuss methods automatically generated by the C++ compiler, specifically detailing differences or new features in C++11 and C++14 related to this.
Explain the purpose and usage of the mutable keyword in C++.
Describe variadic templates in C++ and provide examples of their application.
Explain the differences, advantages, and disadvantages of static and dynamic linking.
Describe the 'copy-on-write' optimization concept in operating systems, explaining its benefits and typical use cases.
Design a C++ class such that only a maximum of two objects of that class can be instantiated. Discuss how to handle this in a multi-threaded environment (follow-up).
Design a class to manage meeting room intervals with the following methods:
addInterval: Adds a room if a meeting is ongoing.deleteInterval: Removes a room for a specific time interval.getNumRoom(): Returns the total number of rooms; returns -1 if no meeting is ongoing.getNumRoom(int start, int end): Returns the total number of rooms for a given interval; returns -1 if no meeting.
Summary
I interviewed for the MTS-2 role at Adobe Systems in Noida, India, in August 2019, after being referred by a friend. The process involved five comprehensive rounds focusing on projects and diverse problem-solving, and I ultimately received an offer.
Full Experience
My interview experience for the MTS-2 role at Adobe Systems in Noida, India, was quite positive, with very friendly interviewers throughout. I was referred by a friend for this position.
Round 1 (40-50 min)
- The round started with a discussion about my projects.
- I was given a problem: Given an mn matrix and q queries (a b c d, where (a,b) are top-left and (c,d) are bottom-right coordinates), find the sum of elements in the rectangle for each query.
- Another problem involved a factory with 10 machines, all producing 100g balls except one defective machine producing 90g balls. I had to find the minimum weighings required to identify the defective machine using a weighing machine.
Round 2 (40-50 min)
- Again, the round began with a discussion about my projects.
- I was asked to find the next largest N-bit binary number with the same number of set bits as the original (e.g., 101 -> 110).
- A problem involved rearranging an array of 2n numbers (a1...an, b1...bn) into a1,b1,a2,b2,...an,bn without using extra space.
- There were conceptual questions: What is a constructor? What is a destructor? Follow-up: How to keep track of live objects of a class without using global variables.
- Another array manipulation problem: Given an array a1...an and an index i (1 <= i <= n), reverse the array around that index in-place (e.g., a1..a6, i=3 -> a4,a5,a6,a1,a2,a3).
Round 3 (40-50 min)
- This round also started with a discussion about my projects.
- I was tasked with a problem: Given a binary search tree, multiply all elements by -1, and then arrange the elements to again form a binary search tree.
- I was asked to list all sorting algorithm names and their time complexities. The follow-up question was: Given N sorted elements and M elements being added (M << N), which sorting algorithm would I prefer and why?
Round 4 (40-50 min)
- The first part of this round was a discussion about my projects.
- I was given a binary tree problem: Remove all nodes whose subtree has a sum less than K.
- Another problem involved finding the maximum number of gems I could collect from 'n' hills, where the i-th hill has 'ai' gems, and I couldn't collect from adjacent hills.
- A classic brain teaser: 100 ants are sprinkled on a rod, moving at 1 m/s and reversing direction on collision. Find the total time after which all ants will fall from the rod.
Round 5 (10-15 min)
- The final round was short and focused on a single problem: Write a mathematical expression to find the average of 4 integer numbers, avoiding integer overflow and only returning the integer part of the average (e.g., 3,3,4,3 -> 3).
Interview Questions (12)
Given an m*n matrix and q queries. Each query is of the format 'a b c d', where (a,b) are top-left coordinates and (c,d) are bottom-right coordinates. For each query, find the sum of elements within the rectangle bounded by these coordinates.
A factory has 10 machines, each producing balls weighing 100g. One machine is defective and produces balls weighing 90g. Given a weighing machine, what is the minimum number of weighings required to find the defective machine?
Given an N-bit binary number, find the next largest binary number that has the same number of set bits as the original number. For example: 101 --> 110.
Given an array of 2*n numbers in the format a1,a2,....an,b1,b2,....bn. Rearrange the elements of the array to be a1,b1,a2,b2,a3,b3,.....an,bn, without using extra space.
Explain what a constructor is and what a destructor is. As a follow-up, how would you keep track of live objects of a class without using global variables?
Given an array a1,a2,......an and an index 1 <= i <= n. Reverse (or rotate) the array around that index. For example, if the array is a1, a2, a3, a4, a5, a6 and i = 3, the output should be a4, a5, a6, a1, a2, a3. The operation must be done without using extra space.
Given a binary search tree, multiply all its elements by -1. Then, rearrange the elements to form a new binary search tree.
List all common sorting algorithms and their time complexities. As a follow-up, if you have N sorted elements and M new elements are added (where M is much smaller than N), which sorting algorithm would you prefer to re-sort the array, and why?
Given a binary tree. Remove all nodes whose subtree has sum less than K.
There are 'n' hills on a mountain, and the i-th hill contains 'ai' gems. You can collect all gems from a hill, but you cannot collect gems from adjacent hills. Find the maximum number of gems you can collect.
100 ants are sprinkled on a rod. Ants can move at a speed of 1 m/s. Ants have a peculiar property: they reverse their direction upon collision. Find the total time after which all ants will fall from the rod.
Write a mathematical expression to find the average of four integer numbers, ensuring integer overflow is avoided. Only the integer part of the average is required. For example, for 3, 3, 4, 3, the average is 3.
Summary
I successfully cleared the Adobe MTS-1 interview for the Noida location, which consisted of an online assessment followed by five comprehensive on-site rounds. The interviews covered data structures, algorithms, system design, operating systems, OOPs, and behavioral questions. I was ultimately offered the position.
Full Experience
Status and Background
I was working as an SDE-1 at Samsung Research Institute Delhi and graduated in 2018 with a B. Tech. in Computer Science from NIT Kurukshetra, India. My interview for the MTS-1 position at Adobe Systems in Noida, India took place on May 1, 2019.
1. Online Assessment Test (HackerRank)
The first stage was an online assessment on HackerRank. It comprised:
- 15 aptitude questions (15 mins)
- 5 input-output programs (15 mins)
- 2 programming questions (45 mins)
2. On-site Round 1 - Technical Round (1 Hour)
This round began with a discussion on my projects, including their architecture diagrams. Following that, I was asked several programming and theoretical questions:
- How to sort an array containing 0s and 1s in a single pass with O(n) time and O(1) space complexity.
- A problem to add 1 to a number represented as a singly linked list. Each node represented a digit, with the head pointing to the most significant digit. The challenge was to do this in a single traversal.
- I had to determine the number of different ways to form an N-bit binary number such that no two consecutive 1s occur. For N=3, examples like 101, 010, 000, 001, 100 are valid (output: 5), while 110, 111, 011 are invalid. I wrote a program, but the interviewer mentioned there's also a mathematical formula for it.
- I was asked about the Producer-Consumer problem, including writing pseudo-code. We also discussed semaphores, mutexes, critical sections, and potential deadlock scenarios involving
wait()andsignal()operations.
3. On-site Round 2 - Technical Round (1 Hour)
This round involved a deep dive into one of my projects. The interviewer skillfully transformed the project discussion into a problem and posed many follow-up questions. The core problem was:
How would you represent an image in memory, for example, as a matrix where each cell is a pixel? Considering a monochrome image represented by such a matrix, how would you programmatically draw a line segment on it? This meant filling the cells that the line segment would pass through. I had to account for both axis-aligned and non-aligned line segments and write a program for it. I initially assumed integer endpoints for the line segment and coded accordingly. The interviewer then challenged me on whether the code would work for float/double endpoints and we discussed generalizing the solution. We also covered boundary cases: what if the line segment's endpoints are outside the matrix, or if the segment is only partially inside? For a line segment not aligned to any axis and not bounded by the matrix, I was asked how to find the point where it first enters or exits the matrix.
4. On-site Round 3 - Technical Round (1 Hour)
This round covered a mix of C/C++ fundamentals, data structures, and algorithms:
- Questions on pointers, such as the validity of pointer differences and pass-by-reference in functions.
- What happens when an object of a class is declared and memory is allocated to it?
- Questions on object-oriented programming concepts like inheritance, polymorphism, and virtual functions.
- I was asked to implement a Hash Table with the following APIs:
void insert(int key, int value),void delete(int key),int search(int key), andint getRecentElement(). ThegetRecentElement()API should return the key of the element most recently touched by eitherinsert()orsearch(). All APIs were expected to operate in O(1) time, assuming no duplicate keys. - A problem to search for an element in an array where each consecutive pair of elements differs by exactly 1 (i.e., |A[i] - A[i+1]| = 1 and |A[i-1] - A[i]| = 1).
- Given N threads and single instances of N different types of resources, how would I allocate resources to threads to avoid deadlock and minimize waiting time? This assumed threads could arrive at any time and request any number of resources, without knowing their arrival schedule.
5. On-site Round 4 - Director Round (1 Hour)
This was a broader discussion round:
- We discussed my projects.
- I was asked how to identify whether software I'm about to install on my PC is malware, providing methods for both pre-installation and post-installation.
- Following up on that, I was asked how to identify if the software had deleted or added files to my file system. I suggested comparing the file system's tree structure before and after installation.
- Building on the previous question, I was given two files containing lists of file names (representing states before and after installation) and asked to write pseudocode for a
fileDifference(File A, File B)function to find the differences. - A combinatorics problem: Given an N x N matrix, how many ways are there to reach the top-right corner from the bottom-left, moving only Up, Right, and Up-Right diagonally? I used a dynamic programming approach, but the interviewer prompted me to derive a mathematical formula. (I later learned this relates to Delannoy Numbers).
6. On-site Round 5 - Manager Round (1 Hour)
The final round was with a manager, focusing on problem-solving and logic:
- I had to write a program to convert a number into English word format, specifically using the Indian Currency system (e.g., 1,23,500 to “One Lakh Twenty Three Thousand Five Hundred”, 100 to “One Hundred”).
- Another task was to write a program to check if two given binary trees are mirror images of each other.
Interview Questions (15)
Sort an array containing only 0s and 1s. The solution should operate in a single pass with O(n) time complexity and O(1) space complexity.
Given a singly linked list where each node represents a digit of a number (head is most significant digit), add 1 to this number. The operation should be done in a single traversal.
Given an integer N, find the number of N-bit binary numbers such that no two consecutive 1s occur. For N=3, valid numbers are 101, 010, 000, 001, 100, resulting in an output of 5. The interviewer hinted at a mathematical formula beyond a programmatic solution.
Discuss the Producer-Consumer problem, including pseudo-code. Explain concepts like semaphores, mutexes, and critical sections. Address potential deadlock scenarios with wait() and signal() operations.
Given a monochrome image represented as a matrix of pixels, how would you programmatically draw a line segment on it? This involves filling cells that the line segment passes through. Consider both axis-aligned and non-axis-aligned line segments. Discuss adapting the solution for float/double endpoints and handling various boundary conditions, such as line segments partially or completely outside the matrix. Specifically, how to find entry/exit points if the line is not bounded by the matrix.
Explain the process of declaring an object of a class and how memory is allocated for it.
Implement a Hash Table with insert(key, value), delete(key), search(key) APIs, all expected to be O(1). Additionally, implement getRecentElement() which returns the key of the element most recently touched by either insert() or search(). Assume no duplicate keys.
Given an array where each consecutive pair of elements differs by exactly 1 (i.e., |A[i] - A[i+1]| = 1), search for a given element efficiently.
Given N threads and N single-instance resources, design a resource allocation strategy to avoid deadlocks and minimize waiting time. Threads can request any number of resources at any time, and their arrival is unpredictable.
How would you identify if software you are about to install is malware? Provide methods for identification both before and after installation.
How can you determine if newly installed software has deleted or added files to your file system?
Given two files, File A and File B, each containing a list of file names (representing file systems before and after installation), write pseudocode for a fileDifference(File A, File B) function to find the differences.
Write a program to determine if two given binary trees are mirror images of each other.
Preparation Tips
Interview Preparation Resources
1. Algorithms and Data Structures
- GeeksforGeeks - Data Structures
- LeetCode - Classical interview problems
- Cracking The Coding Interview book - by Gayle (Explains how to solve problems step-by-step in an interview)
2. CS Fundamentals
- GeeksforGeeks - Last Minute Notes Operating Systems
- GeeksforGeeks - Last Minute Notes Computer Network
- GeeksforGeeks - Last Minute Notes DBMS