I didn't think the questions were particularly difficult. Certainly they were (mostly) all solvable in about 20 minutes and the code shouldn't take more than one whiteboard-height. Use this knowledge to your advantage: you're not going to get a super complicated algorithm that will take lines and lines of code. The problems were also pretty interesting, they weren't textbook crap like "Go through a binary tree in some order". Lots of the questions are online, and you may as well practice using what people have leaked. At least two problems came up in my interview that I'd seen before (one was even mentioned in a Google talk about interviewing technique).
Being concise and correct matters, maybe this was easier because I coded in Python and there's less boilerplate.
My feedback was that they had no problem with my problem solving skills or communication, but that I was simply too slow converting ideas to code. The best interviews were the ones where I finished early and we went on to chat about other problems in a more casual manner.
Similarly test the crap out of your solutions.
1) Make sure you understand what you're being asked to do. Whiteboard a test example without any code at all.
2) Discuss your approach and mention any big O problems (e.g. "I could brute force this by searching all the pairs, but that would be O(N^2)"). Settle on a solution that your interviewer approves of, then start coding.
3) Test your code again with known input/outputs. You should be comfortable using your brain as a REPL.
Otherwise have fun - enjoy the office tour, the free food and drink and the problems. They're all friendly, smart people.
Would I work there? I don't know. If you're good, you can soar in Google. If you're not pro-active, you can rot in a boring department forever. What concerned me is that they couldn't guarantee what job I'd be doing when I started, even though I'd explicitly applied for a niche computer vision role that I was well suited for (PhD level).
Google hires self-taught programmers. But the median autodidact has low ability compared to the median formally-educated computer scientist. Google cares less about credentials than they used to, and even in the early days they were willing [http://www.codersatwork.com/jamie-zawinski.html] to hire jwz-caliber self-taught programmers. But your interview performance must be on par with traditionally educated candidates. You must be able to write plausible code in 45 minutes to solve a challenging problem that can be described in 2 minutes. That essentially requires that you are familiar with fundamental algorithms and data structures (or that you are a genius who can reinvent these on-the-fly) and some popular programming language.
The portfolio doesn't matter very much. The hiring committee will expect if you are young that you are capable of contributing in some way immediately and show promise for doing much more in the future. If you are older they will expect that you have a track record of exceptional accomplishment that they can expect you will extend at Google.
For info about the process, see https://www.google.com/about/careers/. It's going to be (1) submit your application (2) do phone screens (3) do onsite interviews (4) review offer.
The penalty for trying too early is that it will take some of your time to do interviews and you won't be able to try again for a whole year. So you should put some effort into it if you seriously want to work at Google, but you should not dedicate years of your life to taking a single shot at it because you can and many do successfully reapply after rejection.
That is very debatable. You could argue that a large portion of high school grads in the world would be interested in going to Harvard, but they don't bother to apply because they know they have no chance of getting in. In contrast, one's chances of getting hired by Google aren't that easy to assess (there are no standardized tests for example) and also it's easier to apply, so proportionally way more people do IMO.
- go to the root of the problem, run some examples by hand and try to think as a computer. e.g., I was at apple interview and there was this trick question that could be solved using a modified version of binary search. When I ran some example I kept asking myself "if I know that this element in the middle of the matrix is smaller (or larger) than X, what does that mean?"
- be very comfortable about big O notation. If necessary, be ready to present some formula.
- show that you can do the brute force solution. Sometimes the brute force solution seems very stupid (e.g., enumerate all possible subsets and find the best one), but you need to say it!
- most of all, be confident, but not arrogant. It is not the end of the world to not know something, but it is important to show what you do know!
I'm currently working through Cracking the coding interview & Elements of programming interviews but I really need to revisit the fundamentals, specially recurrence relations and calculating the order of complexity for an algorithm but I can't find any resources that are not too academically verbose, I have a really hard time reading mathematical notation.
- Skiena algorithm book: https://www.amazon.com/Algorithm-Design-Manual-Steve-Skiena/...
for this book one can focuses on the first 7 chapters (revision)
- Leet code editorial solutions https://leetcode.com/articles/ . They provide with the solution and complexity analysis of a few problems. I suggest you try to solve and give your complexity analysis then compare it with the "official" one.
Also, google has many other job opportunity than programmer. Try them out, if you are too much google lover.