Effective Interview Option

    By the will of fate, I have to recruit web-programmers for several years. Having completed hundreds of resumes, having conducted dozens of interviews, I want to share the current structure of the interview.

    Have you signed up as a volunteer?
    Have you signed up for a volunteer interview?

    The interview consists of three parts, takes 30-60 minutes.
    1. The story of the programmer about himself.
    2. Short questions on horizons.
    3. Problem solving

    The story of the programmer about himself.


    First of all, I ask the person to tell how he came to web-programming. When I started, when I got addicted to programming :)
    I ask very much about the last place or two works, what the person was doing, for which he answered that he was doing there technically and organizationally.

    It takes a person to relax.
    Once at this stage I asked about five options, why the hatches are round and other questions, but this has died for a long time, because it does not give anything :)

    As soon as it becomes clear what is moving a person and what his experience is, we turn to the technical part.

    Short questions on horizons.


    Web-programming is a technology zoo, I recall a joke about the requirements for drivers, if they were as powerful as programmers :)

    In 10-15 minutes you need to understand how deeply a person owns this or that technology, to understand the level of his understanding .
    I am interrogating in the following areas: DBMS, SQL, algorithms, data structures, languages, command line, OOP, * nix.

    I share experience and understanding at three levels - elementary, OK, advanced :)

    First of all, databases. Among the questions of the first type there is “how does the right join differ from JOIN?”, And the third - “what is B + -tree and why are they used so often in the implementation of indexes?”.

    Very interesting about OOP. If the question “what is encapsulation, polymorphism, inheritance” is the second level, then explaining what it is in practice, why, what metrics of architecture worsens / improves refactoring, with emphasis on SOLID + DRY + IoC, may be units (or not confuse refactoring with performance optimization).

    As a rule, one or two sentences answer the question. Sometimes we can talk abstractly 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 be happy if a person sits 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 that is not all” (C) TV-SHOP 90x

    Problem solving


    But no matter how beautiful the theory is, it’s all just a warm-up in front of the most important part.
    I try to talk with the candidate for half an hour, so that he understands that he is not an HR girl, understand his motivation, speak out the points on the schedule and his wishes for the RFP.

    And I give tasks. I agree with the article, which was translated here somehow, that a real programmer is determined by the ability to use recursion and pointers.

    In many ways, this is akin to human evolution. They say that we are distinguished from monkeys by the ability to operate in the mind immediately with 7 + -2 elements, and understanding of recursion (you need to sharpen chisels, the pattern, decreasing recursively, makes the blade very sharp and well cutting).

    So the ability in the mind to imagine what pointer arithmetic is and understand the work of recursion distinguishes programmers from ordinary people.

    As a rule, I give a simple task and ask you to write code directly online, without any checks. Recently, I have been giving 10-15 minutes without me if a person is worried.

    And in one or two tasks it becomes clear what the outcome of the interview is.

    Questions about hatches - nafig. Long live the recursion!

    upd. task with an oral interview and an additional task at home.
    Task 1
    Given an array of unlimited nesting, you need to write a function that displays it in the form of a nested list with indents proportional to the depth and the current path to the element.

    Call showMenu (menu);
    should produce HTML code, as at
    image

    Array:
    menu = [
        'simple item',
        [
        	'title' => 'Complex item',
    	'items' => [
    	     'simple item2',
    	     'simple item3',
    	     [
    	            'title' => 'Another complex item',
      	            'items' => ['...']
    	      ]
    	]
        ]
    ];
    


    Problem 2
    Make for the line
    "{Please | Just} make this {amazing | cool | simple} test sentence {change {quickly | instantly} randomly | change every time}." all possible options were given (nesting is not limited)

    for example
    for str = "{A | B | C} test"
    three options are
    “A test”
    “B test”
    “C test”

    for str = "{A | B} {A | B } "four options
    " AA "
    " BB "
    " AB "
    " BA "

    Also popular now: