I have a CS degree and I've been working as a software dev for about 2 years now for a smaller company doing backend stuff. I want to make the switch and get a job at one of the BIG 4 tech companies (Amazon, Apple, Google or FB).
Before I start applying I want to make sure I'm ready for the technical interview since I've heard the interviews are intense and I need several months to prepare for it. I'm up for the challenge and I want to do it, but I'm not sure where to start.
Where and how should I start getting ready for a technical interview? How much time would I need to be sufficiently prepared for one?
EDIT: Feel free to share links to Github repos, checklists and study plans, they are very helpful too!
I've worked at Microsoft, Adobe, and Twitter over the past few years. I've also received offers from (or interviewed with) Google, FB, Dropbox, Uber, etc. I would recommend:
https://www.pramp.com - 1 hr online interviews where you interview someone and they interview you back. Go through ~20 of these to get really comfortable solving problems while talking through them. They also give you the optimal solution at the end. This will prepare you really well for the initial technical phone screenings.
https://leetcode.com/ - collection of 700+ interview coding challenges. You should be able to solve any random medium difficulty question within 15 minutes if you want a shot at the companies you listed. Keep doing a couple of these per day till you get really good.
"Elements of Programming Interviews" or "Cracking the Coding Interview" - Read through either one of these to get an overview of the interview process and what companies expect.
Polish your resume - This is only important to get the interview. Once you are interviewing onsite the resume doesn't matter much. Here is mine to give you an example. http://joshcockrell.com/joshua_cockrell_resume.pdf Feel free to send me yours if you want some feedback.
I disagree with most of the advice here. There's only one thing you need to be able to do: buy the "Elements of Programming Interviews" and be able to solve any problem in it within 30 minutes. Cracking the Coding Interview's questions are way too easy. If you buy the book and study those questions you're just going to be disappointed that the questions you actually get are much harder.
Investigate each company individually to determine whether or not you even want to spend the time. Each one is very different with a different culture and different pros and cons. Wanting to work for one of the big 4 doesn't mean any of them.
A couple of years ago I was in your position.
I went through the whole process with Google and Amazon, just to get rejected at the end. I prepared by cramming Cracking the code interview in 2 weeks and reading classic algorithms books; it wasn't enough to meet the bar (anecdotally I remember Google being much harder than Amazon).
Fast forward another couple of years and I got contacted by Microsoft and Amazon recruiters, went through and got offers from both companies. Recently I also got approached by a Google recruiter but I politely declined since I recently started a new position.
What changed in those couple of years?
This time around I prepared by solving problems in leetcode and other platforms a longer time. For about 2 months I spent almost all my free time writing code out of the office.
But that's only half of the story. I noticed that as you apply to more senior roles, the interviews focus more on behaviour and experience rather than hardcore programming. I would say that the weight of these factors was between 2x and 2.5x this time around.
Finally, I myself changed during that time. I adopted an 'abundance mindset', where opportunities are plentiful instead of single chances that we can't let get away. Now I see interviews as two way streets where companies need you as much as you need them. Lastly, when I go to an interview I don't see it as 'I practiced x days for this interview', but as 'I have 10 years professional experience, if that didn't prepared me for this job, no amount of cramming in a few days will'. That doesn't even touch the
So my advice is to just relax, do your best and don't get discourage if you are rejected. If your goal is to break in one of the big 4, continue accruing experience and improving yourself and try next time, it will just get better.
P.S.: In my comment I don't mention luck, but personally I think that it also plays a huge role in getting a job. One time recruiters from a company got in touch with me; two years later they wouldn't even read my CV for the same position. Get to the right position at the right time, and the right set of people can be the difference between an offer or none. It's hard to come to terms with the idea than something other than yourself can dictate your future, but the sooner you do it, it will save you a lot of grief.
10 years old but probably still worth a read:
Beats me, I've been rejected by all 4, along with Microsoft and Netflix :) My only advice would be to take a refresher course on Data structures and algorithms (Coursera, et. al.,) and just practice doing programming problems. I've used Crack the Coding interview and some online coding sites (topcoder, etc.) which has definitely helped improve my interview performance. I'm a lot more confident nowadays, at least :)
Prepping for these interviews is much like studying for the SATs - it's not about measuring how smart / talented you are, but how good you are at taking these tests. I say this as a primer only because rejection sucks, but knowing that it's not a dig on you personally, that it's more of a numbers game, can help you stay positive through this whole process.
I've heard a lot of success with this method:
1. Start with https://www.firecode.io/ - it's a gentler intro than most of these resources.
2. Once you can manage FireCode, move onto LeetCode as others have suggested. More specifically, the ones that have been flagged as interview problems. If you can get through the Hard ones in 30-45 min, you're good.
3. Once you feel confident in steps 1 and 2, use https://interviewing.io to take a bunch of mock interviews. The interviewers are generally from these companies, so if you do well, you'll automatically skip the phone interview and land right in the main interview space. And if you don't, no worries, you're getting practice in an interview setting, and not just in answering problems.
3b. As a supplement to #3, Google and Facebook actually hold info sessions on their interview process. My friends used those and landed at both places, respectively. They both said the info sessions were pivotal for them.
The average time my friends spent on this process was roughly 90 hours total. So if you worked on this full time for 2+ weeks, you should be prepared, or 2-3 months if you did a little bit every night while working your current job.
Best of luck!
Do a lot of practice problems. There are plenty in the book "Cracking the Coding Interview" Use the tools you'll be expected to use for an interview with one of the top 4 companies (i.e. internet text pad, pen and paper, whiteboard) Do several problems every day and you'll be ready in a few months. Make it your 9-5 and you can be ready in a few weeks.
It's all about practice! Good luck!
Also, if you can get in touch with a recruiter at those companies, they'll give you tons of helpful tips (mostly just how to practice and what to practice)
First, I don't know what attracts you to the BIG 4 tech companies and it would be nice for you to share more context and perhaps share a bigger overall picture. For example, are you excited about their backend and scalability or the amount of data they have? Do you think they can offer more money? I can share some my journey (graduated in 2012 with CS undergrad) and hopefully this can help you (or other HN readers) make better/more informed decisions. My primary motivation for picking and switching jobs is money.
To get my first job as a software dev, I prepared by doing algorithms (using cracking the coding interview book). You really don't need any other resource, I did every the problem in the book at least 5 times. The most important lesson I learned here is to constantly redo problems you struggle with until you know it like the back of your hands.
In my first job I realized that I like building tools that people use so I focused on learning front end development.
I recently interviewed for front-end roles and I've noticed a shift from algorithms to practical tasks (building x app). Out of the 9 onsites I did, I don't remember doing any complex algorithms, but instead there were alot of hands-on coding to make sure I can code up challenges on the spot. For front end engineers, I think algorithms is no longer a point of focus. I don't think there are any practice resources that focuses on front end development, but my friend is building https://jsstation.com to address this.
Dropbox, Amazon, Facebook offered separate interview tracks for front-end development and generic software engineering.
I ended up receiving a few offers and I was quite surprised by the numbers. The top 3 are all between 250k - 310k total compensation packages, the lowest base among them was 180k and the highest base was 210k. I'm quite surprised at the big difference between what Glassdoor shows and what my friends and I are making, perhaps someone here could shed some light.
I think you graduated 4 years after me, I hope you find some value here. Good Luck!
I met Parker at MicroConf a couple years ago and was really impressed with Interview Cake.
I can't speak firsthand but it might be exactly what you're looking for...
I currently work at Google and have received offers from Facebook and Amazon. I don't have a CS degree.
Interview Cake should be your first stop - the questions are the closest to what you'll actually see in a tech giant interview, so the effort to reward ratio is good.
LeetCode is your bread and butter. With any remaining time, grind these problems.
Cracking the Coding Interview is both too easy and too difficult, very few questions hit the sweet spot. Read the section on behavioral questions though. Elements of Programming Interviews is too challenging, I'd skip it.
Optimize for number of problems solved, which means coding in the site's online text editor. I wouldn't code in your own personal text editor because you do want to avoid autocomplete. If you feel like you need practice actually writing on a whiteboard, you can do that a few days before the onsite.
Also, I highly recommend the book "Elements of Programming Interviews".
The same way you prepare for any job for a single specific company. Read everything the company has published so you can convince them you buy into whatever their vision is. Don't propose any ideas or theories or preferences for anything that deviates from it. Learn their every product and how they all work and discuss the details in the interview so they know you "get it" and are already familiar with everything.
Aside from this, getting accepted is merely about convincing your interviewers that you have what they're looking for. Build a rapport, be confident, don't be nervous, be funny if possible, but don't come off as arrogant or annoying. Most companies prefer experience over technical mastery, so don't focus on explaining technical details - though obviously you should fully explain it when they do get technical. Answers you give should touch on every topic that the subject would typically involve, with as little detail as possible, and if they ask more specific questions, dive into it. You have to show a broad understanding as well as minute attention to detail. While not being too serious. Don't voice any negative opinions, nor any preferences.
Obviously ambition is important to you, so definitely get some books on management and business so you can rise up in the ranks quicker. Being able to speak to the business side will endear you to managers and executives, and if you can impress them in an interview you're basically a shoe-in, because politics. Yay for big companies.
Big companies generally think all they need to do is follow trends in order to lower costs and increase productivity, so study up on every modern trend that tech companies latch on to. Big data/machine learning/automation have been in vogue for a while, as is obviously agile methods, devops processes, product lifecycles, etc.
At the end of all this you may realize, hey, this sounds like I have to support ideas or practices that I don't agree with. And that's because you're trying to work for a company, rather than trying to work for yourself. Eventually you may realize you'll be a lot happier not trying to get hired by a specific company, and simply try to be hired by the people who value who you are, rather than who they want you to be.
Try "Cracking the Coding Interview" by Gayle Laakmann McDowell. There's some pretty good coverage of what you might find in an interview. I think what struck me is the author has worked for at least three of the companies you listed, but never seemed to stay at any of them for very long - it makes you wonder if working for the big four is really all it's cracked up to be (pardon the pun)!
Google has also created some interview videos you can pick up on YouTube. They are (obviously) staged, but are quite interesting and informative.
We need university curriculum for these. BSc/MSc in Technical Interviewing and all doors are open!
Focusing on a limited set of resources in a way that exercises your problem-solving skills would be the key. Here is one plan:
1) Select a category such as "stacks and queues" from the Cracking coding interview (CCI) book and read all the questions. This will give you a sense of the type of questions being asked.
2) Sign up for the algorithms 1 and 2 courses (https://www.coursera.org/learn/algorithms-part1, https://www.coursera.org/learn/algorithms-part2) in the audit mode(free). Pick the correct modules such as "stacks" and "queues" and watch all the videos.
3) Come back to the questions in the book CCI and try to solve the problems yourself. If you get stuck, look at the solutions for hints but still try to do them yourself.
4) Do the same for all major topics such as strings, linked lists, recursion etc.
Unfortunately, you are not going to remember all of you've learned. You need spaced-repetition so repeat the above method 2-3 times for each topic.
Once you have the foundation, you will be able to tackle the harder questions that you may find somewhere else or in the interview.
I received an offer from one of these companies not too long ago - here's my two cents on the subject:
• I was reached out to, rather than applying for a job. In the past I'd tried applying for jobs at some of the companies but didn't hear back - so I focused on going as far as I can without a job somewhere like this. Start a blog, create some great side projects that receive some attention, etc - eventually companies might start approaching you (and even if not, your resume will look more appealing, and you've grown/learnt a lot which is helpful for any job you're in).
• There's a lot of resources out there on interview type programming questions. Yeah, they're helpful, and you should do them - even if just to learn more and become a better developer. There's much more to the interviews than a binary yes/no whether you solved the question or not though: being able to share your thought process, quick thinking, showing creativity and good intuition etc are all just as important.
• Experience, great social skills, and in depth knowledge is worth more than a few days cramming for a coding interview. It shows during the interview process (especially architecture or cultural interviews). I think interviewers are looking for those things as much as they're looking for someone that's smart and can solve a few tough questions on the spot.
Summing that up - focus on being a better developer, learning more, and becoming an expert at what you do. Don't make your end goal a job at one of those companies. If you don't get a job at one straight a way, it's no big deal - who knows, in a few years you might, and if you didn't, you learnt a lot which will help you anywhere you are.
For my last round of interviews, I chucked Crack the coding interview and used www.leetcode.com and http://highscalability.com/. Some of the better companies also have a culture-fit round, whatever that means. That's very important, so prepare for it. Google around for what sort of questions they ask.
From my perspective, I'd try walking before you run. You need to get the interview first.
Although you hear of Google hiring thousands of developers a year, and those that do get hired having a 5% chance of success or whatever, that doesn't mean that Google are guaranteed to offer you an interview. I've applied a handful of times, and despite having a Computer Science degree, startup, and small/large agency experience I've never managed to get past the application stage at Google or Microsoft. Microsoft and Amazon contacted me in the past, but neither actually resulted in an interview. Google rejected me within days of applying on both occasions I applied.
With that in mind I would recommend that you follow a loose curriculum, and just focus on becoming the best developer you can be. I'm currently working through John Washam's repo on getting a job at one of the big four, and it was good enough to get him through the door at Amazon.
In general I think it's a good idea to rethink what your aims as a developer are every now and then, regardless of what company you want to work for. Recently, I was a senior .NET developer at a large agency working for big-name clients, but I often felt like I wasn't a "proper developer" because I worked on the .NET stack, and because for the past few years I've felt complacent in a senior-level role. To combat this, I started learning some new languages on the side, and eventually moved to a new job where I've switched from being the go-to guy for .NET to the goes-to guy for working on a Linux stack, and I hope that over the next few years I'll pick up enough knowledge that I can throw an application in again and not get immediately rejected.
I've passed a good few of these interviews. The other advice is good. I just wanted to add that the thing that always gets me is that by the 4th or 5th hour in the on site interview, I start getting tired and start slipping up. You don't really often get a great break in the process. The jet lag from flying to the onsite is also a killer.
There is a Discord started by a small group on Twitch who have streamed mock interviews (mostly last summer): https://discord.gg/ndFR4RF
Facebook recruiter (and people I know who worked there) literally tell you to buy and study “cracking the coding interview.” I did buy the book but I’ve never moved forward with the interview because I really didn’t like to commute south when did it for a year and I like pairing too much.
Cracking the Coding Interview: 189 Programming Questions and Solutions
Besides all the tips you already got I also recommend pramp, I tried it a couple months ago and had a good experience.
Besides the coding part you should also think about your non-coding interviews. There will be interviews where you'll be asked about troubleshooting and technology in general. I don't have a good source for that but you should think about that side that is just as important as your coding interviews.
The Facebook interview process was a bit of a joke. Writing code without being able to evaluate and test it is for people just out of school, but that's what they gave for an editor (which didn't have emacs keybindings either IIRC, just some generic code sharing site). Sometimes people with experience do things differently and have learned to USE the computer and not do everything in their heads. Age and skillism to the extreme. I suspect they just want coder drones.
https://us.teamblind.com/article/sharing-my-offer-numbers-fr... provides some insights into how to go about interviewing with top tech companies, preparation, offer info etc.
I wrote this a while back: https://www.linkedin.com/pulse/how-prepare-technical-intervi...
Have a look at this https://github.com/jwasham/coding-interview-university#algor...
I failed sys design interview at FB and it doesn't look these GitHub repos about sys design helps that much. Could you tell me what book should I read to get better at it?
Leetcode is the site I used.to practice coding for an interview.
Interest yourself in your interviewers.
Met googler, APLers, and FBers, something was off.
If you feel confident I am wrong, it will boost you anyway. So rather than prepare yourself to be interviewed by X,Y,Z, think of preparing them nicely to who you really are with all your strengths and probably weaknesses.