Real, anonymized candidate journeys from recent (2025) Apple engineering 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 β Senior Manager (DSA)
A recruiter found my profile and set up the first round for the following week. It was a one-hour video call with a senior manager, which surprised me a little because I expected an engineer for a coding round. After a few minutes on my background he pasted a problem into the shared editor: given an array, find where certain balancing conditions hold between the two sides. I first restated the problem in my own words and checked a small example with him to make sure I understood the condition. Then I described a brute-force approach and its time complexity, and said I could do it in one pass using running sums. He asked me to just code the better version. I wrote it, walked through the example again line by line, and then he asked what happens with negative numbers and with an empty array. I handled both and we had about ten minutes left, which he used to ask about the ML work on my current team. The recruiter emailed me the next day about round two.
Round 2 β Senior Manager (Design + GenAI)
Round two was a few days later, again with a senior manager, about an hour. It had two parts. First he asked me to design a custom data structure with a specific set of operations, and he wanted the time complexity of each operation. I started by listing the operations and picking the underlying containers, then explained how each operation would work and where the trade-offs were. He pushed on one operation that was slower than the rest and asked if I could make it faster; I proposed a change and explained what it cost in memory. Then the discussion moved to GenAI. He asked what hallucinations are and why they happen, how I would reduce them in a real product, what embeddings are and how they are produced, and how a vector database differs from a normal database for similarity search. I gave short direct answers and used an example from a retrieval project I had done. He seemed happy with the depth and the call ended on time.
Round 3 β Technical (NLP)
The third round was a hands-on NLP round with an engineer, one hour, in a shared coding environment. She gave me a small raw text corpus and said the first task was to clean it. I lower-cased everything, stripped punctuation, handled extra whitespace and tokenised it into words, explaining each step and asking whether she wanted stop words removed β she said keep them. Then the second task was to implement logic that predicts the most likely next words given a word or a short phrase. I built a simple n-gram frequency model: count which words follow each word or pair of words, then return the top few candidates by count. I coded it, ran it on the corpus, and showed a few predictions. She asked how I would handle a phrase never seen in the corpus, and I talked about backing off to a shorter context. She also asked how this would change if the corpus was huge, and I mentioned streaming the counts. It ended with a couple of minutes for my questions.
Round 4 β Technical with Manager (CS Fundamentals)
Round four was with a manager and was more of a fundamentals check than a coding test. He started by asking me to explain the difference between parallelism and concurrency and to give one example of each from my own work. Then he asked how I approach error handling in a long-running job β what to retry, what to fail fast on, and how to log it. Next came sorting: which sorting algorithms I would use for different situations and why, and then tree traversal, where he asked me to describe in-order, pre-order and level-order and when each is useful. The last part was practical. He described a data pipeline that was producing wrong output after a recent change and asked how I would debug it. I said I would first compare input and output counts stage by stage, then check the schema change, then look at the step where the numbers first went off. He nodded along and asked a couple of follow-ups about how to prevent it with tests. The round finished slightly early.
Round 5 β Technical (GenAI / ML Architecture)
Round five was with a senior engineer and it was the deepest ML round of the loop. He opened by asking when I would fine-tune a model versus use retrieval, and I compared the two on cost, freshness of data and how much control you need over the output. Then he asked me to explain self-attention in a transformer, so I talked through queries, keys and values, how the attention scores are computed and why multiple heads help. After that we discussed embeddings and chunking for retrieval β how chunk size affects recall, overlap between chunks, and what happens if chunks are too big for the context window. With about twenty minutes left he switched to a coding problem on an array. I explained a brute-force approach first, then a two-pointer approach, and coded the second one. He asked for the complexity and one edge case, both of which I covered. It was a long hour but it felt fair.
Round 6 β Technical (OOP)
Round six was an object-oriented programming round with an engineer, about 45 minutes. It was all Python-flavoured. First she asked me the difference between static methods and class methods and when I would use each; I wrote small examples in the editor to show it. Then she asked how object equality works β what happens when you compare two objects by default, and what you need to override to make equality based on content, including why hashing has to stay consistent with it. After that she asked about metaclasses, which I had not been asked in an interview before. I explained what a metaclass is, that classes are themselves objects created by one, and gave a simple use case like registering subclasses automatically. The second half of the round was about my experience with large-scale data integration: how I had combined data from several sources, dealt with schema differences and duplicates, and how I validated the merged output. She asked a few follow-ups on failure handling and then wrapped up.
Round 7 β Behavioral
The last round was behavioral, about 45 minutes with a manager. He asked for a project that had gone off track and how I recovered it. I described one where a deadline was slipping, explained how I re-scoped it, what I dropped, and how I communicated the change. Then he asked about an optimisation decision β a time I chose to make something faster or cheaper and how I decided it was worth the effort. I used an example about cutting the runtime of a training pipeline and how I measured the impact first. The third question was about conflict: a disagreement with a teammate and how it was resolved. I told him about a design argument, how we tested both options and went with the one that held up. He asked what I would do differently now. At the end he described the team's work and I asked about how projects get prioritised. I got the offer about a month after my first round, and it took roughly three more weeks for background checks to clear before I joined.
Key takeaway: GenAI/ML fundamentals β embeddings, transformers, fine-tuning vs. retrieval β were tested as heavily as classic DSA; the full process took about a month to offer, with roughly three more weeks for background checks before joining.
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 β Screening
A recruiter messaged me about a senior role on the Ads Delivery team and set up a 45-minute screening call for the following week. It was a video call with one interviewer. He started by asking me to walk through my resume from the most recent job backwards, and stopped me a few times to ask why I had made certain moves. Then it turned behavioral: he asked about a project where the requirements changed halfway through and what I did, and about a time I disagreed with a teammate on a technical decision. I answered with real examples from my current team and kept each one short. Near the end he asked what I knew about the team and why ads specifically, so I talked about the scale problems I found interesting. He then explained that the next steps would be a coding round, a system design round and a bar-raiser round. I got the confirmation email for the coding round two days later.
π 3 more rounds β continue this journey in the full kit
Round 1 β Technical (DSA)
I applied for the internship through the careers portal and got an email about a technical round roughly ten days later. It was a video call of about 50 minutes with one interviewer and a shared editor. She started with rotating an NΓN matrix 90 degrees clockwise in place. I said I would transpose it and then reverse each row, coded it, and dry-ran it on a 3Γ3 example. Next she gave me merge K sorted linked lists. I first explained the brute-force way β collect all values, sort, rebuild β and gave its complexity, and then she asked if I could do better, so I explained the min-heap approach and wrote it. The third one was the maximum length of a mountain subarray, which I solved with two passes tracking increasing and decreasing runs. Last she asked me to design an LRU cache. I explained the hashmap plus doubly linked list idea, wrote get and put, and talked through the eviction step when the capacity is full. She said the next round would be with a manager and HR.
π 1 more round β continue this journey in the full kit
Round 1 β Hiring Manager
The first round was set up by a recruiter about a week after we first spoke, and it was with the hiring manager directly. It was a one-hour video call. He began by asking me to describe my current role and the data systems I worked on day to day, and then went deeper into one project β how the data flowed, where it was stored, and what broke most often. That took maybe half the call. Then he shared a SQL query on screen and said it was returning wrong results and asked me to find out why. I read it top to bottom out loud, checked the joins first, and found that a join condition was letting duplicate rows through, which was inflating an aggregate. I explained the fix and also mentioned adding a group-by check to confirm it. He asked how I would have caught it earlier, and I talked about row-count checks between stages. He closed by saying the next round would also be with him and would go deeper into databases.
π 5 more rounds β continue this journey in the full kit

