0% нашли этот документ полезным (0 голосов)
19 просмотров9 страниц

Interview

Документ описывает различные концепции программирования, включая HTTP, структуры данных (стек), типы данных в JavaScript, асинхронность, циклы и функции. Он объясняет, как работают разные типы циклов, различия между объявлениями и выражениями функций, а также разницу между переменными, объявленными с помощью var, let и const. Кроме того, документ затрагивает тему прототипного наследования в JavaScript.

Загружено:

faxraddinyuzbashew
Авторское право
© © All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате RTF, PDF, TXT или читать онлайн в Scribd
0% нашли этот документ полезным (0 голосов)
19 просмотров9 страниц

Interview

Документ описывает различные концепции программирования, включая HTTP, структуры данных (стек), типы данных в JavaScript, асинхронность, циклы и функции. Он объясняет, как работают разные типы циклов, различия между объявлениями и выражениями функций, а также разницу между переменными, объявленными с помощью var, let и const. Кроме того, документ затрагивает тему прототипного наследования в JavaScript.

Загружено:

faxraddinyuzbashew
Авторское право
© © All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате RTF, PDF, TXT или читать онлайн в Scribd
Вы находитесь на странице: 1/ 9

HTTP

Формат HTTP состоит из заголовков и тела сообщения. Заголовки содержат


метаданные о запросе или ответе, в то время как тело содержит собственно
передаваемые данные. HTTP также определяет различные методы запросов,
такие как GET, POST, PUT, DELETE и другие, которые определяют, какие
действия должен выполнить сервер.
Метод HTTP "OPTIONS" используется для запроса информации о доступных
методах или других свойствах ресурса. Этот запрос не изменяет состояние
сервера или ресурса и используется для проверки доступных опций для
взаимодействия с сервером. Обычно он используется перед отправкой
запросов других методов, чтобы убедиться, что сервер поддерживает
необходимые операции.
дерево

asdasdasd иерархию файловой системы операционной системы,


структуру документа HTML в веб-разработке или организационную структуру
компании.
asdas
Asdasdasd

Стек
Стек - это абстрактная структура данных, работающая по принципу "последний
вошел, первый вышел" (LIFO - Last In, First Out). Это означает, что элементы
добавляются и удаляются только с одного конца, называемого вершиной стека.

Основные операции со стеком включают:


1. Push: добавление элемента на вершину стека.
2. Pop: удаление элемента с вершины стека.
3. Peek (или Top): просмотр элемента на вершине стека без его удаления.
4. isEmpty: проверка, пуст ли стек.

Стеки широко применяются в компьютерных науках и программировании. Они


используются для управления вызовами функций (стек вызовов), обработки
выражений в обратной польской записи (RPN), выполнения операций
отмены/повтора в текстовых редакторах и многих других задач.

Типы данныx
Вот основные типы данных в JavaScript:

1. **Число (Number)**: Представляет числовые значения, как целые, так и


дробные.
2. **Строка (String)**: Представляет текстовые данные, заключенные в кавычки
(одинарные или двойные).

3. **Логический (Boolean)**: Представляет логические значения true (истина)


или false (ложь).

4. **Undefined**: Этот тип данных представляет отсутствие значения


переменной.

5. **Null**: Этот тип данных также представляет отсутствие значения, но


используется явно программистом.

6. **Объект (Object)**: Представляет коллекцию данных и функций, связанных с


этими данными.

7. **Символ (Symbol)**: Этот тип данных введен в ECMAScript 6 и представляет


уникальные и неизменяемые значения.

8. **BigInt**: Этот тип данных введен в ECMAScript 2020 и представляет целые


числа произвольной длины.

Это основные типы данных в JavaScript. Каждый из них имеет свои


особенности и используется для различных целей при написании программ.

NULL
Тип данных `null` в JavaScript представляет отсутствие значения или пустоту.
Когда переменная объявлена, но не имеет никакого значения, ей можно
присвоить значение `null`, чтобы указать на отсутствие данных. Например:

```javascript
let x = null;
```

Значение `null` не равно нулю, неопределенности или пустой строке. Оно


является отдельным типом данных, который обозначает отсутствие значения.
В контексте сравнения, значение `null` равно только самому себе и `undefined`,
но не равно никакому другому значению.

Undefined
В JavaScript тип данных `undefined` обозначает переменную, которая была
объявлена, но ей не было присвоено никакого значения. Когда переменная
объявлена, но не инициализирована, ее значение по умолчанию будет
`undefined`. Например:
```javascript
let x;
console.log(x); // Вывод: undefined
```

Также значение `undefined` может возникать как результат операции, когда


обращаемся к свойству объекта, которое не существует, или когда функция не
возвращает явно указанное значение. Например:

```javascript
let obj = {};
console.log(obj.property); // Вывод: undefined

function foo() {
// Функция не содержит return
}
console.log(foo()); // Вывод: undefined
```

Значение `undefined` также может использоваться для проверки переменных на


то, были ли они инициализированы.

Aсинхронность
Aсинхронность в программировании означает, что операции могут выполняться
параллельно или независимо друг от друга, в то время как программа
продолжает работать. В веб-разработке асинхронность часто используется для
выполнения операций, которые могут занимать время, таких как запросы к
серверу, чтение или запись файлов и т. д., без блокировки основного потока
выполнения кода.
В JavaScript основным механизмом асинхронности является использование
колбэков (callbacks), промисов (promises) и асинхронных функций (async/await).
Эти инструменты позволяют управлять асинхронным кодом и обрабатывать
результаты асинхронных операций

В асинхронной итерации путь обычно включает несколько этапов, которые


могут различаться в зависимости от сценария и использованных инструментов,
таких как промисы, async/await и т. д. Однако общий путь обычно включает
следующие шаги:

1. **Инициализация асинхронной операции**:


- Асинхронная итерация начинается с инициализации асинхронной
операции, такой как AJAX-запрос к серверу, чтение файла, выполнение запроса
к базе данных и т. д.

2. **Создание промиса (если необходимо)**:


- Если асинхронная операция возвращает промис (например, в случае
использования fetch или асинхронной функции), промис создается и
возвращается для дальнейшей обработки.

3. **Запуск асинхронной операции**:


- Асинхронная операция запускается, и выполнение кода продолжается
далее без блокировки основного потока выполнения.

4. **Ожидание завершения операции (если используется async/await)**:


- Если используется оператор `await`, выполнение асинхронной функции
приостанавливается до завершения асинхронной операции и получения ее
результата.

5. **Обработка результата (или ошибки)**:


- После завершения асинхронной операции, ее результат обрабатывается
(или ошибка, если она возникла) с помощью методов `then()` и `catch()` для
промисов или с помощью оператора `try...catch` при использовании async/await.

6. **Выполнение следующих действий**:


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

Это общий путь для асинхронной итерации, но в реальном коде может быть
различный порядок действий и использование дополнительных инструментов
или библиотек для обработки асинхронности.

Функция `setTimeout` в JavaScript не блокирует основной поток выполнения из-


за того, что она работает асинхронно. Когда вызывается `setTimeout`, код не
ожидает завершения таймера, а продолжает выполнение дальше без задержки.
Это происходит из-за того, что `setTimeout` добавляет задачу в очередь
событий (event queue), а не выполняет ее немедленно.

Основной поток выполнения в JavaScript продолжает выполнять другие


операции, пока таймер не истечет. После истечения таймера и добавления
соответствующей задачи в очередь событий, JavaScript Event Loop проверяет
эту очередь и начинает выполнение задачи из нее. Таким образом, код,
переданный в `setTimeout`, будет выполнен только после завершения текущих
операций и когда таймер истечет.

Это позволяет JavaScript продолжать работу эффективно, не блокируя


основной поток выполнения, и позволяет асинхронно выполнять операции,
такие как AJAX-запросы к серверу, обработка пользовательских событий и
другие задачи, которые могут занимать время.

Цикл `for`, `await`, и `async` - это комбинация концепций в JavaScript, которые


используются для итерации асинхронных операций.

1. **Цикл `for`**:
- Цикл `for` в JavaScript используется для выполнения повторяющихся
операций определенное количество раз.
- В классическом синтаксисе `for` определяются три параметра:
инициализация (начальное значение), условие продолжения выполнения цикла
и шаг (выражение итерации).
- Пример:
```javascript
for (let i = 0; i < 5; i++) {
console.log(i);
}
```

2. **`await`**:
- Оператор `await` используется только внутри асинхронных функций
(`async`), чтобы приостановить выполнение функции до тех пор, пока промис,
переданный в `await`, не будет разрешен или отклонен.
- Он позволяет писать асинхронный код так, как если бы он был синхронным,
что делает код более читаемым и понятным.
- Пример:
```javascript
async function fetchData() {
let result = await someAsyncOperation();
console.log(result);
}
```

3. **Асинхронные циклы**:
- Когда вы комбинируете цикл `for` с асинхронными операциями и
оператором `await`, вы можете итерировать асинхронно через коллекции
данных или выполнять асинхронные операции внутри цикла.
- Пример:
```javascript
async function fetchData() {
for (let i = 0; i < 5; i++) {
let result = await someAsyncOperation(i);
console.log(result);
}
}
```

Таким образом, цикл `for`, `await` и `async` вместе позволяют выполнять


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

Циклы
Цикл в программировании - это конструкция, которая позволяет выполнять
один и тот же участок кода несколько раз. Циклы полезны для автоматизации
повторяющихся задач. В JavaScript есть несколько типов циклов, включая `for`,
`while` и `do-while`.

1. **Цикл for**:
```javascript
for (начальное_условие; условие_продолжения; выражение_итерации) {
// Код, который нужно выполнить в каждой итерации
}
```
Пример:
```javascript
for (let i = 0; i < 5; i++) {
console.log(i);
}
```

2. **Цикл while**:
```javascript
while (условие) {
// Код, который нужно выполнить в каждой итерации, пока условие истинно
}
```
Пример:
```javascript
let i = 0;
while (i < 5) {
console.log(i);
i++;
}
```

3. **Цикл do-while**:
```javascript
do {
// Код, который нужно выполнить в каждой итерации, пока условие истинно
} while (условие);
```
Пример:
```javascript
let i = 0;
do {
console.log(i);
i++;
} while (i < 5);
```

Во всех этих типах циклов код внутри цикла выполняется многократно до тех
пор, пока условие цикла остается истинным. Каждая итерация цикла может
быть настроена с помощью различных условий и выражений итерации, чтобы
обеспечить нужное поведение цикла.
Function
Основные различия между объявлением функции (Function Declaration) и
выражением функции (Function Expression) в JavaScript:

1. **Способ объявления**:
- Объявление функции (Function Declaration) создает функцию как отдельное
выражение в области видимости. Оно начинается с ключевого слова `function`,
за которым следует идентификатор функции и тело функции.
- Выражение функции (Function Expression) создает функцию как часть
выражения, обычно присваивая ее переменной или свойству объекта. Она
начинается с ключевого слова `function`, за которым следует идентификатор
(опционально) и тело функции.

2. **Поднятие (Hoisting)**:
- Объявления функций (Function Declarations) поднимаются вверх в область
видимости, что означает, что их можно использовать до их фактического
объявления в коде.
- Выражения функций (Function Expressions) не поднимаются, что означает,
что их можно использовать только после их фактического объявления в коде.

3. **Использование до объявления**:
- Объявления функций (Function Declarations) можно использовать до их
фактического объявления в коде.
- Выражения функций (Function Expressions) не могут быть использованы до
их фактического объявления в коде.

Примеры:

```javascript
// Function Declaration (Объявление функции)
function sum(a, b) {
return a + b;
}
console.log(sum(2, 3)); // Вывод: 5

// Function Expression (Выражение функции)


let multiply = function(a, b) {
return a * b;
};
console.log(multiply(2, 3)); // Вывод: 6
```

В общем, объявления функций и выражения функций оба позволяют создавать


и использовать функции в JavaScript, но имеют некоторые различия в способе
объявления и их поведении во время выполнения.

Var Let Const


Основные различия между `var` и `let` в JavaScript:

1. **Область видимости**:
- `var` имеет функциональную область видимости, что означает, что
переменные, объявленные с помощью `var`, видны внутри всей функции, в
которой они были объявлены, независимо от блока.
- `let` имеет блочную область видимости, что означает, что переменные,
объявленные с помощью `let`, видны только в блоке, в котором они были
объявлены (например, внутри цикла, условного оператора или функции).

2. **Поднятие (Hoisting)**:
- Переменные, объявленные с помощью `var`, поднимаются вверх в
пределах их функциональной области видимости, что означает, что они
доступны для использования до того момента, как они были фактически
объявлены.
- Переменные, объявленные с помощью `let`, не поднимаются, что означает,
что они недоступны до момента их фактического объявления.

3. **Переопределение**:
- Переменные, объявленные с помощью `var`, могут быть переопределены
(переназначены) в пределах их области видимости.
- Переменные, объявленные с помощью `let`, могут быть переназначены, но
не могут быть переопределены в пределах одного блока.

Пример:
```javascript
// Пример с var
var x = 10;
if (true) {
var x = 20;
}
console.log(x); // Вывод: 20

// Пример с let
let y = 10;
if (true) {
let y = 20;
}
console.log(y); // Вывод: 10
```

Использование `let` предпочтительнее `var`, особенно из-за блочной области


видимости, что уменьшает вероятность ошибок и делает код более
предсказуемым.

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

Каждый объект в JavaScript имеет скрытое свойство `__proto__`, которое


ссылается на его прототип. Когда вы пытаетесь обратиться к свойству или
методу объекта, JavaScript сначала ищет это свойство в самом объекте. Если
свойство не найдено, он ищет его в его прототипе, а затем в прототипе
прототипа и так далее, пока не будет найдено свойство или пока не достигнут
глобальный прототип `Object.prototype`.

Пример прототипного наследования в JavaScript:

```javascript
// Определение прототипа
let animal = {
sound: "Издает звук",
makeSound: function() {
console.log(this.sound);
}
};

// Создание нового объекта, который наследует от прототипа animal


let cat = Object.create(animal);
cat.sound = "Мяу"; // Переопределение свойства
cat.makeSound(); // Вывод: "Мяу"

// Добавление нового свойства в прототип


animal.legs = 4;

// Обращение к свойству прототипа через объект


console.log(cat.legs); // Вывод: 4
```

В этом примере объект `cat` наследует свойство `sound` и метод `makeSound`


от объекта `animal`.

https://habr.com/ru/articles/486820/

Вам также может понравиться