Assessment tips
- Confirm the current Apple pattern from the drive mail before practising old papers
- Finish one problem or section fully before starting the next
- Revise the fundamentals listed in the round table on this page
How Apple interviews actually run for engineering candidates, synthesized from recent candidate reports and Apple public hiring guidance. Team-to-team variation is the norm at Apple. We reorganized rounds, added prep notes, and flagged that variance - treat this as a prep map, not a script.
Reported compensation for early-career software engineers in India (levels.fyi, Blind) varies widely by level, base vs RSU split, and city - treat any published figure as a rough, self-reported band rather than a guarantee for a specific offer.
| Round | Duration | What it tests |
|---|---|---|
| Recruiter / hiring-manager screen | 20-30 min | Background, motivation, team fit, logistics |
| Technical phone screen(s) on CoderPad | 45-60 min each | 1 live coding problem; some teams run a second screen |
| Onsite - Coding (1-2 rounds) | 45-60 min each | DSA + language/stack depth for the specific team |
| Onsite - System design | 45-60 min | Product-grounded design; weighted more at mid/senior level |
| Onsite - Behavioural | 45-60 min | Craftsmanship, discretion on confidential work, “Why Apple” |
| Hiring manager / team conversation | 30-45 min | Team specifics, closing questions, sometimes team fit |
Profile: B.Tech CSE, ~8.2 CGPA, tier-2 college, one internship, applied off-campus after a referral from an alum
Recruiter/hiring-manager screen
Technical phone screen (CoderPad)
Onsite - coding rounds
Onsite - system design
Onsite - behavioural
Result: Selected
Takeaways
Profile: B.Tech IT, ~7.4 CGPA, strong personal projects, applied off-campus (no referral)
What differed
Mistakes that hurt other candidates in the same hiring cycle
Result: Selected after the behavioural round
Takeaways
Profile: ~5 YOE, applied for IS&T-style Java, Spring Boot, microservices role via careers portal (LeetCode Discuss elimination-round report)
Elimination round 1
HashMap internals, concurrency in collections, multithreading and executors.Elimination round 2
Note: India backend loops often pair one coding problem with 30–40 minutes of stack grilling in the same session; DSA-only prep is insufficient for these tracks.
Result: Rejected after screening (common outcome - India SWE reports show low pass rates on aggregators such as Jointaro)
Takeaways
After the technical loop, Apple typically closes with a behavioural/hiring-manager conversation that doubles as its HR round: motivation, team fit, discretion, and closing logistics. Prepare those answers on the dedicated page rather than cramming them into this hub.
Use these as frames, not scripts - interviewers probe follow-ups.
Q. How do you find the maximum path sum in a binary tree?
A. Run a post-order DFS that returns, for each node, the best downward path sum starting at that node and going into at most one child, while separately updating a global maximum. At a node, compute left as the maximum of zero and the recursive result for the left child, and right likewise, clamping at zero so a negative subtree is simply dropped rather than dragging the path down. Update the global answer with node.val + left + right, which represents a path that turns at this node and cannot be extended upward. Then return node.val + max(left, right), because a parent can only use one side. It is O(n) time and O(h) space for the recursion, where h is the tree height, so O(log n) balanced and O(n) skewed. The two traps are initialising the global maximum to zero instead of negative infinity, which breaks on all-negative trees, and returning the turning-point sum upward, which would build an invalid path.
Q. How do you merge k sorted lists, and what changes when they do not fit in memory?
A. Push the head node of each of the k lists into a min-heap keyed on value, then repeatedly pop the smallest, append it to the output, and push that node’s successor if one exists. The heap never exceeds k entries, so with N total nodes it is O(N log k) time and O(k) space, which beats merging pairwise sequentially and matches divide-and-conquer pairwise merging while using less code. When the data will not fit in memory, this becomes an external k-way merge: each list is a sorted file on disk, you read a buffered block from each rather than a single element, keep the heap over the block heads, and write the merged output through a large write buffer, refilling a block whenever it drains. The design constraints then shift from comparisons to I/O, so you size buffers to available memory divided by k plus one and prefer sequential reads. This is exactly the merge phase of external merge sort, which is the honest framing to give an Apple interviewer.
Q. How do you clone an arbitrary directed graph?
A. Traverse the original graph with BFS or DFS while keeping a hash map from each original node to its clone. When you first reach a node, create its clone and record it in the map before recursing, because doing it after would loop forever on a cycle. Then for each neighbour, look it up in the map, cloning it first if absent, and append the mapped clone to the current clone’s neighbour list. The map is what makes the algorithm correct on cyclic graphs and what prevents duplicating a node reachable by two paths. Complexity is O(V + E) time and O(V) space. The iterative BFS version is safer for very deep graphs since recursive DFS can overflow the stack, and the same map-based technique solves copying a linked list with random pointers.
Q. How do you find all anagrams of a pattern in a string?
A. Use a fixed-size sliding window equal to the pattern length combined with a frequency count. Build a count array of size 26 for the pattern, then slide a window of that length across the string, incrementing the count for the character entering on the right and decrementing for the one leaving on the left. Compare the window’s counts against the pattern’s counts at each position and record the start index on a match. Comparing two 26-entry arrays is O(1), so the whole scan is O(n) time and O(1) space. To avoid even that comparison, keep a single counter of how many characters currently have matching counts and update it incrementally, which reduces the per-step work to a couple of operations. The common errors are re-sorting each window, which degrades the runtime badly, and forgetting to wait until the window has reached full length before recording a match.
Q. Explain ARC in Swift and Objective-C, and how retain cycles happen.
A. Automatic Reference Counting is compile-time, not a runtime garbage collector: the compiler inserts retain and release calls so that each object keeps a count of strong references and deallocates the instant that count reaches zero. That gives deterministic deallocation with no collection pauses, which suits a memory-constrained device, but it cannot reclaim cycles. A retain cycle occurs when two objects hold strong references to each other, or when a closure captures self strongly while self also owns the closure, so neither count ever reaches zero and both leak. The fixes are ownership qualifiers: weak, which does not increment the count and is automatically set to nil when the target deallocates, so it must be optional, and unowned, which also does not increment but assumes the target outlives the reference and traps if not. For closures the idiom is a capture list writing weak self and then guarding it. Value types, structs and enums, sidestep the problem entirely by being copied rather than referenced, which is why Swift’s standard library leans on them heavily.
Assessment tips
Interview tips
HR tips
These links are research inputs we used to map round structure and recurring questions - not copied page mirrors. We reorganized reports into process tables, outcome notes, and prep takeaways for Apple.
Cross-check the current drive mail or careers posting for timings and pattern changes.
For the company overview and FAQs, see the Apple hub. For behavioural STAR prompts, use the Apple HR page. For OA drills, use Apple on placementpapers.app.