Frontend | Вопросы собесов
Сайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp Тесты t.me/+T0COHtFzCJkwMDUy Задачи t.me/+_tcX2w2EmvdmMTgy Вакансии t.me/+CgCAzIyGHHg0Nzky
Больше📈 Аналитический обзор Telegram-канала Frontend | Вопросы собесов
Канал Frontend | Вопросы собесов (@easy_javascript_ru) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 18 285 подписчиков, занимая 7 343 место в категории Технологии и приложения и 36 918 место в регионе Россия.
📊 Показатели аудитории и динамика
С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 18 285 подписчиков.
Согласно последним данным от 13 июня, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило -122, а за последние 24 часа — -9, при этом общий охват остаётся высоким.
- Статус верификации: Не верифицирован
- Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 9.43%. В первые 24 часа после публикации контент обычно набирает 5.83% реакций от общего числа подписчиков.
- Охват публикаций: В среднем каждый пост получает 1 725 просмотров. В течение первых суток публикация набирает 1 066 просмотров.
- Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 8.
- Тематические интересы: Контент сосредоточен на ключевых темах, таких как ставь, браузер, html, border, flex.
📝 Описание и контентная политика
Автор описывает ресурс как площадку для выражения субъективного мнения:
“Сайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp
Тесты t.me/+T0COHtFzCJkwMDUy
Задачи t.me/+_tcX2w2EmvdmMTgy
Вакансии t.me/+CgCAzIyGHHg0Nzky”
Благодаря высокой частоте обновлений (последние данные получены 14 июня, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.
auth_token), важно защитить его от доступа через JavaScript. Иначе злоумышленник может украсть его через XSS-атаку (Cross-Site Scripting).
🟠Используем флаг `HttpOnly` (основная защита)
HttpOnly делает cookie недоступным для JavaScript (document.cookie).
Set-Cookie: auth_token=abc123; HttpOnly; Secure; SameSite=Strict
🟠Используем `Secure`, чтобы cookie передавались только по HTTPS
Флаг Secure запрещает передачу cookie через HTTP, только HTTPS.
Set-Cookie: auth_token=abc123; Secure
🟠Используем `SameSite`, чтобы защититься от CSRF-атак
SameSite=Strict или SameSite=Lax защищает от подделки запросов (CSRF).
Set-Cookie: auth_token=abc123; SameSite=Strict
🟠Не храним токены в cookie (если можно)
Если возможно, используйте Authorization: Bearer заголовки вместо cookie.
Authorization: Bearer abc123
Ставь 👍 и забирай 📚 Базу знанийArrayList или HashMap) или при вызове методов, ожидающих объект в качестве аргумента.
🚩Зачем нужен боксинг?
🟠Единый подход к данным
Примитивы сами по себе не являются объектами. Они имеют меньший размер и работают быстрее, но иногда нужно обернуть их в объект, чтобы пользоваться методами или хранить их в структурах данных, предназначенных для объектов.
🟠Совместимость
Во многих случаях требуется, чтобы данные могли быть использованы в объектно-ориентированных конструкциях, где примитивы недоступны.
🟠Гибкость
Примитивы нельзя присвоить переменной типа Object, а после боксинга это становится возможным.
🚩Как это работает?
Примитивные типы, такие как int, double или boolean, автоматически упаковываются в их соответствующие классы-обертки, такие как Integer, Double и Boolean. Это действие называется автобоксингом.
// Боксинг вручную
int primitiveInt = 42;
Integer boxedInt = Integer.valueOf(primitiveInt); // Боксинг
// Автобоксинг
Integer autoBoxedInt = 42; // Примитив int автоматически упакован в Integer
// Распаковка (unboxing)
int unboxedInt = autoBoxedInt; // Integer автоматически преобразован обратно в int
Коллекции в Java (например, ArrayList) работают только с объектами. Поэтому, если вы хотите сохранить int в коллекции, он автоматически упаковывается в Integer.
import java.util.ArrayList;
public class Example {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(10); // Автобоксинг: int превращается в Integer
numbers.add(20);
int num = numbers.get(0); // Авто-распаковка: Integer превращается в int
System.out.println(num); // 10
}
}
Ставь 👍 и забирай 📚 Базу знаний100% в CSS основывается на родительском элементе. Рассмотрим различные случаи и подходы.
🟠Растяжение элемента на 100% ширины (`width: 100%;`)
Элемент займет всю ширину своего родителя.
<div style="width: 300px; background: lightblue;">
<div style="width: 100%; background: coral;">Я растянут по ширине!</div>
</div>
🟠Растяжение элемента на 100% высоты (`height: 100%;`)
Элемент займет всю высоту родительского элемента.
<div style="height: 300px; background: lightblue;">
<div style="height: 100%; background: coral;">Я растянут по высоте!</div>
</div>
🟠Растяжение элемента на 100% ширины и высоты
Для растяжения элемента как по ширине, так и по высоте относительно родителя используются width: 100%; и height: 100%;.
<div style="width: 300px; height: 300px; background: lightblue;">
<div style="width: 100%; height: 100%; background: coral;">Растянут по ширине и высоте!</div>
</div>
🟠Растяжение относительно окна браузера (`viewport`)
Если элемент нужно растянуть на весь экран, используются единицы 100vw (ширина окна) и 100vh (высота окна).
<div style="width: 100vw; height: 100vh; background: coral;">
Я растянут на весь экран!
</div>
Для исключения полосы прокрутки можно использовать
width: calc(100vw - 16px); /* Учитывается ширина скролла */
🟠Использование `position: absolute`
Когда нужно растянуть элемент независимо от размера его содержимого, можно использовать position: absolute.
<div style="position: relative; width: 300px; height: 300px; background: lightblue;">
<div style="position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: coral;">
Я растянут абсолютно!
</div>
</div>
🟠Растяжение внутри Flexbox-контейнера
Flexbox автоматически растягивает вложенные элементы, если у них указаны свойства flex: 1 или align-items: stretch.
<div style="display: flex; width: 300px; height: 300px; background: lightblue;">
<div style="flex: 1; background: coral;">Я растянут по Flexbox!</div>
</div>
🟠Растяжение внутри Grid-контейнера
CSS Grid также позволяет растягивать элементы.
<div style="display: grid; width: 300px; height: 300px; background: lightblue;">
<div style="width: 100%; height: 100%; background: coral;">Я растянут внутри Grid!</div>
</div>
🟠Растяжение с учетом отступов
Если нужно учесть отступы (padding) или границы (border), используйте свойство box-sizing: border-box. Это гарантирует, что элемент с width: 100% и height: 100% не будет "выходить за пределы" из-за отступов.
<div style="width: 300px; height: 300px; background: lightblue;">
<div style="width: 100%; height: 100%; padding: 20px; box-sizing: border-box; background: coral;">
Я растянут с учетом отступов!
</div>
</div>
Ставь 👍 и забирай 📚 Базу знанийстрока ${переменная}.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний.parent .child {
color: red;
}
Что было бы с селектором родителя?
.child:has-parent(.parent) {
color: red;
}
🚩Использовать `:has()` (в современных браузерах)
В CSS4 появился :has(), который позволяет изменять родителя, если в нём есть определённый потомок.
.parent:has(.child) {
border: 2px solid red;
}
🚩Использовать Flexbox/Grid вместо селектора родителя
Иногда можно поменять структуру HTML и стилизацию, чтобы избежать проблемы.
.parent {
display: flex;
gap: 10px;
}
🚩Использовать JavaScript
Если нужно изменить родителя динамически, можно использовать JavaScript.
document.querySelectorAll(".child").forEach(child => {
child.parentElement.classList.add("has-child");
});
.has-child {
border: 2px solid blue;
}
Ставь 👍 и забирай 📚 Базу знаний::), за которым следует название псевдоэлемента. Например, ::before или ::after.
🟠Распространенные псевдоэлементы
::before и ::after: Позволяют вставлять содержимое до или после содержимого выбранного элемента соответственно. Очень часто используются для добавления декоративных элементов.
p::before {
content: "«";
color: blue;
}
p::after {
content: "»";
color: blue;
}
::first-line: Применяет стили к первой строке текста в блочном элементе.
p::first-line {
font-weight: bold;
}
::first-letter: Применяет стили к первой букве текста в блочном элементе.
p::first-letter {
font-size: 200%;
}
::selection: Применяет стили к части текста, которую пользователь выделил.
p::selection {
background: yellow;
}
🚩Особенности работы
Работают как часть документа, но на самом деле не существуют в DOM-дереве, а создаются стилями.
Чтобы псевдоэлементы ::before и ::after отображались, необходимо задать свойство content, даже если оно пустое (content: "";).
Могут быть стилизованы почти так же, как обычные элементы, но есть некоторые ограничения, например, связанные с взаимодействием с JavaScript.
Ставь 👍 и забирай 📚 Базу знанийactions передаётся объект context, из которого можно вызвать commit() для изменения state.
const store = new Vuex.Store({
state: {
count: 0
},
mutations: {
increment(state) {
state.count++;
}
},
actions: {
asyncIncrement(context) {
setTimeout(() => {
context.commit("increment"); // Вызываем мутацию через 1 сек
}, 1000);
}
}
});
🟠Как вызвать action?
Actions вызываются через dispatch(), а не commit().
store.dispatch("asyncIncrement");
🟠Actions с параметрами
Можно передавать параметры в dispatch(), чтобы использовать их внутри action.
actions: {
asyncIncrement(context, payload) {
setTimeout(() => {
context.commit("increment");
console.log("Задержка:", payload.delay);
}, payload.delay);
}
}
store.dispatch("asyncIncrement", { delay: 2000 });
🟠Возвращение `Promise` в actions
Если action должен дождаться завершения, можно вернуть Promise.
actions: {
fetchData(context) {
return fetch("https://jsonplaceholder.typicode.com/todos/1")
.then(response => response.json())
.then(data => {
console.log("Данные получены:", data);
});
}
}
store.dispatch("fetchData").then(() => {
console.log("Данные загружены!");
});
🟠Использование `async/await` в actions
Можно использовать async/await, чтобы код выглядел чище.
actions: {
async fetchData(context) {
const response = await fetch("https://jsonplaceholder.typicode.com/todos/1");
const data = await response.json();
console.log("Данные:", data);
}
}
await store.dispatch("fetchData");
console.log("Данные загружены!");
🟠Actions могут вызывать другие actions
Если нужно выполнить несколько actions последовательно, можно вызывать один action внутри другого.
actions: {
async firstAction(context) {
console.log("Первый action выполнен");
},
async secondAction(context) {
await context.dispatch("firstAction");
console.log("Второй action выполнен");
}
}
store.dispatch("secondAction");
// Выведет: "Первый action выполнен"
// Затем: "Второй action выполнен"
Ставь 👍 и забирай 📚 Базу знаний
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
