Ask HN: Senior Positions Interview Prep Resources?
Context: - Dev with 10+ years of experience - Last 2 years in an architect role with technical leadership responsibilities - Planning to apply for senior roles at FAANMG
Question: I am fairly good at solving system design and scenario based questions, but I am confused about what resources to use to prepare for whiteboard/programming questions (not 100% sure if these are relevant at senior level?). Below is the list of resources I was suggested:
1. Cracking the Coding Interview 2. Elements of Programming Interviews 3. Online Judge - LeetCode, HackerRank etc.
I have used cracking the coding interview for my interviews right out of school, but I was told that it is not relevant anymore and I should focus on Elements of Programing Interviews.
Same with Online Judge, I was told to use an online judge (LeetCode, HackerRank) over books.
119 comments
[ 3.5 ms ] story [ 183 ms ] threadWhiteboard sessions focused on algorithms and data structures will probably resemble CS20X college courses.
What you need to differentiate yourself is to learn the undocumented dark arts for whiteboard interviews that the FAANMG are really looking for in a technical interview.
Firstly, [0] explains where these data structures are used in Computer Science and should be a start on implementing them and understanding their complexities and use-cases. The rest from [1 - 4] goes straight into the advanced details of areas like competitive-programming which will give you explanations and clever solutions which are better than the typical DS and algorithm answers that even the interviewers will suggest.
Some of these resources might even give a walkthrough of a proof of these complexities if you really need to convince the interviewer who wants to rigorously test your understanding.
[0] - https://cstheory.stackexchange.com/questions/19759/core-algo...
[1] - http://courses.csail.mit.edu/6.851/
[2] - http://jeffe.cs.illinois.edu/teaching/algorithms/
[3] - http://cp-algorithms.com/
[4] - https://concatenative.org/wiki/view/Exotic%20Data%20Structur...
If you really don't know where to start, you can search and pick a specific topic here to study it in depth: https://github.com/jwasham/coding-interview-university
Personally, If I were preparing for a FAANMG interview, I would contribute to widely known open-source projects that utilise these concepts such as compilers like LLVM, Rust or V8 and operating systems.
Looking at the content it seems like I will have to basically jump through all the hoops that are required for a new grad interview.
I've been in a senior role for 5 years and I somewhat recently interviewed at Google for an SRE/SW position with basically no prep (did maybe two practice exercises) and passed it no problem. I turned them down for a variety of reasons, but if I were to interview again I might even spend less time practicing.
It's true, however, that at some companies, performance impacts leveling and compensation, so there's surely value in being (possibly even over-) prepared.
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...)
It’s nice to glamourize it a bit but you guys make it sound downright mythical.
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.
For sure there is interesting work to be had, but don’t pretend that everyone is toiling away on what you see on GH and HN.
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.
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.
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.
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'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.
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.
where can one (I) test to find his position on it ?
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.
How many years have you been working in SW industry ?
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.
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.
(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.)
Other companies will treat you as more of a human, and less as a cog. In my current job, I asked to see production code when interviewing. I flipped over every stone I could, to know what I was getting into. I saw the good and the bad. FANGs? You must prove yourself to gatekeepers before even knowing if there are teams with personalities you will agree with. You have no guarantee there's something on the other side of the gatekeepers, that you're even remotely interested in.
Money is important, but for a small haircut you can have better WLB, less competitive peers (though still be growing in your career: you can challenge yourself, without being surrounded by hyper-competitive personality types), amazing culture, and a greater level of transparency.
They have a good amount of process to them, but not too much. Silos aren't fortified. There's less direction, but more personal ownership. For someone like me, who doesn't have the most polished communication skills (but is technically proficient), I'm in a position where I can make an impact -- whereas at FANG-type companies, I'd just get ignored because there were too many cooks in the kitchen; too many A-type personalities.
At these slightly smaller places, you have a better chance of getting a seat at the table, and you have more opportunity to contribute to projects that play to your strengths.
I interviewed a couple of years ago at Lyft (for a backend team) and definitely got FAANG-class systems whiteboard questions.
[0] https://news.ycombinator.com/item?id=18782786
Usually frontend interviews just means you're going to get asked frontend and DS&A but some just go really hard with frontend questions.
> There are companies that will pay near FANG levels (maybe 10-15% haircut) without subjecting yourself to onerous completion of hundreds of LeetCode problems.
Some even pay more. I wouldn't say FAANG companies even have the highest pay - a lot of the top-tier unicorns are in the same ballpark range.
> FANGs? You must prove yourself to gatekeepers before even knowing if there are teams with personalities you will agree with.
This is not universally true. From experience, while Google does this for their HQ, they don't for remote offices (where there's more risk you can't find the right personalities). Amazon's Principal Engineer interview loop is conducted by the targeted team. (I actually think this is true for other levels as well).
> Money is important, but for a small haircut you can have better WLB, less competitive peers
Might I ask what companies fit this profile? It seems like a rare find for any company to both pay a lot but not be competitive.
This is not true. Google interview experience is identical everywhere. Source: spent 6+ years at Google, not in HQ.
Honestly, this I'm perfectly fine with -- if you need a calibrated panel to assess your eng bar. What is annoying (the case for Google MTV for me at least) is if gatekeepers block you from identifying if there is potential fit in the first place.
One more option is to do freelance though, that's somehow a mix of both worlds.
> Do you have numbers to back that up?
Do you have a single example of this ?
If i don't have a job with a company willing to sponsor my visa I would have to get back on the boat and leave.
My friends, who are from smaller countries have the privilege but I do not.
Stats from travel.state.gov
https://travel.state.gov/content/dam/visas/Statistics/Immigr...
Could you provide some examples of questions you ask (or perhaps point to similar types of questions)?
OpenAI is paying way more than 420K for ICs [1].
[1] https://www.nytimes.com/2018/04/19/technology/artificial-int...
Once you're at level at one of the heavies, it feels like people move at level, too.
Whereas in some other, smaller companies there are perhaps one or two ICs at that pay level, they have been at the company for a decade, and hold all the tribal knowledge. No one ever gets hired into that type of position.
It would be interesting to see where that fits in a FANG context
In government terms the closest thing I’m familiar with is the assistant US attorney chart which does extend reasonably far without needing to hit the supervisory level.
Responsibility wise GS-15 looks to be around L5 based on how many engineers have achieved it (I assume those earning $140k+ are GS-15):
https://www.federalpay.org/employees/occupations/computer-sc...
https://www.federalpay.org/employees/occupations/general-eng...
No one. I hate ppl here asserting that they landed FAANG like comps without leetcoding.
is this a theme that isn't uncommon in the industry ? I felt that way forever but I didn't want to make impatient conclusions.
You have a couple things mixed in here, some of which ring true to me and others very false. The true ones are the stuff about the interview process. I think a day of whiteboard programming is a poor way to assess experienced candidates. It does make you feel like a cog. (I also don't really know how to design an alternative process that doesn't increase the level of bias.) But most of your stuff about what it's like after you accept an offer rings very false. I haven't worked anyplace with better work life balance (and relatedly, really good family leave benefits) or more opportunities for challenging work and career growth. I don't find it hyper competitive (but I'm never sure how much this is a function of where I'm located or what I work on). You're right about transparency though. Having a full view of what's going on at my company is something I miss from previous jobs.
I work at a small B2B SAAS company. We bill an implementation fee, an ongoing licensing cost, and costs per feature. If I create a new feature for a customer whether it’s a one off integration or something that will be in the product, everyone from the CEO to the customer knows how much value I personally bring to the company. That doesn’t scale and can’t work in a larger company.
I don't agree with this statement that companies outside of FANGs don't do Leetcode interviews.
Leetcode disease has spread to almost all corners of the industry. everyone everywhere is doing leetcode interviews.
> without subjecting yourself to onerous completion of hundreds of LeetCode problems.
Sorry but this is bad advice.
>we use recursion and trees
ok but doesn't everyone though?
Also, "completing" one problem in the context of the above does not mean being able to solve it the first time without checking the solution. It means possibly struggling with the problem for 20 minutes, checking the answer, and making sure you can do it the next day without looking at the answer. YMMV.
Thanks for saying this. I tried leetcode last time I was looking for work and was thoroughly discouraged. This approach makes a lot of sense for someone who's been coding for a long time.
If you do those and cracking the coding interview you should be good to go.
For example, as an interviewer I often ask computer architecture/operating system questions as that’s what someone coming in, slotted into my team, needs.
In general, a lot of coding questions tend to be pattern matching and how fast you recognize the algorithm/data structure required to solve it. Before going in as a candidate, I did 50-60 leetcode puzzles and a bit of Elements of Programming Interviews. I also interviewed at many places for FAANMG readiness.
All said and done, the biggest factor in interviews is luck - from getting a good interviewer to getting a problem that you can easily identify/enjoy solving. All the preparation stuff is just to hone your skills. More you’ve seen going in, the better.
Best of luck!
It helped me figure out a template that I was able to apply for almost all system design interview questions - how to think, how to break-down the problem, what all I should consider, how to stay focused on the complete system instead of accidentally going down a specific component and such.
As to resources - as many have said earlier - leetcode.com this is basically the place to go for problems to practice and there is also really great community. When practicing problems and analyzing answers in the beginning you will find what kind of topics are important and from there you can find more details in the textbooks (it's worth doing that). There is some good content also on Youtube but not all of it is good (despite high number of views and positive comments).
I have gone through some interviews where it is really grueling and mentally taxing. What do you suggest to improve endurance especially mental. It becomes very hard to concentrate on coding after almost 4 hours of interviews.
- You have built and can continue to build real software. You should know how to code fluidly in at least one language, as well as idioms and pitfalls. I don't think this is something you can cram for - you build up from experience.
- Able to describe performance or other tradeoffs. This can be in system architecture down to data structures and small optimizations. If you are rusty on algorithms, this can be studied for.
- Be able to do large-scale systems design from a fairly ambiguous problem statement. Sounds like you've had this experience.
- Potentially do a deep dive in a technical specialty of yours (ML, compilers, databases, etc.).
[Note: I haven't been at Google for over a year so this may be rusty, but did interview lots of candidates while there.]
I wonder how many people are missed in interviews who would make a big contribution to an employer but are lost in the interview process. Often skills needed for shipping quality applications are likely not visible if people only focus on raw programming ability. Maybe it's simply too hard to identify in interview form so everyone just looks at how you write code.
On regular basis I am faced with challenging technical problems related to things that I haven't done before and then with careful research, planning and execution I solve them and our product is going forward and the company is growing so I assume we are doing the correct things most of the time.
And then when I hear from friends stories from their interviews I really get scared that if I apply today I would fail...