Вопросы кандидату на должность front-end разработчика
Вопросы кандидату на должность фронтенд-разработчика
Замечание: Этот репозиторий содержит подборку вопросов, которые могут быть использованы на собеседованиях на должность фронтенд-разработчика. Здесь предлагаются лишь идеи, не нужно задавать все вопросы сразу (иначе в один час точно не уложитесь).
Также имейте в виду, что многие вопросы не требуют однозначного короткого ответа, а лишь помогают завести беседу на ту или иную тему (предоставляя кандидату возможность показать себя во всей красе).
Содержание
- Авторы
- Общие вопросы
- Вопросы по HTML
- Вопросы по CSS
- Вопросы по JavaScript
- Вопросы по тестированию
- Вопросы по производительности
- Вопросы по сетям
- Примеры кода на JavaScript
- “Светская беседа”
[⬆] Авторы
Этот проект был запущен в 2009 году в сотрудничестве с @paul_irish @bentruyman @cowboy @ajpiano @SlexAxton @boazsender @miketaylr @vladikoff @gf3 @jon_neal @sambreed и @iansym.
В настоящее время этот проект поддерживают:
С тех пор он был активным благодаря этим замечательным людям.
[⬆] Общие вопросы:
- Что вы изучили вчера/на этой неделе?
- Что вас привлекает в программировании?
- С какой технической сложностью вы недавно столкнулись и как с ней справились?
- Какие методы для повышения производительности вы использовали при создании или обслуживании сайта?
- Можете ли вы описать некоторые методы SEO, которые вы использовали в последнее время?
- Можете ли вы объяснить общие принципы относительно фронтенд-безопасности или недавние проблемы, которые вы решили?
- Какие действия вы лично предприняли в недавних проектах для повышения удобства использования вашего кода?
- Расскажите о предпочитаемой среде разработки.
- С какими системами контроля версий вы знакомы?
- Можете ли вы описать порядок действий при создании новой веб-страницы?
- Если у вас есть 5 разных файлов со стилями, какой лучший способ интегрировать их в сайт?
- Можете ли вы описать разницу между прогрессивным улучшением и изящной деградацией?
- Как можно оптимизировать загрузку внешних ресурсов на странице?
- Сколько ресурсов браузер может одновременно загружать с одного домена?
- Какие есть исключения?
- Назовите три способа уменьшения времени загрузки страницы (воспринимаемого или реального).
- Если вы присоединились к проекту, где для форматирования используются табы, а вы привыкли использовать пробелы, как вы поступите?
- Опишите, как бы вы реализовали примитивное слайд-шоу.
- Если бы у вас была возможность освоить новую технологию в этом году, что бы это было?
- Объясните важность стандартов и комитетов по стандартам.
- Что такое FOUC (Flash Of Unstyled Content)? Как его избежать?
- Объясните, что такое ARIA и скринридеры, а также как сделать сайт доступным.
- Какие преимущества и недостатки у CSS и JavaScript анимаций?
- Что означает CORS и какую проблему решает?
[⬆] Вопросы по HTML:
- Для чего нужен
doctype
? - Как следует оформлять страницу, содержимое которой может быть на разных языках?
- На что необходимо обратить внимание при разработке мультиязычных сайтов?
- Для чего нужны атрибуты, начинающиеся с
data-
? - Представьте HTML5 как открытую веб-платформу. Из каких блоков состоит HTML5?
- Объясните разницу между
cookie
,sessionStorage
иlocalStorage
. - Объясните разницу между
<script>
,<script async>
и<script defer>
. - Почему хорошей практикой считается располагать
<link>
для подключения CSS между<head></head>
, а<script>
для подключения JS ставить перед</body>
? Знаете ли вы исключения? - Что такое прогрессивная отрисовка?
- Для чего используется атрибут
srcset
в теге изображения? Опишите процесс, который использует браузер при оценке содержимого этого атрибута. - Приходилось ли вам работать с языками HTML-шаблонизации?
- Объясните разницу в поведении между тегами
<button>
и<input type="button">
внутри формы? - Объясните разницу между тегами
<strong>
и<b>
? - Приведи примеры использования тега
<label>
? - Чем тег
<a>
отличается от тега<button>
с точки зрения функциональности и использования?
[⬆] Вопросы по CSS:
Что такое специфичность CSS-селекторов и как она работает?
В чем разница между «сбросом» и «нормализацией» CSS? Что бы вы выбрали и почему?
Объясните, что такое плавающие элементы (floats) и как они работают.
Объясните, что такое z-index и как формируется контекст наложения.
Объясните, что такое блочный контекст форматирования и как он работает.
Какие вы знаете методы запрета обтекания (clearing) и в каких случаях они применяются?
Как вы решаете стилевые проблемы, связанные с особенностями браузеров?
Как вы обеспечиваете отображение страниц в браузерах с ограниченными возможностями?
- Какие приёмы/процессы вы при этом используете?
Какими способами можно визуально скрыть элемент (оставив его доступным только для скринридера)?
Использовали ли вы систему сеток, и если да, то какую вы предпочитаете?
Приходилось ли вам использовать или реализовывать медиазапросы или вёрстку под мобильные устройства?
Вы знакомы со стилизацией SVG?
Можете ли вы привести пример свойства
@media
, отличного отscreen
?На что нужно обратить внимание при написании эффективного CSS?
Какие преимущества/недостатки в использовании CSS препроцессоров?
- Опишите, что вам нравится и не нравится в CSS препроцессорах, которыми вы пользовались.
Как вы реализуете макет, который использует нестандартные шрифты?
Объясните, как браузер определяет, на какие элементы накладывать CSS стили?
Объясните, что такое псевдоэлементы и для чего они нужны.
Объясните своими словами, что такое блочная модель.
Что делает
* { box-sizing: border-box; }
? В чем его преимущества?Что означает свойство
display
и можете ли вы привести несколько примеров его использования?В чем разница между строчным и блочно-строчным элементом?
В чем разница между относительным, фиксированным, абсолютным и статически позиционированным элементом?
Какими CSS-фреймворками вы пользовались? Что бы вы хотели в них изменить/улучшить?
Пользовались ли вы Flexbox или Grid?
Можете ли вы объяснить разницу между отзывчивым (responsive) сайтом и сайтом, сделанным по принципу mobile-first?
Вы имеете опыт работы с ретиновой графикой? Если да, то какие методы вы использовали?
В каком случае вы предпочтёте использовать
translate()
вместо абсолютного позиционирования и наоборот? И почему?Можете ли вы привести пример псевдокласса?
- Какие новые псевдоклассы появились за последние год-два?
В чем отличие между
em
иrem
? Как они рассчитываются?Какие проблемы появляются при попытке переопределить стили компонента их UI-библиотеки? Какие способы решения существуют?
- Что такое
@layer
и как это могло бы помочь решить проблему переопределения стилей?
- Что такое
Объясните, что такое
vh
иvw
?- Какие проблемы возникают на мобильных устройствах при использовании
vh
? Как их можно решить?
- Какие проблемы возникают на мобильных устройствах при использовании
Что такое пользовательские css свойства?
- Как ограничить их область видимости?
Какой цвет применится и почему?
.red {
color: red;
}
.blue {
color: blue
}
<div class="blue red">Hello world</div>
- Как можно оптимизировать данный код? (Возможно несколько решений)
main h1 {
color: red;
}
main p {
color: red;
}
main a {
color: red;
}
[⬆] Вопросы по JavaScript:
- Объясните делегирование событий.
- Объясните, как
this
работает в JavaScript. - Расскажите, как работает прототипное наследование.
- Что вы думаете о AMD против CommonJS?
- Объясните, почему это не является IIFE:
function foo(){ }();
.- Что необходимо изменить, чтобы это стало IIFE?
- В чём различие между переменными, значение которых:
null
,undefined
и не объявлено?- Как бы вы проверили их на каждое из этих значений?
- Что такое замыкание и как/для чего его используют?
- Можете ли вы описать основное различие между циклом
forEach
и циклом.map()
? И в каких случаях каждый из них используется?- Расскажите про другие популярные методы итерации массивов.
- В каких случаях обычно используются анонимные функции?
- Как вы организуете свой код? (module pattern, classical inheritance)
- В чем разница между host-объектами и нативными объектами?
- В чем разница между:
function Person(){}
,var person = Person()
, иvar person = new Person()
? - В чем разница между
.call
и.apply
? - Что делает и для чего нужна функция
Function.prototype.bind
? - В чем разница между feature detection (определение возможностей браузера), feature inference (предположение возможностей) и анализом строки user-agent?
- Расскажите об Ajax как можно более подробно.
- Какие преимущества и недостатки в использовании Ajax?
- Объясните, как работает JSONP (и почему это не совсем AJAX).
- Вы когда-нибудь использовали шаблонизацию на JavaScript?
- Если да, то какие библиотеки вы использовали?
- Расскажите, что такое поднятие (hoisting).
- Объясните, что такое всплытие событий (event bubbling).
- В чём разница между «атрибутом» (attribute) и «свойством« (property)?
- Почему не следует расширять нативные JavaScript-объекты?
- В чём разница между событием document load и событием document DOMContentLoaded?
- В чём разница между
==
и===
? - Объясните
same-origin policy
в контексте JavaScript. - Сделайте так, чтобы этот код работал:
duplicate([1,2,3,4,5]); // [1,2,3,4,5,1,2,3,4,5]
- Почему тернарный оператор так называется?
- Что делает строчка
"use strict";
? Какие достоинства и недостатки от ее использования? - Напишите цикл, который перебирает числа до
100
, возвращая “fizz” на числа кратные3
, “buzz” на числа кратные5
и “fizzbuzz” на числа кратные3
и5
- Почему считается хорошим тоном оставить глобальную область видимости (global scope) в нетронутом состоянии?
- Для чего используют событие
load
? Есть ли у этого события недостатки? Знаете ли вы какие-либо альтернативы, и в каких случаях бы стали их использовать? - Расскажите, что такое одностраничное приложение, и как сделать его SEO-оптимизированным.
- Насколько вы опытны в работе с промисами (promises) и/или их полифилами?
- Какие преимущества и недостатки при использовании промисов вместо колбэков (callbacks)?
- Каковы преимущества и недостатки написания JavaScript-кода на языке, который компилируется в JavaScript?
- Какие инструменты и методы вы используете при отладке кода?
- Какие языковые конструкции вы используете для итерации по свойствам объекта и элементам массива?
- Объясните разницу между изменяемыми (mutable) и неизменяемыми (immutable) объектами.
- Приведите пример неизменяемого объекта в JavaScript.
- Какие преимущества и недостатки у неизменяемости?
- Как вы можете достигнуть неизменяемости в вашем коде?
- Объясните разницу между синхронными и асинхронными функциями.
- Что такое цикл событий (event loop)?
- В чём разница между стеком вызовов (call stack) и очередью событий (task queue)?
- Объясните разницу при использовании
foo
вfunction foo() {}
иvar foo = function() {}
- В чём различие между переменными, созданными при помощи
let
,var
иconst
?- Можем ли мы менять свойства объекта объявленного через
const
? Как мы можем изменить это поведение?
- Можем ли мы менять свойства объекта объявленного через
- В чём разница между классом в ES6 и функцией-конструктором в ES5?
- Можете ли вы привести пример использования стрелочных функции
=>
? Чем они отличаются от других функций? - Дайте определение функции высшего порядка.
- Можете ли вы привести пример деструктуризации объекта или массива?
- Шаблонные строки в ES6 намного упрощают создание строк, можете ли вы привести пример их использования?
- Можете ли вы привести пример каррированной функции (curry function) и в чём их преимущество?
- В чём преимущества использования
spread
оператора и чем он отличается отrest
оператора? - Каким образом можно обмениваться кодом между файлами?
- Для чего используются статические члены класса?
- Объясните разницу между
event.target
иevent.currentTarget
? - Объясните разницу между
event.preventDefault()
иevent.stopPropagation()
?
[⬆] Вопросы по тестированию:
- Какие преимущества/недостатки в тестировании собственного кода?
- Какие инструменты вы будете использовать для тестирования работоспособности своего кода?
- В чём различие между юнит-тестами и функциональными/интеграционными тестами?
- Для чего предназначены линтеры (code style linting tool)?
[⬆] Вопросы по производительности:
- Какие инструменты вы используете, чтобы найти недостатки в производительности вашего кода?
- Какие вы знаете способы улучшения производительности при скроллинге на вебсайте?
- Объясните разницу между раскладкой (layout), painting и композитингом (compositing).
[⬆] Вопросы по сетям:
- Почему лучше загружать ресурсы для сайта с нескольких доменов?
- Опишите весь процесс, начиная с ввода адреса сайта в адресную строку до окончания его загрузки на экране.
- В чём различия между Long-Polling, Websockets и Server-Sent Events?
- Опишите следующие заголовки HTTP-запросов и ответов:
- Разницу между Expires, Date, Age и If-Modified-…
- Do Not Track
- Cache-Control
- Transfer-Encoding
- ETag
- X-Frame-Options
- Что такое HTTP-методы? Перечислите все HTTP-методы, которые вы знаете, и объясните их.
[⬆] Примеры кода на JavaScript
Вопрос: Чему равно foo
?
var foo = 10 + '20';
Вопрос: Что выводит код ниже?
console.log(0.1 + 0.2 == 0.3);
Вопрос: Как сделать, чтобы это выражение работало?
add(2, 5); // 7
add(2)(5); // 7
Вопрос: Какое значение возвращает данное выражение?
"i'm a lasagna hog".split("").reverse().join("");
Вопрос: Чему равно window.foo
?
( window.foo || ( window.foo = "bar" ) );
Вопрос: Что покажут эти два alert?
var foo = "Hello";
(function() {
var bar = " World";
alert(foo + bar);
})();
alert(foo + bar);
Вопрос: Чему равно foo.length
?
var foo = [];
foo.push(1);
foo.push(2);
Вопрос: Чему равно foo.x
?
var foo = {n: 1};
var bar = foo;
foo.x = foo = {n: 2};
Вопрос: Что выводит код ниже?
console.log('one');
setTimeout(function() {
console.log('two');
}, 0);
console.log('three');
Вопрос: В чем разница между этими четырьмя промисами (promises)?
doSomething().then(function () {
return doSomethingElse();
});
doSomething().then(function () {
doSomethingElse();
});
doSomething().then(doSomethingElse());
doSomething().then(doSomethingElse);
[⬆] «Светская беседа»:
- Самое крутое, что вы когда-либо делали и чем гордитесь?
- Что вы больше всего любите в ваших инструментах разработки?
- Кто из фронтенд-сообщества вас вдохновляет?
- У вас есть какие-нибудь личные проекты? Какого рода?
- Какая ваша любимая “фишка” Internet Explorer?
- Какой кофе вы предпочитаете?