Not sure why you're being downvoted. It's definitely not that hard, and contributing to LLVM/Rust/V8 is not a requirement either (I would still recommend it, but mostly because it sounds interesting and you would likely learn a lot).
Source: interviewed with 3 FANGs a few months ago without any significant open-source contributions, got L6 or equivalent offers from all 3. I also don't have a CS degree, for anyone who would feel discouraged by that.
Edit: I don't want to minimize the effort involved, though—I did spend a lot of time learning algorithms and data structures over the years, but I enjoy learning this stuff and find it far more relevant in practice than most people here appear to think.
When I interviewed at Google they told me to come back when I had more open source contributions. I already had hundreds of thousands of lines in a prominent open source systems project at the time, so they must really want a lot.
The hiring bar at these places is pretty astronomical. Realistically it’s going to be well out of reach for a majority of even the very best programmers in the world.
I'm guessing most candidates don't have a lot of open source contributions, and "more open source" is one of the standard lines when they don't want to really explain why they passed on hiring.
Don't read too much into it. As an entry level applicant you're only getting a small fraction of anyone's attention and will need to apply Hanlon's razor to interpret most of your interactions.
It also depends on the level you're interviewing for. If you're shooting for a mid-level or even semi-senior role, that's very different than if you're shooting for a "has industry-wide impact" kind of role. In the latter case claims of prior impact will be carefully scrutinized to weed out poseurs and liars.
Yeah, it was only a new-grad, entry-level position, and they still wanted a huge volume of open source contributions. I don't know how most people would achieve it - mine were from internships and they still weren't enough.
Sounds insane. Based on our two experiences it seems like the requirements can change a lot. Hopefully if you apply again in a few years they won't require that anymore, but it's hard to say without knowing what are the factors that pushed them to require that in the first place.
Realize that the interviewer wants you to succeed! For an interviewer, a candidate that does great and gets hired is a much better outcome than another hour wasted on a rejection.
(I'm sure they are some toxic interviewers and dysfunctional companies where that's not the case, but you don't want to work there anyway so it doesn't matter.)
A lot of good things flow from there.
First, you should feel a little more relaxed. This generally helps think more clearly, talk more naturally, avoid panicking, etc.
Second, you should shift your mindset to view your relationship with the interviewer as based on cooperation, not antagonism. This generally helps act more friendly and less defensive.
Third, if you were at home cooperating with a friend to solve a difficult problem, would you stay silent, or would you run your ideas off each other? Probably the latter. The same applies here. Unlike your friend, the interviewer is limited in how much information they can give. But again unlike your friend, the interviewer already knows exactly how to solve the problem! So leverage that. Ask them whether your proposed solution makes sense. Ask them whether the time and space complexities of your proposed solution are good enough or if you should keep digging. By the time you start implementing the solution in code, you should be fairly confident that you're going in the right direction. (Sometimes the interviewer won't give much away. Don't panic, it happens—in that case just go for it and hope for the best.)
I think the initial level is mostly a function of experience. Then depending on your interview results it can go up or down. In my case I interviewed at level 5, and did well enough to be invited to come back for another round at 6.
I was super lucky to work with a gem of a recruiter at one of the FANGs who spontaneously pushed for 6 after my feedback from 5 came back positive. The other FANG was more reactive and didn't invite me back until I told them of the competing offer. So perhaps try pushing for it yourself if your recruiter is not as proactive and you feel you have a shot. Worst case they'll say no. (Or they'll say yes and you'll bomb the next round. That's not supposed to reflect negatively on your first round, although it would likely have affected me psychologically and made me less confident during the comp negotiation.)
I ended up joining a company without levels, so I'm afraid I don't have any more useful information for you than what I gleaned as a candidate.
I've done 200+ problems on leetcode, all of ctci, and lots more. Hundreds of hours of prep over the last 5 years. Never received an offer from FAANG after 10+ on-sites with them. Know others with similar experience. People I know who get offers are even more aggressive with prep but also get lucky. (As they sometimes get rejected even when they've received an offer from the company before...)
Are you sure you aren't being rejected for other reasons?
Generally, if you can finish any random medium difficulty leetcode question in 30 minutes, you are at the algo bar. But there's still systems, behavioral, communication, etc.
Almost all feedback I ever received was related to the technical problems when it came to FAANG. When I started out, I understood a bit. I wasn't the top 1% of whiteboarders but lately... That excuse seems weak when I get asked a leetcode hard problem and smash it.
I'm kind of convinced there is something else happening where the person writes down technical performance instead of, "didn't like his shoes" or whatever.
They keep pinging me every six months to re-interview too. They don't like to share why they declined though - so I don't get why they ask for me to reinterview like something magical will change without feedback.
Well on the bright side, if they are inviting you back it means you aren't giving off bad cultural vibes.
My $0.02:
Try to press harder for feedback. I've generally had no difficulty extracting feedback on rejections, especially ones where I could be re-invited back ("well, without understanding what reasons I was passed on last time, it doesn't make much sense for either of us to invest in another round where the same issues may very well exist").
All else fails, consider mock interviews. There's paid services out there that will do this -- and you'll get detailed feedback.
Yeah - I am going to look into mock interview stuff more - hopefully something where it could be in person or at least on camera too. I'll press harder for feedback before accepting another interview loop. I tend to smash most phone interviews - so it's probably something special to the in-person aspect. A lot of my friends think people are writing non-technical things because there's something else more "problematic" for them to say that wouldn't fly in their write-up. Like - "he had rbf", "didn't laugh at my jokes", [insert unacceptable reason #48352], etc.
Sorry to hear that but you really don’t need to be contributing to the projects mentioned to get in. Theres tens to hundreds? of thousands of FAANG employees and I assure the majority are not at that caliber.
It’s nice to glamourize it a bit but you guys make it sound downright mythical.
The problem is that for a FAANMG company to throw a Leetcode question in 2019, it's equivalent to a entrance exam, especially towards thousands of applicants. Eventually, they will use something else to assess your skills that will eliminate many applicants. I wouldn't risk getting eliminated for not differentiating myself.
Leetcode questions are not enough for 'seniors', even as a interviewer, it brings the same good problem solvers, but not enough applying this into practise such as open-source projects / contributions, which is faster to review than these Leetcode questions.
> It’s nice to glamourize it a bit but you guys make it sound downright mythical.
Perhaps not in 2012-2014 but in 2019 it is the reality of many candidates getting a FAANMG level role that have to face a competition of thousands of applications every week.
I wish it were easier than this, but when I look at the following real world open-source projects:
* FB creating the Hermes JS Engine.
* Netflix submitting patches to the Linux Kernel.
* Googlers working on Fuchsia OS.
* Apple hiring dynamic linker engineers for dyld3.
* Amazon writing the firecracker virtual machine.
* Microsoft hiring engineers for Typescript and Chromium.
I think that justifies utilising the data structures and algorithms resources listed above. And now if one told me that they have some contributions to at least one of them, I'd tell them to send a link to the code-review / patch and I'd just bring them onsite and ask more questions about it.
How did you find the motivation to spend 100's of hours for prepping for 5 years? This is really great!
In my case I find prepping really dry and like to work on personal projects and veer off to different technical things that I am curious in.
When I try to solve problems I hate to look at answers and I spend a lot of time sometimes days trying to solve it. What is your approach to solve problems?
Could you please elaborate on how you prepared to a person like me who is aspiring to take a FAANG interview?
I had two long breaks between jobs. I've also had 4 different jobs in the last 5-ish years. So - I've had to do some prep every year. When I hit 1 year at any job - I start prepping again. I prepped probably 200 hours for the first job, 200 for the second, and then 100 for the third and fourth in the last 5-ish years. I pretty much never stay more than a year because it's the only way to get compensation and title to go up at all the companies I worked at.
I'd suggest always working on paper or whiteboard - never use a computer. (You have to emulate the environment) Set a timer for every problem. (1 hour max - aim for 45 minutes on medium/hard when starting out; lower it as you familiarize yourself with a subject) Start throwing data structures and algorithms at the problem (pattern matching them, basically). Solve it or don't. Learn something to take away from it. If you don't solve it, learn how to solve it, and where you were lacking. If you did solve it, be sure to check other solutions because sometimes yours is crap. Practice that thing you were lacking. (Needed to know BFS? Implement BFS from scratch 10 times using spaced repetition) If you're planning on 8 hour study sessions then focus on one type of problem at a time. (BFS, DFS, graph problems, tree problems, binary search, dynamic programming, etc.) Only do those kinds of problems in that session. Set it up like you would for a math class. You do one chapter in that session/day/week/whatever and proceed to do a few chapters (say a BFS chapter, a DFS chapter, and a binary search chapter)... Once you've done a few, give yourself a midterm covering the topics you learned. So give yourself like 2 DFS, 2 BFS, and 2 binary search problems and see if you can solve them in a timed environment. If you rocked the midterm then proceed on to do more chapters and more midterms. If you didn't then relearn those subjects before moving on. Finally, when you feel like you've learned everything then give yourself a final exam to see if you remember everything and can still do it right.
Basically - treat it like a math class. It's not just memorization (you need to memorize the strategies, that's for sure - you need to be really fast at implementing BFS, DFS, binary search, etc. That should be wrote memorization but with a deep understanding).
When I try to solve a problem I generally see the output needed and construct code to get the pattern with a lot of trail and error. I am not sure if I can scale with this. If I am fresh and in flow I can come up with good solutions. If not and I am nervous then I will have trouble solving something as simple as fibonacci.
I sometimes have trouble doing pattern matching where I get confused if the problem is changed slightly and is made tricky. I think this is because I am trying to be too specific with the match and not seeing a generic picture.
Can you suggest how a person with a job can practice so thoroughly? 8 hour sessions everyday is tough maybe on weekends but still is sometimes difficult.