Facebook onsite
✅ Facebook | E5 | Phone Screen + Virtual Onsite
sr software engineer e5Facebook | Android E4 | Remote | Reject
android e4Facebook | E4 | London | Interview Experience
E4Facebook | E6 | London [Reject]
7 more experiences below
Summary
I'm sharing my onsite interview experience at Facebook, outlining the specific LeetCode problems I encountered. Additionally, I've provided a comparison of interview difficulties across various tech giants, and I'm happy to report that I ultimately received an offer from Google.
Full Experience
I recently navigated the onsite interview process at Facebook, and I've detailed the specific LeetCode problems I encountered during my rounds below. Having also interviewed with Google, Amazon, and Apple, I've developed a perspective on the relative difficulty of securing a position at each. In my experience, Facebook felt somewhat more accessible than Google, particularly if one has thoroughly prepared using the Facebook-tagged questions on LeetCode; I personally didn't encounter any questions that weren't already on LeetCode. On a difficulty scale, I'd rate Google around a 9, Facebook a 7 (or even a 5 if you've mastered their tagged questions), Apple a 5, and Amazon a 2 or 3, as it primarily focused on fundamental concepts. Although this post recounts my Facebook experience, I ultimately accepted an offer from Google, and things have been going great there. To anyone currently interviewing, keep up the excellent work – you'll achieve your goals!
Interview Questions (4)
You are given two strings, order and s. All the characters of order are unique and were sorted in some custom order previously. Permute the characters of s so that they match the order that order was sorted. More specifically, if a character x occurs before a character y in order, then x should occur before y in the permuted string. Return any such string.
Preparation Tips
My primary preparation strategy for Facebook was to thoroughly review and practice all the Facebook-tagged questions available on LeetCode. I found this approach highly effective, as I encountered no non-LeetCode questions during my entire interview process.
Summary
I recently completed my virtual onsite interview with facebook for the Sr Software Engineer (E5) position. The process included a phone screen and several onsite rounds covering coding, system design, and behavioral aspects. I received positive feedback from my interviewers and am currently awaiting the final decision from the hiring committee.
Full Experience
Last week, I had my virtual onsite interview with facebook for the Sr Software Engineer (E5) position. The overall experience was great.
Phone Screen
This was a 45-minute round where the interviewer asked two coding questions. I focused on understanding the problem, clarifying any ambiguities, and then verbally explaining my solution along with its time and space complexity. Once the interviewer was satisfied, I quickly implemented the solution and performed a dry run with test cases, including corner cases, finally explaining the complexity of my written code.
Virtual Onsite
The virtual onsite consisted of four 45-minute rounds: two Coding Rounds (Ninja), one System Design Round (Pirate), and one Behavioral Round (Jedi).
Coding Round 1:
Similar to the phone screen, I was given two coding problems to solve, applying my structured approach of understanding, verbalizing, implementing, and verifying.
System Design Round:
I was asked to design the privacy settings at facebook. I spent approximately 40 minutes discussing the design, and used the remaining 5 minutes to ask questions about facebook's culture.
Coding Round 2:
This round also involved two coding questions, where I applied my standard approach for solving them.
Behavioral Round:
The interviewer started by asking me about myself, my current project, and significant accomplishments. I was also asked if I had ever managed conflicting priorities and if I had received constructive feedback from a colleague. For each behavioral question, I provided a supporting anecdote from my past experiences, ensuring my answers aligned with facebook's mission and core values. Interestingly, this round also included one coding question.
Two days after my virtual onsite, I received a call from the recruiter informing me that the feedback from my interviewers was good, and they are still waiting for the hiring committee to make the final decision.
Interview Questions (10)
Have you ever had to manage conflicting priorities? Describe the situation and how you handled it.
Have you ever received constructive feedback from a colleague? How did you respond to it?
Preparation Tips
My general approach for answering coding questions involved:
- Thoroughly understanding the problem and asking clarifying questions.
- Verbally explaining my proposed solution, including the expected time and space complexity.
- Once the interviewer was satisfied with the verbal explanation, quickly implementing the solution.
- Performing a dry run with a few test cases, covering corner cases.
- Explaining the time and space complexity of the written solution.
For behavioral questions, I focused on providing supporting anecdotes from my experience and making sure my answers were in-line with facebook's mission and core values.
Summary
I interviewed for an Android E4 role at Facebook, navigating a technical phone screen and a four-round virtual onsite focused on coding, system design, and behavioral aspects. Despite successfully resolving most challenges, my application ultimately resulted in a rejection.
Full Experience
Technical Phone Screen
My interview process began with a technical phone screen. I was given two coding questions, with no Android-specific problems. I successfully resolved both problems within 40 minutes, which allowed me to proceed to the virtual onsite interview.
Virtual Onsite Interview
The virtual onsite consisted of four rounds: two coding interviews, one system design interview, and one behavioral interview.
1st Coding Round
In this round, I encountered two coding problems. I managed to resolve both questions in under 40 minutes. For the first problem, I achieved an O(n^2) solution, and for the second, an O(nlogn) solution.
2nd Coding Round
The second coding round also presented two coding questions. I resolved both of these within 40 minutes, delivering an O(n) solution for the first problem and an O(n^2) solution for the second.
Design Round
The design interview focused on designing the Instagram home screen. After clarifying the requirements, I discussed authentication with Facebook, how to handle a large volume of posts, the constraint of each post having only one image, liking/disliking functionality, displaying user profile photos, and critically, how the app would support an offline mode. My discussion covered RecyclerView optimizations, image caching strategies (including the underlying mechanics of libraries like Glide/Picasso), WorkManager, batching requests, and pagination. I was initially quite nervous about this round, but I felt I performed really well in the end.
Behavioral Round
This round was primarily a conversational interview. I was asked to share examples from my past experiences related to specific situations, such as receiving ambiguous requirements or working with colleagues I disliked. I believe I handled the initial part of this round effectively. Towards the end, I was given a coding question which I resolved pretty quickly with an O(n) solution, although I think I might have missed some edge cases, like empty spaces at the beginning of the input. However, the interviewer seemed content with my solution.
Interview Questions (9)
Design the Instagram home screen, including requirements such as authentication with Facebook, handling a large list of posts (each with one image), like/dislike functionality, displaying user profile photos, and supporting an offline mode.
Behavioral questions involved discussing past experiences, specifically situations where I faced ambiguous requirements or had to work with someone I disliked.
Preparation Tips
My LeetCode preparation involved completing 64.2% of easy problems, 49.3% of medium problems, and 35.3% of hard problems. I also practiced competitive programming on Codeforces.
Summary
I interviewed with Facebook for an E4 role in London, tackling various coding challenges, system design, and behavioral questions across multiple rounds, and I am currently awaiting the outcome.
Full Experience
Hey Everyone,
I interviewed with Facebook for an E4 role in London. I am currently waiting to hear back from them regarding the outcome of my interviews.
Phone Screen:
This round involved two coding questions. I felt confident in my ability to solve both on time.
- Binary Tree to Doubly linked List.
- Evaluating expression (Only with +/* operators).
Onsite Coding 1:
I successfully solved both problems presented in this round within the given time frame.
- Multiplying 2 strings.
- Course Schedule problem on LeetCode.
Onsite Coding 2:
Only one question was asked in this round. I was able to solve it on time, even though I required one hint from the interviewer. Overall, the interviewer seemed convinced by my solution.
- LFU Cache Implementation.
Behavioral:
This round consisted of standard behavioral questions and some inquiries about my past work experience. I managed to tackle all the questions well, with only one or two proving to be a bit tricky.
System Design:
The challenge here was to design a system similar to Google Drive. I was able to approach the problem, but the interviewer continuously introduced new scenarios. I could answer some of these, but got stuck on others. I feel this round went below average to average.
Interview Questions (6)
Convert a binary tree into a circular doubly linked list in-place. The left and right pointers of the tree nodes should be used as previous and next pointers respectively in the doubly linked list.
Implement a basic calculator to evaluate a simple expression string that may contain integers and the operators '+' and '*'. The expression string does not contain any parentheses, division, or subtraction. Assume the given expression is always valid.
There are a total of numCourses courses you have to take, labeled from 0 to numCourses - 1. You are given an array prerequisites where prerequisites[i] = [ai, bi] indicates that you must take course bi first if you want to take course ai. Return true if you can finish all courses. Otherwise, return false.
Design and implement a data structure for a Least Frequently Used (LFU) cache. It should support get and put operations with O(1) average time complexity. When the cache reaches its capacity, it should invalidate the least frequently used item. If there is a tie in frequency, invalidate the least recently used item among them.
Design a system like Google Drive, focusing on aspects such as file storage (e.g., block storage, deduplication), synchronization across multiple devices, versioning of files, access control and permissions, and overall system scalability and reliability.
Preparation Tips
For my preparation, I primarily used LeetCode for algorithm and data structure questions. For System Design, I relied exclusively on YouTube resources.
Summary
I interviewed for an E6 Software Engineer position at facebook in London and was rejected, primarily because I needed to improve my depth in system design during the product design rounds, despite strong performance in coding and behavioral interviews.
Full Experience
I was referred to a recruiter by a friend who had previously interviewed at facebook. The entire interview process spanned about a month and a half, starting in March and concluding in mid-April. Each round was 45 minutes long, with coding rounds featuring two questions each.
Screening Round:
I faced two coding questions. One was related to palindromes (though the exact problem isn't shared), and the other involved finding a path in a given binary tree. For the binary tree problem, I also had follow-up questions to solve it without using a global variable and to adapt the solution for any n-ary tree. I managed to complete both questions within 35 minutes, and the feedback was very positive, leading to an E6 position consideration.
Coding Round 1:
This round also had two coding problems. The first was about merging two sorted arrays. The second involved merging contacts with domain names into the minimum number of groups; the interviewer suggested treating contacts as graph nodes, generating edges for common domains, and then using DFS for connected components. The feedback for this round was good.
Coding Round 2:
Again, two coding questions. One asked me to find an element in an array and return a random index if multiple occurrences existed. The second problem involved using two given APIs, move() and isTarget(), to determine if a target was present in a grid that contained a source and target at some positions. I solved both of these with some hints from the interviewer, and the feedback was good.
Product Design Round 1:
As I was interviewing for an E6 position, there were two technical product design rounds. The first involved designing an API for a newsfeed, similar to Instagram or Facebook, while considering multiple client types. The feedback was that I needed to discuss more about the scalability of the system.
Product Design Round 2:
The second product design round focused on designing a system to handle live comments for videos. The feedback indicated that I needed to delve more into the low-level details of the system.
Behavioral Round:
This round consisted of standard behavioral questions based on my past experience, covering situations like handling teams, conflict management, and my learnings over the last 2-3 years. The feedback was positive.
Ultimately, considering the feedback from the product design rounds, I received a rejection. The recruiter explained that product design is a very critical component for E5 and E6 positions, and despite very good feedback in other rounds, they had to reject me on that basis. I hope my experience can be helpful to others.
Interview Questions (7)
I was asked to find a path in a given binary tree. I also had two follow-ups: first, to solve it without using a global variable for the answer, and second, to adapt the solution for any n-ary tree.
I was given the problem of merging two sorted arrays.
I needed to merge given contacts with domain names into the minimum number of groups, where groups having common domains should be merged. The approach was to treat contacts as nodes in a graph, generate edge information with contacts having common domain name. Then do DFS on the nodes and group them as connected components.
I had to find an element in an array and, if there were multiple occurrences, return a random index each time.
Given two APIs, move() and isTarget(), I needed to find if a target was present in a grid that contained a source and target at some positions.
I was tasked with designing an API for a newsfeed, similar to Instagram or Facebook, considering multiple clients.
I needed to design a system to handle live comments for videos.
Preparation Tips
My LeetCode status indicated I had solved close to 800 problems.
Summary
I successfully navigated the E5 Lead Engineer interview process at Facebook in London, securing an offer after a series of technical, behavioral, and system design rounds.
Full Experience
I had an interview for an E5 Lead Engineer position at Facebook in London. My experience level was 12 years.
Talk with the recruiter (30 mins):
This discussion was crucial for setting my expectations and understanding the interview process. The recruiter provided valuable insights and resources for preparation. I treated this as an interview itself, asking all my questions about the preparation process.
Technical Phone Screen (45 mins):
I was asked two coding questions in this round. Both were relatively easy, and the key was to articulate my thought process clearly. I made sure to test my code immediately after writing it, which impressed the interviewer.
Virtual Onsite (4 rounds):
Behavioral (45 mins):
This round focused on my past experiences in teams and how I handled technical challenges. The questions were open-ended, and each answer led to follow-up questions. I wasn't asked any coding questions in this round. My recruiter had mentioned that a strong positive signal in this round is critical, as a negative signal here can lead to a 'no-hire' decision even with strong technical performance.
System/Product Design (45 mins):
I was tasked with designing a file-sharing system similar to Dropbox. During requirement gathering, I pointed out a potential security issue with auto-sync, which seemed to impress the interviewer. My proposal for staggered scale-up based on usage trends also received positive feedback. I drove the discussion, answering clarification questions and providing high-level differences between SQL and NoSQL without getting bogged down in details.
Coding 1 (45 mins):
This round was similar to the phone screen but with a higher bar. I tackled two coding problems. The first involved a LeetCode problem, where I used Breadth-First Traversal and discussed follow-up questions on parallelization and memory constraints. The second was another LeetCode problem, which I solved very quickly.
Coding 2 (45 mins):
I faced two more coding questions here. For the first, which involved checking interval coverage, I initially missed a boundary case but caught and fixed it during testing without prompting, which was viewed positively. For the second, finding connected sub-graphs in an undirected graph, I used Depth-First Traversal. I ran out of time to complete the code, but because I had modularized my solution, I could clearly outline the remaining implementation details for the interviewer.
The next day, I received positive feedback from my recruiter for all four rounds and was informed that I would proceed to the review board. The offer came through the day after that.
Interview Questions (7)
Given a binary tree of integers, write a function that returns the sums of all the root-to-leaf paths.
Given a string representing an arithmetic expression with only addition and multiplication operators, return the result of the calculation.
Design a file sharing system similar to Dropbox. I discussed potential security issues with auto-sync, proposed staggered scale-up based on usage trends, and drove the design discussion, keeping it high-level and focused on requirements.
Given two integers X and Y (X<Y) and a list of intervals [(i,j)...] (where i is the start and j is the end of the interval), find if the intervals completely cover the given integer range [X,Y]. The intervals are sorted according to their start value. Example1: X=1, Y=6, List: [[1, 3], [3, 5]], output: true; Example2: X=3, Y=5, List: [[1, 4], [4, 7]], output: false.
Given an undirected graph (represented by pairs of nodes), list all connected sub-graphs (components).
Preparation Tips
Tips from my experience:
- Treat the recruiter call as an interview and an opportunity to ask about preparation resources and tips. Recruiters can be very helpful.
- For behavioral interviews, being genuine and self-critical goes a long way. Have significant projects from your CV ready with narratives, and be prepared for follow-up questions.
- For system design, keep the design high-level unless specifically asked to dive deeper. Stay focused on requirements and design a working solution. It's crucial to understand concepts in depth; avoid name-dropping technologies you can't elaborate on. At the same time, keep the big picture in mind and don't get lost in details.
- For coding rounds, always talk through your thought process and test your code without waiting for the interviewer to prompt you. This creates a positive impression.
Recommended Resources:
- Video on approaching problems and testing: https://www.youtube.com/watch?v=1wMBw38rAlw&t=358s
- System Design Reference Video (SQL vs NoSQL): https://www.youtube.com/watch?v=qI_g07C_Q5I&t=2130s
- Michail Smarchchok's YouTube channel: https://www.youtube.com/channel/UC9vLsnF6QPYuH51njmIooCQ (for concepts like caching, queues)
- Gaurav Sen's YouTube channel: https://www.youtube.com/channel/UCRPMAqdtSgd0Ipeef7iFsKw (for consistent hashing, hyperloglog, quad trees, bloom filters)
- Facebook live commenting talk (trade-off decisions): https://www.youtube.com/watch?v=IO4teCbHvZw&t=2300s&ab_channel=InfoQ
- Video on keeping design simple and confident communication: https://youtu.be/Z-0g_aJL5Fw
Summary
I had my final round of interviews for an E5 remote position at Facebook in March 2021, which unfortunately resulted in a rejection. I felt confident about the coding rounds, but the system design and product design questions were unexpected and challenging, ultimately leading to my downfall.
Full Experience
I had my final round of interviews for a remote E5 position with Facebook in March 2021. The interviews were conducted via video calls, utilizing CoderPad for coding and Excalidraw for design discussions.
My first coding round included two problems: Leftmost Column with a One and Kth Smallest Element in a Sorted Matrix.
The system design round presented the challenge to "Design a Load Balancer".
For the behavioral interview, I was asked several questions: "Can you tell me about a time you had to overcome obstacles in a project?", "Tell me about a time you had a conflict or disagreement with a colleague.", "Did you ever try to change something outside of your responsibility?", and "How do you handle vague requirements in a project?". There was also a coding question at the end of this round, which was to convert an array of numbers as characters to an actual integer; for example, converting ['1', '2', '3'] to 123.
In my second coding round, I tackled Merge 2 Sorted Arrays and Insert into a Sorted Circular Linked List.
The product design round focused on "Design a client library for a mobile phone that downloads media files (image, video, music/sound)".
About a week after the interviews, I received a rejection email that did not include any specific feedback. I felt pretty good about the coding rounds, as I was able to code solutions for all of them, and practicing problems on LeetCode definitely helped. Facebook also has its own interview prep coding problems, but I found them generally much easier than the ones on LeetCode.
I'm pretty sure the system and product design rounds were my downfall. I had been preparing for designing distributed systems for those rounds, so it threw me off when the system design focused only on one particular component of a system, and the product design was about something I don't have much experience with. Those two rounds were nothing like the system design prep videos I'd seen online. I felt very unprepared for them even after about two months of preparation. Live and learn, I suppose.
Interview Questions (11)
Design a system for a load balancer.
Can you tell me about a time you had to overcome obstacles in a project?
Tell me about a time you had a conflict or disagreement with a colleague.
Did you ever try to change something outside of your responsibility?
How do you handle vague requirements in a project?
Convert an array of numbers as characters to an actual integer. For example, convert ['1', '2', '3'] to 123.
Design a client library for a mobile phone that downloads media files (image, video, music/sound).
Preparation Tips
My preparation primarily involved practicing problems on LeetCode, which proved very beneficial for the coding rounds. I also utilized Facebook's own interview prep coding problems, though I found them generally easier than those on LeetCode. For system design, I prepared for about two months, focusing on distributed systems design. However, this preparation did not align well with the specific questions asked during the actual interview, particularly the product design aspect and the component-focused system design.
Summary
I successfully navigated my phone screen interview at Facebook for an E5 role in the Bay Area, demonstrating optimal solutions for two coding problems and ultimately receiving an offer.
Full Experience
I had my Facebook E5 phone screen interview, which lasted for 45 minutes. We started with a brief 3-5 minute introduction. The interviewer then clarified that the majority of the time would be dedicated to problem-solving, reserving the last 5 minutes for my questions.
The first question I encountered was Add Binary. Having practiced this problem before, I immediately explained the optimal approach, achieving a time complexity of O(max(l1, l2)). The interviewer was satisfied with my algorithm, and I quickly proceeded to code the solution in Java. After coding, I walked through my solution with a few examples. This entire segment, including discussion and coding, was completed within 10-15 minutes.
/** * Time Complexity: O(max(l1, l2)) * Space Complexity: O(max(l1, l2)) * l1 = Length of string A, l2 = Length of string B. */ public String addBinary(String a, String b) { if (a == null && b == null) { return "0"; }StringBuilder result = new StringBuilder(); int i = a.length() - 1; int j = b.length() - 1; int carry = 0; while (i >= 0 || j >= 0) { int sum = carry; if (i >= 0) { sum += a.charAt(i) - '0'; i--; } if (j >= 0) { sum += b.charAt(j) - '0'; j--; } result.append(sum % 2); carry = sum / 2; } if (carry == 1) { result.append('1'); } return result.reverse().toString();
}
Following that, the second question was Merge Intervals. Again, I was familiar with this problem and presented the optimal O(NlogN) approach. Once the interviewer approved the algorithm, I implemented the solution in Java and demonstrated its functionality with test cases. This question took approximately 20-25 minutes to complete.
/** * Time Complexity O(N log N) * Space Complexity: O(N) (Including the List<int[]> result) * N = Length of input array. */ public int[][] merge(int[][] intervals) { if (intervals == null || intervals.length <= 1) { return intervals; }Arrays.sort(intervals, (a, b) -> (a[0] - b[0])); List<int[]> result = new ArrayList<>(); int start = intervals[0][0]; int end = intervals[0][1]; for (int i = 1; i < intervals.length; i++) { if (intervals[i][0] <= end) { end = Math.max(end, intervals[i][1]); } else { result.add(new int[] { start, end }); start = intervals[i][0]; end = intervals[i][1]; } } result.add(new int[] { start, end }); return result.toArray(new int[result.size()][2]);
}
With a few minutes remaining, I took the opportunity to ask the interviewer two questions about their current work at Facebook. I was thrilled to later receive a call from the recruiter informing me of positive feedback from the hiring committee and that an offer would be extended.
Interview Questions (2)
Preparation Tips
My preparation focused on completing as many LeetCode questions as possible, especially those recently tagged with Facebook. This approach proved highly beneficial, allowing me to solve both interview problems optimally and within the strict time constraints.
Summary
I recently completed a virtual onsite interview for an E5 Software Engineer role at Facebook in the Bay Area, which consisted of two coding rounds, one system design round, and a behavioral round that also included a small coding problem.
Full Experience
I recently had a virtual onsite interview with Facebook for an E5 Software Engineer role in the Bay Area. The process involved four 45-minute rounds: two focused on coding, one on system design, and a behavioral round which surprisingly also included a small coding problem.
1st Coding Interview
The first coding round started with a problem similar to Intersection of Two Linked Lists, but presented in the context of a binary tree. I was asked to find the Lowest Common Ancestor (LCA) of two nodes in a binary tree, where each node only had a parent pointer. Initially, it took me a moment to connect it to the linked list intersection concept, but I eventually figured it out without any hints. I implemented a two-pointer solution in Java, achieving O(n) time complexity and O(1) space complexity. After walking through my code with a few examples, the interviewer seemed pleased. We then moved to a second coding question: Leftmost Column with at Least a One, which was identical to the problem found on LeetCode. I provided an optimal solution for this as well.
2nd Coding Round
In my second coding round, I tackled two problems. The first was Range Sum of BST, and the second was Trapping Rain Water. Both were exactly as they appear on LeetCode. I developed optimal solutions in Java for both. For the first question, the interviewer requested a few examples and base cases to test my solution. Unfortunately, we ran out of time before I could thoroughly walk through the solution for the second problem.
System Design Interview
The system design interview challenged me to design a Proximity Server. The core requirement was to, given a location's latitude and longitude, find all nearby places within a specified radius. I began by clarifying the essential features and discussing the design goals and potential scale. I then outlined a high-level design of the APIs. A significant portion of my discussion focused on the data structures and algorithms for efficiently finding nearby places; I proposed using a Quad Tree to represent geographical grids and store locations. I also delved into sharding strategies, briefly explaining Consistent Hashing, and the importance of caching for quick data retrieval. Additionally, I touched upon the application layer, mentioning stateless machines and load balancers. I later found a helpful video on this topic here.
Behavior Round
The behavioral round primarily centered on my projects at my current company. The interviewer also posed questions related to conflict resolution, how I've made an impact outside my immediate team, and my approach to problem-solving when faced with limited information. For each of these, I drew upon my past experiences to provide concrete examples. Towards the end, a simple coding problem was introduced: Valid Palindrome. I believe I performed well in this round, effectively communicating my experiences and solving the coding challenge.
Overall, I feel the interview went quite well. I've received an email from the recruiter indicating that it might take up to a week to hear back about the result. So, I'm keeping my fingers crossed!
Interview Questions (7)
Questions covered my projects at my current company, conflict resolution, demonstrating impact outside the team, and approaching problems with limited information.
Preparation Tips
My preparation journey was significantly aided by the LeetCode Community. Their support and resources over the past few months were invaluable in honing my skills. For a more detailed breakdown of my strategy, I've shared my full interview preparation journey here.
Summary
I successfully interviewed for an E5 position at Facebook in the Bay Area after a referral from a friend. The process involved a recruiter screen, a technical phone screen with two coding problems, and a virtual onsite covering two coding rounds, a system design challenge, and a behavioral round, ultimately leading to an offer.
Full Experience
I was referred by a friend at Facebook, which initiated my interview process for an E5 level position in the Bay Area.
Recruiter Phone Screen
The recruiter asked me about the details of my current job, my reasons for leaving, the status of any other ongoing interview processes or offers, and general questions like my visa status. We also discussed the target level for my interviews.
Technical Phone Screen
This 45-minute round focused purely on coding. After brief introductions, we dove straight into two questions. I spent about 15 minutes on the first question and 25 minutes on the second.
The questions were:
Virtual Onsite
All rounds during the virtual onsite were 45 minutes long.
Coding Round 1
I was given two coding problems in this round:
Coding Round 2
This round also had two coding questions:
System Design Round
I was tasked with designing the Facebook Status Search system. I utilized an iPad to explain my thought process and draw the architectural diagrams. A related discussion can be found here.
Behavior Round
This round covered various behavioral questions including discussions about my recent projects, reasons for leaving my current company, conflict resolution strategies, and experiences with difficult colleagues. Additionally, there was one coding question that was similar to First Bad Version.
My years of experience are 11. My compensation before the interview was $310K, and after receiving the offer, it increased to $381K plus a $50K sign-on bonus.
I wish everyone the best of luck with their upcoming interviews!
Interview Questions (8)
Summary
I recently completed my onsite interview for an iOS Engineer role at Facebook in London. The interview included coding, behavioral, and a system design round where I had to design a messenger app. I believe my performance was strong and I'm currently awaiting the outcome, hoping for an E5 offer.
Full Experience
I recently completed my onsite interview for an iOS Engineer position at Facebook in London. I have 5 years of experience (YOE).
In the first coding round, I tackled two standard questions, though not from LeetCode. I performed well, successfully running tests for the first question, and even though I couldn't run tests for the second due to time constraints, the interviewer seemed fine with it.
The second coding round presented one medium and one hard question, both of which I was able to solve in O(n) time complexity. This round also went smoothly.
The behavioral round involved standard questions about challenging work and my motivation for joining Facebook. I effectively answered these by sharing past examples from my career.
The fourth round, iOS System Design, was particularly engaging. My task was to design a messenger app. I felt this round went great, as I was able to discuss multiple architectural approaches for each component, along with their respective tradeoffs and scalability considerations.
My pre-screening took place in March, but the onsite interview was scheduled for October due to a hiring freeze for E4 positions. Overall, I feel my rounds went well, and I'm optimistic about potentially receiving an E5 offer. I'm now waiting for an update regarding the hiring freeze and my candidacy.
Interview Questions (1)
My task was to design a messenger application. During the discussion, I explored and discussed multiple architectural approaches for various components, emphasizing their tradeoffs and scalability implications.
Summary
This is a comprehensive collection of interview experiences at Facebook, compiled from various LeetCode posts up to June 7, 2020. It covers questions encountered in Phone Screens, Coding Rounds, Design discussions, and Behavioral interviews, offering insights into the breadth of topics tested.
Full Experience
I've gathered a wide array of questions encountered by candidates interviewing at Facebook, organized by interview rounds. The compilation includes numerous Data Structures & Algorithms problems, often linked directly to LeetCode, as well as custom problem statements. System Design questions cover a range of topics from debugging server issues to designing scalable services like Google Search, Instagram, or file storage systems. Behavioral questions delve into common scenarios, personal experiences, and career aspirations. This collection aims to provide a broad overview of the types of challenges faced in Facebook interviews.
Interview Questions (94)
You are given a mn grid. You are asked to generate k mines on this grid randomly. Each cell should have equal probability of k / mn of being chosen. Your algorithm should run in O(m) time.
Given two strings, return true if they are similar, meaning only 2 positions in the strings are swapped (e.g., 'face', 'eacf' -> true because 'f' and 'e' are swapped).
Given two binary search trees, merge everything so it prints inorder.
You have an API to check if it's possible to move left, right, up, down and one more method to check if current position is the last one. Find the shortest way to the last position. You don't have any data structure - only API.
Calculate tax if Salary and Tax Brackets are given as a list in the form [ [10000, 0.3],[20000, 0.2], [30000, 0.1], [null, .1]], where null represents the rest of the salary.
Is there a way to reach (0,0) from a mXn matrix to (m-1,n-1) position and give the path.
N-ary Tree with each node having a boolean flag. Traverse all the nodes with only boolean flag = True. Return the total distance traveled from root to all those nodes.
A remote server is not responding. Debug the issue, covering the entire TCP/IP stack (fragmentation, ICMP, etc.), machine metrics (vmstat, iostat, strace etc.), and describe virtual memory in terms of demand paging.
Two machines are connected, suddenly one machine is responding slowly. Identify potential causes (NFS, Networking, Kernel resources like buffer-cache, inodes, virtual memory) and discuss diagnostic commands (strace, lsof, readlink, cat /proc/pid etc).
Design a system to copy resources from N sources (N < 10) to M sinks (M could be 10k/Millions etc.).
Design a scheduling service, focusing on a SQL approach. Discuss concurrency issues, table schemas, and composite keys.
Design a type-ahead feature for a website, discussing various data structures, their advantages/disadvantages, and different cases/scenarios.
Design a service for music providers (like Spotify, Apple Music) to display the top 10 songs played by each user. Includes designing ER tables and APIs.
Tell me about a time when you had to give someone difficult feedback. How did you handle it? What kind of feedback did you give?
Tell me about a time when you had a conflict with a manager and how you resolved it.
Which environment is best to you to work ?
Tell about best decision in your life from childhood ? Decision that changed your life
On which topics you want improve? What are doing to impoving on that topics ? Did you try build project on that topics ?