Wednesday, July 27, 2016

How to Prepare yourself to Android Engineering Interview at Facebook


 *      Introductions: The first 5-10 minutes will be an introduction and questions about Android. Your interviewer will ask questions about your Android knowledge.
*      These questions probe your familiarity with building for the Android platform: for instance, how to use key APIs and how to solve common problems you'll encounter as a developer. We expect that you'll be able to answer most of these questions from your day-to-day work and shouldn't need to study much. It wouldn't hurt to familiarize yourself with core Android APIs if you might be rusty.
*      Coding: The next 25-35 minutes will be one or more coding problems.
*      These problems can be Android-specific but are usually not. Typically, you'll have questions that exercise your knowledge of data structures and algorithms. You might have one long question or more shorter questions.
*      Ask Us Anything: We try to reserve the final 5 minutes for your questions for the interviewer. This part gives you a chance to learn more about Facebook from someone in engineering and gives your interviewer a chance to learn more about what you're interested in.


 *      How to Prepare:

*      Do as many coding questions as you can. Visit Glass door, Careercup, Project Euler, or Facebook Code Lab or another site that hosts questions. The idea isn't to see every question, but to become familiar with the pattern of interpreting a question, formulating a solution, and writing an efficient, bug-free program without a compiler.
*      Practice on a whiteboard or with pencil and paper. Practice under time pressure: coding speed is important. The more rigorous your training, the easier you'll find the interviews.
*      Go over data structures, algorithms and complexity: Be able to discuss the big-O complexity of your approaches. Don't forget to brush up on your data structures like lists, arrays, hash tables, hash maps, stacks, queues, graphs, trees, heaps. Also sorts, searches, and traversals (BFS, DFS). Also review recursion and iterative approaches.
*      Our typical coding questions aren't phrased as “implement x”; they're “solve this problem.” You can pick from a number of approaches. (No one is going to ask you “implement Knuth-Morris-Pratt” or “construct a 2-3-4 tree.”)
*      Your reasoning is important. Engineering is all tradeoffs so be able to discuss those.
*      Know Android. The purpose of the Android pipeline is to find people who've built serious software in Android.
*      Be familiar with the basics: Activities, Views, Fragments, Services, and all the rest.
*      Know about concurrency, networking, storage, rendering, and everything else involved in making a mobile app.
*      It certainly wouldn't hurt to read a book like Joshua Bloch's Effective Java (which is great for anyone who uses the language, not just for interviews).
*      Additional reading resources: Cracking the Coding Interview, Introduction to Algorithms, Algorithms in C.
  
     *      Tips for the Interview:
    *      Think out loud: Talk through your reasoning. It helps your interviewer follow along, learn about your problem-solving skills, and provide hints if needed.
    *      Write a working solution and iterate. It's better to have a non-optimal but working solution than random fragments of an optimal but unfinished solution.
*      Listen for hints. If your interviewer gives you hints to improve your code, please run with them.
*      Prep questions for us in advance. You'll most likely have some time at the end for questions for your interviewer. Some people find it easier to come up with a few questions in advance rather than think of them on the spot.
*      Don't worry about memorizing tables of runtimes or API calls. It's always good to know how to figure out approximate runtimes on the fly but the code you write is more important.
*      If your solution is getting ugly, step back. Most coding interview questions are designed to have reasonably elegant solutions. If you have festoons of if-else blocks and special cases everywhere, you might be taking the wrong approach. Look for patterns and try to generalize.
*      Think of cool things that you've done in engineering. We'll want to hear about the things you've made.
*      Don't hesitate to cancel if something comes up. If you can't find a quiet space, a good Internet connection, and a good phone connection, or you had to stay up all night with a sick child or broken system, please reschedule. We want you at your best and will be happy to move your interview to a better time.