Ниже приведены реальные вопросы, заданные мне на собеседовании. Конечно, есть много других концепций, которые могут быть заданы. Надеюсь, это будет полезно для вас, ребята.
Вопросы разделены на две различные секции:
- Теория
- Вопросы по фрагментам кода
1/2 Теория
Что вы знаете о примитивных типах данных?
Это тип данных, который представляет собой одно значение. То есть не является объектом. Ниже перечислены примитивные типы данных в JavaScript:
String
: последовательность символов в «одинарных» или «двойных кавычках».
Number
: целые числа или числа с плавающей точкой
boolean
: только true
или false
значения
undefined
: представляет собой отсутствие существования, переменная, которой не было присвоено никакого значения. Как разработчик, вы никогда не должны устанавливать переменную в undefined
напрямую.
null
: также представляет собой отсутствие существования. Вы можете установить переменную в значение null
.
Что вы знаете об объектах?
Объекты — это пары имя-значение, которые находятся в памяти и могут состоять из свойств и методов. Наиболее распространенным способом создания объекта является использование синтаксиса Object literal:
const person = {
name: 'John',
lastname: 'Doe',
address: {
street: '101 Sherman Ave',
city: 'New York City',
state: 'New York'
}
}
Что такое Object.prototype
?
Это механика, в которой вы можете найти другие методы, наследуемые от других. Например, когда вы создаете новую дату, вы можете найти такие методы, как getYear()
в этой цепочке прототипов.
Что вы знаете о массивах?
Массивы — это тип объекта для хранения коллекций в одной переменной. В массивах может храниться все, что угодно: функции, примитивы, объекты.
Как работает JavaScript?
Давайте посмотрим на следующее изображение и объясним, как работает Event Loop:
- Стек вызовов (синий блок):
- Это стек, в который будет складываться весь код задачи: Last In First Out. JavaScript может выполнять только одну задачу за один раз.
- Одиночные задачи выполняются, но когда у нас есть другие задачи, такие как
setTimeOut
,setInterval
илиfetch
, стек вызовов делегирует их веб-интерфейсам.
- Web APIs (фиолетовый блок):
- Это набор инструментов, которые браузеры делают доступными. Он отвечает за выполнение таймеров (для
setTimeOut
илиsetInterval
) или инициирует HTTP-запрос для получения данных. - После завершения таймера или получения ответа на HTTP-запрос, задача будет передана в очередь задач o Micro Task Queue.
- Это набор инструментов, которые браузеры делают доступными. Он отвечает за выполнение таймеров (для
- Очередь задач (желтый блок):
- Содержит все задачи, ожидающие выполнения. Внутренне эти задачи имеют приоритет в зависимости от их типа. От высокого до низкого приоритета, типы задач могут быть следующими: Render, DOM Tasks, UI Tasks, Net Tasks.
- Задачи в этой очереди не выполняются. Они только ожидают передачи циклом событий в стек вызовов, где и будут выполнены.
- Очередь микрозадач (блок aqua):
- Когда Promise имеет ответ, либо разрешенный, либо отклоненный, его задачи перемещаются в очередь микрозадач.
- Задачи в этой очереди не выполняются. Они только ожидают передачи циклом событий в стек вызовов.
- Задачи в этой очереди имеют более высокий приоритет, чем задачи в очереди задач, даже если задачи в очереди задач относятся к типу Render.
- Event Loop (зеленый блок):
- Это цикл, отвечающий за передачу задач из очереди задач/очереди микрозадач в стек вызовов.
- Он передает задачу в стек вызовов, только если стек вызовов пуст.
- Если стек вызовов пуст, и есть одна задача в очереди микрозадач и другая задача в очереди задач, Event Loop передаст сначала задачу в очереди микрозадач из-за ее приоритета. Оставшаяся задача будет перемещена, когда стек вызовов снова станет пустым.
Различия между let
и const
-
- является областью действия блока
- он может быть обновлен
- он может быть объявлен без инициализации
-
- является областью видимости блока
- не может быть обновлена
- не может быть обновлен без инициализации
Различия между map
и forEach
?
- Основное отличие заключается в том, что
map
возвращает новый массив, применяя функцию обратного вызова. - Вы можете использовать
forEach
только для итерации
2/2 Фрагменты кода
Если вы выполните следующий код, что он вернет?
typeof {} === typeof []
- Ответ:
true
.
Типом данных для объектов и массивов является object
. Это означает, что тип пустого объекта будет равен типу массива.
Если вы выполните следующий код, какое имя выдаст консоль?
const user = {
name: "name1"
};
const user2 = user;
user2.name = "name2";
console.log(`user: ${JSON.stringify(user)}`);
- Ответ: Выводит пользователя с именем:
name2
.
Это происходит потому, что в JavaScript примитивные типы передаются по значению, а непримитивные типы, такие как объекты, передаются по ссылке.
Если вы выполните следующий код, что будет выведено?
setTimeout(() =>{
console.log("Lorem ipsum");
});
const promise1 = Promise.resolve(123);
promise1.then((value) => {
console.log(`Promise value: ${value}`);
});
console.log("Hello")
- Ответ:
Hello
Promise value
Lorem ipsum
Это связано с тем, что мы ранее проверяли с помощью цикла событий. Задачи, созданные в ответ на Promise
, будут помещены в очередь микрозадач и будут иметь более высокий приоритет, чем задачи в очереди задач.
Я надеюсь, что эти вопросы будут полезны для вас, если вы готовитесь к собеседованию. И, как всегда, желаю удачи!