I gave my resume to a friend who works at Apple, who submitted it on their job site with his name attached as a referral. My application targeted several open positions that I thought matched my skills. I started receiving emails from Apple recruiters from various teams in a couple of days. Some of the recruiters talked to me about positions that I don't remember applying for and were beyond my capabilities, so I had to turn some of them down. In the end I ended up being scheduled phone screens with two separate teams.
Team A's phone screen almost entirely general, with one extremely basic technical question ("What is an affine transformation?"). This one led to a second phone screen two weeks later that was slightly more technical but still heavily focused on my experience. In the end I did not make it past this stage.
Team B's phone screen on the other hand ran the gamut of generic programming interview questions:
"Describe an interesting problem and how did you debug/solve it."
"What is const correctness?"
"What is the mutable keyword in C++ used for?"
"What is the difference between a list and a vector?"
We didn't talk about my experience or anything on my resume at all. But the evening after the phone screen, I was contacted by the recruiter via email informing me that the team would like me to interview me onsite.
As I already live in the area, I was responsible for getting myself to their headquarters so I have no idea how they manage interviews with non-local folks. My first interview was at 11:15am. I planned to get there at 10:45am just to be safe, but parking was so bad that I didn't end up checking in until 11:05am. Luckily I decided to be early! In general, parking at the main campus is an awful experience if you arrive after 10am.
The interview itinerary was as follows:
2 engineers (45 minutes)
1 engineering manager (lunch + interview) (1 hour)
1 recruiter who I talked to on the phone (30 minutes)
2 engineers (45 minutes)
2 engineers (45 minutes)
2 engineers (45 minutes)
1 engineering manager (45 minutes)
I received one break in between the engineering manager and recruiter interview only because I requested to use the restroom. Aside from that my schedule was back-to-back interviews and it was honestly a very draining experience.
The interviews all involved writing coding solutions in C on a whiteboard. The problems themselves were mainly contrived variations of string and list manipulations, and character permutations. Unlike the interview process of a certain other notorious tech giant, they didn't care much about time complexity or improving solutions. Once I came upon the solution that the interviews seemed to be looking for, they immediately moved onto the next one. The problems alone were not terribly difficult, but there is the consideration of nervousness and anxiety that turns an intermediate problem into a difficult one. While I was able to get the right answer for every problem, I definitely wandered down the wrong path and went in circles a bit before arriving at the correct response.
The day after the onsite interview, I received an email from the recruiter saying that the team thought I would be a good fit, but I needed to talk to one more higher level manager who happened to be on vacation. So fast forward another two weeks and I'm on the phone with him. His questions are fairly general and he seemed to be mainly interested in selling the position to me rather than attempting to identify whether I qualify for the position, which I saw as a very good sign.
A couple of days after that, the recruiter contacts me again and provides me with an offer.