Около года назад я начал брать интервью у людей на фронтенд-позиции. Мы работаем с «современным» стеком (react, graphql, node и т. Д.), Но знали, что будет сложно найти людей с таким опытом. Обучение людей использованию React - не проблема, но мы все же ожидаем определенного понимания JavaScript. Мы встречали людей, которые используют JavaScript, но никогда не углубляются в язык. Некоторые просто открывают для себя язык, многие пришли из других языков и научились использовать JS на лету.

Эта статья должна вас заинтересовать, если вы начинаете интервьюировать людей (поскольку это относительно стандартные вопросы) или если вы молодой разработчик, готовящийся к собеседованию.

Сосредоточьтесь на часто используемых API

Мне нравится начинать с вопроса «Что такое обещание?». Часто человек начинает говорить о HTTP-вызовах, выборке или REST. Это может быть признаком того, что кто-то использует, но не понимает точно своей цели. Я ожидаю, что у людей будет какое-то понимание того, какой инструмент они используют, и не иметь возможности отличить инструмент от того, что он использует, - это нехорошо. Я также спрашиваю собеседника, знают ли они другие шаблоны / функции, которые можно использовать вместо обещаний (например, обратные вызовы, async / await, наблюдаемые). Что мне нравится в этом продолжении, так это то, что он показывает, что респондент следит за эволюцией JavaScript. Например, я не думаю, что знание того, как использовать наблюдаемые, важно, но знание того, что они существуют и как работают, по крайней мере, является признаком любопытства.

В зависимости от того, как прошли предыдущие вопросы, я могу пойти проще или нет. Если человек не ответил, последующий ответ даст несколько преимуществ. Если человек тоже не может ответить, это явный признак того, что он только что изучает JavaScript. С другой стороны, в большинстве случаев они найдут ответы, которые сделают их более уверенными. Начать собеседование с потока вопросов, на которые вы не можете ответить, сложно для морального духа.

В качестве простого вопроса я прошу привести некоторые функции прототипа Array (some, reduce, map и т. Д.) И то, как они работают, особенности ES2015 / 2016 (я часто также спрашиваю, является ли объект, назначенный с помощью const, изменяемым и разница между стрелочной функцией и обычной (подсказка, это это)).

У меня есть несколько «более сложных» вопросов, и большинство из них связаны с тем, «как работает язык», а не с тем, «что это за непонятный JS API». Есть так много способов написания JS, так много библиотек и так много API, что я не думаю, что знать их (или нет) важно. Не так давно в Твиттере была ветка, в которой известные старшие разработчики рассказывали, какие основные API-интерфейсы они будут использовать в Google каждый день при кодировании. Для меня это нарезка и стыковка. Я не могу вспомнить разницу и то, как работают аргументы. Но разве это имеет значение? Я могу проверить это через тридцать секунд.

Я также спрашивал о языковых особенностях, но все меньше и меньше убеждаюсь, что это важно (например ,0.1 + 0.1 + 0.1 !== 0.3, typeof null === 'object'). Никакого сильного предчувствия по этому поводу.

Как работают JS и DOM

Теперь пришло время проверить, понимает ли собеседник, как работает язык. Каков объем функции (можно задать вопрос о закрытии)? Каков его контекст (или какова роль функции bind)? Как наследование работает в JavaScript и как работает цепочка прототипов? Что такое делегирование / распространение событий? Как работает цикл событий? Когда мне впервые задали предыдущий вопрос, я точно не знала, куда идти и что объяснять. Затем интервьюер спросил меня, что происходит, когда возникает бесконечный цикл почему (некоторое время верно). Здесь мы хотим понять, что он блокирует основной поток, а также блокирует пользовательский интерфейс, предотвращая любое взаимодействие с пользователем.

Эти вопросы не зависят от фреймворка и показывают, что респондент хочет понять, почему JavaScript работает именно так. Я считаю, что это один из самых ярких признаков «потенциала» младшего разработчика и того, насколько хорошо они будут учиться новому. Наличие определенного опыта, побочных проектов, знание последних библиотек - это хорошо, но в основном указывает на свободное время (не каждый может позволить себе работать в свое свободное время, и я не ожидаю этого от моих коллег).

Если вы думаете, что я что-то упускаю, или если вы знаете другие вопросы, я на слух! Вы также можете связаться со мной в твиттере.