Вопросы на собеседовании с профессиональным программистом JavaScript (с ответами) [закрыто]

131

Какие вопросы можно задать, чтобы определить, действительно ли кандидат является профессиональным разработчиком JavaScript (на стороне браузера)?

Вопросы, по которым можно отличить, если кто-то не является специальным программистом JavaScript, но действительно занимается профессиональной разработкой JavaScript, объектно-ориентированной, многоразовой и поддерживаемой.

Пожалуйста, дайте ответы , чтобы опытные и специальные программисты на JavaScript могли взять интервью у кого-то более опытного, и я ускользну от ответов на довольно немногие из этих сложных вопросов. Пожалуйста, избегайте открытых вопросов .

Пожалуйста, сохраните один вопрос / ответ на собеседовании для каждого ответа SO для лучшего опыта чтения и упрощения подготовки к интервью.

WooYek
источник
21
Никогда не проходите собеседование с JS-разработчиком среднего уровня с более продвинутым! Это просто безумие. Попросите кого-нибудь квалифицированного провести собеседование.
Джеймс
22
@JP - значит, если ваш старший разработчик уволится, вы просто облажались?
tvanfosson
15
@JP Я пытаюсь нанять кого-нибудь получше меня. Это небольшой стартап, поэтому у меня нет лучшего выбора, если я не воспользуюсь посторонней помощью ... но тогда мне придется взять у него интервью;)
Януш Сконечны
13
@JP: Если вы просто нанимаете людей, которые не хуже вас, однажды вы будете окружены глупыми идиотами. Всегда старайтесь нанять того, кто лучше вас.
Gumbo
1
@Nick: Проблема заключается в том, что этот вопрос является слишком широким по охвату и не имеет правильного ответа (см Часто задаваемые вопросы комментарии пользователя по данному вопросу). Он хорошо подходит для публикации в блоге, но не подходит для этого формата вопросов и ответов. В былые времена мы могли бы перейти на разработку программного обеспечения , но после многочисленных угроз телесных повреждений со стороны модов для программистов нам пришлось изменить свой подход.
Майкл Майерс

Ответы:

118

Поскольку JavaScript - такой маленький язык, но с невероятной сложностью, вы должны уметь задавать относительно простые вопросы и выяснять, действительно ли они так хороши, основываясь на их ответах. Например, мой стандартный первый вопрос для оценки остальной части интервью:

В чем разница между var x = 1и в JavaScript x = 1? Отвечайте настолько подробно, насколько вам удобно.

У начинающих программистов JS может быть простой ответ о локальных и глобальных. У опытных JS-ребят определенно должен быть такой ответ, и, вероятно, следует упомянуть объем функционального уровня. Любой, кто называет себя «продвинутым» JS-программистом, должен быть готов говорить о локальных переменных, подразумеваемых глобальных переменных, windowобъекте, области действия функции, подъеме объявления и цепочках областей видимости. Кроме того, я хотел бы услышать о [[DontDelete]]повышении приоритета (параметры vs varvs function) и undefined.

Еще один хороший вопрос - попросить их написать sum()функцию, которая принимает любое количество аргументов и возвращает их сумму. Затем попросите их использовать эту функцию (без изменений) для суммирования всех значений в массиве. Они должны написать функцию, которая выглядит так:

function sum() {
  var i, l, result = 0;
  for (i = 0, l = arguments.length; i < l; i++) {
    result += arguments[i];
  }
  return result;
}
sum(1,2,3); // 6

И они должны вызывать его в вашем массиве следующим образом (контекст для applyможет быть любым, я обычно использую nullв этом случае):

var data = [1,2,3];
sum.apply(null, data); // 6

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

оборота черри
источник
4
Хороший вопрос. Маленькая придирка: я полагаю, вы имеете в виду «вернуть результат» вместо «вернуть i». Совет для профессионалов:
настройте
4
вау, это глупая ошибка. Я тестирую большую часть своего кода на jsFiddle перед публикацией, но не тестировал этот. Спасибо :)
bcherry 08
5
Функция суммы должна быть устойчивой к нечисловым типам, не вызывая ошибок. Кроме того, он должен иметь возможность обрабатывать числа как строки для дополнительного кредита.
Абадаба
2
+1 за отличное упоминание и предупреждение о том, являются ли они хорошим программистом.
Demonslay335 06
3
Эта строка: for (i = 0, l = arguments.length; i <l; i ++) плохая, потому что arguments.length будет оцениваться на каждой итерации. Если вы назначите l = arguments.length перед циклом for, это лучше. Правильно?
thomallen
94

Базовое программирование на JS

  • Scope of variable
  • Что такое Associative Array? Как мы это используем?

OOPS JS

  • Difference between Classic Inheritance and Prototypical Inheritance
  • Что такое difference between private variable, public variable and static variable? Как этого добиться в JS?
  • Как add/remove properties to objectво время выполнения?
  • Как добиться inheritance?
  • Как extend built-in objects?
  • Почему extending array is bad idea?

DOM и JS

  • Difference between browser detection and feature detection
  • DOM Event Propagation
  • Event Delegation
  • Event bubbling V/s Event Capturing

Разное

  • Graceful Degradation V/s Progressive Enhancement
pramodc84
источник
17
это для найма JS Gurus.
Андреас
22
Будьте готовы к тому, что разработчик JS скажет что-то вроде этого: JavaScript не имеет ассоциативных массивов. Однако в JavaScript есть объектные литералы, которые можно использовать как ассоциативные массивы. Кроме того, к свойствам объектов можно получить доступ, используя либо точечную нотацию, либо квадратные скобки и строки.
Кристофер Паркер,
8
Это базовый уровень для тех, кто называет себя «разработчиком JavaScript». Я думаю, что глубина ответа заключается в том, как вы оцениваете их как Гуру или нет.
Ryan Ore
8
Вы имеете в виду «прототипное наследование». Общая ошибка.
wizzard
4
@wizzard, ты имел в виду «типичная ошибка»: p
Ник
24

Спросите об «этом». Это хороший вопрос, который может стать настоящим испытанием для разработчика JavaScript.

Анил Намде
источник
Можете дать ссылку на хорошую статью?
Janusz Skonieczny
2
Думаю, этот вопрос поможет stackoverflow.com/questions/2148451/…
Анил Намде 03
15
это === stackoverflow.com/questions/2492123/… (БАДУМ-ТИШ!)
Али
17

(Я предполагаю, что вы имеете в виду JavaScript на стороне браузера)

Спросите его, почему, несмотря на его бесконечные познания в JavaScript, все же неплохо использовать существующие фреймворки, такие как jQuery, Mootools, Prototype и т. Д.

Ответ: Хороший код кодировщика, повторное использование отличных кодеров. Тысячи человеко-часов были потрачены на эти библиотеки, чтобы отвлечь возможности DOM от специфичных для браузера реализаций. Нет смысла самостоятельно разбираться со всеми проблемами, связанными с DOM браузера, только для того, чтобы заново изобрести исправления.

Мэтт
источник
5
@Tim Down: конечно, но если вы найдете пакет с хорошей репутацией, то почти все части пакета будут проверены компетентными людьми. А как пользователь пакета с открытым исходным кодом вы можете вносить исправления при обнаружении ошибок, также добавляя свой опыт.
PanCrit
Верно, знайте колеса, но не всегда используйте одни и те же шины для разных участков. Например. Зачем использовать всю библиотеку jQuery, если все, что вам нужно, это транспорт Ajax и т. Д. (Для вашего проекта) - microjs.com
Ali
1
Ответ на этот вопрос - это сам вопрос - почему мы используем IDE, а не простой блокнот для редактирования нашего кода? :)
Навин Исрани
11

Спросите их, как они обеспечивают возможность использования своих страниц, когда у пользователя отключен JavaScript или JavaScript недоступен.

Единого верного ответа нет, но вы ищете ответ, говоря о некоторых стратегиях прогрессивного улучшения .

Прогрессивное улучшение состоит из следующих основных принципов:

  • основной контент должен быть доступен для всех браузеров
  • базовая функциональность должна быть доступна для всех браузеров
  • разреженная, семантическая разметка содержит весь контент
  • улучшенный макет предоставляется с помощью CSS с внешней связью
  • улучшенное поведение обеспечивается [[ненавязчивый JavaScript | ненавязчивый]], внешне связанный JavaScript
  • предпочтения браузера конечного пользователя соблюдаются
WooYek
источник
1
Лучший вопрос для найма разработчика JS уровня архитектора :)
Навин Исрани
Прежде всего, убедите меня, что в человека с отключенным JS стоит инвестировать в настоящую сеть, а не в даркнет. эти пользователи, вероятно, чрезмерно параноики или невежественные в использовании браузера и по ошибке отключили JS, в любом случае их шансы на преобразование ничтожны.
vsync
6

Спросите: «Какую структуру модульного тестирования вы используете? И почему?»

Вы можете решить, действительно ли необходимо использовать фреймворк для тестирования, но разговор может многое рассказать вам о том, насколько эксперт этот человек.

оборота tvanfosson
источник
1
Для справки: QUnit потрясающий: docs.jquery.com/QUnit
Goyuix,
0

программисты среднего уровня должны владеть своими инструментами.

если он ответил на технические вопросы, связанные с экраном телефона выше, заставьте его набросать что-нибудь глупое на месте, например, сокращение URL-адресов ajax. затем запишите его в портфолио. нет замечательного портфолио = промежуточный разработчик в этой области, а не парень, которого вы хотите, чтобы руководить вашим новым блестящим проектом.

Дастин Гетц
источник
4
Портфели - это в лучшем случае плохая метрика - в современном мире JS - это прекрасно принятый инструмент в корпоративном мире, где проекты, вероятно, превосходят любой портфель, который вы можете увидеть, и где публичные репозитории не используются.
Илья Айзеншток
1
@IlyaAyzenshtok ЭТО часть моей дилеммы. Мне сложно выставлять напоказ портфолио, когда 99% моей работы проприетарная / за
Спартак,
1
@Spartacus - вы можете делать скриншоты и объяснять интервьюеру свои правила и препятствия на этом пути. Что касается проектов с открытым исходным кодом, они являются отличным способом оценить человека перед собеседованием, чтобы скорректировать вопросы в соответствии с уровнем кодирования человека, наблюдаемым в проектах.
vsync