Diskleimer: This article was written by me a few months ago (and then I had a little karma, so it remained only in my blog), but I think it still has not lost its relevance. Then I tried to collect information that I would like to receive at the very beginning of preparation for all kinds of interviews. The article is based on a
lot of personal experience , but I wrote and wrote about the experience separately.
Surely many of you have heard of terribly difficult interviews for those who want to work in companies like “Microsoft”, “Google” or “Apple” (in fact, this list goes on and on). Of course, it’s well known that Google receives about 1,000 resumes every day, all eminent companies tell right and left that they are looking for no less than geniuses, and on the expanses of unlimited Internet, from time to time, there are questions that were asked at an interview like “How do you will you move Mount Fuji? ”or“ How many balls will fit into the bus? ”or even“ How to create a good search engine like Google? ”.
Actually, relying on some experience of passing interviews in “companies for geniuses”, I came to the conclusion that, in fact, not everything is as difficult as it may seem at first glance. And, absolutely precisely, one can purposefully prepare for these interviews and successfully complete them without being a genius.
')
So, let's say the goal of “getting a dream job” is set. What to do next?
0.
Make a good resume. I will not dwell on this point - I am not a resume specialist at all. Be sure to read all sorts of useful articles on how to write an IT resume and, if possible, follow their advice. One good article written by an engineer from Google can be found
here .
1.
Try to find a person who already works in the company where you want to go. In fact, for those who want to submit their resume to a well-known company, there are usually 2 ways: send it through the company's website (as approximately 999 people will do today) or ask a friend who is already working there to recommend you. Big companies believe that smart people (who already work for them) know a lot of other smart people (some of whom can still be hired), and therefore candidates who are recommended by someone have a slightly better chance of being paid attention to than those who send a resume through the site.
2.
If no friends were found, look for other options. For example, create a website, write there many interesting articles on IT topics and post your resume there. Or take tests on
Brainbench - there are rumors (I didn’t check :) that recruiters from Microsoft regularly drop in there and write themselves to be especially distinguished. Or excel at any Olympiads like CodeJam or TopCoder. Or look on the Internet for other success stories - as the company itself came out on the candidates and, if it is not very difficult, do the same as those candidates.
3.
Get rid of the inferiority complex. Well-known companies, of course, claim that they need geniuses, but even simple mathematics (at the rate of 1 genius per 1,000,000 people) shows that geniuses cannot reach everybody who wants to. And usually these geniuses do not want to work for famous companies. Therefore, most of the people who work there - they are smart, well-thought-out, love computers and everything connected with them, constantly expanding their knowledge and in general all sorts of good people. But they are not geniuses. Therefore, you should not assume that since you do not have a Fields or Turing award, then you have nothing to catch.
4.
Learn more about the process. In fact, interview processes in large and well-known companies are very similar. First, you are satisfied with telephone interviews (1-3) and, according to their results, they invite full-time interviews (which can be from 2 to 6). And, if you search a little on the vast expanses of the Internet, you can find that most interviews come down to several areas:
- Foundations of Mathematics: Applied Mathematics, Number Theory, Combinatorics, Foundations of Probability ...
- Algorithms and data structures: sorting, on graphs, O-notation, trees ...
- Object Oriented Programming ...
- General understanding: how the operating system works, what the compiler does, how the network works ...
- Knowledge of any programming language at a good level.
To know the special syntax of opening a socket in the C language, most likely, is not necessary :).
5.
Gather sensible sources for preparation. The Internet is full of books, websites and articles from which you can draw information and on which you can learn and prepare. Personally, 3 books were useful to me in my time:
“Algorithms and Tasks” by Shen ,
Algorithms from Skien and
classical Talmud on algorithms from Cormen and the company . And
this site is
very useful, specializing in all kinds of interviews.
6.
Solve problems and fill your hand. There is a simple rule - when you do something, anything, a lot, you sooner or later start doing it well. This is fully true for preparing for interviews in large companies and this is perhaps the most important point of all. When you solve thousands of questions and problems, write hundreds of algorithms and tens of thousands of lines of code in your chosen language, you will reach a level of Zen when the tasks for an interview seem simple to you. The main thing to start is simple and gradually move forward, increasing the complexity. And at some point you will find that 70% of the tasks and issues you solve almost immediately, you need to think a little over 20% and think over 10% well. And this is already a pretty good chance of passing the interview :).
7.
Be original. You will be much better remembered if you are different from others (just try to be different for the worse). If you have something that others do not have, that will distinguish you from them and interest you at the same time, this is a big plus. If you are a former Shaolin monk or a top model who decided to retrain into excellent programmers - then consider that you have found your “trick” :). If not, you can write Python code during interviews (most candidates write in standard languages ​​like Java or C ++), or mention the thunderstorm of all Brainfuck programming languages ​​and, if it is in the subject, write a small program on it. Or bring a Jedi sword with you and leave it in the corner. Or voponite any of the programmer jokes (like the fact that if P = NP => P = 0 or N = 1). In general, you find something like this - it is inconceivable, not burdensome in the topic :).