Real, anonymized candidate journeys from recent (2025) Adobe MTS, CS1, and ML-engineer loops in India β round by round, including what was asked, how the candidate approached it, and the outcome.
One complete journey, start to finish
Round 1 β DSA
The whole process took about two months from the first recruiter call to the offer. I applied on the careers page in September, a recruiter called a week later to confirm I was fine with a C++ role, and the first round was set for the following Tuesday, one hour online. The interviewer gave me a problem about grouping elements that share a connection. I said union-find right away, wrote the find with path compression and the union by rank, and ran it on the sample. Then came the follow-ups, one after the other, all on the same structure: first, how many groups exist at any moment; then, the size of the biggest group after each union; then, how to answer whether two elements are connected after a specific step. Each one I handled by adding a counter or an array to the existing code rather than rewriting it. With ten minutes left he asked for the amortized complexity and I explained the inverse Ackermann bound in simple terms. The recruiter confirmed I had cleared it two days later.
Round 2 β C++ / CS Fundamentals
Round two was about a week after the first, again one hour on a video call, and there was no coding at all. The interviewer said upfront it would be a fundamentals discussion. She started with multithreading: what a mutex is, when I would use a condition variable, and how I would avoid a deadlock when two threads take two locks. Then she moved to B+ trees and asked why databases prefer them over plain binary search trees; I talked about fan-out, disk pages and range scans through the linked leaves. Next was bipartite graphs β how to check if a graph is bipartite, and I described two-coloring with BFS. Then the C++ part: why a base class destructor should be virtual, and I explained what leaks if you delete through a base pointer without it. Last was the diamond problem: two bases sharing a grandparent, the duplicate subobject, and how virtual inheritance fixes it. She kept asking 'why' after each answer, so I tried to explain the mechanism rather than just the rule. It ended right at the hour.
Round 3 β DSA + LLD
Round three was the next week and ran a bit over an hour. The interviewer began with a warm-up coding problem that mixed two pointers with connected components β I wrote it in C++ in about fifteen minutes and tested it on his example. Then he said the real question was: build a garbage collector in C++. I asked what kind of program it would run inside and how objects reference each other, and he said assume a small object graph with a set of root pointers. So I started with the object header β a mark bit and a list of outgoing references β and a heap class that owns all objects. Then I wrote the mark phase as a DFS from the roots and the sweep phase as a pass over the heap that frees unmarked objects. He asked how I would handle cycles, and I pointed out that mark-and-sweep handles them because marking starts from roots, unlike reference counting. Then he asked about pausing the program during collection, and we talked about stop-the-world versus incremental marking. The structure was clear by the end.
Round 4 β Advanced C++
Round four came about ten days later; the recruiter told me it would be a C++-heavy round. The interviewer started with smart pointers. She asked me to explain unique_ptr, shared_ptr and weak_ptr, and when I would pick each. I described ownership: unique for a single owner, shared for many, weak to break cycles. She asked how shared_ptr stores its count and what happens with make_shared versus calling new. Then she asked me to write a tiny shared pointer class of my own with a control block, and I did the constructor, copy constructor, assignment and destructor, and we talked about what a move constructor should do to the source. After that she switched to a backtracking problem β generating all valid combinations under a constraint. I wrote the recursive function with the choose-explore-unchoose pattern, added a pruning check so I stopped early on invalid partial states, and traced it on her example. She asked for the complexity and I explained why it was exponential in the worst case. We had a few minutes left, so she asked what I had been working on recently.
Round 5 β Hiring Manager
The hiring-manager round was scheduled a couple of weeks after round four, so by then it was roughly the middle of the process. It was 45 minutes and entirely behavioral. He first asked me to walk through my current project and what part of it I had owned. Then he asked about a time I disagreed with a teammate on a technical decision and how it was resolved. I gave a real example about a caching change, how I made a small prototype to show the numbers, and how we ended up with a middle ground. He asked about a time something I shipped broke and what I did after, and I described the fix and the check we added so it would not happen again. Then he asked why I wanted to move and what I wanted to learn next. At the end he explained what his team worked on and gave me time for questions; I asked about how the team reviews code and how much of the work was performance-focused. It felt like a normal conversation and ended on time.
Round 6 β Director
The last round was with a director and was set up about a week after the hiring-manager round. It was 30 minutes and honestly the easiest of the whole loop. There was no coding and no design question. She asked me to introduce myself and give a short summary of my background, then asked what I had enjoyed most in my current role and what I found frustrating. She asked how I keep up with C++ changes and what I had learned recently, and I mentioned a couple of features I had started using. Then she talked about the organisation and what the team's priorities were for the next year, and asked what kind of work I would want to pick up first. I asked her about how the team measured success and how new joiners ramp up. That was it. The recruiter called about a week after this round with the offer, which made it roughly two months from my first call to the offer letter.
Key takeaway: For C++-track roles, expect memory-management depth (smart pointers, virtual destructors, garbage collection) tested across multiple rounds, not just one.
More real interview journeys
The first round of each journey below is shown in full; the rest of each candidate's journey β every remaining round, verbatim β is part of the Placement-Ready PYQ Kit.
Round 1 β DSA
This was a one-day hiring drive, so all my rounds happened on the same day at the end of May. I got the invite about a week before from a recruiter, with a slot time and a video link. Round one started at ten in the morning. The interviewer gave me one problem: given a sentence, count how many valid rearrangements of its letters exist under a couple of constraints he listed. First I restated the problem back to him to make sure I understood the constraints. Then I worked out the counting formula on a small example β three or four letters β and checked that the numbers matched what he expected. After that I wrote the code, using a frequency map for the letters and computing the count with factorials and modular arithmetic. He asked about overflow, and I explained why I was taking the modulus at each step. I finished in about thirty minutes, so he asked a couple of quick questions about time complexity and then let me go early. A recruiter pinged me within the hour saying I was moving to the next round.
π 3 more rounds β continue this journey in the full kit
Round 1 β DSA
A recruiter reached out on LinkedIn in early November and the first round was scheduled for the following week, one hour on a video call. The interviewer pasted the problem: an employee hierarchy where the CEO sends a message, each manager takes some time to pass it to their reports, and I had to find when everyone has received it. First I drew the tree on the shared doc and said the answer for a node is its own delay plus the max over its children. I wrote that as a DFS and dry-ran it on her example. Then she changed the rules β now a manager tells reports one at a time, not all at once. I said the order matters, so a manager should tell the report with the deepest remaining chain first, and I sorted the children by their subtree time in descending order and added the position as an offset. She asked why that order is optimal, and I gave an exchange argument. I was told the next day that I had cleared it.
π 3 more rounds β continue this journey in the full kit
Round 1 β DSA
I was referred by a former colleague, and the first round was set up about ten days after my resume went in, a one-hour video call. The interviewer explained the problem: a stream of events with a timestamp and a user id, sorted by time, and after every event I had to report how many distinct users were active in the last five minutes. My first instinct was to say a set, but I quickly caught that a set cannot tell me when a user's last event has expired. So I explained a deque of events in time order plus a hashmap from user to how many of their events are still inside the window. For each new event I pop old ones from the front, decrement their user's count, remove the key at zero, then push the new one. The answer is the map size. I wrote it in Java, walked through his sample of four events and got the expected counts. He asked what changes if events arrive slightly out of order, and I talked about buffering by a small tolerance. It ended on time.
π 2 more rounds β continue this journey in the full kit
Round 1 β System Design
I applied through a referral in September and the recruiter set up the first round within two weeks, a one-hour design round on a video call. The interviewer asked me to design an end-to-end pipeline that predicts the aspect ratio of a document given both its image and its text. I first asked clarifying questions β is this batch or real-time, how much labelled data exists, and is the output a class or a continuous value. He said treat it as a prediction served online, with a moderate labelled set. So I drew the pipeline in stages: ingestion and storage of the raw documents, a preprocessing step for the image and a tokenization step for the text, then two encoders whose outputs are concatenated before a small prediction head. Then I covered training, evaluation metrics, and how the model would be served behind an API with monitoring for drift. He asked how I would handle documents where the text is missing, and I described a fallback to the image-only branch. It ended on time.
π 3 more rounds β continue this journey in the full kit

