I was initially contacted by a recruiter via LinkedIn. They set me up with an initial phone screening to ask personality and behavioral questions.
This phone screen went really well, and I was quickly asked to schedule a technical interview, which would take place over the phone and on CoderPad. I studied algorithm design and whiteboard coding for about two months to prepare for the interview.
Interview day finally arrived, and I was called by a developer who told me that the interview would be based on my problem-solving skills and algorithm design, and that it would be totally fine if I didn't know all of the language syntax, because that would be absurd.
First, I was asked basic questions about my programming language of choice (Swift):
I was then asked the fairly popular, medium-level Merge Intervals LeetCode question. It took me about ten minutes to walk through my process, code out my algorithm, and run through edge cases. The interviewer said that I had successfully solved the question and moved on to the second step of the interview.
This step required me to debug a faulty TableView. After making quick work of this step (I'm very familiar with TableViews - who isn't?), we moved on to the third and final coding question.
I was asked to write a function that would run some task on a background thread asynchronously and run a second task on the main thread after the async task was complete. I wasn't exactly sure of the syntax for Grand Central Dispatch and mentioned this to my interviewer. Regardless, I pushed on.
I wrote out what I thought the syntax might be, explaining the difference between threads, the benefits/drawbacks of background versus main, and how GCD works in iOS. When I was done, I had something that, while syntactically incorrect, would run a completion block on the main thread after finishing the async task.
The interviewer kept repeatedly asking, "You don't know the syntax for this?" To which I continuously replied, "No, I usually have a custom function that handles this sort of stuff for me, but I know exactly how it works." And I would go on explaining exactly how GCD works and why.
As you can probably already tell, I did not get the job. I was emailed by the recruiter two days later saying they had chosen to go with someone with a better understanding and memory of the syntax. I was shocked. Blown away.
Not only do you constantly hear from recruiters, interview prep, and the Facebook tech community that syntax isn't super important during the process, but to have the interviewer explicitly state that it wouldn't matter, you would think they were telling the truth.
Why would a "good" programmer memorize the syntax of everything? How is this really that important? When will there ever really be a time when I don't have code-complete during my job?
I honestly loved the idea of working at Facebook. I still do, in fact, but working for people who don't realize or care how broken the interview process is would get annoying real quick.
What are optionals in Swift and when would we use them?
What are some ways to unwrap optionals in Swift?
Why would we not want to run an API call on the main thread?
What do the question mark (?) and exclamation mark (!) do in Swift?
What's the difference between a Class and a Struct, and when should we use one versus the other?
Debug UITableView code.
Write a perfect implementation of GCD (background and main threads).
The following metrics were computed from 3 interview experiences for the Meta iOS Engineer role in San Francisco, California.
Meta's interview process for their iOS Engineer roles in San Francisco, California is extremely selective, failing the vast majority of engineers.
Candidates reported having very good feelings for Meta's iOS Engineer interview process in San Francisco, California.