Перевод статьи «50 Things You Should Know Before Going to a JavaScript Developer Job Interview».


Собеседования с разработчиками напоминают ситуацию на Диком Западе: никто на самом деле не знает, что происходит. Большинство рекрутеров не отличают Java от JavaScript. Но в их задачи входит найм разработчиков.
Работа разработчика сложная и интересная. При этом пройти собеседование может быть столь же легко, как войти в открытую дверь. А может быть и очень сложно, если вам выпадут какие-то особенно заковыристые задачи для решения на белой доске. Тут никогда не угадаешь.
К счастью, к технической части собеседования мы можем подготовиться, чтобы быть уверенными хотя бы в ней. Да, нам могут задать всякие идиотские вопросы, но, подготовившись, мы можем быть уверены, что на технические точно ответим.
Я собрал полсотни вопросов, на которые, по моему мнению, лучше подготовить ответ до того, как отправитесь на собеседование на должность JavaScript-разработчика.
Общие вопросы
Интервьюер задает эти вопросы, чтобы получше с вами познакомиться, узнать, как вы реагируете, мыслите, насколько хорошо вы впишетесь в коллектив компании.
Ответы на эти вопросы должны быть относительно краткими, поскольку особого веса они все равно не имеют.
Не нужно сразу выпаливать ответ: делайте паузы, чтобы хорошо обдумать вопрос. Эти вопросы, по идее, должны заставить вас «раскрыться», чтобы интервьюер увидел вашу суть.
- Чем вам нравится программирование? Что именно интересует вас в этом процессе?
- Что вы изучили вчера (на этой неделе)?
- Расскажите о вашей любимой среде разработки. Какую операционную систему, IDE, терминал вы используете? Почему вы выбрали именно их?
- Если бы в этом году вы могли освоить только одну технологию, что бы вы выбрали? Как именно вы бы работали над приобретением этого навыка?
- Как вы уладили последний спор с вашим непосредственным начальником? Как разрешился конфликт? Не дадите ли мне номер телефона вашего бывшего босса, чтобы я мог услышать его версию событий? (Последний вопрос это блеф, так что не уклоняйтесь от ответа. Ни у кого нет времени обзванивать ваших бывших начальников).
- Какими ресурсами и инструментами вы пользуетесь, какие форумы посещаете, чтобы узнавать о последних трендах фронтенд-разработки и дизайна? Есть ли у вас фавориты среди ресурсов, чем они вам нравятся?
- Если вы присоединяетесь к проекту,
где команда использует табы, в то время
как вы предпочитаете пробелы, что вы
будете делать? Попытаетесь убедить
команду использовать пробелы или
вольетесь в общий поток и будете
использовать табы?
[Вопрос с подвохом] Самым правильным вариантом будет использование инструмента форматирования, например, Prettier. Таким образом при помещении в репозиторий весь код будет выглядеть одинаково, хотя вы продолжите использовать пробелы, а остальная команда – табы.
Навязывание своего мнения команде испортит ваш образ командного игрока, а если вам в работе вопреки вашей воле и без солидной аргументации придется пользоваться табами, ваша мотивация снизится, и вероятность вашего ухода из команды возрастет. - Можете ли вы описать свой рабочий процесс при создании веб-страницы? Каковы ваши первые 5 шагов при создании нового проекта?
- С какими техническими сложностями вы сталкивались в последнее время и как решили эту задачу?
- Какие действия вы предпринимали в ваших последних проектах, чтобы повысить поддерживаемость кода? Есть ли какие-то определенные парадигмы программирования, которым вы отдаете предпочтение? Может, функциональное программирование или разработка через тестирование?


Технические вопросы
После знакомства и общих вопросов идут технические. Эти вопросы будут больше нацелены на фронтенд-разработку, но могут также включать и вопросы, касающиеся бэкенда, devops и решения проблем.
- Какие системы контроля версий вы знаете? Как вы делитесь кодом между проектами?
- Назовите 4 способа уменьшить время загрузки страницы.
- Что означает аббревиатура CORS? Для решения каких проблем CORS применяется?
- Объясните, что такое ARIA и читатели экрана. Расскажите, как сделать сайт доступным.
- Что делает doctype?
- Что за строительные блоки есть в HTML5?
- Объясните разницу между localStorage, cookies и sessionStorage.
- Для чего хороши атрибуты data-?
- К чему следует относиться с осторожностью, проектируя или разрабатывая многоязычные сайты? Как обслуживать страницу с контентом на разных языках?
- Что такое прогрессивный рендеринг?
- Объясните, как в JavaScript работает this? Как this работает в классах, а как – в функциях?
- Опишите всплытие и перехват событий (event bubbling и event capturing).
- Объясните поднятие переменных (variable hoisting).
- Объясните разницу между:
function Animal() {}
var animal = Animal()
var animal = new Animal() - Чем отличаются собственные объекты (native objects) и объекты хоста (host objects)?
- Назовите типичный use case для анонимных функций.
- Поясните, как в JavaScript работает прототипное наследование (prototypal inheritance).
- Что такое замыкание (closure), зачем и как его использовать?
- В чем разница между null и undefined?
- В чем разница между == и ===?
- Что такое Webpack? Какие проблемы он решает?
- Случалось ли вам использовать фронтенд-фреймворк или библиотеку? Что это было?
- Что такое тернарный оператор (ternary operator)? На что указывает слово «тернарный»?
- Какие инструменты и приемы вы используете для отладки JavaScript-кода?
- Как вы выполняете отладку JavaScript-кода, который запускается на сервере, например, NodeJs?
- Каковы некоторые преимущества / недостатки написания кода JavaScript на языке, который компилируется в JavaScript?
- Как бы вы в таком коде реализовали функцию duplicate?
- Можете ли вы привести пример функции curry и пояснить, в чем преимущество этого синтаксиса?
- Можете ли вы привести пример деструктуризации объекта или массива?
- Кто изобрел JavaScript и почему язык назван именно так?
- В чем разница между этими двумя функциями?
// What's the difference? const sayHello = name => console.log(name) function sayHello(name) { console.log(`${name}`) }
- Когда и зачем вам может понадобиться создать члены статических классов (static class members)?
- В чем разница между переменными, созданными при помощи let, var и const?
- Что происходит, когда вы заходите на какой-нибудь сайт? Что такое DNS?
- Что такое движок V8? Где он используется?
- Значение символа $ в JavaScript-коде.
- Объясните разницу между макетом (layout), прорисовкой (painting) и компоновкой (compositing).
- Какими способами можно улучить производительность прокрутки на сайте?
- Каким будет output следующего кода? (Интервьюер показывает код).
- Что представляет собой цикл событий (event loop) в JavaScript и что он делает?
Если вы знаете ответы на большинство этих вопросов, – прекрасно!
[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]
«Объясните разницу между:
function Animal() {}
var animal = Animal()
var animal = new Animal()»
серьёзно? в 2019ом? даже читать дальше не стал. копипастер ты отсталый
И что не так ?
Хороший вопрос. Потом можно перейти на реализацию фабрики
Объясните разницу между следующими двумя функциями:
1. const sayHello = name => console.log(name)
2. function sayHello(name) {
console.log(`${name}`)
}
Правильно ли я понимаю, что обе функции принимают переменную (неизвестную) и выводят её в консоли.
Однако в 1 случае: Это может быть только явная переменная, такая как Object, Boolean, number, string и.т.д
А во втором случаем отобразится стринговое значение переменной, если объект выдаст [[object Object]]
?
Объясните разницу между следующими двумя функциями:
1. const sayHello = name => console.log(name)
2. function sayHello(name) {
console.log(`${name}`)
}
Правильно ли я понимаю, что обе функции принимают переменную (неизвестную) и выводят её в консоли.
Однако в 1 случае: Это может быть только явная переменная, такая как Object, Boolean, number, string и.т.д
А во втором случаем отобразится стринговое значение переменной, если объект выдаст [[object Object]]
?
Правильно
А чего у чела ноги кривые?