Frontend | Вопросы собесов
19.2K subscribers
31 photos
1 video
939 links
Download Telegram
🤔 Что известно о версиях HTTP, чем они отличаются?

- HTTP/1.1 — классический, последовательные запросы, keep-alive.
- HTTP/2 — мультиплексирование, бинарный формат, заголовки сжимаются.
- HTTP/3 (QUIC) — работает поверх UDP, более надёжный и быстрый при потере пакетов.
Каждая версия улучшает скорость и устойчивость соединения.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍3
🤔 Расскажи про memo в react

React.iss.onemo — это функция в React, которая используется для оптимизации производительности функциональных компонентов. Она предотвращает ненужные повторные рендеры, если пропсы компонента не изменились.

🚩Зачем нужен `React.iss.onemo`?

В React каждый раз, когда родительский компонент обновляется, все его дочерние компоненты тоже ререндерятся, даже если их пропсы остались неизменными. Это может негативно сказаться на производительности, особенно если дочерний компонент выполняет сложные вычисления или рендерит большое количество данных.
React.iss.onemo решает эту проблему, запоминая (мемоизируя) предыдущий результат рендера и сравнивая его с новыми пропсами. Если пропсы не изменились, компонент просто использует закэшированное представление, а не ререндерится.

🚩Как использовать `React.iss.onemo`?

React.iss.onemo — это функция высшего порядка (HOC), которая оборачивает функциональный компонент
import React from "react";

const MyComponent = ({ value }) => {
console.log("Рендер компонента!");
return <div>Значение: {value}</div>;
};

// Оборачиваем компонент в React.iss.onemo
const MemoizedComponent = React.iss.onemo(MyComponent);

export default MemoizedComponent;


🚩Пример без React.iss.onemo vs. с React.iss.onemo

Допустим, у нас есть родительский компонент, который изменяет состояние при каждом клике
import React, { useState } from "react";
import MemoizedComponent from "./MyComponent";

const Parent = () => {
const [count, setCount] = useState(0);

return (
<div>
<button onClick={() => setCount(count + 1)}>Увеличить</button>
<MemoizedComponent value="Привет, мир!" />
</div>
);
};

export default Parent;


🚩Когда НЕ стоит использовать `React.iss.onemo`?

Если компонент всегда ререндерится из-за изменения пропсов – смысла в memo нет.
Если компонент рендерится быстро – оптимизация может быть ненужной, а проверка пропсов даже замедлит работу.
Если пропсы часто изменяются – кэширование теряет смысл, так как все равно ререндерится.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥2
🤔 Чем отличается замыкание от области видимости?

- Область видимости — это область действия переменной.
- Замыкание — это функция, которая «помнит» окружение, в котором была создана, даже после выхода из него.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊17🤔5
🤔 Какие проблемы решают vue а какие jquery?

Это два совершенно разных инструмента с разными подходами и целями. Они решают свои проблемы, но Vue.js более современный и масштабируемый фреймворк, тогда как jQuery — это библиотека для упрощения работы с DOM. Давайте разберёмся, какие проблемы решает каждый из них.

🚩Проблемы, которые решает Vue.js:

Vue.js — это современный фреймворк для построения реактивных пользовательских интерфейсов (UI). Он решает множество проблем, которые возникают при разработке масштабных, интерактивных приложений.

🟠Реактивность данных
Vue.js автоматически отслеживает изменения данных (двустороннее связывание данных) и обновляет интерфейс без необходимости вручную изменять DOM.
const app = Vue.createApp({
data() {
return {
message: "Привет, мир!"
};
}
}).mount('#app');


HTML
<div id="app">
<p>{{ message }}</p>
<button @click="message = 'Изменено!'">Изменить сообщение</button>
</div>


🟠Компонентный подход
Vue позволяет разбивать приложение на компоненты — маленькие, переиспользуемые части интерфейса, которые содержат свою логику, стили и разметку.
Vue.component('my-button', {
template: `<button @click="clickHandler">Нажми меня</button>`,
methods: {
clickHandler() {
alert('Нажали кнопку!');
}
}
});


HTML
<my-button></my-button>


🟠Управление состоянием
Vue может работать с глобальным состоянием через Vuex (или Pinia). Это удобно для сложных приложений, где данные должны передаваться между разными компонентами.
Если у вас корзина покупок, Vuex помогает сохранять её состояние и передавать данные компонентам без путаницы.

🟠Одностраничные приложения (SPA)
Vue.js идеально подходит для создания SPA — приложений, где вся логика загружается единожды, а переходы между страницами происходят без перезагрузки браузера. Для этого используется библиотека vue-router.

🟠Упрощение работы с динамическими интерфейсами
С Vue.js легко создавать сложные элементы интерфейса, такие как анимации, формы, списки с фильтрацией и сортировкой.

🟠Масштабируемость
Vue.js идеально подходит для создания больших приложений, поскольку он поддерживает:
Переиспользуемые компоненты.
Интеграцию с современными инструментами разработки (TypeScript, Webpack, Babel).
Поддержку экосистемы (Vuex, Vue Router, Pinia).

🚩Проблемы, которые решает jQuery

jQuery — это библиотека, созданная для упрощения работы с DOM, AJAX и событиями. Она была особенно полезна в прошлом, когда JavaScript был менее удобным.

🟠Кроссбраузерная совместимость
Раньше в JavaScript было много различий между браузерами. jQuery решал эту проблему, предоставляя единый API, который работал везде одинаково.
$('#element').hide(); // Работает во всех браузерах


🟠Простое управление DOM
jQuery предоставляет мощные методы для поиска, добавления, удаления и изменения элементов DOM.
$('#button').click(function() {
$('#text').text('Кнопка нажата');
});


🟠AJAX-запросы
jQuery упрощал работу с AJAX-запросами, позволяя отправлять данные на сервер и получать ответ без перезагрузки страницы.
$.ajax({
url: '/api/data',
method: 'GET',
success: function(data) {
console.log(data);
}
});


🟠Обработка событий
jQuery предоставлял удобный API для работы с событиями, что особенно полезно при создании интерактивного интерфейса.
$('#button').on('click', function() {
alert('Кнопка нажата!');
});


🟠Анимации
jQuery позволяет легко создавать простые анимации (например, плавное появление или скрытие элементов).
$('#element').fadeIn();


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊7👍2
🤔 В чём отличия HTTP/1 от HTTP/2?

- HTTP/2 использует одно соединение вместо нескольких;
- Поддерживает мультиплексирование — отправку нескольких запросов одновременно;
- Бинарный протокол вместо текстового;
- Улучшенная производительность за счёт header compression и server push.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13
🤔 Как взаимодействовать с vuex js?

Vuex — это централизованное хранилище для управления состоянием в приложениях Vue.js. Оно используется, когда несколько компонентов нуждаются в доступе к общему состоянию.

🟠Подключение Vuex в проект
Сначала установим Vuex, если он ещё не установлен:
npm install vuex


Теперь создадим хранилище (store)
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
state: {
count: 0
},
mutations: {
increment(state) {
state.count++;
}
},
actions: {
incrementAsync({ commit }) {
setTimeout(() => {
commit('increment');
}, 1000);
}
},
getters: {
doubleCount: state => state.count * 2
}
});


Затем подключаем это хранилище в main.js
import Vue from 'vue';
import App from './App.vue';
import store from './store';

Vue.config.productionTip = false;

new Vue({
store, // Подключаем Vuex-хранилище
render: h => h(App)
}).$mount('#app');


🟠Доступ к данным из Vuex (state)
Чтобы получить данные из хранилища (state), можно использовать this.$store.state или mapState.
<template>
<div>
<p>Счетчик: {{ $store.state.count }}</p>
</div>
</template>


С использованием mapState
<script>
import { mapState } from 'vuex';

export default {
computed: {
...mapState(['count'])
}
};
</script>


🟠Изменение состояния (mutations)
В Vuex нельзя изменять state напрямую, для этого используются mutations.
<template>
<button @click="$store.commit('increment')">Увеличить</button>
</template>


Или с помощью mapMutations
<script>
import { mapMutations } from 'vuex';

export default {
methods: {
...mapMutations(['increment'])
}
};
</script>

<template>
<button @click="increment">Увеличить</button>
</template>


🟠Асинхронные действия (actions)
Мутации не поддерживают асинхронные операции, поэтому для этого используются actions.
<template>
<button @click="$store.dispatch('incrementAsync')">Увеличить через 1 сек</button>
</template>


Или с mapActions
<script>
import { mapActions } from 'vuex';

export default {
methods: {
...mapActions(['incrementAsync'])
}
};
</script>

<template>
<button @click="incrementAsync">Увеличить через 1 сек</button>
</template>


🟠Использование геттеров (getters)
Геттеры работают как вычисляемые свойства (computed), позволяют получать обработанные данные из state.
<template>
<p>Удвоенный счетчик: {{ $store.getters.doubleCount }}</p>
</template>


Или с mapGetters
<script>
import { mapGetters } from 'vuex';

export default {
computed: {
...mapGetters(['doubleCount'])
}
};
</script>

<template>
<p>Удвоенный счетчик: {{ doubleCount }}</p>
</template>


🟠Модули Vuex (для больших проектов)
Если приложение большое, можно разделить Vuex-хранилище на модули:
const counterModule = {
state: () => ({ count: 0 }),
mutations: {
increment(state) {
state.count++;
}
},
getters: {
doubleCount: state => state.count * 2
}
};

export default new Vuex.Store({
modules: {
counter: counterModule
}
});


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6💊2
🤔 Как настраивать собственную кастомизацию форм?

Можно использовать стили для стандартных элементов формы, применять псевдоэлементы, использовать кастомные компоненты на основе div и JavaScript. Также часто подключают библиотеки или UI-фреймворки.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5💊1