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.
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.
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)
10 years old but probably still worth a read:
Have a look at this https://github.com/jwasham/coding-interview-university#algor...
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.
Also, I highly recommend the book "Elements of Programming Interviews".
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.
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...
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.
We need university curriculum for these. BSc/MSc in Technical Interviewing and all doors are open!
Leetcode is the site I used.to practice coding for an interview.
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.
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.
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.