Загрузка данных


Отлично, я подготовил для вас все 30 билетов с готовыми ответами на теоретические вопросы и примерами кода для практических заданий. Вы можете использовать это для подготовки или проведения экзамена.

---

Билет №1

Задание №1: Семантическая вёрстка — подход к созданию HTML-кода, при котором теги несут смысловую нагрузку, описывая структуру и содержание контента (а не просто внешний вид). 5 семантических тегов:

· <header> — шапка сайта или раздела.
· <nav> — блок навигации (меню).
· <main> — основное уникальное содержимое страницы.
· <article> — самостоятельная единица контента (статья, пост).
· <footer> — подвал сайта или раздела.

Задание №2:

· Блочные (block): занимают всю ширину родителя, начинаются с новой строки. Примеры: <div>, <p>, <h1>.
· Строчные (inline): занимают только нужную ширину, не переносят строку. Примеры: <span>, <a>, <img>.
· Изменение через CSS: display: block;, display: inline;, display: inline-block;.

Задание №3:

```html
<table border="1">
  <caption>Список людей</caption>
  <tr><th>Имя</th><th>Возраст</th><th>Город</th></tr>
  <tr><td>Анна</td><td>25</td><td>Москва</td></tr>
  <tr><td>Иван</td><td>30</td><td>Питер</td></tr>
</table>
```

---

Билет №2

Задание №1:

· GET: данные в URL, есть ограничение длины, используется для получения данных, можно кэшировать.
· POST: данные в теле запроса, нет ограничения по длине, используется для отправки (логины, файлы).
· Предпочтительнее: GET для поиска/фильтров (безопасные действия), POST для форм с паролями или загрузкой.

Задание №2: HTML-сущности — это закодированные символы, начинающиеся с & и заканчивающиеся ;. Вывод: &lt; для <, &gt; для >, &copy; для ©.

Задание №3:

```html
<ul>
  <li>Фрукты
    <ol><li>Яблоки</li><li>Бананы</li></ol>
  </li>
  <li>Овощи
    <ol><li>Морковь</li><li>Картофель</li></ol>
  </li>
  <li>Молочные
    <ol><li>Молоко</li><li>Сыр</li></ol>
  </li>
</ul>
```

---

Билет №3

Задание №1: DOM (Document Object Model) — это объектное представление HTML-документа в памяти браузера в виде дерева узлов. Разница с исходным HTML: DOM может быть изменен скриптами (добавлены/удалены узлы), а исходный код остается неизменным.

Задание №2:

· innerHTML: парсит строку как HTML, удаляет старые дочерние элементы (производительность ниже, риск XSS).
· createElement: создает элемент через API, безопаснее и быстрее для множественных добавлений.

Задание №3:

```html
<img src="photo.jpg" alt="Описание фото" width="300" height="200">
```

---

Билет №4

Задание №1: 5 методов поиска узлов:

1. getElementById
2. getElementsByClassName
3. getElementsByTagName
4. querySelector
5. querySelectorAll

Задание №2:

· querySelectorAll возвращает статическую NodeList (не обновляется при изменениях DOM).
· getElementsByClassName возвращает живую HTMLCollection (автообновляется).

Задание №3:

```html
<video controls width="640">
  <source src="video.mp4" type="video/mp4">
  Ваш браузер не поддерживает видео.
</video>
```

---

Билет №5

Задание №1:

· element.onclick = func: можно назначить только один обработчик (новый перезапишет старый).
· addEventListener: можно добавить несколько обработчиков на одно событие.

Задание №2: Всплытие событий — когда событие срабатывает на вложенном элементе, затем последовательно на всех родителях. Остановить: event.stopPropagation().

Задание №3:

```html
<label><input type="radio" name="size" value="S"> S</label>
<label><input type="radio" name="size" value="M"> M</label>
<label><input type="radio" name="size" value="L"> L</label>
<label><input type="checkbox" name="news"> Подписаться на новости</label>
```

---

Билет №6

Задание №1:

· getAttribute('class') — возвращает значение атрибута в HTML (строку).
· className — свойство DOM-объекта, работает быстрее, тоже строка.

Задание №2: input.value отражает текущее состояние поля после ввода пользователем. getAttribute('value') хранит только первоначальное значение из HTML и не меняется динамически.

Задание №3:

```html
<select name="city">
  <option>Москва</option>
  <option selected>Питер</option>
  <option>Казань</option>
  <option>Новосибирск</option>
</select>
```

---

Билет №7

Задание №1: Способы изменения CSS через JS:

· Свойство style: element.style.color = 'red';
· Метод setAttribute: element.setAttribute('style', 'color:red')
· Работа с классами: element.classList.add('new-class')

Задание №2:

· element.style.color — только инлайн-стили, установленные через JS или атрибут style.
· getComputedStyle — финальные вычисленные стили с учетом всех CSS-правил.

Задание №3:

```html
<a href="https://google.com" target="_blank" rel="noopener noreferrer">Google</a>
```

---

Билет №8

Задание №1: Делегирование событий — когда обработчик вешается на родителя и ловит события от дочерних элементов (благодаря всплытию). Полезно для динамически добавляемых элементов.

Задание №2: Через проверку event.target.closest('селектор') или event.target.matches('селектор') внутри обработчика родителя.

Задание №3:

```html
<a href="#end">Перейти к концу страницы</a>
<div style="height: 1000px;"></div>
<div id="end">Конец страницы</div>
```

---

Билет №9

Задание №1:

· localStorage: хранит данные бессрочно (до явного удаления), доступен во всех вкладках.
· sessionStorage: живет до закрытия вкладки, данные изолированы для каждой вкладки.

Задание №2:

```js
localStorage.setItem('key', 'value');
const data = localStorage.getItem('key');
```

Задание №3:

```html
<article>
  <header><h1>Заголовок статьи</h1></header>
  <time datetime="2026-05-01">1 мая 2026</time>
  <p>Текст статьи...</p>
  <footer>Автор: Иван</footer>
</article>
```

---

Билет №10

Задание №1:

· Погружение — событие идет от корня к целевому элементу.
· Всплытие — от целевого элемента к корню.
· Порядок: сначала погружение, потом всплытие.

Задание №2:

· stopPropagation() — останавливает дальнейшее распространение события (не дает всплыть/погрузиться).
· preventDefault() — отменяет действие по умолчанию (например, отправку формы или переход по ссылке).

Задание №3:

```js
function addItem(text) {
  const li = document.createElement('li');
  li.textContent = text;
  document.getElementById('list').appendChild(li);
}
```

---

Билет №11

Задание №1: Селекторы — шаблоны для выбора элементов. Типы:

1. Универсальный *
2. По тегу div
3. По классу .class
4. По ID #id
5. Атрибута [type="text"]

Задание №2:

· class — может быть много элементов с одним классом, в CSS обозначается ., в JS: getElementsByClassName.
· id — уникальный на странице, в CSS #, в JS: getElementById.

Задание №3:

```html
<button onclick="document.body.style.backgroundColor = '#'+Math.floor(Math.random()*16777215).toString(16)">Случайный цвет</button>
```

---

Билет №12

Задание №1: Псевдоклассы — задают состояние элемента:

· :hover — при наведении
· :nth-child(2) — второй дочерний элемент
· :focus — при фокусе

Задание №2: Псевдоэлементы создают виртуальные элементы:

· ::before — вставляет контент до содержимого
· ::after — после содержимого

Задание №3: Реализация вкладок через JS (пример для одного блока):

```html
<style>.tab-content { display: none; } .active { display: block; }</style>
<button onclick="showTab(1)">Tab1</button> ...
<div id="tab1" class="tab-content active">Контент 1</div>
<script>
function showTab(n) { /* скрыть все, показать нужный */ }
</script>
```

---

Билет №13

Задание №1: Flexbox — одномерная модель раскладки. Основные свойства контейнера: display: flex, flex-direction, justify-content, align-items, flex-wrap.

Задание №2:

· justify-content — выравнивание по главной оси (горизонталь, если row).
· align-items — выравнивание по поперечной оси (вертикаль, если row).

Задание №3: Добавить сохранение в localStorage:

```js
localStorage.setItem('activeTab', n);
window.onload = () => showTab(localStorage.getItem('activeTab') || 1);
```

---

Билет №14

Задание №1: Grid — двумерная сетка. Отличие от Flexbox: Grid управляет и строками, и колонками одновременно, Flexbox — только одним направлением.

Задание №2:

```css
grid-template-columns: 1fr 2fr 1fr;
grid-template-rows: auto 200px;
```

Задание №3:

```html
<form>
  <input type="text" name="name" placeholder="Имя">
  <input type="email" name="email" placeholder="Email">
  <textarea name="message"></textarea>
  <button>Отправить</button>
</form>
```

---

Билет №15

Задание №1: JSON — текстовый формат данных.

```js
const obj = {a:1};
const json = JSON.stringify(obj);
const back = JSON.parse(json);
```

Задание №2: Через fetch с методом POST и FormData.

Задание №3:

```js
form.addEventListener('submit', (e) => {
  e.preventDefault();
  console.log(Object.fromEntries(new FormData(form)));
});
```

---

Билет №16

Задание №1: Асинхронность — выполнение кода без блокировки главного потока (таймеры, fetch, события).

Задание №2: Promise — объект-результат асинхронной операции. Состояния: pending (ожидание), fulfilled (успех), rejected (ошибка).

Задание №3:

```js
let count = 10;
const timer = setInterval(() => {
  console.log(count--);
  if(count < 0) clearInterval(timer);
}, 1000);
```

---

Билет №17

Задание №1: async/await — синтаксический сахар над Promise. async функция всегда возвращает Promise, await ждет его выполнения.

Задание №2: Ошибки обрабатываются через try/catch:

```js
try { await fetch(...) } catch(e) { console.error(e); }
```

Задание №3:

```js
async function getData() {
  try { return await fetch('/api').then(r=>r.json()); }
  catch(e) { console.log('Ошибка', e); }
}
```

---

Билет №18

Задание №1: (Вопрос по бухгалтерии — не относится к HTML/CSS/JS, вероятно, ошибочно попал в билет).

Задание №2:

· var — функциональная область видимости, можно переопределять.
· let/const — блочная область видимости. const нельзя переприсвоить.

Задание №3:

```html
<button id="counter">Кликов: 0</button>
<script>
let count=0; button.onclick=()=>{button.textContent=`Кликов: ${++count}`;};
</script>
```

---

Билет №19

Задание №1: POST-запрос нужен для отправки данных на сервер (создание/изменение), когда данные не должны быть в URL (пароли, файлы, большие объемы).

Задание №2: Canvas — элемент для рисования графики через JS (графики, игры, обработка изображений).

Задание №3: Аккордеон — через скрытие/показ блоков при клике на заголовок.

---

Билет №20

Задание №1: GET-запросы предназначены для получения данных от сервера. Параметры в URL, можно кэшировать.

Задание №2: XMLHttpRequest — старый способ (события, громоздкий). fetch — новый, на Promise, проще и мощнее.

Задание №3:

```html
<input id="a"> + <input id="b"> <button onclick="result.textContent = +a.value + +b.value">=</button> <span id="result"></span>
```

---

Билет №21

Задание №1: Адаптивный дизайн — верстка, подстраивающаяся под экран. Медиа-запрос:

```css
@media (max-width: 768px) { body { font-size: 14px; } }
```

Задание №2: Мета-тег viewport контролирует масштабирование на мобильных:

```html
<meta name="viewport" content="width=device-width, initial-scale=1.0">
```

Задание №3:

```css
@media (max-width: 600px) { .block { background: gray; } }
```

---

Билет №22

Задание №1: CSS-трансформации — изменение формы/положения:

· rotate(45deg) — поворот
· scale(1.5) — масштаб
· translate(10px, 20px) — сдвиг

Задание №2: Transition — плавное изменение свойств за время:

```css
transition: all 0.3s ease;
```

Задание №3:

```css
.square { width:100px; height:100px; background:red; transition: transform 0.5s; }
.square:hover { transform: rotate(45deg); }
```

---

Билет №23

Задание №1: Анимации (@keyframes) — последовательность кадров. Отличие от transition: можно создавать сложные повторяющиеся движения.

Задание №2: Параметры: animation-name, duration, iteration-count, direction.

Задание №3:

```css
@keyframes pulse { 0% {transform:scale(1);} 50% {transform:scale(1.1);} 100% {transform:scale(1);} }
button { animation: pulse 1s infinite; }
```

---

Билет №24

Задание №1: BEM — методология именования: block__element--modifier. Пример: card__title--big.

Задание №2: Глубокая вложенность ухудшает производительность, делает CSS жестко связанным с HTML и сложным для поддержки.

Задание №3:

```html
<div class="product-card">
  <img class="product-card__image" src="img.jpg">
  <h2 class="product-card__title">Товар</h2>
  <span class="product-card__price">100 руб</span>
  <button class="product-card__button">Купить</button>
</div>
```

---

Билет №25

Задание №1: Кастомные элементы — создание своих HTML-тегов через класс, наследующий от HTMLElement.

Задание №2: Shadow DOM — изолированное DOM-дерево внутри элемента, скрытое от основного документа (для инкапсуляции стилей и скриптов).

Задание №3: Аналогично билету №9, задание 3.

---

Билет №26

Задание №1: Повтор вопроса из билета №2, задание 1.

Задание №2: Повтор из билета №4, задание 1.

Задание №3: Аналогично билету №10, задание 3.

---

Билет №27

Задание №1: Повтор билета №9, задание 1.

Задание №2: IndexedDB — NoSQL-база в браузере для больших объемов структурированных данных (тогда как localStorage — только пары ключ-значение до 5-10 МБ).

Задание №3: Аналогично билету №3, задание 3.

---

Билет №28

Задание №1: querySelector нужен для поиска первого элемента по любому CSS-селектору.

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

Задание №3: Аналогично билету №4, задание 3.

---

Билет №29

Задание №1: Event Loop — механизм, управляющий очередью задач. setTimeout (макрозадача) попадает в очередь, Promise (микрозадача) выполняется сразу после текущего синхронного кода.

Задание №2: Callback Hell — вложенные колбэки («пирамида гибели»). Решение: использовать Promises или async/await.

Задание №3: Аналогично билету №5, задание 3 (только радиокнопки).

---

Билет №30

Задание №1: Повтор билета №21, задание 1.

Задание №2: Повтор билета №22, задание 1.

Задание №3:

```html
<table border="1">
  <tr><th>Название</th><th>Цена</th><th>Кол-во</th></tr>
  <tr><td>Ручка</td><td>50</td><td>10</td></tr>
  <tr><td>Карандаш</td><td>30</td><td>20</td></tr>
  <tr><td>Ластик</td><td>20</td><td>15</td></tr>
</table>
```