Frontend Interview - собеседования по Javascript / Html / Css
11.9K subscribers
2.05K photos
108 videos
310 files
504 links
Канал для подготовки к собеседованиям по фронтенду

Админ, сотрудничество, реклама: @seniorFrontPromo, @maria_seniorfront
Менеджер по рекламе: @Spiral_Yuri

Купить рекламу: https://telega.in/c/frontendinterview

Канал в реестре РКН:
https://rknn.link/su
Download Telegram
Get the Middle Character

Вам будет дано слово. Ваша задача - вернуть средний символ слова. Если длина слова нечетная, верните средний символ. Если длина слова четная, верните 2 средних символа.

Пример:
getMiddle("testing") = "t"

👉 @frontendInterview
Протокол IPv6

IPv6 или Internet Protocol version 6 — сетевой протокол, который обеспечивает передачу данных между компьютерами и другими устройствами в интернете.

Основная идея заключается в том же, в чём идея интернета — прямой связности и построении одноранговой сети (P2P). По сравнению с IPv4 (актуальной, но устаревающей версией), в IPv6 исправили баги и добавили решения, связанные с адресацией, маршрутизацией и автоматизацией.

Основные преимущества протокола в вебе:

- Прямые соединения: преимущество для голосовой связи (VoIP) и аудио-, видео- и конференц-связи (WebRTC), так как нет разделения на частные (серые) и публичные (белые) адреса.
- Удобство в отладке: нет необходимости использовать программное обеспечение вроде ngrok.
- Меньше проблем с блокировками: у каждого устройства свой уникальный IP-адрес. Меньше шансов, что вас заблокируют из-за соседа на хостинге.
- Снижается вероятность столкнуться с капчей на анти-DDoS-сервисах при входе на сайт.
- Косвенные SEO-преимущества: Google может учитывать доступность сайта по IPv6, политики Apple.
- Актуальность в развивающихся странах: во многих регионах провайдеры используют только IPv6, что важно, если делаете международный продукт.

IPv6-адрес состоит из 128 бит, которые записываются в виде восьми групп по четыре шестнадцатеричных символа (хекстета).

Посмотрим на адрес 2001:0db8:4ac7:fddd:8da3:981f:fbda:1e43. Выглядит страшно, но на практике всё просто. Адрес делится на две части:

- 2001:0db8:4ac7:fddd — глобальный префикс, который определяет провайдер.
- 8da3:981f:fbda:1e43 — уникальный идентификатор устройства в сети.

В отличие от IPv4, вы можете представить вторую половину как универсальный уникальный идентификатор устройства (UUID).

👉 @frontendInterview
👍21
This media is not supported in your browser
VIEW IN TELEGRAM
Управляем тем, какую область фоновая картинка будет занимать внутри элемента.

Свойство background-origin определяет, откуда начинается отсчёт фона элемента — от границы (border), внутреннего отступа (padding) или содержимого (content). Это влияет на позиционирование фонового изображения или градиента.

Пример
.background-origin {
background-origin: padding-box;
}


👉 @frontendInterview
👍2
Где искать работу в IT в 2025: честный разбор платформ для поиска работы программистам, продактам и дизайнерам

Разбираю популярные платформы для поиска работы в IT, объясняю почему LinkedIn не работает, Toptal — не про фриланс, а hh — это просто боль.

👉 @frontendInterview
Обзор CSS-in-JS

CSS-in-JS — это подход, при котором стили пишутся непосредственно в JavaScript-коде компонентов, а не в отдельных CSS-файлах. Это позволяет использовать возможности JavaScript для динамического управления стилями и обеспечивает изоляцию стилей на уровне компонентов, предотвращая конфликты и облегчая поддержку кода.

Существуют разные решения CSS-in-JS, но их объединяет общий принцип: стили описываются непосредственно в JavaScript-коде. Это может делаться с помощью объектов, шаблонных строк или через вызов специальных функций, которые обрабатывают определения стилей. Независимо от конкретного синтаксиса, эти JavaScript-описания затем преобразуются таким образом, что стили применяются к компонентам через уникальные идентификаторы. Чаще всего это автоматически сгенерированные CSS-классы — например, вместо общего класса .button может быть создан уникальный класс вроде .acz123_button или .Component-button-aXyZ. Такой подход обеспечивает изоляцию стилей на уровне компонентов, предотвращая конфликты, и упрощает управление ими.

Вот несколько популярных CSS-in-JS библиотек: Styled Components, Emotion, Styled JSX и vanilla-extract.

👉 @frontendInterview
👎3👍2
First Course in Algorithms Through Puzzles (2019)

Этот учебник знакомит с основными алгоритмами и объясняет их аналитические методы. Все алгоритмы и методы, представленные в этой книге, хорошо известны и часто используются в реальных программах. Книга начинается с базовых моделей, и никаких предварительных знаний не требует. Эта книга подходит для студентов старших курсов технических направлений, а также для самостоятельного изучения начинающими специалистами, интересующимися увлекательной областью алгоритмов.
Более 40 упражнений разного уровня сложности. Решения и комментарии ко всем упражнениям приводятся в последней главе.

👉 @frontendInterview
Степень 4

Напишите функцию, который возвращает true, если заданный параметр является степенью 4, и false, если не является. Если параметр не является целым числом (например, строкой, массивом), метод также должен возвращать false.

Пример:

 powerOf4(16) = return true;  "4^4 = 16"


👉 @frontendInterview
👎4
Что такое Long polling?

Это техника, используемая для реализации связи между клиентом и сервером в веб-приложениях, чтобы поддерживать обновление данных в реальном времени. В отличие от обычных HTTP-запросов, long polling позволяет клиенту ждать ответа от сервера дольше, что помогает уменьшить задержку при получении новых данных.

Как работает

1. Клиент отправляет HTTP-запрос к серверу.
2. Сервер не отвечает сразу, а задерживает ответ до тех пор, пока не появятся новые данные или не истечет таймаут.
3. Когда данные становятся доступными или истекает таймаут ожидания, сервер отправляет ответ клиенту.
4. Клиент обрабатывает полученные данные и немедленно отправляет новый запрос к серверу для получения следующих обновлений.

Сервер на Node.js с использованием express
const express = require('express');
const app = express();

let messages = [];
let clients = [];

// Endpoint для отправки сообщений
app.post('/messages', (req, res) => {
const message = req.body.message;
messages.push(message);

// Уведомляем всех клиентов
clients.forEach(client => client.res.json({ message }));
clients = [];
res.status(200).send('Message sent');
});

// Endpoint для получения сообщений (лонг-полинг)
app.get('/messages', (req, res) => {
if (messages.length > 0) {
res.json({ message: messages.pop() });
} else {
clients.push({ req, res });
}
});

app.listen(3000, () => {
console.log('Server listening on port 3000');
});


Клиентский код на JavaScript
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Long Polling Example</title>
</head>
<body>
<h1>Long Polling Example</h1>
<div id="messages"></div>
<script>
function pollMessages() {
fetch('/messages')
.then(response => response.json())
.then(data => {
const messageDiv = document.createElement('div');
messageDiv.textContent = `New message: ${data.message}`;
document.getElementById('messages').appendChild(messageDiv);
pollMessages(); // Отправляем новый запрос после получения сообщения
})
.catch(error => {
console.error('Error:', error);
setTimeout(pollMessages, 5000); // Повторный запрос через 5 секунд при ошибке
});
}

// Начинаем лонг-полинг
pollMessages();
</script>
</body>
</html>


Плюсы
- Реальное время
Лонг-полинг позволяет получать данные в реальном времени без необходимости постоянно проверять сервер с частыми запросами.

- Снижение нагрузки на сервер
По сравнению с обычным полингом (когда клиент постоянно отправляет запросы с фиксированным интервалом), лонг-полинг уменьшает количество HTTP-запросов, что снижает нагрузку на сервер.

- Простота реализации
Лонг-полинг легче внедрить и поддерживать в сравнении с более сложными технологиями, такими как WebSockets.

Минусы
- Задержка
Хотя лонг-полинг уменьшает задержку по сравнению с обычным полингом, он все же может иметь небольшие задержки в зависимости от времени ожидания и частоты событий.

- Ресурсоемкость
Держание соединений открытыми в течение длительного времени может быть ресурсоемким для сервера, особенно при большом количестве клиентов.

- Неоптимальность
Лонг-полинг менее эффективен по сравнению с WebSockets, которые предоставляют постоянное двустороннее соединение.

👉 @frontendInterview
👍1👎1
CORS для собеседований и работы

Если вы видите эту ошибку — вы не одиноки:
Access to fetch at 'https://api.site.com' from origin 'http://localhost:3000' has been blocked by CORS policy.


Разберем, почему это происходит, и как это починить. Что такое CORS, и для чего он нужен.

CORS (Cross-Origin Resource Sharing) - русского обозначения не имеет. Дословно "межисточниковый" обмен ресурсами.

Цель браузера: защитить пользователя от вредоносных сайтов за счет блокировки запросов к неразрешенным ресурсам.

Как работает:
- Браузер выполняет вызов ресурса.
- Получает заголовки Access-Control.
- Проверяет разрешенные заголовки на соответствие домена и запроса.
- Блокирует или разрешает чтение результата запроса.

Пример: пользователь открывает сайт evil.com. Если bank.com настроил CORS, JavaScript на evil.com не сможет прочитать ответ от bank.com/api/account.

CORS не защищает от кросс-доменных запросов (CSRF-атак). Браузер проверяет заголовки после получения ответа, блокируя передачу ответа в js код.

Заголовки CORS
# Разрешённые домены (один, список или *)
Access-Control-Allow-Origin: https://frontend.com

# Разрешённые HTTP-методы (список или *)
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE

# Разрешённые заголовки для отправки(предварительный запрос)
Access-Control-Allow-Headers: Authorization, Content-Type, X-Requested-With

# Разрешённые для чтения заголовки (основной запрос)
Access-Control-Expose-Headers: Authorization, Content-Type, X-Requested-With

# Разрешить передачу кук/токенов
Access-Control-Allow-Credentials: true

# Кэшировать предварительный запрос на 600 сек (10 мин)
Access-Control-Max-Age: 600


Предзапросы (Preflight-запросы)
"Простые запросы" (GET, POST, HEAD без спец. заголовков) отправляются сразу.

"Сложные запросы", например, с методами PUT, DELETE или с нестандартными заголовками, сначала отправляют "предзапрос" (preflight request) методом OPTIONS.

Сервер должен ответить, разрешены ли такие запросы.

Например, перед вызовом GET с заголовком X-API-Key будет выполнен запрос:

http

/data HTTP/1.1
Origin: https://frontend.com
Access-Control-Request-Headers: X-API-Key


Сервер должен ответить:

http

HTTP/1.1 204 OK
Access-Control-Allow-Origin: https://frontend.com
Access-Control-Allow-Headers: X-API-Key


И только потом отправится основной запрос.

Лучшие практики CORS
1.Не используйте * для защищенных данных

Разрешайте только доверенные домены:
Access-Control-Allow-Origin: https://your-frontend.com


2.Для публичных API можно использовать *:

Access-Control-Allow-Origin: *


3.Куки = осторожно!

Если используете куки:
http

Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://frontend.com // Нельзя использовать *


4.Тестируйте предзапросы:

Для PUT, DELETE и запросов с Authorization всегда настраивайте обработку OPTIONS.

- Используйте Access-Control-Max-Age чтобы снизить нагрузку
- Настройте веб-сервер (Nginx/Apache) для оптимизации, обработки OPTIONS без запуска приложения

👉 @frontendInterview
👍21
👩‍💻 Готовы стать профи в Node.js-разработке и освоить самые востребованные технологии?

🔥 Курс «Node.js Developer» от OTUS – это ваш шанс научиться создавать высокопроизводительные серверные приложения с использованием Node.js, Express, TypeScript, GraphQL, Apollo и Nest.js. Мы фокусируемся на практических навыках, которые можно сразу применять в реальных проектах.

🦾 Освойте работу с базами данных MongoDB и PostgreSQL, научитесь создавать и оптимизировать запросы, а также внедрять лучшие практики разработки с TDD. Преподаватели-практики помогут вам разобраться в тонкостях разработки и архитектуры Node.js.

🎁 Дарим промокод, который дает скидку на обучение - NODE8

➡️ Пройдите вступительное тестирование и присоединяйтесь к группе: https://gclnk.com/SImMqf8t

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
erid 2SDnjdHp2cW
Please open Telegram to view this post
VIEW IN TELEGRAM
Angular Signals + RxJS: объединяем два реактивных мира в одном стейт-менеджере

Angular долгое время ассоциировался с RxJS. Даже слишком: многие разработчики ощущали, что без Observable ничего не работает. Но вот в Angular 17 появляются Signals — синхронная реактивность прямо из коробки. В 17+ — они становятся мейнстримом. Возникает вопрос: а что делать с RxJS? Выбрасывать?

Signals и RxJS — не конкуренты, а два мощных инструмента для решения разных задач. И если их правильно сочетать, можно построить удобную, масштабируемую и эффективную архитектуру

В этой статье мы:
- Разберёмся в различиях между Signals и RxJS
- Покажем, когда использовать что
- Сделаем свой собственный state-manager с красивым API
- И покажем, как всё это выглядит в реальном Angular-приложении

👉 @frontendInterview
1
Хотите научиться создавать интерактивные элементы на сайте, используя только чистый JavaScript?

У вас есть базовые знания HTML и CSS, но вы не уверены, как «оживить» сайт с помощью JavaScript?

На открытом уроке 26 августа в 20:00 МСК мы разберём, как использовать JavaScript для работы с DOM, создавать динамичные элементы и анимации, и всё это без фреймворков! На вебинаре мы создадим мини-проект — интерактивную карточку, которая будет реагировать на действия пользователя.

❗️ Изучив основы работы с JavaScript и DOM, вы сможете самостоятельно управлять интерактивными элементами на сайте. Получите полезные навыки, которые сразу сможете применить на практике и добавить в портфолио.

👉 Запишитесь на открытый урокhttps://gclnk.com/PS1ylUFa

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
erid 2SDnjf3k1wt