Frontend | Вопросы собесов
Сайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp Тесты t.me/+T0COHtFzCJkwMDUy Задачи t.me/+_tcX2w2EmvdmMTgy Вакансии t.me/+CgCAzIyGHHg0Nzky
Show more📈 Analytical overview of Telegram channel Frontend | Вопросы собесов
Channel Frontend | Вопросы собесов (@easy_javascript_ru) in the Russian language segment is an active participant. Currently, the community unites 18 269 subscribers, ranking 7 325 in the Technologies & Applications category and 36 895 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 18 269 subscribers.
According to the latest data from 19 June, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -128 over the last 30 days and by 1 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 9.80%. Within the first 24 hours after publication, content typically collects 5.48% reactions from the total number of subscribers.
- Post reach: On average, each post receives 1 790 views. Within the first day, a publication typically gains 1 002 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 9.
- Thematic interests: Content is focused on key topics such as ставь, браузер, html, border, flex.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“Сайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp
Тесты t.me/+T0COHtFzCJkwMDUy
Задачи t.me/+_tcX2w2EmvdmMTgy
Вакансии t.me/+CgCAzIyGHHg0Nzky”
Thanks to the high frequency of updates (latest data received on 20 June, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
<div class="button button--primary">
<span class="button__text">Click me</span>
</div>
2️⃣button — блок
✅button__text — элемент
✅button--primary — модификатор
2️⃣Изоляция компонентов
Блоки в БЭМ независимы и изолированы друг от друга, что предотвращает проблемы с каскадностью и неожиданным переопределением стилей.
<div class="header">
<div class="header__logo"></div>
<div class="header__nav"></div>
</div>
<div class="footer">
<div class="footer__logo"></div>
</div>
Классы .header__logo и .footer__logo не пересекаются и не влияют друг на друга.
3️⃣Легкость в переиспользовании
Блоки можно легко переиспользовать в разных частях проекта или даже в разных проектах без изменения их стилей.
<div class="card">
<div class="card__title">Title</div>
<div class="card__content">Content</div>
</div>
<div class="profile">
<div class="card">
<div class="card__title">Profile Title</div>
<div class="card__content">Profile Content</div>
</div>
</div>
4️⃣Удобство в поддержке и масштабировании
Благодаря четкой структуре и изоляции, код написанный по БЭМ легче поддерживать и масштабировать. Добавление новых компонентов или модификация существующих не вызывает каскадных изменений в других частях системы.
5️⃣Унификация стилей
Методология БЭМ способствует унификации и стандартизации стилей, что упрощает работу с проектом и делает его более предсказуемым.
Пример
HTML:
<div class="menu">
<div class="menu__item menu__item--active">Home</div>
<div class="menu__item">About</div>
<div class="menu__item">Contact</div>
</div>
CSS:
.menu {
background-color: #fff;
border: 1px solid #ccc;
}
.menu__item {
padding: 10px;
color: #333;
}
.menu__item--active {
background-color: #007bff;
color: #fff;
}
Методология БЭМ упрощает чтение, поддержку и масштабирование кода за счет четкой структуры, изоляции компонентов и унификации стилей. Она делает интерфейсы более предсказуемыми и удобными для работы в команде.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых <div class="block1"></div>
<div class="block2"></div>
В данном случае итоговый отступ между .block1 и .block2 будет 30px, а не 50px.
2️⃣Родитель и первый/последний дочерний элемент:
Если первый или последний дочерний элемент имеет вертикальный отступ, он схлопывается с отступом родительского элемента, если между ними нет границ, внутреннего отступа или контента.
<div class="parent">
<div class="child"></div>
</div>
В этом случае итоговый отступ сверху для .child будет 20px, так как отступ .child схлопывается с отступом родителя.
3️⃣Пустые блоки:
Если блок не содержит контента, границ или внутреннего отступа, его вертикальные отступы также могут схлопываться.
Примеры
Схлопывание между соседними элементами
<div class="box1">Box 1</div>
<div class="box2">Box 2</div>
Итоговый отступ между .box1 и .box2 будет 30px.
Схлопывание границ родителя и первого/последнего дочернего элемента
<div class="container">
<div class="content">Content</div>
</div>
Итоговый верхний отступ для .content будет 25px, так как отступы схлопываются.
Исключения и предотвращение схлопывания
✅Границы или внутренние отступы:
Если между элементами добавить границу или внутренний отступ, схлопывания не произойдет.
.parent {
padding-top: 1px;
}
✅Flexbox и Grid:
Элементы, расположенные с помощью Flexbox или Grid, не схлопывают свои отступы.
✅Блоки с overflow: hidden, position: absolute, или display: inline-block:
Такие блоки не участвуют в схлопывании отступов.
Схлопывание границ — это процесс объединения вертикальных отступов соседних блоков в один, чтобы избежать удвоения отступов. В результате итоговый отступ равен наибольшему из схлопывающихся отступов.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовыхcreateContext. Она возвращает объект контекста, который содержит два компонента: Provider и Consumer.
import React, { createContext, useState } from 'react';
const MyContext = createContext();
2️⃣Provider
Компонент Provider используется для предоставления значения контекста всем дочерним компонентам. Все компоненты внутри Provider могут получить доступ к значениям, переданным в value.
const MyProvider = ({ children }) => {
const [state, setState] = useState('Hello World');
return (
<MyContext.Provider value={{ state, setState }}>
{children}
</MyContext.Provider>
);
};
3️⃣useContext
Используется для подписки на контекст в функциональных компонентах. Он принимает объект контекста, возвращаемый из createContext, и возвращает текущее значение контекста.
import React, { useContext } from 'react';
const MyComponent = () => {
const { state, setState } = useContext(MyContext);
return (
<div>
<p>{state}</p>
<button onClick={() => setState('New Value')}>Change Value</button>
</div>
);
};
Полный пример
import React, { createContext, useState, useContext } from 'react';
// Создание контекста
const MyContext = createContext();
const MyProvider = ({ children }) => {
const [state, setState] = useState('Hello World');
return (
<MyContext.Provider value={{ state, setState }}>
{children}
</MyContext.Provider>
);
};
const MyComponent = () => {
const { state, setState } = useContext(MyContext);
return (
<div>
<p>{state}</p>
<button onClick={() => setState('New Value')}>Change Value</button>
</div>
);
};
const App = () => (
<MyProvider>
<MyComponent />
</MyProvider>
);
export default App;
useContext — это хук, который позволяет компонентам получать данные из контекста. Он используется для доступа к глобальным данным без необходимости передавать пропсы на каждом уровне компонента.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовыхExpires или Max-Age. По истечении этого времени кука автоматически удаляется браузером.
4️⃣Доступность по домену и пути
Доступны только для указанного домена и пути. Это позволяет ограничивать доступ к кукам для других страниц и поддоменов.
5️⃣Безопасность (HTTP-only и Secure)
✅HTTP-only: Куки, установленные с флагом HttpOnly, недоступны через JavaScript, что помогает защитить данные от XSS-атак.
✅Secure: Куки, установленные с флагом Secure, передаются только по защищенному HTTPS соединению.
6️⃣Передача с запросами
Автоматически отправляются серверу с каждым HTTP-запросом к соответствующему домену, что позволяет серверу узнавать пользователя и сохранять его сессию.
Примеры использования куки
1️⃣Установка куки через JavaScript:
document.cookie = "username=John Doe; expires=Fri, 31 Dec 2024 23:59:59 GMT; path=/";
2️⃣Чтение куки через JavaScript:
const getCookie = (name) => {
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
if (parts.length === 2) return parts.pop().split(';').shift();
}
console.log(getCookie('username')); // 'John Doe'
3️⃣Удаление куки через JavaScript:
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";
Примеры на сервере
1️⃣Установка куки на сервере (Node.js с Express):
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.cookie('username', 'John Doe', { maxAge: 900000, httpOnly: true });
res.send('Cookie has been set');
});
app.listen(3000);
2️⃣Чтение куки на сервере (Node.js с Express):
const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
app.use(cookieParser());
app.get('/', (req, res) => {
const username = req.cookies.username;
res.send(`Username is: ${username}`);
});
app.listen(3000);
Куки — это небольшие данные, хранящиеся в браузере. Они имеют ограниченный размер, время жизни, и доступны по определенному домену и пути. Куки могут быть защищены флагами HttpOnly и Secure, и автоматически отправляются серверу с каждым запросом.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовыхArray.isArray(). Этот метод проверяет, является ли переданное значение массивом, и возвращает true или false.
Пример
const arr = [1, 2, 3];
const notArr = "Hello";
console.log(Array.isArray(arr)); // true
console.log(Array.isArray(notArr)); // false
Альтернативные методы
1️⃣Проверка с помощью instanceof:
Этот метод проверяет, является ли объект экземпляром конструктора Array.
const arr = [1, 2, 3];
const notArr = "Hello";
console.log(arr instanceof Array); // true
console.log(notArr instanceof Array); // false
2️⃣Проверка с помощью конструктора Object.prototype.toString.call():
Этот метод проверяет тип объекта, возвращаемый методом
Object.prototype.toString.
const arr = [1, 2, 3];
const notArr = "Hello";
console.log(Object.prototype.toString.call(arr) === '[object Array]'); // true
console.log(Object.prototype.toString.call(notArr) === '[object Array]'); // false
Сравнение методов
Array.isArray():
✅Является самым современным и предпочтительным методом.
✅Поддерживается всеми современными браузерами.
✅Легко читается и понимается.
instanceof:
✅Работает корректно в большинстве случаев.
- Может давать неверные результаты, если массив создан в другом контексте (например, в iframe).
- Object.prototype.toString.call():
- Универсальный метод для проверки различных типов объектов.
- Меньше подвержен проблемам с контекстом, но выглядит менее читаемым по сравнению с Array.isArray().
Для проверки, является ли поле массивом, рекомендуется использовать метод Array.isArray(), так как он простой, эффективный и работает корректно в большинстве ситуаций.
Чтобы проверить, является ли поле массивом, можно использовать метод Array.isArray(). Этот метод возвращает true, если значение является массивом, и false в противном случае.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовыхthis.
✅created(): Вызывается после создания экземпляра и установки реактивных свойств. На этом этапе уже можно получить доступ к данным и методам компонента, но ещё нет привязки к DOM.
new Vue({
data() {
return {
message: 'Hello Vue!'
};
},
beforeCreate() {
console.log('beforeCreate');
},
created() {
console.log('created');
console.log(this.message); // 'Hello Vue!'
}
});
2️⃣Монтирование (Mounting):
✅beforeMount(): Вызывается перед монтированием компонента в DOM. На этом этапе шаблон ещё не скомпилирован и не вставлен в DOM.
✅mounted(): Вызывается после монтирования компонента в DOM. Здесь уже можно выполнять действия, зависящие от DOM, например, инициализировать сторонние библиотеки, работающие с DOM.
new Vue({
el: '#app',
data() {
return {
message: 'Hello Vue!'
};
},
beforeMount() {
console.log('beforeMount');
},
mounted() {
console.log('mounted');
console.log(this.$el); // доступ к элементу DOM
}
});
3️⃣Обновление (Updating):
✅beforeUpdate(): Вызывается перед обновлением DOM, когда изменяется реактивное свойство. На этом этапе можно получить текущее состояние до обновления.
✅updated(): Вызывается после обновления DOM. Этот хук можно использовать для выполнения действий, зависящих от нового состояния DOM.
new Vue({
el: '#app',
data() {
return {
message: 'Hello Vue!'
};
},
beforeUpdate() {
console.log('beforeUpdate');
},
updated() {
console.log('updated');
},
methods: {
updateMessage() {
this.message = 'Hello World!';
}
}
});
4️⃣Размонтирование (Unmounting):
✅beforeUnmount(): Вызывается перед размонтированием компонента и его удалением из DOM. Используется для выполнения очистки, например, отмены таймеров или отписки от событий.
✅unmounted(): Вызывается после того, как компонент был размонтирован и удалён из DOM.
new Vue({
el: '#app',
data() {
return {
message: 'Hello Vue!'
};
},
beforeUnmount() {
console.log('beforeUnmount');
},
unmounted() {
console.log('unmounted');
},
methods: {
destroyComponent() {
this.$destroy();
}
}
});
Жизненный цикл компонента Vue.js включает создание, монтирование, обновление и размонтирование. Каждый этап сопровождается вызовом определенных хуков (beforeCreate, created, beforeMount, mounted, beforeUpdate, updated, beforeUnmount, unmounted), которые позволяют выполнять различные действия в нужные моменты жизни компонента.
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1429 вопроса на Frontend разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Available now! Telegram Research 2025 — the year's key insights 
