en
Feedback
BackendQuiz - задачи с собеседований по бэкенду

BackendQuiz - задачи с собеседований по бэкенду

Open in Telegram

Задачки на алгоритмы, на понимание HTTP и сетевого стека вцелом, так же базы данных и хранилища. Подойдет как для начинающих так и для опытных. Языки и технологии: Java, PHP, Ruby, Javascript, SQL Контакт: @cyberJohnny

Show more
1 725
Subscribers
+124 hours
+17 days
-630 days
Attracting Subscribers
July '26
July '26
+4
in 0 channels
June '26
+8
in 0 channels
Get PRO
May '26
+3
in 0 channels
Get PRO
April '26
+3
in 0 channels
Get PRO
March '26
+3
in 0 channels
Get PRO
February '26
+13
in 0 channels
Get PRO
January '26
+4
in 0 channels
Get PRO
December '25
+7
in 0 channels
Get PRO
November '25
+13
in 0 channels
Get PRO
October '25
+7
in 0 channels
Get PRO
September '25
+4
in 0 channels
Get PRO
August '25
+3
in 0 channels
Get PRO
July '25
+4
in 0 channels
Get PRO
June '25
+9
in 0 channels
Get PRO
May '25
+7
in 0 channels
Get PRO
April '25
+9
in 0 channels
Get PRO
March '25
+13
in 0 channels
Get PRO
February '25
+10
in 0 channels
Get PRO
January '25
+10
in 0 channels
Get PRO
December '24
+1
in 0 channels
Get PRO
November '24
+2
in 0 channels
Get PRO
October '24
+68
in 0 channels
Get PRO
September '24
+8
in 0 channels
Get PRO
August '24
+11
in 0 channels
Get PRO
July '24
+8
in 0 channels
Get PRO
June '24
+8
in 0 channels
Get PRO
May '24
+6
in 0 channels
Get PRO
April '24
+11
in 0 channels
Get PRO
March '24
+25
in 13 channels
Get PRO
February '24
+16
in 0 channels
Get PRO
January '24
+30
in 4 channels
Get PRO
December '23
+31
in 3 channels
Get PRO
November '23
+15
in 0 channels
Get PRO
October '23
+24
in 0 channels
Get PRO
September '23
+41
in 0 channels
Get PRO
August '23
+10
in 0 channels
Get PRO
July '23
+17
in 0 channels
Get PRO
June '23
+18
in 0 channels
Get PRO
May '23
+27
in 0 channels
Get PRO
April '23
+12
in 0 channels
Get PRO
March '23
+12
in 0 channels
Get PRO
February '23
+16
in 0 channels
Get PRO
January '23
+14
in 0 channels
Get PRO
December '22
+13
in 0 channels
Get PRO
November '22
+83
in 0 channels
Get PRO
October '22
+33
in 0 channels
Get PRO
September '22
+26
in 0 channels
Get PRO
August '22
+118
in 0 channels
Get PRO
July '22
+127
in 0 channels
Get PRO
June '22
+39
in 0 channels
Get PRO
May '22
+35
in 0 channels
Get PRO
April '22
+35
in 0 channels
Get PRO
March '22
+6
in 0 channels
Get PRO
February '22
+23
in 0 channels
Get PRO
January '22
+23
in 0 channels
Get PRO
December '21
+24
in 0 channels
Get PRO
November '21
+15
in 0 channels
Get PRO
October '21
+117
in 0 channels
Get PRO
September '21
+100
in 0 channels
Get PRO
August '21
+477
in 0 channels
Get PRO
July '21
+330
in 0 channels
Get PRO
June '21
+311
in 0 channels
Get PRO
May '21
+221
in 0 channels
Get PRO
April '21
+203
in 0 channels
Get PRO
March '21
+101
in 0 channels
Get PRO
February '21
+67
in 0 channels
Get PRO
January '21
+36
in 0 channels
Get PRO
December '20
+1 942
in 0 channels
Date
Subscriber Growth
Mentions
Channels
22 July+1
21 July0
20 July0
19 July+1
18 July0
17 July0
16 July0
15 July0
14 July+1
13 July0
12 July0
11 July0
10 July0
09 July0
08 July0
07 July0
06 July0
05 July0
04 July0
03 July0
02 July+1
01 July0
Channel Posts
🤔 Что такое Agile? Это подход к разработке программного обеспечения, который фокусируется на гибкости, сотрудничестве и быстрой адаптации к изменениям. Agile основывается на следующих принципах и ценностях: 🚩Основные принципы 🟠Индивидуумы и взаимодействия важнее процессов и инструментов Акцент на командную работу и эффективное общение. 🟠Работающее программное обеспечение важнее исчерпывающей документации Быстрая поставка работающих продуктов с минимально необходимой документацией. 🟠Сотрудничество с заказчиком важнее согласования условий контракта Постоянное взаимодействие с заказчиком для удовлетворения его потребностей. 🟠Готовность к изменениям важнее следования первоначальному плану Гибкость в адаптации к изменениям требований и условий. 🚩Основные методологии 🟠Scrum Итеративный процесс с фиксированными временными промежутками, называемыми спринтами. Роли: Product Owner, Scrum Master, Команда разработки. Артефакты: Product Backlog, Sprint Backlog, Инкремент. Встречи: Планирование спринта, Ежедневные стендап-совещания, Обзор спринта, Ретроспектива. 🟠Kanban Визуализация процесса работы с помощью доски Kanban. Ограничение незавершенной работы (Work In Progress, WIP). Постоянное улучшение и адаптация. 🟠Extreme Programming (XP) Практики: Парное программирование, Частые релизы, Непрерывная интеграция, Тестирование. 🟠Lean Сокращение избыточности и увеличение ценности для клиента.- Принципы: Устранение потерь, Увеличение потока, Улучшение качества. 🚩Плюсы ➕Быстрая адаптация к изменениям Возможность быстро реагировать на изменения требований или условий рынка. ➕Улучшенное качество продукта Постоянное тестирование и интеграция. ➕Повышенная вовлеченность команды Активное участие всех членов команды в процессе разработки. ➕Удовлетворенность клиентов Постоянное взаимодействие с заказчиками и предоставление им ценности на каждом этапе разработки. Ставь 👍 и 📚 @backendquiz

2
🤔 Что такое индексы? Индексы в базе данных - это структуры, которые улучшают скорость операций поиска данных в таблице базы данных. Они работают по принципу, аналогичному указателю в книге, который позволяет быстро находить нужную информацию. Индексы создаются на одном или нескольких столбцах таблицы и позволяют значительно ускорить выполнение запросов, особенно при работе с большими объемами данных. 🚩Зачем нужны индексы 🟠Ускорение поиска данных Основная функция индексов - это сокращение времени, необходимого для поиска записей в таблице. Без индексов база данных должна бы была проверять каждую запись, чтобы найти нужные данные. 🟠Улучшение производительности запросов Индексы могут значительно повысить производительность запросов SELECT, особенно тех, которые часто выполняются. 🟠Сортировка данных Индексы могут использоваться для ускорения операций сортировки, так как данные в индексе могут быть отсортированы. 🟠Уникальность Индексы также используются для обеспечения уникальности значений в столбцах. Например, уникальный индекс гарантирует, что в столбце не будет повторяющихся значений. 🚩Как используются индексы 🟠Создание индексов Индексы создаются с помощью SQL-запросов, таких как CREATE INDEX. Можно создавать индексы на один столбец или на несколько столбцов (составные индексы). 🟠Типы индексов Существует несколько типов индексов, включая B-дерево, хеш-индексы, битмап-индексы и другие. Каждый тип имеет свои особенности и применяется в зависимости от конкретных задач. 🟠Использование индексов в запросах При выполнении запросов база данных автоматически использует индексы для оптимизации поиска данных. Это не требует дополнительных действий со стороны пользователя. 🟠Обслуживание индексов Важно понимать, что индексы требуют дополнительного пространства на диске и могут замедлять операции вставки, обновления и удаления данных, так как индексы нужно поддерживать в актуальном состоянии. Поэтому следует тщательно продумывать, какие индексы необходимы. Ставь 👍 и 📚 @backendquiz
72
3
🤔 Для чего подходят асинхронные операции? Асинхронные операции позволяют программам выполнять задачи в фоновом режиме, не блокируя основной поток выполнения. Это улучшает производительность и отзывчивость приложений. 🚩Методы 🟠Сетевое взаимодействие HTTP-запросы: Асинхронные HTTP-запросы позволяют приложениям запрашивать данные у веб-серверов без блокировки пользовательского интерфейса. Например, загрузка данных из API, отправка форм и файлов. WebSockets: Поддержка двустороннего взаимодействия между клиентом и сервером в реальном времени. Это используется в чатах, онлайн-играх и других приложениях, где требуется мгновенная передача данных. API-вызовы: Асинхронные вызовы к внешним API позволяют продолжать выполнение других операций, не дожидаясь ответа от сервера. 🟠Ввод/вывод (I/O) Файловые операции: Асинхронное чтение и запись файлов позволяет обрабатывать большие объемы данных без блокировки основного потока выполнения. Работа с базами данных: Асинхронные запросы к базам данных уменьшают время ожидания и улучшают масштабируемость приложения. 🟠Фоновые задачи и планирование Обработка задач в фоне: Выполнение длительных задач, таких как обработка изображений, видео, данных, без блокировки основного потока. Это позволяет улучшить пользовательский опыт, так как приложение остается отзывчивым. Периодические задания: Планирование и выполнение задач по расписанию, например, обновление данных, резервное копирование, мониторинг системы. 🟠Пользовательские интерфейсы Асинхронные события: Обработка событий пользовательского интерфейса (например, нажатие кнопок, ввод данных) асинхронно для повышения отзывчивости приложений. Анимации и переходы: Асинхронное выполнение анимаций и переходов улучшает пользовательский опыт за счет плавности и непрерывности интерфейса. 🟠Обработка потоков данных Стриминг данных: Асинхронная обработка потоков данных в реальном времени, таких как видео, аудио, данные с датчиков. Это позволяет эффективно управлять непрерывными потоками информации. Реактивное программирование: Асинхронное реагирование на изменения данных и событий. Реактивные системы позволяют обрабатывать данные по мере их поступления, что особенно важно в приложениях, работающих с большим количеством данных. 🟠Обработка и анализ данных Параллельные вычисления: Разделение больших задач на более мелкие части, которые выполняются параллельно. Это улучшает производительность при обработке больших объемов данных или выполнении сложных вычислений. Машинное обучение: Асинхронное обучение моделей и выполнение предсказаний позволяет эффективно использовать вычислительные ресурсы. 🚩Примеры использования 🟠Веб-приложения Асинхронная обработка пользовательских запросов, выполнение сетевых операций и взаимодействие с базами данных для повышения производительности и отзывчивости. 🟠Мобильные приложения Асинхронные операции обеспечивают плавную работу интерфейса и эффективное использование ресурсов при выполнении сетевых запросов и операций ввода/вывода. 🟠Игровая индустрия Асинхронное взаимодействие с серверами, обработка событий пользователя и управление игровыми объектами в реальном времени. 🟠Научные вычисления Параллельное выполнение вычислительных задач и обработка больших объемов данных для повышения эффективности исследований. Ставь 👍 и 📚 @backendquiz
73
4
🤔 Какие связи с моделями в БД знаешь? 🚩"Один к одному" (One-to-One) Каждая запись в одной таблице связана с одной и только одной записью в другой таблице. Пользователь (User) и Паспорт (Passport) Каждому пользователю соответствует один уникальный паспорт. В реляционных базах данных можно реализовать эту связь с помощью уникального внешнего ключа. CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(100) ); CREATE TABLE passports ( id SERIAL PRIMARY KEY, user_id INTEGER UNIQUE, passport_number VARCHAR(50), FOREIGN KEY (user_id) REFERENCES users(id) ); 🚩"Один ко многим" (One-to-Many) Каждая запись в одной таблице может быть связана с несколькими записями в другой таблице, но каждая запись в другой таблице связана только с одной записью в первой таблице. Пользователь (User) и Заказы (Orders) Один пользователь может сделать много заказов, но каждый заказ связан с одним пользователем. Эта связь обычно реализуется с помощью внешнего ключа. CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(100) ); CREATE TABLE orders ( id SERIAL PRIMARY KEY, user_id INTEGER, order_date DATE, FOREIGN KEY (user_id) REFERENCES users(id) ); 🚩"Многие ко многим" (Many-to-Many) Каждая запись в одной таблице может быть связана с множеством записей в другой таблице, и наоборот. Студенты (Students) и Курсы (Courses) Один студент может записаться на множество курсов, и каждый курс может быть записан многими студентами. Эта связь обычно реализуется с помощью промежуточной таблицы (таблицы связи), которая содержит внешние ключи обеих связанных таблиц. CREATE TABLE students ( id SERIAL PRIMARY KEY, name VARCHAR(100) ); CREATE TABLE courses ( id SERIAL PRIMARY KEY, course_name VARCHAR(100) ); CREATE TABLE student_courses ( student_id INTEGER, course_id INTEGER, PRIMARY KEY (student_id, course_id), FOREIGN KEY (student_id) REFERENCES students(id), FOREIGN KEY (course_id) REFERENCES courses(id) ); 🚩Варианты связей в нереляционных базах данных (NoSQL) В нереляционных базах данных связи могут быть организованы иначе, поскольку они часто не поддерживают традиционные реляционные модели. Вложенные документы Например, в MongoDB документы могут включать вложенные документы или массивы, что позволяет моделировать отношения "один ко многим" и "многие ко многим" внутри одного документа. { "_id": 1, "name": "John", "orders": [ { "order_id": 1, "order_date": "2023-08-01" }, { "order_id": 2, "order_date": "2023-08-05" } ] } Ставь 👍 и 📚 @backendquiz
69
5
🤔 Как с помощью одного запроса можно выбрать данные из двух таблиц? Чтобы выбрать данные из двух таблиц в одном запросе, используется оператор JOIN. Например, INNER JOIN объединяет строки, где есть совпадения в обеих таблицах, а LEFT JOIN возвращает все строки из первой таблицы и соответствующие строки из второй, заполняя NULL там, где данных нет. 🚩Отличия между видами JOIN в SQL В SQL существует несколько видов операторов JOIN, которые позволяют объединять данные из двух или более таблиц на основе определенных условий. Основные типы JOIN включают INNER JOIN, LEFT JOIN, RIGHT JOIN, и каждый из них имеет свои особенности и использование. Рассмотрим их различия на примере двух таблиц: Таблица A: id | name ----------- 1 | Alice 2 | Bob 3 | Charlie Таблица B: id | city ----------- 1 | New York 3 | Los Angeles 4 | Chicago 🟠INNER JOIN INNER JOIN возвращает только те строки, которые имеют совпадения в обеих таблицах. Если нет совпадающих строк, такие строки не включаются в результат. SELECT A.id, A.name, B.city FROM A INNER JOIN B ON A.id = B.id; Результат: id | name | city ------------------------ 1 | Alice | New York 3 | Charlie | Los Angeles 🟠LEFT JOIN (или LEFT OUTER JOIN) LEFT JOIN возвращает все строки из левой таблицы (A) и совпадающие строки из правой таблицы (B). Если совпадения не найдено, в результате будут строки из левой таблицы с NULL значениями для столбцов из правой таблицы. SELECT A.id, A.name, B.city FROM A LEFT JOIN B ON A.id = B.id; Результат: id | name | city ------------------------ 1 | Alice | New York 2 | Bob | NULL 3 | Charlie | Los Angeles 🟠RIGHT JOIN (или RIGHT OUTER JOIN) RIGHT JOIN возвращает все строки из правой таблицы (B) и совпадающие строки из левой таблицы (A). Если совпадения не найдено, в результате будут строки из правой таблицы с NULL значениями для столбцов из левой таблицы. SELECT A.id, A.name, B.city FROM A RIGHT JOIN B ON A.id = B.id; Результат: id | name | city ------------------------ 1 | Alice | New York 3 | Charlie | Los Angeles 4 | NULL | Chicago 🟠FULL JOIN (или FULL OUTER JOIN) FULL JOIN возвращает все строки, когда есть совпадение в одной из таблиц. Это объединение LEFT JOIN и RIGHT JOIN. Если совпадения не найдено, результат будет содержать NULL значения для столбцов из другой таблицы. SELECT A.id, A.name, B.city FROM A FULL JOIN B ON A.id = B.id; id | name | city ------------------------ 1 | Alice | New York 2 | Bob | NULL 3 | Charlie | Los Angeles 4 | NULL | Chicago Ставь 👍 и 📚 @backendquiz
69
6
🤔 Что такое SOAP? Это протокол для обмена структурированными сообщениями в распределённых вычислительных средах. Он основан на XML и используется для передачи данных между различными приложениями через сеть, часто по протоколу HTTP или SMTP. 🚩Основные характеристики 🟠Протокол на основе XML SOAP сообщения формируются в формате XML, что обеспечивает независимость от платформы и языка программирования. 🟠Стандартизованное сообщение SOAP сообщение состоит из обязательных и необязательных элементов: Envelope: Определяет начало и конец сообщения. Header: Опциональный элемент, содержащий метаинформацию о сообщении. Body: Основное содержимое сообщения, включающее данные и команды. Fault: Опциональный элемент для обработки ошибок. 🟠Транспортные протоколы Чаще всего используется с HTTP/HTTPS, но может работать и с другими протоколами, такими как SMTP. 🟠Расширяемость SOAP легко расширяется, позволяя добавлять дополнительные функциональные возможности через заголовки и другие элементы. 🟠Независимость от платформы и языка SOAP может быть использован в любой среде и на любом языке программирования, что обеспечивает высокую совместимость между различными системами. Value1 Value2 🚩Плюсы ➕Независимость от платформы и языка SOAP может взаимодействовать с любыми системами, поддерживающими XML и HTTP/SMTP. ➕Строгое соблюдение стандартов SOAP основывается на строгих стандартах, что обеспечивает надежность и предсказуемость взаимодействия. ➕Расширяемость Легко адаптируется для специфических потребностей через расширения и заголовки. ➕Встроенная обработка ошибок Использует элемент Fault для детальной обработки и передачи ошибок. ➕Поддержка сложных операций Подходит для сложных операций и распределённых транзакций. 🚩Минусы ➖Сложность SOAP-сообщения могут быть сложными и громоздкими из-за использования XML. ➖Производительность Использование XML увеличивает объем передаваемых данных, что может снизить производительность. ➖Оверхед Требует дополнительных ресурсов для обработки и передачи XML-сообщений. Ставь 👍 и 📚 @backendquiz
92
7
🤔 В чем разница char и varchar в SQL ? Это два типа данных в SQL, которые используются для хранения строковых данных. Основные различия между ними касаются способа хранения данных и управления памятью. 🚩`CHAR` (Fixed-length Character Data) 🟠Фиксированная длина CHAR(n) хранит строки фиксированной длины n. Если строка короче, она дополняется пробелами до указанной длины. 🟠Использование памяти Использует фиксированное количество памяти, равное указанной длине n, независимо от фактической длины строки. 🟠Производительность Может быть быстрее в некоторых случаях, так как длина строк фиксирована и известна заранее, что упрощает управление памятью. 🟠Пример использования Подходит для хранения данных, которые всегда имеют одинаковую длину, например, коды стран, идентификаторы и т.д. CREATE TABLE example ( fixed_char CHAR(10) ); 🚩`VARCHAR` (Variable-length Character Data) 🟠Переменная длина VARCHAR(n) хранит строки переменной длины, где n — это максимальная длина строки. Реальная длина строки определяется по количеству символов в ней. 🟠Использование памяти Использует только столько памяти, сколько необходимо для хранения фактической длины строки, плюс дополнительные байты для хранения информации о длине строки. 🟠Производительность Может быть менее эффективным в некоторых случаях по сравнению с CHAR, так как длина строки не фиксирована и требует дополнительной обработки для управления памятью. 🟠Пример использования Подходит для хранения данных, длина которых может варьироваться, например, имена, адреса, описания и т.д. CREATE TABLE example ( variable_char VARCHAR(50) ); Ставь 👍 и 📚 @backendquiz
96
8
🤔 Что такое rest api? Это архитектурный стиль для создания веб-сервисов, который использует стандартные HTTP методы и принципы для взаимодействия между клиентом и сервером. REST API предоставляет набор операций для создания, чтения, обновления и удаления ресурсов, представленных в виде URL. 🚩Основные принципы REST API 🟠Клиент-серверная архитектура Клиент и сервер отделены друг от друга. Клиент запрашивает ресурсы, сервер обрабатывает запросы и возвращает ресурсы или статус операции. 🟠Бесподсессионное взаимодействие (stateless) Каждое взаимодействие между клиентом и сервером независимое. Сервер не хранит состояние клиента между запросами. Вся необходимая информация для выполнения запроса должна быть предоставлена в каждом запросе. 🟠Кеширование Ответы сервера могут быть кешированы клиентом или промежуточными звеньями (прокси-серверами) для повышения производительности и снижения нагрузки на сервер. 🟠Единый интерфейс (Uniform Interface) Универсальный интерфейс упрощает взаимодействие между клиентом и сервером. Основные методы HTTP (GET, POST, PUT, DELETE) используются для выполнения операций с ресурсами. 🟠Многоуровневая система REST API может быть организован в виде многоуровневой системы, где компоненты выполняют разные задачи (например, балансировка нагрузки, кеширование, защита и т.д.). 🟠Представление ресурсов (Representations) Ресурсы представляются в виде различных форматов (обычно JSON или XML). Клиент и сервер могут договариваться о формате данных через заголовки HTTP (например, Content-Type и Accept). 🚩Основные методы HTTP в REST API 🟠GET Извлечение данных с сервера. Например, получение информации о пользователе. 🟠POST Отправка данных на сервер для создания нового ресурса. Например, создание новой учетной записи пользователя. 🟠PUT Обновление существующего ресурса на сервере. Например, обновление информации о пользователе. 🟠DELETE Удаление ресурса с сервера. Например, удаление учетной записи пользователя. 🟠PATCH Частичное обновление ресурса на сервере. Например, изменение только email пользователя. 🚩Примеры запроса и ответа Запрос на создание нового пользователя (POST /users) POST /users HTTP/1.1 Host: example.com Content-Type: application/json { "name": "John Doe", "email": "john.doe@example.com" } Ответ на успешное создание пользователя HTTP/1.1 201 Created Content-Type: application/json { "id": 1, "name": "John Doe", "email": "john.doe@example.com" } Ставь 👍 и 📚 @backendquiz
87
9
🤔 Принципы разделения ответственности (MVC, MVVM и другие)? Принципы разделения ответственности (Separation of Concerns, SoC) предполагают разделение логики программы на отдельные части, каждая из которых выполняет строго определённую функцию. Это позволяет сделать код более структурированным, гибким и легче сопровождаемым. Популярные паттерны проектирования, основанные на разделении ответственности, включают MVC, MVP, MVVM и другие. Они применяются в разработке приложений для чёткого разграничения пользовательского интерфейса, бизнес-логики и работы с данными. 🚩MVC (Model-View-Controller) 🟠Model (Модель) Хранит данные и логику их обработки. Отвечает за взаимодействие с базой данных или другими источниками данных. Уведомляет представление об изменениях данных. 🟠View (Представление) Отображает данные пользователю. Реагирует на обновления данных от модели. Не содержит логики обработки данных. 🟠Controller (Контроллер) Обрабатывает пользовательский ввод (например, нажатия кнопок, ввод текста). Вызывает соответствующие методы модели и обновляет представление. 🚩Плюсы и минусы ➕Хорошее разделение обязанностей. ➕Легче тестировать отдельные компоненты. ➖При большом приложении контроллер может стать перегруженным. 🚩MVP (Model-View-Presenter) 🟠Model (Модель) Работает с данными и бизнес-логикой. 🟠View (Представление) Интерфейс пользователя. Не содержит логики, только вызывает методы презентера. 🟠Presenter (Презентер) Посредник между моделью и представлением. Получает данные из модели и передаёт их в представление. Не знает деталей реализации интерфейса (только абстракция). Плюсы и минусы ➕Более чёткое разделение обязанностей по сравнению с MVC. ➕Упрощённое тестирование. ➖Возможен рост сложности презентера. 🚩MVVM (Model-View-ViewModel) 🟠Model (Модель) Управляет данными и бизнес-логикой. 🟠View (Представление) Отображает данные и предоставляет интерфейс для взаимодействия. 🟠ViewModel Посредник между моделью и представлением. Содержит логику преобразования данных для представления. Часто использует привязку данных (data binding), что позволяет автоматически обновлять UI при изменении данных. Плюсы и минусы ➕Простота взаимодействия между представлением и данными. ➕Легко тестировать ViewModel. ➖Возможна сложность с реализацией привязки данных. 🚩Flux/Redux 🟠Store (Хранилище) Централизованное состояние приложения. 🟠View (Представление) Компоненты, которые отображают состояние. 🟠Actions (Действия) Описывают, какие изменения должны произойти в состоянии. 🟠Reducers (Редьюсеры) Функции, описывающие, как изменяется состояние на основе действий. Плюсы и минусы ➕Прогнозируемость состояния. ➕Централизованное управление состоянием. ➖Дополнительная сложность при реализации. 🚩Чем полезны принципы разделения ответственности 🟠Упрощение тестирования можно тестировать компоненты независимо друг от друга. 🟠Повышение читаемости код проще понять и сопровождать. 🟠Повторное использование кода компоненты можно использовать в других частях приложения. 🟠Гибкость в разработке команда может работать над разными частями параллельно. Ставь 👍 и 📚 @backendquiz
76
10
🤔 Что такое модульное программирование? Это подход к разработке программного обеспечения, при котором приложение разбивается на независимые, взаимосвязанные части, называемые модулями. Каждый модуль отвечает за выполнение определенной функции или набора функций, что делает программу более структурированной, управляемой и легко поддерживаемой. 🚩Характеристики 🟠Инкапсуляция Каждый модуль скрывает свою внутреннюю реализацию и предоставляет четко определенный интерфейс для взаимодействия с другими модулями. Это уменьшает зависимость между модулями и улучшает устойчивость к изменениям. 🟠Разделение ответственности Принцип единственной ответственности применяется к модулям, что означает, что каждый модуль отвечает за выполнение одной конкретной задачи или группы тесно связанных задач. 🟠Повторное использование Модули могут быть повторно использованы в других частях программы или в других проектах, что уменьшает дублирование кода и облегчает его поддержку. 🟠Управляемость и масштабируемость Разделение программы на модули облегчает управление проектом и его масштабирование. Изменения в одном модуле обычно не требуют изменений в других модулях, что ускоряет разработку и тестирование. 🚩Плюсы ➕Упрощенная отладка и тестирование Так как модули изолированы друг от друга, их можно тестировать и отлаживать независимо. Это облегчает нахождение и исправление ошибок. ➕Повышенная читаемость и поддерживаемость кода Разделение кода на небольшие, управляемые части улучшает его структуру и упрощает понимание и поддержку. ➕Ускорение разработки Разные команды могут работать над разными модулями параллельно, что ускоряет процесс разработки. ➕Легкость вносить изменения и улучшения Изменения в одном модуле не оказывают значительного влияния на другие модули, что облегчает внедрение новых функций и улучшений. 🚩Примеры применения 🟠Функциональные библиотеки Модули могут быть оформлены как библиотеки функций, которые предоставляют определенные функциональные возможности, например, работа с файлами, обработка строк или взаимодействие с базами данных. 🟠Классы и объекты в ООП В объектно-ориентированном программировании классы и объекты можно рассматривать как модули, инкапсулирующие данные и методы. 🟠Модули и пакеты в языках программирования Многие языки программирования поддерживают концепцию модулей и пакетов, например, модули в Python, пакеты в Java и модули в ECMAScript (JavaScript). На Python # file: math_operations.py def add(a, b): return a + b def subtract(a, b): return a - b # file: main.py import math_operations x = 10 y = 5 print("Addition:", math_operations.add(x, y)) print("Subtraction:", math_operations.subtract(x, y)) На JavaScript // file: mathOperations.js export function add(a, b) { return a + b; } export function subtract(a, b) { return a - b; } // file: main.js import { add, subtract } from './mathOperations.js'; const x = 10; const y = 5; console.log('Addition:', add(x, y)); console.log('Subtraction:', subtract(x, y)); Ставь 👍 и 📚 @backendquiz
77
11
🤔 Что такое CD (Continuous Delivery / Continuous Deployment)? Это практика автоматизации и оптимизации процессов доставки приложений и их обновлений в рабочую среду. Она является частью DevOps-подхода и тесно связана с CI (Continuous Integration). 🚩Два основных значения CD 🟠Continuous Delivery (Непрерывная доставка) Continuous Delivery подразумевает автоматизацию процессов сборки, тестирования и подготовки приложения к выпуску в продакшн. Однако процесс развертывания остаётся ручным, чтобы команда могла контролировать его выполнение. Ключевые особенности: Автоматическое развертывание приложения в тестовые и предрелизные среды. Возможность развернуть приложение в продакшн в любой момент с минимальными усилиями. Финальное решение о развертывании принимает человек. Цель: Быть готовым к безопасному и быстрому выпуску обновлений в любой момент. Пример использования: В интернет-магазине обновление функционала сначала разворачивается в тестовой среде. После успешной проверки QA-командой или бизнес-менеджером приложение вручную переносится в продакшн. 🟠Continuous Deployment (Непрерывное развертывание) Continuous Deployment идёт дальше Continuous Delivery, автоматически развертывая обновления в продакшн после успешного прохождения всех тестов. Процесс полностью автоматизирован и исключает ручное вмешательство. Ключевые особенности: Абсолютная автоматизация — каждый подтверждённый код (коммит) автоматически попадает в продакшн. Постоянный выпуск обновлений, минимизирующий разницу между разработкой и рабочей средой. Цель: Сократить время доставки функционала и исправлений до продакшна, обеспечивая быстрые релизы. Пример использования: В приложении социальной сети любые изменения (например, исправление ошибки или добавление нового поста) автоматически проходят через CI/CD pipeline и попадают в продакшн. 🚩Ключевые элементы CD 🟠CI/CD Pipeline Автоматизированный процесс, включающий сборку, тестирование, развертывание. 🟠Тестирование Юнит-тесты. Интеграционные тесты. Нагрузочные тесты. Проверка безопасности. 🟠Оркестрация и управление Использование инструментов (Jenkins, GitLab CI/CD, CircleCI, GitHub Actions). Контейнеризация (Docker, Kubernetes). 🟠Мониторинг Автоматическое отслеживание работоспособности приложений (Prometheus, Grafana). 🚩Плюсы ➕Скорость Ускоряет доставку новых функций и исправлений. ➕Качество Раннее выявление ошибок благодаря автоматическим тестам. ➕Прозрачность Процесс развертывания становится понятным для всей команды. ➕Гибкость Возможность быстро реагировать на изменения требований. Ставь 👍 и 📚 @backendquiz
89
12
🤔 Как обнаружить самые затратные запросы? Обнаружение самых затратных запросов важно для оптимизации производительности базы данных. Затратные запросы могут потреблять больше ресурсов, чем необходимо, что приводит к увеличению времени выполнения, нагрузке на сервер и замедлению работы системы. Существует несколько подходов и инструментов для выявления таких запросов. 🚩Включение логирования медленных запросов (Slow Query Logging) Многие системы управления базами данных (СУБД) поддерживают логирование запросов, выполнение которых занимает больше определённого времени. 🟠MySQL Используйте slow_query_log. Активировать лог: SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 1; -- Время выполнения в секундах 🟠PostgreSQL Включите log_min_duration_statement. SET log_min_duration_statement = 1000; -- Логировать запросы, выполняющиеся более 1 секунды 🚩Использование EXPLAIN или ANALYZE Эти команды дают подробный план выполнения запросов, показывая, как база данных интерпретирует их. MySQL EXPLAIN SELECT * FROM orders WHERE status = 'pending'; PostgreSQL EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM orders WHERE status = 'pending'; 🚩Использование системных представлений и мониторинга запросов 🟠MySQL Используйте таблицу performance_schema для анализа запросов. SELECT * FROM performance_schema.events_statements_summary_by_digest ORDER BY SUM_TIMER_WAIT DESC LIMIT 10; 🟠PostgreSQL Используйте расширение pg_stat_statements. CREATE EXTENSION pg_stat_statements; Получите информацию SELECT query, calls, total_time, mean_time FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10; 🚩Мониторинг с использованием внешних инструментов 🟠New Relic Проводит анализ SQL-запросов, показывая самые медленные. 🟠Datadog Позволяет отслеживать производительность запросов в реальном времени. 🟠SolarWinds DPA (Database Performance Analyzer) Специализированный инструмент для анализа производительности баз данных. 🚩Оптимизация индексов 🟠MySQL SELECT * FROM sys.schema_unused_indexes; 🟠PostgreSQL Проверьте в плане выполнения запросов (EXPLAIN), используются ли индексы. 🚩Нагрузочное тестирование (Load Testing) Используйте нагрузочные тесты, чтобы выявить запросы, создающие "бутылочные горлышки": 🟠Apache JMeter Симулирует многопоточную нагрузку на базу данных. 🟠Gatling Анализирует производительность системы под высокой нагрузкой. 🚩Анализ трассировки запросов Включите трассировку (например, в MySQL — SHOW PROFILE): SET profiling = 1; SELECT * FROM orders WHERE status = 'pending'; SHOW PROFILE FOR QUERY 1; Ставь 👍 и 📚 @backendquiz
91
13
🤔Как определить, что у кода плохая организация? Плохая организация кода — это один из главных факторов, который делает поддержку и развитие проекта сложными. Определить, что код плохо организован, можно по следующим признакам: 🟠Отсутствие структуры - Файлы и каталоги разбросаны хаотично. - Код находится в одном огромном файле без логического разделения. - Нет четкой модулярности (всё смешано в одном месте). 🟠Дублирование кода - Один и тот же фрагмент кода повторяется в разных местах вместо вынесения в отдельные функции или классы. - При внесении изменений приходится исправлять одну и ту же логику в нескольких местах. 🟠Чрезмерная сложность - Функции или методы слишком длинные и делают слишком много. - Код трудно читать из-за вложенных конструкций (if, for, while и т. д.). - Используются сложные алгоритмы там, где можно было бы обойтись более простыми. 🟠Нарушение принципов SOLID - Один класс выполняет несколько задач (нарушение *Single Responsibility Principle*). - Сильная зависимость между модулями (нарушение *Dependency Inversion Principle*). - Проблемы с расширяемостью кода. 🟠Плохие наименования переменных, функций и классов - Используются непонятные или слишком короткие названия (a, x1, doSomething). - Название не отражает суть выполняемой операции. 🟠Отсутствие или избыточная документация - Если документации нет, код сложно понять. - Если документации слишком много, и она не актуальна, это также мешает. 🟠Сильная связанность (high coupling) - Компоненты сильно зависят друг от друга, что усложняет тестирование и внесение изменений. - Модули не могут использоваться независимо. 🟠Отсутствие тестов - Если код сложно протестировать, это признак плохой организации. - Нет юнит-тестов или они покрывают только тривиальные случаи. 🟠Отсутствие обработчиков ошибок - Ошибки не логируются, а просто подавляются (try...catch с пустым catch). - Ошибки обрабатываются хаотично. 🟠Проблемы с производительностью - Избыточное потребление памяти или процессорных ресурсов из-за неоптимальных алгоритмов. - Использование ненужных циклов, повторные вызовы функций. Ставь 👍 и 📚 @backendquiz
102
14
🤔 Почему goto — это зло? goto считается "злом" в программировании по ряду причин, связанных с читаемостью, поддерживаемостью и структурой кода. Давайте разберем основные причины, почему его избегают. 🟠Сложность чтения и отладки Когда в коде используются операторы goto, управление программой может перескакивать из одного места в другое, иногда даже обратно. Это делает код трудно читаемым и практически невозможным для быстрого понимания. Отладка кода с goto затруднена, так как выполнение может переходить в неожиданные участки программы, что усложняет поиск ошибок. 🟠Разрушение структурного программирования Одним из ключевых достижений программирования стало структурное программирование, предложенное в 1960-х годах. Оно основывается на трех базовых конструкциях: Последовательность (команды выполняются одна за другой), Разветвление (if-else, switch), Циклы (for, while, do-while). Использование goto нарушает эту структуру, что приводит к так называемому "спагетти-коду", где невозможно понять, в каком порядке выполняются инструкции. 🟠Альтернативы `goto` Вместо goto в большинстве случаев можно использовать: Циклы (for, while, do-while) – для повторяющихся действий. Рекурсию – если нужна сложная логика выполнения. Исключения (try-catch) – для обработки ошибок, вместо goto для выхода из глубоко вложенных структур. Флаги и условные операторы – когда нужно контролировать выход из определенного блока кода. 🟠Когда `goto` все же оправдан? Несмотря на его репутацию, goto может быть полезен в низкоуровневом программировании, например: В коде на C для обработки ошибок (например, единый выход из функции в драйверах ОС). В компиляхторах или интерпретаторах языков программирования. В ASM-вставках, где goto заменяется на jmp. Ставь 👍 и 📚 @backendquiz
112
15
🤔 Взаимодействие с асинхронной коммуникацией в распределённых системах Позволяет компонентам обмениваться данными и выполнять задачи независимо друг от друга, не дожидаясь завершения операций. Асинхронное общение широко применяется в микросервисных архитектурах и других распределённых системах, так как повышает масштабируемость, гибкость и отказоустойчивость системы. 🚩Принципы и подходы 🟠Использование очередей сообщений и брокеров Очереди сообщений (например, RabbitMQ, Apache Kafka, Amazon SQS) помогают отправлять и получать сообщения асинхронно, обеспечивая буфер между отправителем и получателем. Брокеры сообщений сохраняют сообщения до тех пор, пока получатель не будет готов их обработать, что помогает управлять потоками данных и уравновешивать нагрузку. Такой подход позволяет отправителю отправить сообщение и сразу продолжить свою работу, не дожидаясь ответа, что повышает производительность системы. 🟠Паттерн «Издатель-подписчик» (Publish-Subscribe) В модели «издатель-подписчик» компоненты могут публиковать события, на которые подписаны другие компоненты, а брокер сообщений доставляет события всем подписчикам. Этот паттерн позволяет системе оставаться слабосвязанной, так как издатель не знает, сколько и какие конкретно сервисы получат событие. Такие системы часто применяются для уведомлений, регистрации событий, обработки данных и отправки уведомлений нескольким сервисам одновременно. 🟠Паттерн «Очередь задач» В очереди задач сообщения представляют собой задачи для выполнения, которые обрабатываются одним или несколькими исполнителями. Этот паттерн полезен для распределения нагрузки на сервисы, позволяя выполнять задачи асинхронно, когда они становятся доступны, и автоматически управлять потоками. Например, задача по отправке электронной почты может быть помещена в очередь и обработана отдельным рабочим процессом, что освобождает основной сервис от ожидания завершения отправки. 🚩Плюсы ➕Повышенная производительность и масштабируемость, так как сервисы могут продолжать работу без ожидания ответа. ➕Отказоустойчивость и стабильность за счёт независимости сервисов и использования брокеров сообщений. ➕Гибкость и низкая связанность компонентов, что позволяет легко модифицировать систему и добавлять новые сервисы. 🚩Минусы ➖Увеличенная сложность обработки сообщений и согласованности данных. ➖Возможные задержки доставки, повторные сообщения и необходимость работы с идемпотентностью. ➖Сложности с отладкой и мониторингом взаимодействий между сервисами. Ставь 👍 и 📚 @backendquiz
116
16
🤔 Что тебе известно о бинарном дереве? Это структура данных, в которой каждый узел имеет не более двух дочерних узлов. Эти дочерние узлы называются левым и правым дочерними узлами. В бинарном дереве может быть один или несколько уровней узлов, начиная с корневого узла, который является начальной точкой дерева. 🚩Основные термины 🟠Узел (Node) Основной элемент бинарного дерева, содержащий данные и ссылки на дочерние узлы. 🟠Корень (Root) Верхний узел дерева, не имеющий родительских узлов. 🟠Лист (Leaf) Узел, не имеющий дочерних узлов. 🟠Ветвь (Branch) Путь от корня к любому другому узлу. 🟠Высота дерева Максимальное количество уровней от корня до самого нижнего листа. 🟠Глубина узла Расстояние от корня до данного узла. 🚩Виды 🟠Полное бинарное дерево Все уровни, кроме, возможно, последнего, полностью заполнены, и все узлы последнего уровня выровнены влево. 🟠Совершенное бинарное дерево Все уровни полностью заполнены, и каждый узел имеет два дочерних узла, кроме листьев. 🟠Двоичное дерево поиска (Binary Search Tree, BST) Для каждого узла все значения в левом поддереве меньше значения узла, а все значения в правом поддереве больше значения узла. 🚩Основные операции 🟠Добавление узла (Insertion) Процесс вставки нового узла в дерево. В случае двоичного дерева поиска, новый узел вставляется в соответствующее место, чтобы сохранить порядок элементов. 🟠Удаление узла (Deletion) Процесс удаления узла из дерева. Может потребовать реорганизации дерева для поддержания его свойств. 🟠Поиск (Search) Процесс нахождения узла с определенным значением. В двоичном дереве поиска это осуществляется быстрее благодаря упорядоченности узлов. 🟠Обход дерева (Traversal) Процесс посещения всех узлов дерева в определенном порядке. Основные методы обхода: 🚩Применение 🟠Хранение отсортированных данных Бинарное дерево поиска позволяет эффективно хранить и извлекать отсортированные данные. 🟠Поисковые системы Использование деревьев для организации и поиска данных. 🟠Алгоритмы и структуры данных Базовая структура для многих алгоритмов, включая сортировки, балансировки и другие операции с данными. 🟠Компиляторы и интерпретаторы Используются для построения и обработки синтаксических деревьев при разборе кода. Ставь 👍 и 📚 @backendquiz
109
17
🤔 Какие существуют типы баз данных? Существуют различные типы баз данных, каждый из которых предназначен для определенных задач и сценариев использования. Основные типы баз данных включают: 🟠Реляционные базы данных (RDBMS) Организуют данные в таблицы с заранее определенными схемами. Используют SQL для управления данными. MySQL, PostgreSQL, Oracle, Microsoft SQL Server. 🟠Документные базы данных (Document-Oriented) Хранят данные в виде документов (обычно в формате JSON или BSON), что позволяет хранить сложные и гибкие структуры данных. MongoDB, CouchDB. 🟠Колонковые базы данных (Columnar) Хранят данные столбцами вместо строк, что оптимизирует производительность для операций чтения и агрегации. Apache Cassandra, HBase. 🟠Ключ-значение базы данных (Key-Value) Хранят данные в виде пар "ключ-значение", что позволяет быстрое извлечение данных по ключу. Redis, Riak, Amazon DynamoDB. 🟠Графовые базы данных (Graph) Оптимизированы для хранения и обработки графовых структур, таких как узлы, ребра и свойства, что удобно для социальных сетей, рекомендательных систем и др. Neo4j, ArangoDB, Amazon Neptune. 🟠Базы данных временных рядов (Time Series) Специализируются на хранении и анализе временных рядов данных, таких как метрики, события или показания датчиков. InfluxDB, TimescaleDB. 🟠Базы данных на основе объектов (Object-Oriented) Хранят данные в виде объектов, как в объектно-ориентированном программировании, что позволяет хранить более сложные структуры данных. db4o, ObjectDB. 🟠Многомодельные базы данных (Multi-Model) Поддерживают несколько типов моделей данных (например, реляционные, документные, графовые) в рамках одной базы данных. ArangoDB, OrientDB. 🟠Базы данных, ориентированные на массивы (Array) Оптимизированы для работы с большими массивами данных, часто используемыми в научных вычислениях и аналитике. SciDB, Rasdaman. 🟠Распределенные базы данных (Distributed) Распределяют данные по нескольким узлам или серверам, обеспечивая масштабируемость и отказоустойчивость. Google Spanner, CockroachDB. Ставь 👍 и 📚 @backendquiz
115
18
🤔 Что такое Scrum? Это методология управления проектами и одна из наиболее популярных реализаций Agile, предназначенная для гибкой разработки программного обеспечения. Scrum помогает командам работать более эффективно и адаптироваться к изменениям в требованиях и приоритетах. Основные концепции и элементы Scrum включают следующие компоненты: 🚩Основные концепции 🟠Инкрементная и итеративная разработка Scrum разбивает работу над проектом на небольшие итерации, называемые спринтами. Каждый спринт обычно длится от одной до четырех недель и заканчивается созданием работающего инкремента продукта. 🟠Самоорганизующиеся команды Команды в Scrum сами управляют своей работой и распределяют задачи между участниками без вмешательства извне. 🟠Роли в Scrum В Scrum выделяются три основных роли: Product Owner (Владелец продукта): отвечает за создание и управление бэклогом продукта, определение приоритетов и взаимодействие с заинтересованными сторонами. Scrum Master: помогает команде следовать принципам Scrum, устраняет препятствия и обеспечивает эффективность работы команды. Development Team (Команда разработки): непосредственно занимается созданием продукта, включает специалистов различных профилей, необходимых для выполнения задач. 🚩Основные элементы 🟠Product Backlog (Бэклог продукта) список всех требований и функций, которые должны быть реализованы в продукте. Элементы бэклога приоритизируются владельцем продукта. 🟠Sprint Backlog (Бэклог спринта) список задач, которые команда обязуется выполнить в текущем спринте. Эти задачи выбираются из бэклога продукта на основе приоритетов и возможностей команды. 🟠Sprint (Спринт) фиксированный период времени, в течение которого команда работает над выполнением задач из бэклога спринта. В конце спринта команда демонстрирует результат своей работы. 🟠Daily Scrum (Ежедневный скрам) ежедневные короткие встречи (обычно 15 минут), на которых команда обсуждает прогресс, планирует работу на день и выявляет препятствия. 🟠Sprint Review (Обзор спринта) встреча в конце каждого спринта, на которой команда демонстрирует результаты своей работы заинтересованным сторонам и получает обратную связь. 🟠Sprint Retrospective (Ретроспектива спринта) встреча после завершения спринта, на которой команда анализирует свою работу, обсуждает, что было хорошо, что можно улучшить, и разрабатывает план улучшений на следующий спринт. 🚩Плюсы ➕Гибкость Scrum позволяет быстро адаптироваться к изменяющимся требованиям и приоритетам. ➕Прозрачность Частые демонстрации результата и обратная связь обеспечивают высокую степень прозрачности процесса разработки. ➕Повышение качества Регулярные проверки и ретроспективы помогают команде постоянно улучшать качество продукта и процесса. ➕Улучшение взаимодействия Scrum способствует более тесному взаимодействию между членами команды и заинтересованными сторонами. Ставь 👍 и 📚 @backendquiz
98
19
🤔 Для чего используют redis в проектах? Это высокопроизводительная система управления базами данных, работающая в памяти (in-memory), которая поддерживает множество структур данных, таких как строки, списки, множества, хэш-таблицы и другие. Redis широко используется в современных проектах благодаря своей скорости и функциональности. 🚩Основные применения 🟠Кэширование данных Снижение нагрузки на базу данных: Кэширование часто запрашиваемых данных в Redis позволяет снизить нагрузку на основную базу данных и ускорить время ответа. Ускорение доступа к данным: Быстрое чтение данных из памяти обеспечивает низкую задержку и высокую производительность. 🟠Хранение сессий Управление сессиями пользователей: Redis часто используется для хранения сессионных данных пользователей в веб-приложениях благодаря своей скорости и поддержке автоматического удаления старых данных (TTL). 🟠Очереди задач и сообщений Асинхронные задачи: Redis используется для реализации очередей задач в таких системах, как Celery. Это позволяет распределять и выполнять задачи асинхронно и эффективно. Сообщения и события: Redis поддерживает механизм Pub/Sub для организации обмена сообщениями между различными частями приложения. 🟠Хранилище временных данных Счётчики и трекеры: Используется для хранения временных данных, таких как счётчики посещений, лайков, просмотров и других показателей, которые часто обновляются. Краткосрочные данные: Хранение временных данных, которые необходимы на короткий срок и могут быть удалены после их использования. 🟠Репликация и отказоустойчивость Репликация данных: Redis поддерживает мастеровую репликацию, что позволяет создавать копии данных на нескольких серверах для обеспечения отказоустойчивости и балансировки нагрузки. Снятие резервных копий: Redis поддерживает создание резервных копий данных, что обеспечивает восстановление в случае сбоев. 🟠Реализация сложных структур данных Работа с временными рядами: Redis позволяет эффективно управлять временными рядами данных, используя такие структуры, как списки и отсортированные множества. Графы и социальные сети: Использование структур данных Redis для реализации графов и сетей, что полезно в социальных сетях и рекомендательных системах. 🟠Функции блокировок Реализация распределённых блокировок: Redis позволяет создавать механизмы блокировок для управления доступом к ресурсам в распределённых системах. 🚩Примеры использования 🟠Веб-приложения Кэширование результатов запросов к базе данных. Хранение сессионных данных пользователей. Управление очередями задач для обработки данных в фоне. 🟠Мобильные приложения Кэширование API-запросов для уменьшения задержек. Хранение временных данных и метрик использования. 🟠Игровые приложения Хранение текущих состояний игр и информации о пользователях. Реализация лидеров и таблиц рекордов. 🟠Аналитические системы Кэширование результатов аналитических запросов. Управление счётчиками и метриками в реальном времени. Ставь 👍 и 📚 @backendquiz
100
20
🤔 Что такое Web Sockets (веб сокет)? WebSockets (веб-сокеты) — это коммуникационный протокол, предоставляющий возможность устанавливать постоянное, двустороннее соединение между клиентом (обычно веб-браузером) и сервером через один TCP-соединение. Это позволяет обмениваться данными в реальном времени с минимальной задержкой и без необходимости повторного открытия соединения для каждого обмена сообщениями, как это происходит в традиционных HTTP-соединениях. 🚩Основные характеристики WebSockets: 🟠Двусторонняя коммуникация: WebSockets поддерживают полноценную двустороннюю (или full-duplex) коммуникацию, что позволяет как клиенту, так и серверу отправлять данные в любое время без необходимости инициирования запроса. 🟠Постоянное соединение: После установления WebSocket-соединение остается открытым, что значительно уменьшает задержки, связанные с установлением новых соединений, характерных для HTTP-запросов. 🟠Меньший накладной расход: WebSockets используют меньше заголовков по сравнению с HTTP-запросами, что делает передачу данных более эффективной и менее затратной по времени и ресурсам. 🟠Протокол: WebSocket протокол стандартизирован в RFC 6455 и поддерживается большинством современных веб-браузеров. Соединение начинается с обычного HTTP-запроса, который затем "обновляется" до WebSocket-соединения через HTTP-заголовок Upgrade. 🚩Как работает WebSocket: 🟠Установление соединения: Клиент отправляет HTTP-запрос с заголовком Upgrade: websocket на сервер, указывая на желание перейти к протоколу WebSocket. Сервер отвечает подтверждением, если поддерживает WebSockets, и соединение устанавливается. 🟠Передача данных: После установления соединения клиент и сервер могут обмениваться данными в обе стороны по мере необходимости. Сообщения передаются как фреймы (frames), которые могут содержать текстовые или бинарные данные. 🟠Закрытие соединения: Соединение может быть закрыто любой стороной в любой момент времени с отправкой соответствующего фрейма закрытия. 🚩Применения WebSocket: 🟠Реальное время: Приложения, требующие обновлений в реальном времени, такие как чаты, системы обмена сообщениями, онлайн-игры, торги на биржах. 🟠Потоковая передача данных: Веб-сокеты идеально подходят для приложений, передающих данные в реальном времени, таких как спортивные трансляции или финансовые данные. 🟠Уведомления и оповещения: Приложения, отправляющие мгновенные уведомления пользователям, например, социальные сети или системы мониторинга. 🟠Коллаборативные инструменты: Инструменты для совместной работы, такие как совместное редактирование документов или доски с заметками. Преимущества WebSocket: 🟠Эффективность: Меньший накладной расход и постоянное соединение делают WebSockets более эффективными для приложений, требующих частого обмена данными. 🟠Скорость: WebSockets обеспечивают более низкую задержку, что делает их идеальными для приложений, работающих в реальном времени. 🟠Простота использования: WebSockets имеют простой API, который легко интегрируется с современными веб-приложениями. Ставь 👍 и 📚 @backendquiz
104