Вопросы для интервьюера программистов на 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
- предпочтения браузера конечного пользователя соблюдаются
Ответ 6
Спросите, как случайное закрытие может вызвать утечку памяти в IE.
Ответ 7
Спросите: "Какие рамки тестирования модулей вы используете и почему?"
Вы можете решить, действительно ли необходимо использовать платформу тестирования, но разговор может рассказать вам многое о том, насколько эксперт является человеком.
Ответ 8
промежуточные программисты должны обладать техническим мастерством своих инструментов.
если он передал технические вопросы экранного экрана телефона выше, заставьте его набросать что-то глупое на месте, например, кратчайший URL-адрес ajax. затем запечь его в своем портфолио. нет удивительного портфолио = промежуточный разработчик в этой области, а не тот парень, которого вы хотите, отвечающий за ваш блестящий новый проект.