Facebook, Apple, Amazon | Production Engineer / EE / SRE / SysDE | London | May 2020 [Offer]
Anonymous User
10819

Hi folks,

I've decided to share my interview experience and results as while preparing for them I noticed the lack of posts describing processes, experience, feelings and results for non-SWE people here (and, honestly, all over the web), so decided to give back to the DevOps community worldwide.

About me:
Staff DevOps (aka Cloud Infrastructure aka CICD aka Automation) Engineer with nearly 6 years of experience in a consulting company focused on eCommerce clients. Built different processes for several clients in the scale from a single team to large departments, automated build & release flows, engaged into cloud transformation (migrations from vendor-locked on-prem solutions to open-source-based GCP/AWS setups with containers, service meshes and immutable infrastructure).

Positions:

  • Site Reliability Engineer in ACI @ Apple - recruiter reached out to me via Linkedin
  • Production Engineer / Enterprise Engineer @ Facebook - referral
  • System Development Engineer @ Amazon - referral

Timeframes:

  • Apple Recruiter reached out to me mid-February.
  • Call with Apple HM in early-March.
  • Referred to FB mid-March.
  • Started my active phase of preparation.
  • EE & PE Phone rounds (mid-March - early-April) with FB.
  • Apple invites to Onsite - set it to early May.
  • FB invites to Onsite - set it to early May, 2 days after Apple.
  • Referred to Amazon mid-April.
  • Coding assignment - late-April.
  • Onsite in Apple & FB - early-May.
  • Verbal results from onsite rounds were 1-1.5 week(s) after the interview date.
  • Phone round with Amazon - mid-May.
  • Negotiations between Apple and FB - mid-May.
  • Signed the offer with Facebook. - 3rd week of May.
  • Invite on Amazon Onsite - late-May, declined.

Total: 2.5-3 months with 1 month preparation for onsite rounds.

Rounds:

  • Facebook:
    • EE and PE tracks were separate until onsite, so there were 1 coding round and 1 Linux Infra round for each of the roles (4 total).
    • Onsite was one set of 5 rounds for both of the teams: Networks, Coding, Linux, System Design, Behavioral.
  • Apple:
    • Call with Recruiter.
    • Hiring Manager.
    • Phone Round with a person on a HM's team.
    • Onsite: 4 rounds rather weird ones: System Design + Prototyping, Linux, another System Design/Coding/Linux (rather a mixed one), final System Design
  • Amazon:
    • Coding Assignment.
    • Phone interview with engineer.
    • Onsite (was going to have) the same structure as Apple and Facebook (but I've declined it as already has signed the offer).

Round Contents:

  • Recruiters:
    • Apple recruiter had some sanity check questions, like "What is container?", "What does ls command do in Linux?"
    • Others didn't have any interview-related questions, probably because of referrals
    • Amazon recruiter contacted me first time after I've passed the phone screening and basically invited me to the onsite round via e-mail.
  • Phone Rounds:
    • Coding rounds (and Amazon's home task) contained easy or medium tasks (F had tasks that you can find here, A&A - unique tasks, but nothing hard).
    • Linux rounds usually have some scenarios: "Here is vmstat output, what can you tell us about the system?", "You have a MySQL server which is reported for performance issues, how would you check it out and find the problem?", where the interviewer drives you to the topics of their most proficiency and interest, trying to find your weak spots.
    • Amazon Phone Screening was like 30 minutes of discussing past experiences and LPs, 15 minutes for Linux, 15 minutes for coding task in a single hour time.
  • Onsite @ Apple:
    • Apple goes through some transformation, as I was told by interviewers themselves, so the structure itself is rather hectic these days.
    • First round was about designing some internal tool to be scaled to perform on hundred thousands of servers. After the initial 'whiteboard' design I was asked to prototype the most crucial components of the system.
    • Next goes rather deep Linux round, where firstly I was asked "Hey, here is the shell, what can you tell me about this system?", where I had to explain why did I understand that this is a RedHat-based root shell in a home directory of the root user. Then I was told to debug a system with some symptoms of issues, so we went down to a rabbit hole of system calls, process structure, ulimits, process status (interrupt- vs uninterruptible sleep), cron, filesystems, NFS.
    • The next one was really strange, it started with Linux-related things, then it was network-related, where I had to describe TCP congestion control, retransmission, segmentation and go through TCP/IP stack, and finished by working on easy-level LC task (I think I've seen it on LC too).
    • Finally, another System Design round without any coding, more about high-level design: stateless components, scaling, storage, load-balancers, authentication, backup & deployment strategies. We also briefly went through CI/CD fundamentals: branching, versioning, code reviews, flows, etc.
  • Onsite @ FB:
    • Networking was a real deep dive into basics of the networks: TCP/IP stack, ARP, DHCP, DNS, HTTP, SSL. The round starts with the default questions like about full network connection from your laptop to servers or "Tell me about your favorite protocol" and goes to the most peculiar details of the stack, found most crucial for your interviewer. I was really challenged with DNS and TCP congestion control mechanism.
    • Coding contained two tasks, one I saw on LC, one was a medium level, never saw it here or anywhere else. I was really afraid of this round, but in fact it was the easiest one.
    • Linux - I'd say, one of the hardest rounds. We've started with basic bash-related question and gone into all the nitty-gritty details of shell, globbing, process and memory management, virtual memory, fork/exec/wait, system calls, signals and file descriptors. The other task was related to troubleshooting, similar to Apple one. It also went really deep with /proc, ulimit, cgroups and namespaces.
    • System Design – that's the hardest part IMHO despite the fact that the assignment was presented in "G---ing System Design", which I used for preparation, but I've drifted myself away from the "ideal" solution and got trapped into my custom one. Second part of the round was about rate limiting design and system protection from such kind of attacks.
    • Behavioral – I'd say, the easiest one for me – working for 5+ years in a consulting company as a DevOps engineer, being constantly in a customer-facing role – you can imagine what kind of BS you go through, so "Tell me how did you handle this or that conflict" kind of questions should not cause any issues. I've had a lot of examples for each of the questions posed by the interviewer, so it was more of a friendly talk.

Preparation:

  • LC: ~150ish, primarily easy and medium ones, completed FB & Apple feature card, tried several mock interviews.
    • Can absolutely recommend Premium - totally worth it because of explanations.
    • April Monthly Challenge really helped me a lot with day-to-day motivation and wide variety of assignments.
    • Participated in couple of contests to get grasp of time and stress myself out.
    • Hard Tasks are not usually asked for PE/SRE roles, but it could be worth trying, reportedly, for the rest of FA(ANG) companies. I've done a couple of dozens, but never met any in my interview experience.
    • Confidence in String, Array, Graph and Recursion algorithms, basic Data Structures (Queue, Stack, Linked Lists, Graphs & Trees) and some more advanced structures like LFU/LRU Caches, Heaps and Tries is more or less required. Dynamic Programming/Memorization/advanced DS to the much lesser extent, I would say, unlikely to be found.
  • Linux Programming Interfaces by Michael Kerrisk - a must-read for any System-related engineer, you can skip code-related parts and focus on the "theory", but it was extremely useful. I've been tinkering (and later working) with Linux for nearly 10 years, but finally understood how does it work under the hood. The book is brilliant, but it's a little bit old, so I've tried to read lwn.net about the newest features in kernel like namespaces and cgroups. It is not a requirement, but in my case worked well as I didn't know the ideal "solution" to the interviewer's problem, but got away with "containerizing" the problem.
  • TCP/IP Illustrated Vol. 1 by Richard W. Stevens - I did not have time for Vol. 2 & 3, but this one was enough, but can recommend reading some RFCs on HTTP(/2). You are not expected to answer global routing questions (BGP, IS-IS, OSPF, RIP), but it would never hurt – there are plenty videos on Youtube, that's what I used.
    • If I had more time, I would skimmed Tannenbaum's "Computer Networks" and played around in Cisco Packet Tracer.
  • System Performance: Enterprise and the Cloud by Brendan Gregg – another look on Linux and networks, but more performance- and troubleshooting-focused one.
  • Gr--- System Design Interview – at least to get an idea on what could be asked in System Design rounds, but it's, I'd say, vague. If I haven't received a voucher from FB recruiter to complete this course for free, I'd limit my self to System Design Primer. However, you might be asked to develop some protocol, e.g. rsync, so there is no good answer how to prepare for this one in fact.

My Feedback:

  • Apple interview was a friendly one, I really enjoyed speaking with each of them, they try to reduce stress during the interview and encourage you to share the ideas to the best extent.
  • Facebook interview is an exam, really tough exam with (sometimes) grumpy professor. I have not felt welcomed in some of the rounds, people keep pressuring you with "Why X? Are you sure? Why do you think it happens?"
  • Despite the tough and thorough interview, I've selected Facebook due to the fact of more streamlined and organized recruiting process (comparing to Apple, where I've felt ghosted a couple of times), ability to choose the team after onboarding and bootcamp, and proposed possibilities comparing to the proposed teams at Apple. I'm a life-long Apple fan, but engineering there simply does not look to me as it is the FAANG-tier. I hope I made a right choice (have not started working for FB yet due to the travel and visa issues).

Conclusion

I certainly won't be your guru with shiny meditation and optimization techniques.

In terms of networking and Linux I can only recommend being rigorous about tiny details as their knowledge really pays off and provides you a positive feedback of interviewer on top of the satisfying feeling of knowing the truth. Even if you do not remember, how exactly pipes in Linux work, you can figure it out yourself and be close to the original implementation if you know the fundamental concepts of Linux or networking protocols.

Coding part for SRE/PE/EE engineers is not as hard as for SWEs at least in Facebook and Apple, but it must not be neglected, you still must show good code, understanding of data structures, O-notation and complexities, and overall design. Do not push yourself with Hard questions too much – I've got a feeling that I was unable to solve any question after couple of months in preparation as I was really challenging myself with the harder and harder assignments.

System Design – well, I guess, that's purely hands-on experience and, probably, some theory background. Due to my rather poor (IMO) performance in this round I've got E4 and not E5 role in FB, but that's fine, I guess. Any suggestions, how to become better in System Architecture are welcomed.

I'm really grateful for Leetcode and its community, which helped me to get prepared for Coding rounds and refresh my knowledge about algorithms and data structures.

I'm looking forward to this new chapter of my life to begin soon.

Comments (16)