Cracking the Facebook Android Engineer Interview

Lokesh Ponnada
7 min readJul 10, 2019

Update : On a very humble note, I request you not to contact me on any platforms for private guidance.

After a recent Linkedin update, many people in my network were curious to know about the Facebook interview process. The most common question was how different was the interview for an Android Developer. In this story, I explained the entire process along with a preparation strategy.

DISCLAIMER
1) My opinions are my own and I do not represent my employer
2) Unfortunately, No actual interview questions have been discussed. If you are looking for exact questions, I recommend skipping the article.
3) My interview process happened in 2017. The process may have changed since this time, if you’re interviewing, please check with your recruiter about the process.

Background
2 years of experience as an Android Software Engineer at the time of interview. Having worked for startups, I had an e2e knowledge of Android app development [i..e not specialised in any specific android area ]
Language of choice : Java

Getting the Interview Call
The process started after few cold emails by a technical sourcer on Linkedin.

Pre-screen [30 Mins]
Once I responded positively to the email, a phone call was scheduled by the sourcer. Apart from the usual briefing about the Android Software Engineer role, the surprising part was that I had to answer few multiple choice questions (based on Android). I was asked five questions. Then the first round of telephonic screening was scheduled.
Takeaways : The questions were fairly tough. Options were very close, so don’t take the risk of guessing. Best suggestion would be to prepare around the Android areas mentioned on your resume.

Skype Interview [45 Mins]
The first interview was on Skype as I was an overseas candidate. The interview focused on algorithms and programming with a minor emphasis on Android.
Breakdown
5 mins : Few Simple Android questions
35 mins : Two programming questions
5 mins : Questions from me about FB
Takeaways
The Skype interview was the easiest in the entire process. The questions were reasonable given the time. Brush up Android fundamentals, practice heavily on the test platform. Also, get comfortable with Java (or the language of your choice) api. Like, Please don’t search for the syntax of iterating a map during the interview. Make sure to have a reliable internet connection [You don’t want to repeat “can you hear me ??” half of the time].

The Onsite Invitation
Two days after the interview, I got an invitation for the onsite interviews. I didn’t really had a chance to choose the interview dates. If you have an option, I would recommend getting a month for preparation. The sourcer will explain about the entire onsite process. Clarify any doubts with them.

Onsite Structure
There were four interviews
Programming : 2 * 45 mins
System Design : 1 * 45 mins
Behavioural + Basic Coding : 1 * 45 mins

*FYI, The order of rounds is random for everyone

Round 1 - Behavioural + Basic Coding Round [45 mins]
This round was focused on behavioural questions. You’ll be asked things like how did you handle some stress situations in your career. Also, there was a coding question.
Breakdown :
20 mins - Behaviour / career questions
15 mins - Coding question
10 mins - Questions by me about fb
Takeaways
Be honest. Be confident. All questions were sensible and practical. Remember that It’s OK to be not perfect. Please do not BS. Also, don’t take the coding question lightly as it might appear easy.

Rounds 2,4 - Programming [45 mins each]
The coding interviews are typically aimed to gauge your programming ability. Each interview started with a short android question, followed by a general coding question.You’ll have to explain the approach and once a mutually agreeable solution is arrived, implement it on the white board.
Breakdown :
5̶ ̶m̶i̶n̶s̶ ̶-̶ ̶A̶n̶d̶r̶o̶i̶d̶ ̶Q̶u̶e̶s̶t̶i̶o̶n̶ [Removed as of 2019]
35 mins - Programming Question
5 mins - Questions by me about fb
Takeaways
The android questions were moderately difficult. They were small enough to answer in a short time, but required a good understanding of the system.
However, the main focus was on coding questions. The questions were reasonable given the time. Make sure to have a flawless code by the end of interview. Start with the brute force approach and then proceed towards the optimal one. Explain the time complexity. These are white board coding interviews, so get comfortable by practising with white board.

“ Its much better to implement a sub-optimal solution than thinking about the best solution till the end w/o any implementation.”

Round 3 - System Design Interview [45 min]
Intended to gauge the candidate’s ability in designing scalable apps, this gets trickier as system design is always thought as a server side concept. You are expected to come up with a high level design for problem. By design, I mean how do you intend to achieve all the required features, what android components to use, etc.. This was the toughest interview in the entire process as it involved in-depth android concepts. But by the end of interview, I was
really satisfied with my solution.
Takeaways
Do not freakout listening to the question. Treat it like a discussion and engage the interviewer throughout the process. This is EXPECTED in a system design interview. At every step, explain why a choice is being made, given the available options. This was a white board interview.

Preparation Tips
For the android interview conducted by sourcer, know about all android concepts at a basic level. Conceptual understanding is expected, but deeper technical knowledge is not tested.
For example, Knowing about when to use Service/Intent/Asynctask/Thread helps but not the under hood implementation details. I would suggest going through App fundamentals and Core topics.

For all the programming rounds whether remote or onsite, there are few things in common. The questions were not very hard. Since the interview time is limited to 45 mins, you are not expected to invent a graph algorithm or reinvent the KMP algorithm. If you are thorough with core data structures and algos, figuring out the brute force solution should be easy. The real challenge is implementing the optimal solution covering all edge cases.

Remember, you must implement the solution covering all the edge cases. Merely explaining the approach doesn’t work even if it is the best

Follow the below rules [ my codename - panchsheel principles :P ]
1) Confirm the question by repeating it to the interviewer [ specially if your accents differ ]
2) Figure out the brute force approach and explain it
3) Identify the bottlenecks in the brute force and propose the optimal solution
4) Implement the solution and dry run test cases
5) Explain the time complexity

A good way to practise is with a timer. Always target to implement an optimal / acceptable solution within 30 mins. An acceptable solution is the one better than brute-force but may not be the best solution. Also you should be able to explain the time complexity calculations very clearly. You need not master the Master theorem, but should be comfortable in giving a direction about the time complexity

For the remote coding interview, practise on the test platform mentioned by your sourcer beforehand. For the onsite interview, practise on a white board. I practised so much on white board that one interviewer admired my hand writing :)

Pick questions from any websites such as Leetcode / Interviewbit / Geeksforgeeks. If you have time read articles from Gainlo blog. I felt Gainlo gives the highest ROI as it teaches you how to approach a problem elegantly. For example, read this beautiful article . If I were to prepare again with a month of time, I would

1) Read and implement articles on Gainlo blog - 30% time
2) Solve questions from Interviewbit - 40% time
[It has time and attempt based scoring system]
3) Solve Top 100 questions from Leetcode - 30% time

**Whatever platform you follow, make sure to do few questions from every data structure and programming paradigm. Also don’t waste time practising too hard questions. After all you want to crack the interview, not codejam.

For every question solved, spend some time analysing things like
1) What was the hardest part in coming up with the solution ?
2) Any DS / Algo to learn in order to solve this type of problems ?
3) Look at the best solution and learn from the author’s thought process.

“There is no point in doing ton of questions, if you don’t learn something from every attempted question”

For the system design interview, go through android concepts. Remember stuff at broad level, implementation level details are not really required. For example, you should know the best use case of WorkManager but do not need to memorise the callbacks of the same.
1) Read about the basic components of Android OS.
2) Watch and understand all the Perf Matters Videos
3) Read the best practises documentation
4) Take few complex and successful apps and design them from scratch
Ex : Take top apps on the play store.

Behavioural + Coding round : Recollect all the occasions where you have taken certain work related decisions / handled team related issues etc.. Also think about your future career path. The intent is not to fabricate answers but to not screw up the interview [ Despite having answers, It is easy to mess up such questions as (majority) engineers often lack soft skills]. Coding question will be comparatively easy, so just write perfect code.

Recruiter is your best friend in the process. Feel free to talk to them

This is how I prepared for my interview. I was able to crack it comfortably with this strategy, so should you. I hope this article helps fellow android developers as a guidance which I lacked during my time. Feel free to shoot out any questions. All The Best!!

--

--