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

Недавно прочитал неплохой пост [1] на тему поиска работы QA и подумал, что похожий пост был бы полезен для 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 стоит восклицательный знак?
Расскажите про $.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», но я думаю, это не будет неожиданностью и не вызовет проблем.
Такие встречаются, честно говоря, очень редко. Но всё же, приведу краткий список того, что я могу вспомнить:
Чем _.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/
Нажмите здесь для печати.