Interviews, Interviews, Interviews!!
More than 1000 applications, 57+ interviews, and a FAANG offer!
The grind -
I was doing an internship with Intel, Ireland and it was about to complete in December 2020. I already had a good understanding of Data Structures and Algorithms(DSA) but I was out of daily practice. I started the daily grind on LeetCode(LC) in early July.
With an everyday job in mind, I never really got to do a lot. 2 problems/day with a quick revision of each associated DSA topic from GeeksForGeeks. (Maxing out to 5 problems/day over the weekends)
By 15th September, I was well versed with the needed practice on BFS, DFS, Backtracking, Trees, Graphs, Hashmaps, Strings, Stacks, and Queues. I took one more week to get good hands-on over basic Dynamic Programming problems and some advanced Data structures like Tries.
Interviewing phase -
I started my interview season by bombing the first interview with ByteDance. (Well, to be honest, it was until date one of the toughest codepair rounds I have been through). I knew I had to improve so I started practicing random problems just to be in sync with my understanding of DSA.
[I appeared for many interviews but I would like to share my experiences with a few big ones here]
After a few initial interviews at firms like Amazon, Microsoft, Workday, LinkedIn; I realized that I was doing good at code pair interviews. So I pivoted my focus from DSA to core Software Engineering. Alongside being in sync with DSA, I started learning more about Backend engineering, System Design, Database design, Distributed Systems, and Networking.
I had the next rounds of interviews scheduled for all the aforementioned companies in mid-October.
LinkedIn:= Couldn’t clear their second interview round.
Microsoft:= Cleared their 45 minutes of interview round but the process got delayed because of Covid. (Heard back from the HR before a week for scheduling the next round)
Amazon:= Cleared their 3-hour interview rounds(LP’s + HR + Coding) and they had a final round scheduled for next week. I cleared the final round as well and I received an email from Amazon HR that I have been selected for the role. After 20 days, I received another email saying they have canceled the role right now because of Covid.
Workday:= It took them almost a month to get back to me. And they said I have cleared their interview process. We had a salary discussion round and I said I’m happy with what they are offering. In mid-November, HR contacted back saying that they found somebody else with more years of experience and they will be retracting my offer.
I had applied in mid-August and I received an email to schedule the initial phone screen in the month of November.
I was already halfway through my preparation with 2 retracted offers.
After the initial call, I had a coding test on Hackerrank for 90 minutes.
3 questions all of which were variations of standard LC style questions. [2 medium, 1 easy]. I passed all the testcases and was waiting for my next round.
The next rounds at Apple were all phone screens.
1st Round => (120 minutes)
- Data Structures and Algorithms — Analyze time complexities for different stub codes, whiteboard algorithms for 0/1 knapsack and fractional knapsack, explain tail-recursive call in depth.
- Lots of C++(runtime polymorphism[vtable and vptr in-depth], volatile, threading, STL implementations [list vs vector, unordered_maps vs maps], garbage collection, move semantics, unique_ptr, pointers, references)
- Operating Systems(virtual memory, segmentation, page faults, caching[L1 vs L2 vs L3], memory management algorithms)
- Web development & JS(Async calls, what is hoisting in regards to JS keywords, alternatives to REST API’s, couple of questions on NodeJS event loop internals, what is event-driven architecture, sessions vs cookies vs JWT in regards to security, basic cipher questions)
2nd Round => (120 minutes)
- Walkthrough on the CV and my experience. Questions about my speaking engagements at different PyCon’s(Python Conferences globally)
- Lots of Python interview questions. A few questions tailored to my understanding of Python features and their internal implementations like (GIL, Asyncio, Multithreading, Subinterpreters). [PS — I had done a lot of research on core C code that powers Python which helped me get through these questions]
- Brief System design question — Design a rate limiter. [The interviewer wasn’t interested in knowing much in-depth. He had given me a situation and I had to fabricate the rate limiter according to conditions.]
- Many questions on Pub-sub architectures, Microservices, Kafka & Redis caching because I had an experience working with them.
- Few questions on Load balancers & Reverse proxies. Also continuing discussion on Nginx and Varnish.
- HTTP 2 vs HTTP 1.1 and major changes.
- Two brief questions on testing my design patterns knowledge. (On what design patterns are chat applications like WhatsApp and Telegram based. Explain factory vs abstract factory design pattern in regards to the real-world applications?)
3rd Round => (45 minutes)
- Why Apple
- Mainly behavioral round with standard STAR technique questions.
I received a call from a recruiter on 18th December 2020 that I have been selected for the role but the offer letter will take time because of Christmas. Looking at the way companies have retracted offers in the past, I wasn’t too excited until 7th January 2021 when my recruiter called me again and said “Welcome to Apple!”.
- Data Structures and Algorithms
- List of Youtubers who teach DSA.
- Aditya Verma’s youtube channel. He is the best when it comes to teaching DP!
- EPI (I have completed it page by page and it's one of the best books for cracking the interview.)
2. System Design (I am still not very confident with this and not the best person to ask for resources in this case)
- System Design Primer
- Grokking the System Design Interview on educative.io
- Low-level Design primer
- Designing data-intensive applications book (Amazing read)
- Web scalability for beginners book
- Gaurav Sen’s channel
- Tech Dummies by Narendra
3. Backend engineering
- Software Engineering by Hussain Naseer — the best channel for backend engineering
- Developer conferences talks on youtube. [PyCon, Devoxx, InfoQ, DevConf, RustCon, CppCon, Google tech talks, etc.] — They have taught me more than anything else.
- Company engineering blogs
- Head First design patterns book
Final thoughts -
- Interviews are not just about LeetCode and Data Structures. They test your core Software Engineering skills. Learn about them instead of just focusing on LC grinding.
- Give yourself 6 months and you will sail through the SE interviews at most of the companies. (The interview system at most of the companies is completely broken!)
- Don’t prepare for company-specific questions or mugging up solutions to the questions. You will fail most of your interviews by doing that.
- Selection email for a role/offer letter is not equal to job confirmation [I have had terrible experiences in the last few months]
- Relax, go out for a walk(instead of Netflix), cook something, take a break for a day or two. Divert your mind for some time. You need some time out of work to concentrate well on your work.
- Be confident and most important be yourself. Express what you know and say a no to that you don’t.
Hope it helps someone. Thank you :-)
And if you want to talk more, you can connect with me via -