By the will of fate, I have to recruit web-programmers for several years. Having passed through hundreds of resumes, having conducted dozens of interviews, I want to share the current structure of the interview.
Did you
sign up for a volunteer interview?
The interview consists of three parts, takes 30-60 minutes.
1. The story of the programmer about yourself.
2. Short questions on the horizon.
3. Problem solving
')
Programmer's story about yourself.
First of all, I ask the person to tell you how he came to web programming. When I started, when I got hooked on programming :)
I ask very much about the last place or two jobs, what the person did, what he was responsible for, what he did there technically and organizationally.
It is necessary that the person relaxed.
Once at this stage I asked about five options, why round hatches and other questions, but it died out a long time ago, because it gives nothing :)
As soon as it becomes clear what drives a person and what experience he has, go to the technical part.
Short questions on the horizon.
Web programming is a technology zoo, I recall a joke about driver requirements, if they were as powerful as programmers :)
For 10-15 minutes, you need to understand, and how deeply a person owns a technology, to understand the level of his understanding.
I survey in the following areas: DBMS, SQL, algorithms, data structures, languages, command line, OOP, * nix.
Experience and understanding divide into three levels - elementary, OK, advanced :)
First of all, the database. There are among the questions of the first type there is “how does a right join differ from a JOIN?”, And the third one is “what is a B + -tree and why are they used so often in the implementation of indices?”.
Very interesting about OOP. If the question “what is encapsulation, polymorphism, inheritance” is the second level, then one can explain what architecture is, why need it, which architecture metrics worsen / improve refactoring with emphasis on SOLID + DRY + IoC with performance optimization).
As a rule, the answer to the question is one or two sentences. Sometimes we can talk in the abstract if a knowledgeable candidate remembers, for example, self-balancing red-black trees. Well, if he notes that he regularly reads Habr and saw an article about it there.
Of course, I’ll ask about Linux and I’ll be glad if a person is sitting at least under Ubuntu. I'll actually ask how to list the files with “test” in the name with grep (ls | grep “test”), or what is ls | xargs svn up.
“But this is not all yet” (C) TV-SHOP 90x
Problem solving
But no matter how beautiful the theory was, it was all just warming up before the main part.
I try for half an hour to talk with the candidate so that he understands that he is not in front of a HR girl, understand his motivation, speak over the points on the schedule and his wishes on the RFP.
And I give tasks. I agree with the article that was translated here somehow that a real programmer is determined by the ability to apply recursion and pointers.
In many ways, this is akin to human evolution. They say that the ability to operate in the mind immediately with 7 + -2 elements differs from monkeys, and the understanding of recursion (the need for sharpening chisels, the pattern, recursively decreasing, makes the blade very sharp and well cutting).
Similarly, the ability to mentally represent what pointer arithmetic is and to understand the work of recursion makes programmers stand out among ordinary people.
As a rule, I give a simple task and ask to write the code directly online, without any checks. Recently, I give 10-15 minutes without me, if a person is worried.
And for one or two tasks, it becomes clear what the outcome of the interview.
Questions about the hatches - nafig. Long live recursion!
upd. task with oral interview and additional task at home.
Task 1
Given an array of unlimited nesting, you need to write a function that displays it as a nested list with indents proportional to the depth, and the current path to the element.
Call showMenu (menu);
must produce html code as per address
Array:
menu = [
'simple item',
[
'title' => 'Complex item',
'items' => [
'simple item2',
'simple item3',
[
'title' => 'Another complex item',
'items' => ['...']
]
]
]
];
Task 2
Make it so that for the string
"{Please | Simply} make this {amazing | cool | simple} test sentence {change {quickly | instantly} randomly | change every time}." All possible options were issued (nesting is unlimited)
eg
for str = "{A | B | C} test"
three options
"A test"
"B test"
"With the test"
for str = "{A | B} {A | B}" four options
"AA"
"BB"
"AB"
"BA"