Frontend | Вопросы собесов
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads
Ko'proq ko'rsatish📈 Telegram kanali Frontend | Вопросы собесов analitikasi
Frontend | Вопросы собесов (@easy_javascript_ru) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 17 296 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 7 490-o'rinni va Rossiya mintaqasida 37 846-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 17 296 obunachiga ega bo‘ldi.
08 Noyabr, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -302 ga, so‘nggi 24 soatda esa -8 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya o‘rtacha 6.03% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 4.46% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 1 043 marta ko‘riladi; birinchi sutkada odatda 771 ta ko‘rish yig‘iladi.
- Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 4 ta reaksiya keladi.
- Tematik yo‘nalishlar: Kontent ставь, браузер, html, border, flex kabi asosiy mavzularga jamlangan.
📝 Tavsif va kontent siyosati
Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
“Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy
Контакт для рекламы: @sendme_ads”
Yuqori yangilanish chastotasi (oxirgi ma’lumot 09 Noyabr, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.
let age: number = 25;
let name: string = "Alice";
function greet(name: string): string {
return `Hello, ${name}`;
}
2️⃣Совместимость:
TypeScript полностью совместим. Любой корректный JavaScript-код также является корректным TypeScript-кодом. Это позволяет постепенно внедрять TypeScript в существующие проекты.
3️⃣Поддержка современных возможностей:
Поддерживает все современные стандарты JavaScript (ES6 и выше), а также предоставляет дополнительные возможности, такие как декораторы и асинхронные функции.
4️⃣Расширенные возможности ООП (объектно-ориентированного программирования):
Добавляет возможности, такие как классы, интерфейсы, абстрактные классы и модификаторы доступа (public, private, protected).
class Person {
private name: string;
constructor(name: string) {
this.name = name;
}
public greet(): void {
console.log(`Hello, my name is ${this.name}`);
}
}
const alice = new Person("Alice");
alice.greet(); // Hello, my name is Alice
5️⃣Типы данных и интерфейсы:
TypeScript позволяет определять собственные типы и интерфейсы, что делает код более выразительным и понятным.
interface User {
id: number;
name: string;
email: string;
}
const user: User = {
id: 1,
name: "Alice",
email: "alice@example.com"
};
6️⃣Инструменты разработки:
Благодаря статической типизации и метаданным, TypeScript обеспечивает улучшенное автодополнение, рефакторинг и навигацию по коду в популярных редакторах кода, таких как Visual Studio Code.
7️⃣Компиляция:
Компилируется (или транслируется) в JavaScript. Это означает, что код TypeScript преобразуется в JavaScript, который затем может выполняться в любом браузере или среде выполнения JavaScript.
// TypeScript
let message: string = "Hello, TypeScript";
// Компилированный JavaScript
var message = "Hello, TypeScript";
Создание простого проекта может включать следующие шаги:
1️⃣Установка TypeScript:
npm install -g typescript
2️⃣Инициализация проекта TypeScript:
tsc --init
Это создаст файл tsconfig.json, в котором можно настроить параметры компиляции TypeScript.
3️⃣Создание TypeScript-файла:
// src/index.ts
const greet = (name: string): string => {
return Hello, ${name};
};
console.log(greet("TypeScript"));
4️⃣Компиляция TypeScript в JavaScript:
tsc
Это создаст файл index.js в папке dist или другой указанной папке.
5️⃣Запуск скомпилированного JavaScript-кода:
node dist/index.js
TypeScript — он является строгой надстройкой над JavaScript. Он добавляет статическую типизацию, улучшенные возможности ООП, поддержку современных стандартов JavaScript и улучшенные инструменты разработки. TypeScript компилируется в JavaScript, что позволяет использовать его в любых средах выполнения JavaScript.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовыхMap более подходящим для определенных задач по сравнению с обычными объектами. Вот основные отличия:
1️⃣Типы ключей
✅Объекты: Ключами могут быть только строки или символы. Другие типы, такие как числа или объекты, автоматически преобразуются в строки.
const obj = {};
obj[1] = 'one'; // Ключ преобразуется в строку '1'
console.log(obj['1']); // 'one'
const a = { key: 'a' };
const b = { key: 'b' };
obj[a] = 'value'; // Ключ преобразуется в '[object Object]'
console.log(obj['[object Object]']); // 'value'
✅Map: Ключами могут быть любые значения, включая объекты, функции и примитивы.
const map = new Map();
map.set(1, 'one');
console.log(map.get(1)); // 'one'
const a = { key: 'a' };
const b = { key: 'b' };
map.set(a, 'valueA');
map.set(b, 'valueB');
console.log(map.get(a)); // 'valueA'
console.log(map.get(b)); // 'valueB'
2️⃣Итерация
✅Объекты: Осуществляется с помощью циклов for...in или методов Object.keys(), Object.values() и Object.entries().
const obj = { a: 1, b: 2 };
for (const key in obj) {
console.log(key, obj[key]);
}
Object.keys(obj).forEach(key => console.log(key, obj[key]));
✅Map: Имеет встроенные методы для итерации, такие как map.keys(), map.values() и map.entries(). Эти методы возвращают итерируемые объекты.
const map = new Map([['a', 1], ['b', 2]]);
for (const [key, value] of map) {
console.log(key, value);
}
map.forEach((value, key) => console.log(key, value));
3️⃣Сохранение порядка
✅Объекты: Порядок свойств в объектах не гарантирован, хотя современные реализации JavaScript сохраняют порядок добавления свойств.
✅Map: Порядок добавления пар ключ-значение всегда сохраняется.
4️⃣Производительность
✅Объекты: Использование объектов может быть быстрее для создания и доступа к свойствам, но это зависит от реализации в конкретной среде выполнения.
✅Map: Map оптимизирован для частого добавления и удаления ключей и значений.
5️⃣Методы и свойства
✅Объекты: Не имеют встроенных методов для работы с коллекцией ключей и значений.
✅Map: Предоставляет множество встроенных методов, таких как set, get, has, delete, и свойства, такие как size.
const map = new Map();
map.set('key', 'value');
console.log(map.has('key')); // true
console.log(map.get('key')); // 'value'
map.delete('key');
console.log(map.size); // 0
6️⃣Прототипное наследование
✅Объекты: Имеют цепочку прототипов, которая может приводить к коллизиям имен свойств с прототипами.
const obj = { a: 1 };
console.log(obj.toString); // [Function: toString] - свойство унаследовано от Object.prototype
✅Map: В Map нет такой проблемы, так как он не использует цепочку прототипов для хранения данных.
const map = new Map();
map.set('a', 1);
console.log(map.toString); // [Function: toString] - метод самого Map, а не его данных
✅Объекты используют строки и символы как ключи, их итерация может быть менее удобной, и они могут сталкиваться с проблемами прототипного наследования.
✅Map поддерживает любые типы ключей, сохраняет порядок вставки, предоставляет удобные методы для работы с коллекцией и оптимизирован для частых операций добавления и удаления.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовыхPromise.all принимает массив промисов и выполняет их параллельно. Он завершится успешно, когда все промисы в массиве будут выполнены.
2️⃣Возвращает один промис:
Метод возвращает один промис, который:
✅Выполняется с массивом результатов, если все промисы в массиве были успешно выполнены.
✅Отклоняется с причиной отклонения первого промиса, который был отклонен.
3️⃣Отклонение при первой ошибке:
Если один из промисов в массиве отклоняется, Promise.all сразу отклоняет весь промис, не дожидаясь выполнения остальных.
Синтаксис
Promise.all(iterable);
✅iterable: Массив или другой итерируемый объект, элементы которого являются промисами или значениями.
Рассмотрим пример, где мы запускаем несколько асинхронных операций одновременно и ждем их завершения.
const promise1 = new Promise((resolve) => setTimeout(resolve, 100, 'First'));
const promise2 = new Promise((resolve) => setTimeout(resolve, 200, 'Second'));
const promise3 = new Promise((resolve) => setTimeout(resolve, 300, 'Third'));
Promise.all([promise1, promise2, promise3])
.then((results) => {
console.log(results); // ['First', 'Second', 'Third']
})
.catch((error) => {
console.error('One of the promises failed:', error);
});
Если один из промисов отклоняется, Promise.all отклоняет весь результат.
const promise1 = new Promise((resolve) => setTimeout(resolve, 100, 'First'));
const promise2 = new Promise((resolve, reject) => setTimeout(reject, 200, 'Error in Second'));
const promise3 = new Promise((resolve) => setTimeout(resolve, 300, 'Third'));
Promise.all([promise1, promise2, promise3])
.then((results) => {
console.log(results); // This line will not be executed
})
.catch((error) => {
console.error('One of the promises failed:', error); // 'Error in Second'
});
Promise.all также можно использовать с async/await для более удобной работы с асинхронным кодом.
const promise1 = new Promise((resolve) => setTimeout(resolve, 100, 'First'));
const promise2 = new Promise((resolve) => setTimeout(resolve, 200, 'Second'));
const promise3 = new Promise((resolve) => setTimeout(resolve, 300, 'Third'));
async function runPromises() {
try {
const results = await Promise.all([promise1, promise2, promise3]);
console.log(results); // ['First', 'Second', 'Third']
} catch (error) {
console.error('One of the promises failed:', error);
}
}
runPromises();
Promise.all принимает массив промисов и возвращает один промис, который выполняется, когда все промисы в массиве выполнены успешно, или отклоняется, если любой из промисов отклонен. Он позволяет обрабатывать несколько асинхронных операций параллельно и возвращает массив результатов всех промисов.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовыхfalse. Эти значения часто используются в условиях (например, в if выражениях) для проверки истинности или ложности.
Основные значения:
1️⃣false:
Само значение false является ложным.
if (false) {
console.log('Это не выполнится');
}
2️⃣0 и -0:
Нулевые значения считаются ложными.
if (0) {
console.log('Это не выполнится');
}
if (-0) {
console.log('Это тоже не выполнится');
}
3️⃣"" (пустая строка):
Пустая строка считается ложной.
if ("") {
console.log('Это не выполнится');
}
4️⃣null:
Значение null также является ложным.
if (null) {
console.log('Это не выполнится');
}
5️⃣undefined:
Значение undefined является ложным.
if (undefined) {
console.log('Это не выполнится');
}
6️⃣NaN (Not-a-Number):
Специальное значение NaN, которое обозначает нечисловое значение, считается ложным.
if (NaN) {
console.log('Это не выполнится');
}
Примеры
1️⃣Условные операторы:
const value = 0;
if (!value) {
console.log('value является falsy'); // Это выполнится
}
2️⃣Логические операторы:
Логические операторы могут быть использованы для проверки на "falsy" значения.
const value = null;
const result = value || 'Значение по умолчанию';
console.log(result); // 'Значение по умолчанию'
3️⃣Функции с параметрами по умолчанию:
Функции могут использовать "falsy" значения для предоставления параметров по умолчанию.
function greet(name) {
name = name || 'гость';
console.log('Привет, ' + name);
}
greet(); // Привет, гость
greet('Алиса'); // Привет, Алиса
"Falsy" значения — это значения, которые приводятся к false в логическом контексте. Основные "falsy" значения: false, 0, -0, "", null, undefined, NaN. Эти значения часто используются в условиях для проверки их истинности или ложности.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовыхDocumentFragment, а затем добавьте фрагмент в DOM одним действием.
const fragment = document.createDocumentFragment();
for (let i = 0; i < 100; i++) {
const div = document.createElement('div');
div.textContent = `Item ${i}`;
fragment.appendChild(div);
}
document.body.appendChild(fragment);
✅Batch DOM updates:
Группируйте несколько изменений DOM в одно действие. Это уменьшает количество вызовов для перерисовки.
2️⃣Избегайте синхронных изменений стилей и компоновки
✅CSS класс:
Вместо изменения нескольких отдельных стилей, измените один класс.
element.style.width = '100px';
element.style.height = '100px';
element.style.backgroundColor = 'red';
Вместо этого используйте класс:
.new-style {
width: 100px;
height: 100px;
background-color: red;
}
✅Избегайте чтения свойств, вызывающих перерисовку:
Чтение некоторых свойств, таких как offsetHeight или offsetWidth, после изменения стилей, заставляет браузер выполнять немедленную перерисовку. Избегайте таких действий.
3️⃣Используйте CSS для анимаций
✅CSS анимации и трансформации:
Используйте CSS для анимаций и трансформаций, так как они могут выполняться на уровне GPU, что снижает нагрузку на основной поток.
.animated {
transition: transform 0.3s;
transform: translateX(100px);
}
4️⃣Дебаунс и троттлинг
✅Debouncing и Throttling:
Используйте дебаунс и троттлинг для событий, которые происходят часто (например, resize или scroll), чтобы уменьшить количество вызовов обработчиков событий.
function debounce(func, wait) {
let timeout;
return function(...args) {
clearTimeout(timeout);
timeout = setTimeout(() => func.apply(this, args), wait);
};
}
window.addEventListener('resize', debounce(() => {
console.log('Resized!');
}, 200));
5️⃣Виртуальный DOM
✅Использование библиотек с виртуальным DOM:
Библиотеки, такие как React, используют виртуальный DOM, чтобы минимизировать количество изменений в реальном DOM, что значительно улучшает производительность.
6️⃣Избегайте использования layout thrashing
✅Layout Thrashing:
Это происходит, когда чередуются операции записи и чтения из DOM, что вызывает множественные перерисовки.
const height = element.offsetHeight;
element.style.height =out;
return func
Сгруппируйте чтения и записи отдельно:
const height = element.offsetHeight;
element.style.height = ${height + 10}px;
7️⃣Избегайте глубоких вложенностей в DOM
✅Меньше вложенностей:
Старайтесь минимизировать глубину вложенности элементов, так как это может усложнить перерисовку и компоновку.
8️⃣Оптимизация стилей
✅Уменьшите количество правил и селекторов:
Сложные CSS-селекторы могут замедлить работу браузера. Используйте более простые селекторы и старайтесь избегать вложенных правил.
9️⃣Использование will-change
✅will-change:
Используйте свойство will-change, чтобы заранее сообщить браузеру о планируемых изменениях, что позволяет оптимизировать рендеринг.
.will-change-transform {
will-change: transform;
}
Для оптимизации перерисовок в веб-приложениях, минимизируйте изменения в DOM, используйте CSS для анимаций, применяйте дебаунс и троттлинг для событий, избегайте layout thrashing, уменьшайте глубину вложенностей в DOM и используйте библиотеки с виртуальным DOM. Эти методы помогают улучшить производительность и плавность интерфейса.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовыхdocument.querySelector('form').addEventListener('submit', function(event) {
event.preventDefault();
console.log('Форма не отправлена!');
});
2️⃣Отмена перехода по ссылке:
document.querySelector('a').addEventListener('click', function(event) {
event.preventDefault();
console.log('Переход по ссылке отменен!');
});
event.stopPropagation()
Предотвращает дальнейшее распространение события по дереву DOM. Это полезно, когда вы хотите остановить событие от всплытия (bubbling) или захвата (capturing) к родительским элементам.
Примеры:
1️⃣Остановка всплытия события:
document.querySelector('.child').addEventListener('click', function(event) {
event.stopPropagation();
console.log('Клик на child');
});
document.querySelector('.parent').addEventListener('click', function() {
console.log('Клик на parent');
});
В этом примере клик на .child элемент не вызовет обработчик клика на .parent элементе.
Сравнение
`event.preventDefault()`:
✅Предотвращает действие браузера по умолчанию.
✅Примеры: отмена отправки формы, отмена перехода по ссылке.
efault() и event.stopPropag
✅Останавливает дальнейшее распространение события по дереву DOM.
✅Примеры: остановка всплытия события от дочернего элемента к родительскому.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых