Posted by
Admin on
12/2/2006 12:42 PM |
Comments (33)
I've gone through a Google interview recently and here's my experience. Some details are changed to protect the innocents. :)
Some
background info. I am a fairly senior developer with lots of
experience in many different technical areas. I was thinking of
changing job lately and thought what the heck, let me try Google to see
what's the big deal about their interview process. It's kind of a
challenge and self-assessment.
So I submitted my resume to their
website and waited. And waited for a long while before someone from HR
contacted me (I almost gave up hope). The HR person was pleasant and
wanted to arrange a technical phone interview with me. He said it
would be conducted by a team-lead who would ask tough questions.
The
development team-lead called and we chatted for about 45 minutes. The
questions were all technical but somewhat lightweight. The focus of
the question was quite narrow. I was surprised a "team-lead" in Google
has such a narrow set of knowledge. May be he deliberately kept the
questions easy. I don't know.
Anyway I guessed I made a good
impression because the HR person called back and said the phone
interview went very well. He wanted me to come for an on-site
interview talking to couple developers and again said they would ask
tough questions.
So I went to the on-site interview and met 5
developers, and tried out the Google lunch there. :) The food was free
and was pretty good.
Each session was about 45 minutes are they
were very on time. The format of the interview was pretty much the
same for all developers except one. They asked something special you
have done before but I got the feeling that they really didn't care
much about it. It's more of a scene opener. Next they asked two or
three lightweight technical questions. Then they asked the Puzzle
question. Some asked two puzzle questions, some asked one, some would
ask me to write C code on the board to implement the puzzle. The only
exception was a guy who asked the why-is-manhole-round type of question
and we pretty much spent the whole 45 minutes talking about it. The
last 5 minutes usually were for me to ask them questions.
Again
the technical questions are somewhat lightweight. The coding questions
are antique (I'll come back on that later). The puzzles are just the
standard puzzles that you could have found on the Web. I've aced all
the technical questions and done well on most of the puzzles. There
were one or two puzzles that I stumbled on, which I have seen on the
Web before but don't remember the solutions. (Hey, the puzzles are
just a passing interest, not my main job).
Here's my thought on
the whole process. The interview and questions seem to aim at
evaluating recent graduates, not for senior level developors. They are
really not accessing technical knowledges or skills. It's more like an
IQ test. The technical focus is very narrow and shallow; there's no
breath and depth to it.
The puzzles are a waste of time. I can
understand one or two puzzles from one or two people, but NOT EVERY
SINGLE ONE OF THEM. It shows Google is getting monocultural. The
puzzles doesn't show anything toward doing the job. The puzzles are
well known and their solutions are all over the Internet. I have
extensive experience in many different areas and all of them are listed
on the resume, yet none of the interviewer asks questions related to
any of them. Either they have no clue on the technical details on
those areas or they didn't read the resume.
The coding exercises
they asked me to do were all related to C pointer manipulation. After
I was done I mentioned that I've not have the need to do pointer
manipulation for a long time - I used class/STL/ATL/template in C++, or
Java/Ruby/Lisp/C# which have no pointer. It's like, hello, come to the
21st century. Pointer manipulation is so 80s.
Throughout the interview, they didn't ask one question related to:
- Advance RDBMS concepts and usages (one guy asked a very simple SQL question)
- Data model and modeling issues
- Data relationship modeling
- RDBMS internal design and implementation
- Transaction (DB, file-base, local, or distribed)
- Reliability and recovery
- Data contention and resolution
- Locks and deadlocks.
- Multiple thread issues, synchronization, lock, event, monitor, etc.
- How synchronization primitives related to and build on each other.
- Distributed synchronization
- Any kind of distributed system
- Any parallel processing
- Any networking system
- Any network protocol
- Anything about the Internet, design and structure, routing, etc.
- Socket programming
- Any security method and system
- OS theory and practices
- OS kernel or DB kernel
- Filesystem theory and implementation
- Device driver design and development.
- Any alogrithms, complexity, NP/P.
- Language specifics (ASM/C/C++/Java/C#/Lisp/Ruby/etc)
- Object Oriented Programming (WTF? OO is out of style now?)
- Compiler and language design and implementation
- Grammar and regular expression
- DFA/NFA/LL/LR/Predictive Parsing/ASTree/Semantic Checking/Type Resolution/Inference/CodeGen/Optimization/ErrorRecovery
- UI design or framework
- HTML/Javascript/Swing/AWT/MFC/WTL/VB
- AI/Rule Inference/Neural Net/Fuzzy Logic/Agent/Knowledge Representation/Etc
- Any search theory and issues
- Windows platform development, Win32API/COM/DCOM/ATL/ActiveX/C#/ASP.Net/ActiveDir/etc
They
asked none of these important CS related topics. 80% of the time are
spent on the puzzles. Hello. Puzzles are the pastime stuff you do
during lunch or taking a ride in a bus. They can't help you do your
job.
That's a saying which goes like: you know the person by the
kind of questions he asks. Well it certainly shows the depth and
breath of knowledge Google people have. I got the distinct feeling
that they asked the puzzles because they don't know enough about other
topics to evaluate a candidate.
Now that I got the job offer. What the heck should I do?