Frontend Interview - собеседования по Javascript / Html / Css
10.4K subscribers
2.09K photos
118 videos
320 files
500 links
Канал для подготовки к собеседованиям по фронтенду

Админ, сотрудничество, реклама: @seniorFrontPromo, @maria_seniorfront

Купить рекламу: https://telega.in/c/frontendinterview

Канал в реестре РКН:
https://rknn.link/su
Download Telegram
В чём разница между императивным и декларативным программированием?

Это общие термины, которые описывают общие характеристики нескольких парадигм программирования. ФП – пример декларативного программирования, а ООП – пример императивного программирования.

В базовом смысле императивное программирование касается того, как делать. Эта парадигма объясняет шаги конкретным образом и характеризуется циклами for и while, операторами if и switch и так далее.
 const sumArray = array => {
let result = 0;
for (let i = 0; i < array.length; i++) {
result += array[i]
};
return result;
}

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

Вот декларативный подход к функции sumArray(), написанной выше.

const sumArray = array => { return array.reduce((x, y) => x + y)
Заменить все элементы

Напишите функцию replaceAll, которая принимает первым параметром массив элементов, вторым параметром - элемент, который нужно заменить и третьим - элемент, который должен заменить второй элемент.

Пример:
replaceAll(array: [1,2,2], old: 1, new: 2) // [2,2,2]
Каково значение свойства padding-right у элемента div?
Anonymous Quiz
22%
20px
3%
10px
73%
30px
1%
0px
Стоит ли переопределять или расширять поведение прототипов?

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

Если хотим, чтобы объекты имели одинаковое поведение, создаём пользовательский объект (или определяем собственный «класс» или «подкласс»), который наследуется от встроенного прототипа без внесения изменений в сам прототип. Если работаем с другими разработчиками, у них отчётливые ожидания относительно поведения JavaScript по умолчанию, и редактирование этого поведения по умолчанию может легко привести к ошибкам.

Однако стоит отметить, что не все разделяют это сильное сопротивление расширению встроенных прототипов. В статье 2005 года создатель JavaScript Брендан Эйх намекнул, что прототипная система на самом деле создавалась отчасти для возможности расширения!
C помощью какого метода можно преобразовать объект в JSON?
Anonymous Quiz
61%
JSON.stringify()
31%
JSON.parse()
3%
JSON.valueOf()
5%
JSON.toString()
Почему Math.max() меньше, чем Math.min()?

То, что Math.max() > Math.min() возвращает false, звучит неправильно, но на самом деле, в этом много смысла. Если аргументы не указаны, Math.min() возвращает бесконечность infinity, а Math.max() возвращает -infinity. Это часть спецификации для методов max() и min(), но за выбором стоит логика. Взгляните на код:

 Math.min(1) 
// 1

Math.min(1, infinity)
// 1

Math.min(1, -infinity)
// -infinity

Если -infinity считался бы аргументом по умолчанию для Math.min(), то каждый результат равнялся бы -infinity, что бесполезно. Поскольку аргумент по умолчанию равен infinity, добавление другого аргумента вернёт это число – желаемое поведение.
Каково значение свойства color у элемента div?
Anonymous Quiz
26%
blue
63%
red
11%
black
Почему 018 минус 017 равно 3?

В JavaScript префикс 0 преобразует число в восьмеричное. Однако 8 не используется в восьмеричном виде, и любое число, содержащее 8, будет автоматически преобразовано в десятичное число.

Следовательно, 018 - 017 по сути эквивалентно десятичному выражению 18 - 15, потому что 017 – восьмеричное число, а 018 – десятичное.
Какое значение примет result?
Anonymous Quiz
87%
262
13%
2009
Рефакторинг. Улучшение проекта существующего кода

Второе издание книги Мартина Фаулера объясняет, что такое рефакторинг на самом деле, впрочем, как и первое издание, выпущенное 20 лет назад. После прочтения книги вы найдете ответы на следующие вопросы:

1. Зачем мне рефакторинг моего кода?
2. Как я могу распознать код, который нуждается в рефакторинге?
3. Как я могу успешно провести рефакторинг своего кода?

Прочитав эту книгу, вы поймете сам процесс и общие принципы рефакторинга, которые сможете сразу же применить к своему коду. Вы также научитесь обнаруживать «косяки» в коде вашего коллеги по команде, которые требуют рефакторинга.
Добро пожаловать в бар CodeWars

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

Примеры
"1 beer" --> "1 glass of water"
"1 shot, 5 beers, 2 shots, 1 glass of wine, 1 beer" --> "10 glasses of water"
Паттерны проектирования

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

Если вы хотите узнать о таких вещах, как фабрики, синглтоны, внедрение зависимостей и т.д., эта книга — отличный выбор. Примеры написаны на Java, поэтому было бы неплохо знать этот, либо любой другой объектно-ориентированный язык.
Eсть ли разница между window и document?

Да. У JavaScript есть глобальный объект и всё происходит через него.
Window – тот самый объект, который хранит глобальные переменные, функции, местоположение, историю. Всё находится внутри него, setTimeout, XMLHttpRequest, console и localStorage также являются частью window.

Аналогично дело обстоит и с document, который является свойством объекта window и представляет DOM.
Все ноды – это часть document, следовательно, вы можете использовать getElementById или addEventListener для document. Но обратите внимание, что этих методов нет в объекте window.