- PVSM.RU - https://www.pvsm.ru -

Собеседование на должность JavaScript разработчика

Собеседование на должность JavaScript разработчика

Недавно прочитал неплохой пост [1] на тему поиска работы QA и подумал, что похожий пост был бы полезен для JavaScript разработчиков. В конечном счёте, веб движется вперед семимильными шагами, и соискателей на позицию JavaScript программиста хоть отбавляй (разумеется, хороших всегда меньше).

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

Вопросы, относящиеся к общим знаниям в области JavaScript

ООП в JavaScript. Один из самых популярных вопросов, на мой взгляд. Время от времени можно услышать вариации а-ля «Что такое прототипное наследование», «Инкапсуляция в JavaScript». Информацию можно найти тут [2] или тут [3].

Утечки памяти в JS. Огромная тема, можно минут 10 рассказывать, мне кажется. Самым лаконичным примером я считаю var a = {}; a.a = a;. Такой код создаст утечку в IE <= 7 версии, т.к. осёл до 8 версии не умеет чистить циклические зависимости. Должно хватить для простой демонстрации понимания механизма работы с утечками. Далее будут вопросы а-ля «Как создать утечку, используя фреймворк N». В деталях можно прочитать тут [4].

Замыкания в JS. Нет, ну правда, какое собеседование без вопроса о замыканиях [5]? Вопрос отчасти относится к предыдущему («Инкапсуляция в JavaScript»), но чаще всего рассматривается отдельно.

Самовызывающиеся функции. Тоже весьма частый вопрос на собеседованиях. Ещё иногда подходят к этому со стороны jQuery: «Почему все плагины обособлены в конструкцию (function() {})();?».

Область видимости переменных. Ключевое слово «this». Да и, честно говоря, всё, что связано с баблингом переменных и функций [6]. Мол, чем отличается запись var a = function() {}; от записи function a() {};. Рассказать про this [7].

Как поменять контекст функции. Частичное применение функции. Ну, тут можно оставить без комментариев, всё упирается в знание разницы между .call, .apply и .bind и некоторых стандартных решений на уровне языка. Обо всём этом можно прочитать в одной замечательной статье [8].

Производительность циклов. Иногда (но далеко не всегда) такой вопрос имеет место. Лично мне он нравится. По крайней мере, человек должен знать, почему for быстрее, чем Array.prototype.forEach. Но желательно ознакомиться с информацией из этой статьи [9].

На этом, как правило, стандартные вопросы заканчиваются. Дальше идут вопросы, касательно специфики вакансии. Я имею ввиду, более «профильные» для компании. Например, если требуется JS разработчик со знанием Backbone/Marionette(Chaplin), то следующий блок вопросов будет про jQuery, underscore/lodash и прочие связанные технологии, как бы очевидно это не звучало. Вопросов по данным тематикам море, но парочку любимых я всё-таки приведу:

Вопросы, относящиеся к jQuery

Почему перед исходным кодом jQuery стоит восклицательный знак?

Расскажите про $.Deferred. Могу посоветовать одно: кроме знания $.Deferred [10], было бы неплохо упомянуть о нативных Promise'ах [11]

Как создать утечку памяти с помощью jQuery.
Я люблю простые примеры, поэтому обычно привожу следующее:

var jqSelector = $("#selector"),
    nativeSelector = document.getElementById("selector");

// Удаляем элемент "нативным" способом
nativeSelector.parentNode.removeChild(nativeSelector);

// Выводим закешированное значение селектора jQuery
console.log(jqSelector); // Привет, jQuery.cache!

А вообще, в части вопросов о нативном JS уже было похожее, и там же приведена ссылка на примеры с использованием jQuery.

jQuery.extend. Рассказать всё про функцию, возможно попросят написать аналог. Кстати, возможно будет полезно прочитать статью про примеси в JS [12].

Составьте AJAX-запрос на сервер, используя jQuery. Не особо популярный вопрос, но если спрашивать нечего, спросят что-то вроде него. Разумеется, вы должны знать, как использовать функции $.ajax, $.get, $.post и устанавливать настройки в $.ajaxSettings. Всё это уже давно есть на хабре [13].

Остальные вопросы скорее «для массовки», я считаю, что о jQuery больше нечего спрашивать. Конечно, будут ещё вопросы типа «Как добавить класс к объекту, используя jQuery», но я думаю, это не будет неожиданностью и не вызовет проблем.

Вопросы, относящиеся к Underscore/Lodash

Такие встречаются, честно говоря, очень редко. Но всё же, приведу краткий список того, что я могу вспомнить:

Чем _.throttle отличается от _.debounce. Опять же, ответ есть на хабре [14].

Как работает функция _.extend. Аналог вопроса про jQuery.extend, ссылка на доку выше.

Расскажите о шаблонизаторе Underscore. Кстати, не исключено, что это только начало, и вас будут спрашивать про шаблонизатор jQuery и все остальные. Я бы советовал хоть одним глазом прочитать эту статью [15].

Loadsh vs Underscore. Вопрос для разведения холивара на собеседованиях

Что дальше?

А дальше специальные вопросы, касательно фреймворков и библиотек, которые использует компания в своих проектах. Обычно, больше всего ценятся ответы на вопросы из категории «нативного» JS, да ведь оно и не мудрено: технологии появляются и исчезают, и совсем не удивительно, если программист о чём-то не слышал, но но ответы на эту категорию вопросов показывают, как быстро человек может изучить и понять, как работает та или иная библиотека/фреймворк.

Разумеется, если вам есть, что добавить к этой статье — пишите в лс, я обязательно дополню её вашей информацией.

Автор: xamd

Источник [16]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/javascript/65930

Ссылки в тексте:

[1] неплохой пост: http://habrahabr.ru/post/230925/

[2] тут: http://habrahabr.ru/company/enterra/blog/153365/

[3] тут: http://javascript.ru/tutorial/object/inheritance

[4] тут: http://learn.javascript.ru/memory-leaks

[5] замыканиях: http://habrahabr.ru/post/38642/

[6] баблингом переменных и функций: http://habrahabr.ru/post/127482/

[7] this: http://javascript.ru/tutorial/object/thiskeyword

[8] одной замечательной статье: http://habrahabr.ru/post/149581/

[9] этой статьи: http://habrahabr.ru/post/49052/

[10] $.Deferred: http://habrahabr.ru/post/113073/

[11] нативных Promise'ах: http://habrahabr.ru/post/209662/

[12] примеси в JS: http://habrahabr.ru/post/147901/

[13] давно есть на хабре: http://habrahabr.ru/post/14246/

[14] на хабре: http://habrahabr.ru/post/60957/

[15] эту статью: http://habrahabr.ru/post/219873/

[16] Источник: http://habrahabr.ru/post/231071/