Вопросы для интервьюера программистов на JavaScript (с ответами)

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

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

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

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

Ответ 1

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

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

Начинающие программисты JS могут иметь базовый ответ о локальных и глобальных переменных. Промежуточные JS-ребята должны обязательно иметь этот ответ, и, вероятно, следует упомянуть область функционального уровня. Любой, кто называет себя "продвинутым" программистом JS, должен быть готов поговорить о локалях, подразумеваемых глобальных объектах, объекте window, функции-сфере, объявлении и целям областей видимости. Кроме того, мне бы хотелось услышать о [[DontDelete]], приоритете подъема (параметры vs var vs 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, таких как тестирование, рабочие процессы, контроль версий и т.д., Чтобы узнать, хороши ли они программисты.

Ответ 2

Основные 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

Ответ 3

Спросите о "this". Это один хороший вопрос, который может быть истинным тестом разработчика JavaScript.

Ответ 4

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

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

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

Ответ 5

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

Нет ответа True True, но вы ловите ответ, говоря о некоторых стратегиях для Progressive Enhancement.

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

  • базовое содержимое должно быть доступно для всех браузеров
  • базовые функции должны быть доступны для всех браузеров
  • разреженная, семантическая разметка содержит весь контент
  • расширенный макет предоставляется связанным с внешним текстом CSS
  • улучшенное поведение обеспечивается [[ненавязчивым JavaScript | ненавязчивый]], внешне связанный JavaScript
  • предпочтения браузера конечного пользователя соблюдаются

Ответ 7

Спросите: "Какие рамки тестирования модулей вы используете и почему?"

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

Ответ 8

промежуточные программисты должны обладать техническим мастерством своих инструментов.

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