Frontend собеседования
1.76K subscribers
383 photos
543 links
Подготовка к собеседованиям на позицию Frontend-разработчик

Еще больше ответов на сайте https://frontview-it.ru

JS собеседования - @frontview_js
Frontend работа - @frontview_vacancies
Все IT вакансии - @frontview_all_vacancies
Download Telegram
🔸 Аннотации типов — это указание типов для переменных, параметров функций, возвращаемых значений и других элементов кода. Они помогают улучшить читаемость и надежность кода, а также позволяют TypeScript выявлять ошибки на этапе разработки.


let count: number = 5; // переменная count может быть только числом
function add(a: number, b: number): number {
return a + b; // функция принимает два числа и возвращает число
}


Аннотации типов также используются для объектов, массивов и пользовательских типов. Они делают код более предсказуемым и упрощают его поддержку.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Frontend собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍2
В CSS initial устанавливает значение свойства в его начальное состояние, определенное спецификацией. inherit делает значение свойства таким же, как у родительского элемента, а unset сбрасывает свойство либо к inherit, если оно наследуемое, либо к initial, если нет.

✈️ Frontend собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
➡️ Глубокое и поверхностное копирование — это два способа создания копий объектов.

Поверхностное копирование создает новый объект, но копирует только ссылки на вложенные объекты. Изменения вложенных объектов в копии повлияют на оригинал.


const original = { a: 1, b: { c: 2 } };
const shallowCopy = { ...original };
shallowCopy.b.c = 3;
console.log(original.b.c); // 3


Глубокое копирование создает полностью независимую копию объекта, включая все вложенные объекты. Изменения в копии не затрагивают оригинал.


const original = { a: 1, b: { c: 2 } };
const deepCopy = JSON.parse(JSON.stringify(original));
deepCopy.b.c = 3;
console.log(original.b.c); // 2


Для глубокого копирования также можно использовать библиотеки, например, Lodash.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Frontend собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🟥 CDN (Content Delivery Network) помогает ускорить загрузку HTML-страниц за счет распределения статических ресурсов (CSS, JavaScript, изображения) по серверам, расположенным ближе к пользователю.

Для подключения CDN достаточно заменить локальные ссылки на файлы на URL-адреса, предоставляемые CDN. Например, для Bootstrap:


<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>


Использование CDN уменьшает нагрузку на сервер и ускоряет доставку контента, так как файлы кэшируются и загружаются с ближайшего сервера сети.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Frontend собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Интерфейсы в TypeScript используются для описания структуры объектов, задавая обязательные свойства и их типы. Они не компилируются в JavaScript, а служат только для проверки типов на этапе разработки.

✈️ Frontend собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
IndexedDB — это низкоуровневое API для хранения больших объемов структурированных данных прямо в браузере. В отличие от localStorage, IndexedDB поддерживает транзакции, индексы и позволяет хранить данные в виде объектов, что делает его подходящим для сложных приложений.


const request = indexedDB.open("MyDatabase", 1);

request.onupgradeneeded = function(event) {
const db = event.target.result;
const store = db.createObjectStore("books", { keyPath: "id" });
store.createIndex("by_title", "title", { unique: false });
};


Данные в IndexedDB асинхронно записываются и читаются, что не блокирует основной поток выполнения. Это делает его мощным инструментом для оффлайн-приложений.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Frontend собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🔴Свойство scroll-behavior в CSS позволяет управлять поведением прокрутки на странице. При установке значения smooth прокрутка становится плавной, а не мгновенной. Это особенно полезно для навигации по странице с помощью якорей или JavaScript.


html {
scroll-behavior: smooth;
}


При таком стиле переход по ссылке с якорем (например, <a href="#section">) будет происходить с плавной прокруткой до целевого элемента. Также это работает с методами JavaScript, такими как scrollTo или scrollIntoView.


document.getElementById('section').scrollIntoView({ behavior: 'smooth' });


Значение по умолчанию — auto, при котором прокрутка происходит мгновенно. Свойство поддерживается в современных браузерах, но для старых версий может потребоваться полифил.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Frontend собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3
Инкремент ++ и декремент -- — это унарные операторы, которые увеличивают или уменьшают значение переменной на единицу. Инкремент добавляет 1, а декремент вычитает 1.

Операторы могут быть префиксными (ставятся перед переменной) или постфиксными (ставятся после переменной). Префиксная форма сначала изменяет значение, а затем возвращает его, а постфиксная — сначала возвращает текущее значение, а затем изменяет его.


let a = 5;
let b = a++; // b = 5, a = 6
let c = ++a; // c = 7, a = 7


В первом случае a++ возвращает исходное значение a, а затем увеличивает его. Во втором случае ++a сначала увеличивает значение, а затем возвращает его.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Frontend собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
➡️ Атрибут srcset используется для указания нескольких версий изображения с разным разрешением, чтобы браузер мог выбрать наиболее подходящее в зависимости от размера экрана и плотности пикселей.


<img src="image-default.jpg"
srcset="image-small.jpg 480w, image-medium.jpg 800w, image-large.jpg 1200w"
sizes="(max-width: 600px) 480px, (max-width: 900px) 800px, 1200px"
alt="Example image">


В этом примере srcset содержит три версии изображения с указанием их ширины в пикселях. Атрибут sizes определяет, какое изображение использовать в зависимости от ширины экрана. Это улучшает производительность и адаптивность веб-страниц.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Frontend собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Symbol — это примитивный тип данных в JavaScript, который используется для создания уникальных идентификаторов. Он часто применяется для создания скрытых или уникальных свойств объектов, чтобы избежать конфликтов имен.

✈️ Frontend собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
➡️Кастомный хук — это функция, которая использует встроенные хуки (useState, useEffect и другие) для создания повторно используемой логики. Имя хука должно начинаться с use, чтобы React мог корректно отслеживать его вызовы.


function useWindowWidth() {
const [width, setWidth] = useState(window.innerWidth);

useEffect(() => {
const handleResize = () => setWidth(window.innerWidth);
window.addEventListener('resize', handleResize);
return () => window.removeEventListener('resize', handleResize);
}, []);

return width;
}


В этом примере хук useWindowWidth отслеживает ширину окна браузера и возвращает её значение. Кастомные хуки позволяют инкапсулировать логику, упрощая её повторное использование в разных компонентах.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Frontend собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🔵filter: drop-shadow() и box-shadow используются для создания теней, но работают по-разному.

box-shadow применяется к блочным элементам и создает тень вокруг их рамки. Тень может быть смещена, размыта и изменена по цвету.


.box {
box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.5);
}


filter: drop-shadow() применяется к содержимому элемента, включая прозрачные области, такие как текст или изображения с альфа-каналом. Тень повторяет форму содержимого.


.element {
filter: drop-shadow(5px 5px 10px rgba(0, 0, 0, 0.5));
}


Основное отличие: box-shadow работает с рамкой элемента, а drop-shadow учитывает форму содержимого, включая прозрачные части.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Frontend собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
Чтобы вернуть файл к состоянию последнего коммита, используется команда git checkout -- <file>. Это сбрасывает все изменения в файле, сделанные после последнего коммита, восстанавливая его содержимое.

✈️ Frontend собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Язык документа в HTML задается с помощью атрибута lang в теге <html>. Этот атрибут помогает браузерам и поисковым системам определить язык содержимого страницы.


<html lang="ru">


В примере указан русский язык. Для других языков используются соответствующие коды, например en для английского или es для испанского. Это важно для accessibility и SEO.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Frontend собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🔴Чтобы предотвратить ненужные повторные рендеры компонента, можно использовать React.memo для функциональных компонентов или PureComponent для классовых. Эти инструменты позволяют избежать рендера, если пропсы и состояние не изменились.


const MyComponent = React.memo(({ prop1, prop2 }) => {
return <div>{prop1} {prop2}</div>;
});


Для более сложных случаев можно использовать хук useMemo, чтобы мемоизировать вычисляемые значения, и useCallback, чтобы сохранить ссылки на функции между рендерами. Это уменьшает количество повторных вычислений и рендеров.


const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
const memoizedCallback = useCallback(() => doSomething(a, b), [a, b]);


Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Frontend собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🤔1
▶️Hoisting (поднятие) — это механизм, при котором объявления переменных и функций перемещаются вверх своей области видимости перед выполнением кода. Это позволяет использовать переменные и функции до их фактического объявления в коде.

Пример с переменными:

console.log(x); // undefined
var x = 5;


- Переменные, объявленные через var, поднимаются, но их значение инициализируется как undefined.

Пример с функциями:

foo(); // "Hello"
function foo() {
console.log("Hello");
}


- Объявления функций поднимаются полностью, поэтому их можно вызывать до объявления.

Hoisting не применяется к let и const, которые остаются в "временной мертвой зоне" до объявления.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Frontend собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
✔️ Тип never в TypeScript обозначает значение, которое никогда не должно возникать. Он используется в ситуациях, когда функция не завершается нормально или когда переменная не может иметь значения.

Функция, которая всегда выбрасывает ошибку или содержит бесконечный цикл, возвращает never:

function throwError(message: string): never {
throw new Error(message);
}


Также never полезен в exhaustive checks для обработки всех вариантов union-типа:

type Shape = 'circle' | 'square';
function handleShape(shape: Shape) {
switch (shape) {
case 'circle': return;
case 'square': return;
default: const _exhaustiveCheck: never = shape; // Ошибка, если Shape расширится
}
}


Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Frontend собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🔹Тег <noscript> используется для отображения контента, если JavaScript отключен в браузере. Он позволяет предоставить альтернативное содержимое или сообщение для пользователей, которые не могут или не хотят использовать JavaScript.

Пример:

<noscript>
<p>Please enable JavaScript to use this website.</p>
</noscript>


- Контент внутри <noscript> отображается только при отключенном JavaScript.
- Часто используется для информирования пользователей или предоставления базовой функциональности без JavaScript.
👍2
Для открытия ссылки в новой вкладке используется атрибут target="_blank" в теге <a>. Чтобы обеспечить безопасность, рекомендуется добавлять rel="noopener noreferrer", предотвращая потенциальные уязвимости через window.opener.
👍3
✔️ Тип never в TypeScript обозначает значение, которое никогда не должно возникать. Он используется в ситуациях, когда функция не завершается нормально или когда переменная не может иметь значения.

Функция, которая всегда выбрасывает ошибку или содержит бесконечный цикл, возвращает never:

function throwError(message: string): never {
throw new Error(message);
}


Также never полезен в exhaustive checks для обработки всех вариантов union-типа:

type Shape = 'circle' | 'square';
function handleShape(shape: Shape) {
switch (shape) {
case 'circle': return;
case 'square': return;
default: const _exhaustiveCheck: never = shape; // Ошибка, если Shape расширится
}
}
👍41