Реальные вопросы на собеседовании по JavaScript

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

Вопросы разделены на две различные секции:

  1. Теория
  2. Вопросы по фрагментам кода

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, будут помещены в очередь микрозадач и будут иметь более высокий приоритет, чем задачи в очереди задач.


Я надеюсь, что эти вопросы будут полезны для вас, если вы готовитесь к собеседованию. И, как всегда, желаю удачи!

Оцените статью
devanswers.ru
Добавить комментарий