BackendQuiz - задачи с собеседований по бэкенду @backendquiz Channel on Telegram

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

@backendquiz


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

Контакт: @cyberJohnny

BackendQuiz (Russian)

BackendQuiz - это Telegram канал, где вы можете найти задачи с собеседований по бэкенду. Здесь представлены задачки на алгоритмы, на понимание HTTP и сетевого стека в целом, а также на базы данных и хранилища. Этот канал подойдет как для начинающих, так и для опытных специалистов в области бэкенда. Вы сможете улучшить свои навыки и глубже понять основы разработки бэкенд-систем. Вам будут предложены задачи на такие языки программирования, как Java, PHP, Ruby, Javascript, а также на язык SQL, который является важным инструментом для работы с базами данных. Если вы хотите подготовиться к собеседованию или просто расширить свои знания в области бэкенда, то этот канал идеально подойдет для вас. Для связи и более подробной информации вы можете обратиться к администратору канала по контакту @cyberJohnny.

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

19 Feb, 07:58


💣 Большая сила - большая ответственность.
А ты справишься с тестом по HighLoad?

🏆 Пройди тест из 29 вопросов, проверь свой уровень знаний и получи скидку на онлайн-курс «Highload Architect» от OTUS!

Если успешно пройдешь тест, сможешь забронировать место в группе по выгодной цене! И еще дарим промокод HIGHLOAD_5

🎫 Курс можно приобрести в рассрочку

🔴 Пройти тест и забрать скидку: https://clck.ru/3GTCQ5

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

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

18 Feb, 20:51


Индексы — это специальные структуры данных, которые помогают быстро находить, сортировать и фильтровать записи в таблицах баз данных. Они хранятся отдельно от основной таблицы и позволяют эффективно получать данные без необходимости просматривать всю таблицу.
@backendquiz

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

18 Feb, 14:54


– Помощь с вашим проектом
– Создание дорожной карты
– Общие консультации
– Проведение ревью кода и имитационных собеседований
– Поддержка в поиске работы
Все это и еще много другого может предложить Ментор. Он даст вам нужный толчок, поможет быстрее и легче войти в сферу IT. 🔥 Узнайте о лучших менторах (https://easyoffer.ru/mentor?utm_source=tg&utm_medium=my_group&utm_campaign=mentor) Многие из них предлагают бесплатную первую консультацию.
@backendquiz

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

18 Feb, 14:53


🤔 Назови четыре уровня изоляции транзакций? 🚩Уровни изоляции🟠Чтение незафиксированных данных (Read Uncommitted)Транзакция имеет возможность читать данные, которые изменены другой транзакцией, даже если те еще не зафиксированы. Это может привести к грязным чтениям, неповторимым чтениям и фантомным чтениям. Такой уровень редко применяется на практике из-за высокой вероятности получения неконсистентных данных.🟠Чтение зафиксированных данных (Read Committed)Транзакция видит только те изменения, которые были зафиксированы другими транзакциями. Незафиксированные изменения остаются невидимыми. Возможны неповторимые чтения и фантомные чтения. Этот уровень широко используется, так как обеспечивает баланс между производительностью и консистентностью данных.🟠Повторяемое чтение (Repeatable Read)Гарантирует, что если транзакция будет повторно читать данные, она получит те же значения, даже если другие транзакции меняют данные. Возможны фантомные чтения. Этот уровень используется, когда необходим более высокий уровень консистентности данных, но допускаются фантомные чтения.🟠Сериализуемый (Serializable)Обеспечивает максимальный уровень изоляции. Транзакции выполняются так, как если бы они были сериализованы, то есть последовательно. Этот уровень обеспечивает наивысшую консистентность данных, но может значительно тормозить производительность из-за блокировок и задержек.🚩Аномалии 🟠Грязное чтение (Dirty Read)Происходит, когда транзакция читает данные, измененные другой транзакцией, которая еще не зафиксирована. Уровень Read Uncommitted позволяет такую аномалию.🟠Неповторимое чтение (Non-repeatable Read)Возникает, когда транзакция читает одни и те же данные несколько раз и получает разные значения из-за фиксации изменений другой транзакцией. Уровни Read Committed и выше предотвращают грязные чтения, но Read Committed допускает неповторимые чтения.🟠Фантомное чтение (Phantom Read)Происходит, когда транзакция выполняет один и тот же запрос несколько раз и видит разные наборы строк из-за вставки, обновления или удаления данных другой транзакцией. Уровень Repeatable Read предотвращает неповторимые чтения, но допускает фантомные чтения. Уровень Serializable предотвращает все три аномалии. Ставь 👍 и 📚
@backendquiz

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

18 Feb, 07:42


Открытый урок «Надежность и сети, или почему скорость сходимости STP уже очень давно никому не нравится?»

🗓 18 февраля в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Network Engineer. Professional» от Otus.

Уже очень давно каждый сетевой инженер, вне зависимости от его стажа, знает, что любая сеть должна быть надежной. Но всегда ли это было аксиомой?

На вебинаре:

🔴Выясним почему надежность и сети - тема очень интересная, но не простая
🔴 Разберемся, как работает один из механизмов повышения надежности сети
🔴Поймем, как с течением времени менялись требования к надежности сетей

🔗 Ссылка на регистрацию: https://clck.ru/3GS4xf

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

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

17 Feb, 20:55


🤔 Какие различия между REST и SOAP? REST – это архитектурный стиль, который использует простые HTTP-методы, такие как GET, POST, PUT и DELETE. SOAP же является строгим протоколом, основанным на XML-сообщениях. REST проще и быстрее, что делает его подходящим для веб-приложений, в то время как SOAP предлагает стандартизацию и высокий уровень безопасности для корпоративных решений.
@backendquiz

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

17 Feb, 14:56


🤔 Как можно ограничить доступ к определенным полям в Postgres? В PostgreSQL есть несколько способов заблокировать конкретные поля или строки таблицы, чтобы предотвратить их изменение или управлять конкурентным доступом к данным. Наиболее распространенные методы включают использование транзакционных блокировок и политик доступа. 🟠Использование блокировок уровня строки (Row-Level Locks) PostgreSQL поддерживает блокировки уровня строки с помощью команд SELECT FOR UPDATE и SELECT FOR SHARE. Эти команды позволяют заблокировать определенные строки для изменений другими транзакциями, пока текущая транзакция не завершится. SELECT FOR UPDATE: BEGIN; -- Начало транзакции -- Выбираем и блокируем строки для обновления SELECT * FROM my_table WHERE id = 1 FOR UPDATE; -- Выполняем необходимые операции UPDATE my_table SET field = 'new_value' WHERE id = 1; COMMIT; -- Завершение транзакции SELECT FOR SHARE: BEGIN; -- Начало транзакции -- Выбираем и блокируем строки для чтения SELECT * FROM my_table WHERE id = 1 FOR SHARE; -- Выполняем необходимые операции -- Изменение данных будет заблокировано для других транзакций -- Однако можно выполнять SELECT COMMIT; -- Завершение транзакции 🟠Использование политик доступа (Row-Level Security Policies) Политики безопасности на уровне строк позволяют определить, кто и при каких условиях может видеть или изменять данные в таблице. Это осуществляется с помощью функций и политик безопасности. -- Включаем безопасность на уровне строк для таблицы ALTER TABLE my_table ENABLE ROW LEVEL SECURITY; -- Создаем роль, которая будет иметь доступ CREATE ROLE limited_role; -- Создаем политику, которая позволяет только чтение данных CREATE POLICY read_only_policy ON my_table FOR SELECT USING (true); -- Условие для выполнения SELECT -- Применяем политику для роли limited_role GRANT SELECT ON my_table TO limited_role; 🟠Использование триггеров (Triggers) Триггеры позволяют автоматически выполнять определенные действия перед или после операций INSERT, UPDATE, DELETE. Можно создать триггер, который будет блокировать изменение конкретных полей. CREATE OR REPLACE FUNCTION prevent_update() RETURNS TRIGGER AS $$ BEGIN IF NEW.field IS DISTINCT FROM OLD.field THEN RAISE EXCEPTION 'Field "field" cannot be updated'; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; -- Применяем триггер к таблице CREATE TRIGGER prevent_update_trigger BEFORE UPDATE ON my_table FOR EACH ROW EXECUTE FUNCTION prevent_update(); 🟠Ограничения на уровне столбца (Column-Level Constraints) Ограничения на уровне столбца могут использоваться для ограничения возможных значений или для создания выражений, которые должны быть выполнены для изменения. ALTER TABLE my_table ADD CONSTRAINT field_check CHECK (field IS NOT NULL); Ставь 👍 и 📚
@backendquiz

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

17 Feb, 09:10


🤖 Открытый урок «Remote Desktop Protocol (RDP) server»

🗓 17 февраля в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Администратор Windows» от Otus.

На вебинаре вы узнаете:
➡️ Основы работы протокола RDP и его возможности.
➡️ Настройка RDP-сервера на базе Windows: шаг за шагом.
➡️ Практические советы по обеспечению безопасности удалённых соединений.
➡️ Решение частых проблем при использовании RDP.

🔗 Ссылка на регистрацию: https://clck.ru/3GRyBc

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

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

17 Feb, 08:57


ТОП 2 канала для тех, кто интересуется хакингом и кибербезопасностью:

Этичный Хакер (https://t.me/+vdLErYv0OfowYzY) — крупнейший канал по информационной безопасности в СНГ. Здесь обсуждаются OSINT, анонимность, пентест и социальная инженерия.

Лаборатория Хакера (https://t.me/+QbgACzW1RL42MGEy) — авторский канал от специалиста в области информационной безопасности. Вы найдете новости даркнета, сетевую разведку, обзоры инструментов с GitHub и полезные подборки.
@backendquiz

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

16 Feb, 20:59


Асинхронные операции полезны для выполнения длительных процессов, например, запросов к API или работы с файлами. Они позволяют основному потоку продолжать свою работу, не останавливаясь, и таким образом увеличивают производительность приложения.
@backendquiz

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

16 Feb, 15:00


🤔 Какие есть типы баз данных?

Существует множество типов баз данных, каждый из которых предназначен для определенных задач и сценариев использования. Основные типы баз данных:

🟠 Реляционные базы данных (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

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

15 Feb, 21:03


🤔 Каковы возможности использования Celery?

Это инструмент для управления задачами и очередями в Python. Он позволяет выполнять задачи асинхронно, например, отправку писем, обработку файлов или сложные вычисления. Celery поддерживает различные брокеры сообщений, такие как RabbitMQ или Redis, для управления очередями задач.
@backendquiz

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

15 Feb, 15:08


📺 Уникальная коллекция IT собеседований

Более 456 реальных собеседований для программистов, тестировщиков, аналитиков и других специалистов в области IT.

Имеются собеседования от известных компаний: Сбер, Яндекс, ВТБ, Тинькофф, Озон, Wildberries и других.

🎯 Переходи по ссылке и присоединяйся к коллекции, чтобы повысить свои шансы на успешное трудоустройство!
@backendquiz

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

15 Feb, 15:05


🤔 Что такое cherrypick?

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

🚩Основные аспекты cherry-pick

🟠Избирательное применение коммитов
Позволяет выбрать конкретные изменения из истории одной ветки и перенести их в другую ветку.
🟠Избежание полного слияния
В отличие от обычного слияния (merge), cherry-pick переносит только выбранные коммиты, а не всю историю изменений.

🚩Как использовать cherry-pick

Основной синтаксис
git cherry-pick

🚩Пример использования

🟠Переход на целевую ветку
Переключитесь на ветку, в которую нужно перенести изменения.
git checkout target-branch

🟠Применение коммита
Используйте команду cherry-pick, чтобы применить нужный коммит.
git cherry-pick a1b2c3d4

🟠Решение конфликтов (если они возникли)
Если во время cherry-pick возникают конфликты, Git предложит их решить. Разрешите конфликты, затем завершите процесс:
git add
git cherry-pick --continue

Предположим, у вас есть коммит с хешем a1b2c3d4 в ветке feature-branch, который вы хотите перенести в main-branch.
git checkout main-branch
git cherry-pick a1b2c3d4

🚩Когда использовать cherry-pick

🟠Перенос исправлений
Когда нужно быстро перенести исправление из одной ветки в другую (например, багфикс из develop в release).
🟠Избирательное применение новых функций
Когда нужно перенести конкретную функцию или изменение без переноса всей ветки.

🚩Ограничения и риски

🟠Конфликты
Перенос коммитов может вызвать конфликты, особенно если изменяемые файлы были модифицированы в целевой ветке.
🟠Историческая чистота
Частое использование cherry-pick может запутать историю изменений, так как один и тот же коммит будет существовать в нескольких ветках с разными хешами.

Ставь 👍 и 📚
@backendquiz

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

14 Feb, 21:07


🤔 Как работает аннотация @Transactional "за кулисами"?

Аннотация @Transactional в Java автоматически инициирует транзакцию в начале работы метода и завершает её в конце. Если в процессе работы метода происходит ошибка, транзакция отменяется. Эта аннотация связана с менеджером транзакций, который контролирует выполнение операций в базе данных.
@backendquiz

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

13 Feb, 21:11


🤔 Какие существуют шаблоны проектирования?

Шаблоны проектирования подразделяются на три группы:
- Порождающие (Singleton, Factory, Abstract Factory) – для создания объектов.
- Структурные (Adapter, Decorator, Facade) – для упрощения структуры кода.
- Поведенческие (Observer, Strategy, Command) – для управления взаимодействием объектов.
@backendquiz

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

13 Feb, 09:13


🤔 Как можно защитить куки от кражи и подделки?

🟠Использование HTTPS
Передача данных через HTTPS (SSL/TLS) обеспечивает шифрование информации между клиентом и сервером, что предотвращает возможность перехвата и чтения данных третьими лицами. Настройте ваш веб-сервер для работы по HTTPS, получив и установив сертификат SSL/TLS.

🟠Флаг Secure
Куки передаются только по защищенным HTTPS-соединениям. Установите флаг Secure при создании куки.
Set-Cookie: sessionId=abc123; Secure

🟠Флаг HttpOnly
Куки становятся недоступными для JavaScript, что защищает их от кражи посредством XSS (межсайтового скриптинга). Установите флаг HttpOnly при создании куки.
Set-Cookie: sessionId=abc123; HttpOnly

🟠Флаг SameSite
Этот флаг предотвращает отправку куки на другие сайты, что защищает от CSRF (межсайтовой подделки запросов). Установите флаг SameSite при создании куки. Доступные варианты включают Strict, Lax и None.
Set-Cookie: sessionId=abc123; SameSite=Strict

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

🟠Подпись куки
С использованием HMAC (код аутентификации на основе хеширования) можно проверить целостность и подлинность данных в куки. Используйте секретный ключ для генерации HMAC подписи и добавьте её к куки.
import hmac
import hashlib

secret_key = b'secret'
cookie_value = b'sessionId=abc123'
signature = hmac.new(secret_key, cookie_value, hashlib.sha256).hexdigest()

cookie = f'{cookie_value.decode()}; Signature={signature}'

🟠Защита от XSS атак
XSS-атаки могут использоваться для кражи куки. Защита включает в себя валидацию и фильтрацию пользовательских вводов, использование политики безопасности контента (CSP) и безопасное кодирование данных. Реализуйте валидацию и фильтрацию вводов на стороне сервера, настройте заголовки CSP.
Content-Security-Policy: script-src 'self'

🟠Регулярное обновление и истечение срока действия куки
Установка короткого срока действия и обновление значений куки уменьшают временное окно для атакующих. Устанавливайте короткий срок действия и обновляйте значение куки при каждой сессии.
Set-Cookie: sessionId=abc123; Max-Age=3600 # 1 час

Ставь 👍 и 📚
@backendquiz

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

12 Feb, 21:15


🤔 Что происходит в конце спринта?

В конце спринта проходят два основных мероприятия: демонстрация результатов и ретроспектива. На демонстрации команде представляют результаты работы за спринт и готовый функционал. Во время ретроспективы команда анализирует успешные моменты, находит области для улучшения и обсуждает планы на следующий спринт.
@backendquiz

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

12 Feb, 15:18


🤔 Что такое интерполяция?

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

🚩 Виды

🟠 Линейная интерполяция
Это самый простой и часто используемый метод интерполяции. Он предполагает, что значения между двумя известными точками изменяются линейно.

🟠 Полиномиальная интерполяция
Этот метод использует полиномы для аппроксимации значений функции. Чем выше степень полинома, тем точнее можно аппроксимировать функцию. Однако это может привести к проблемам с осцилляциями между точками (эффект Рунге). Примеры включают интерполяцию Лагранжа и интерполяцию Ньютона.

🟠 Сплайн-интерполяция
Этот метод использует кусочно-полиномиальные функции (сплайны) для интерполяции. Наиболее популярный вид — кубические сплайны, которые создают гладкую кривую между точками. Преимуществом сплайнов является то, что они минимизируют осцилляции и обеспечивают гладкость первой и второй производных.

🟠 Синусоидальная интерполяция
Этот метод использует синусоидальные функции для интерполяции, что полезно для данных с волнообразным характером.

🚩 Примеры использования

🟠 Анализ данных
Интерполяция помогает заполнять пропущенные данные, аппроксимировать значения в точках, где измерения не проводились, и сглаживать данные.

🟠 Компьютерная графика
Интерполяция применяется в анимации и отрисовке графики, включая интерполяцию цветов, координат и других параметров.

🟠 Геоинформационные системы (ГИС)
Интерполяция используется для создания контурных карт, аппроксимации высот, температуры и других параметров на основе точечных измерений.

🟠 Цифровая обработка сигналов
Интерполяция применяется для увеличения разрешения сигнала и восстановления пропущенных данных.

Ставь 👍 и 📚
@backendquiz

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

12 Feb, 15:17


Все актуальные новости из сферы программирования можно найти на канале @umnyiprogrammist.

Подписывайтесь, чтобы не пропустить важную информацию.

Ставьте 👍 и 📚.
@backendquiz

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

11 Feb, 09:21


🤔 Что такое git-flow?

Git-flow — это метод ветвления в Git, предложенный Винсентом Дриссеном. Он помогает структурировать процесс разработки, облегчает выпуск новых версий и поддерживает стабильность проекта.

🚩Основные компоненты git-flow

🟠Основные
master: Эта ветка содержит стабильные и готовые к выпуску версии продукта. Каждый коммит в master должен представлять собой релизную версию.
develop: Эта ветка используется для интеграции всех новых разработок. Она включает последний готовый к выпуску код, но может быть нестабильной.

🟠Поддерживающие
feature: Эти ветки создаются для разработки новых функций. Они ответвляются от develop и сливаются обратно в develop после завершения работы. Например, feature/новая-функция.
release: Эти ветки создаются для подготовки нового релиза. Они ответвляются от develop, и после завершения всех необходимых исправлений и тестирования сливаются в master и develop. Например, release/1.0.0.
hotfix: Эти ветки предназначены для срочных исправлений в стабильной версии продукта. Они ответвляются от master и после завершения работы сливаются в master и develop. Например, hotfix/исправление-ошибки.

🚩Как это используется:

🟠Создание новой функции:
Создайте ветку feature от develop.
Разработайте новую функцию.
Слейте ветку feature обратно в develop.

🟠Подготовка к новому релизу:
Создайте ветку release от develop.
Проведите финальное тестирование и внесите мелкие исправления.
Слейте ветку release в master и develop.
Создайте тег для новой версии на master.

🟠Срочные исправления:
Создайте ветку hotfix от master.
Исправьте проблему.
Слейте ветку hotfix в master и develop.
Создайте тег для новой версии на master.

🚩Плюсы

🟠Организация: Четкое разделение между стабильной версией и текущей разработкой упрощает управление проектом.
🟠Параллельная разработка: Легкость создания и слияния веток способствует одновременной работе над несколькими функциями.
🟠Поддержка релизов: Отдельные ветки для подготовки релизов и срочных исправлений упрощают управление версиями.

🚩Минусы:

🟠Сложность: Этот подход может оказаться избыточным для небольших проектов с маленькими командами.
🟠Требования к дисциплине: Необходимо строгое соблюдение правил для обеспечения стабильности и непрерывности разработки.

Ставь 👍 и 📚
@backendquiz

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

10 Feb, 21:28


🤔 Что собой представляет транзакция в базе данных?

Это ряд операций, которые должны выполняться вместе, чтобы поддерживать согласованность данных. Она следует принципам ACID (атомарность, консистентность, изолированность, долговечность). К примеру, перевод средств между банковскими счетами осуществляется как транзакция, чтобы не допустить несогласованных изменений.
@backendquiz

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

10 Feb, 21:28


Ищу работу уже полгода

Почти под каждым постом в этом канале я вижу комментарии людей, которые ищут работу уже полгода. Это приводит к обсуждению того, как правильно (или неправильно) искать работу, почему процесс найма неэффективен и как они откликались на фейковые вакансии.

Честно говоря, искать работу полгода — это абсурд. Очевидно, что что-то делается неправильно. Основная ошибка, которую совершают многие, — это создание видимости поиска работы.

То есть человек вроде бы ищет работу, но делает это неэффективно, тратя время на бесполезные действия. Например:

Просматривает вакансии перед тем, как откликнуться.
Пытается понять, подходит ли он под вакансию. Если считает, что не подходит — не откликается.
Пишет сопроводительные письма (иногда даже уникальные для каждой вакансии).
Заполняет анкеты, проходит тесты.

Все эти действия занимают время, но не приводят к успеху.

Почему это не работает?

HR-менеджер не может вручную просмотреть 2000 откликов, оценить каждое резюме и прочитать сопроводительные письма. Поэтому компании используют ATS-системы (системы автоматического подбора), которые анализируют резюме и определяют процент его соответствия вакансии.

Что делать, чтобы повысить шансы?

1️⃣ Добавить ключевые навыки в резюме — как в основной текст, так и в теги. Берите их с easyoffer.ru.

2️⃣ Удалить нерелевантный опыт, оставить только подходящий.

3️⃣ Оформить опыт так, чтобы он выглядел релевантным. Если у вас его нет, укажите проекты, стажировки или другой опыт, который можно представить как работу от 1 года. Если опыт слишком большой, сократите его до 6 лет.

4️⃣ Откликаться на все вакансии без разбора. Если вы Junior, не ищите только стажерские или Junior-вакансии — пробуйте везде. Не отказывайте себе сами, пусть это решит HR.

5️⃣ Сделать резюме публичным, потому что HR-менеджеры часто ищут кандидатов не только среди откликов, но и в базе резюме.

6️⃣ Используйте ИИ по минимуму – ATS-системы распознают это и помечают как "сгенерировано ИИ".

‼️ Главное правило: чем больше откликов — тем выше шанс получить предложение. Сделайте резюме удобным для ATS-систем, и вас заметят.

1. Посмотрите видео о том, как я вывел свое резюме в Топ-1 на HH (https://youtu.be/E4Nd-_A4me4).
2. Посмотрите видео, как я нашел первую работу (https://youtu.be/AhNjmil3f10).
3. Прочитайте этот кейс про оптимизацию резюме (https://t.me/easyoffer_ru/71).

Если действительно тяжело.

Создайте несколько разных резюме. Создайте 2, 3 или даже 10 резюме. Настройте авто-отклики и ждите приглашения на собеседования.

Не нужно создавать иллюзию поиска работы, сделайте несколько простых и актуальных действий.
@backendquiz

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

10 Feb, 09:26


🤔 Чем отличаются базы данных MySQL и NoSQL?

Основные различия связаны со структурой данных, моделью управления данными, масштабируемостью и подходами к транзакциям.

🚩MySQL (Реляционные базы данных)

🟠Структура данных
MySQL имеет фиксированную схему, что подразумевает необходимость заранее определить структуру таблиц (колонки, типы данных), и внесение изменений может быть затруднительным. Данные хранятся в таблицах с установленным набором столбцов.

🟠Модель управления данными
MySQL использует SQL для определения, обработки и управления данными. Она поддерживает свойства ACID (Атомарность, Согласованность, Изолированность, Надежность), что гарантирует надежные и согласованные транзакции.

🟠Масштабируемость
Упрощается вертикальная масштабируемость (увеличение ресурсов одного сервера), в то время как горизонтальная масштабируемость (распределение на несколько серверов) более сложна и требует дополнительных усилий, например, использования шардинга.

🟠Случаи использования
MySQL хорошо подходит для приложений с четко определенными структурами данных, таких как системы CRM, ERP, финансовые приложения и системы управления контентом (CMS).

🚩NoSQL (Нереляционные базы данных)

🟠Структура данных
NoSQL базы данных предлагают гибкие и динамичные схемы данных, что позволяет без труда изменять структуру данных без необходимости модификации схемы. Они поддерживают различные модели данных, включая документные, ключ-значение, графовые и колонковые базы данных.

🟠Модель управления данными
Используются различные методы доступа и управления данными, не требующие применения SQL. NoSQL базы часто следуют CAP-теореме (Согласованность, Доступность, Устойчивость к разделению), акцентируя внимание на доступности и устойчивости, иногда жертвуя строгой согласованностью.

🟠Масштабируемость
Легко масштабируются горизонтально, распределяя данные и нагрузку на несколько серверов, что позволяет эффективно обрабатывать большие объемы данных и высокие нагрузки.

🟠Случаи использования
Идеальны для приложений, работающих с большими объемами данных и требующих быстрой обработки, например, в социальных сетях, интернет-магазинах, аналитических системах и IoT приложениях.

🚩Основные различия

🟠Схема данных
MySQL: Фиксированная схема, данные хранятся в таблицах.
NoSQL: Гибкая схема, данные могут храниться в документах, ключ-значение, графах или столбцах.

🟠Запросы и управление данными
MySQL: SQL для запросов и управления данными.
NoSQL: Разные модели данных и запросов, не обязательно с использованием SQL.

🟠Консистентность и транзакции
MySQL: Поддерживает транзакции ACID.
NoSQL: Поддержка транзакций варьируется, часто следуют CAP-теореме, обеспечивая доступность и устойчивость к разделению.

🟠Масштабируемость:
MySQL: Предназначена для вертикальной масштабируемости.
NoSQL: Предназначена для горизонтальной масштабируемости.

Ставь 👍 и 📚
@backendquiz

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

10 Feb, 09:25


⚡️ В интернете начали активно публиковать курсы и книги известных онлайн-школ по IT.

Вот отсортированная база с множеством материалов (постепенно обновляется):

БАЗА (4687 видео/книг):

(363 видео, 87 книг) — Python
(415 видео, 68 книг) — Frontend
(143 видео, 33 книги) — Информационная безопасность/Хакинг
(352 видео, 89 книг) — С/С++
(343 видео, 87 книг) — Java
(176 видео, 32 книги) — Git
(293 видео, 63 книги) — C#
(174 видео, 91 книги) — DevOps
(167 видео, 53 книги) — PHP
(227 видео, 83 книги) — SQL/Базы данных
(163 видео, 29 книг) — Linux
(114 видео, 77 книг) — Системный администратор
(107 видео, 43 книги) — Бизнес-аналитика/Системный аналитик
(181 видео, 32 книги) — Go
(167 видео, 43 книги) — Kotlin/Swift
(112 видео, 24 книги) — Flutter
(137 видео, 93 книги) — Data Science/Машинное обучение
(113 видео, 82 книги) — Разработка игр
(183 видео, 37 книг) — Дизайн
(129 видео, 73 книги) — Тестирование
(213 видео, 63 книги) — Rust
(121 видео, 24 книги) — 1С
(136 видео, 33 книги) — Управление проектами/Человеческие ресурсы (https://t.me/+Z1OgNbF8Yz4zZDYy)

Скачивать ничего не нужно — все материалы доступны в Telegram.
@backendquiz

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

09 Feb, 21:27


🤔 Как можно защитить куки от кражи и подделки?

1. Защита от кражи:
- Использовать атрибут HttpOnly, чтобы предотвратить доступ к куки через JavaScript.
- Включить Secure, чтобы куки передавались только через HTTPS.
- Установить флаг SameSite, чтобы предотвратить отправку куки при межсайтовых запросах.
2. Защита от подделки:
- Подписывать куки с помощью HMAC или JWT.
- Хранить только необходимую информацию в куки, а основную — на сервере.
@backendquiz

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

09 Feb, 09:29


🤔 Что такое рекурсия?

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

🚩 Как это работает?

Когда рекурсивная функция вызывается, создается новый контекст выполнения, в котором хранятся ее локальные переменные и текущий прогресс. Каждый новый вызов функции помещается в стек вызовов, пока не будет достигнуто базовое условие, после чего начинается обратный процесс – возвращение значений и сворачивание стека.

🚩 Где используется рекурсия?

🟠 Алгоритмы обхода структур данных, например, обход деревьев или графов.
🟠 Разбиение задач, например, алгоритм "разделяй и властвуй" (быстрая сортировка, сортировка слиянием).
🟠 Работа с комбинаторикой, вычисление факториала, чисел Фибоначчи, генерация перестановок.
🟠 Парсинг и разбор выражений, например, в компиляторах для обработки синтаксических деревьев.

🚩 Плюсы
Позволяет писать лаконичный и выразительный код.
Упрощает реализацию некоторых алгоритмов, особенно тех, что работают с деревьями и графами.
Естественно подходит для задач, решаемых методом "разделяй и властвуй".

🚩 Минусы
Использует стек вызовов, что может привести к переполнению.
Часто менее эффективно, чем итерация, из-за накладных расходов на создание новых контекстов выполнения.
Может требовать оптимизации, например, через хвостовую рекурсию.

Ставь 👍 и 📚
@backendquiz

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

09 Feb, 03:30


‍Привет, ребята!

Я учился на программиста полтора года, а сайт easyoffer.ru стал моим личным проектом. Я создавал его, потому что нужно было добавить хотя бы один проект в резюме и подготовиться к собеседованиям.

Всё получилось! Благодаря easyoffer я успешно прошёл собеседование и устроился на удалённую работу Python Junior-разработчиком с зарплатой 115 тысяч рублей.

Однако во время разработки я понял, что у этого проекта есть потенциал. Казалось, что сайт может стать популярным и, возможно, превратиться в стартап.

Поэтому я с самого начала заложил в проект минимальную бизнес-модель на случай, если сайт начнёт набирать трафик. Я предложил пользователям полный доступ к сайту в обмен на подписку на Telegram-каналы. Это позволяло развивать аудиторию, а в будущем — зарабатывать на рекламе.

Результат превзошёл ожидания! С момента запуска easyoffer сайт посетило 400 тысяч человек. А когда доход от рекламы превысил мою зарплату программиста, я решил уйти с работы и полностью посвятить себя разработке новой версии сайта.

Вот так, попав в IT, через 4 месяца я вышел через свой же личный проект. Мне очень повезло.

Уже год я работаю над easyoffer 2.0. Это будет более масштабный и качественный новый проект: появится тренажёр, задачи из собеседований, фильтрация контента по уровням и ещё много других функций, о которых я расскажу позже.

Хочу довести easyoffer до ума, чтобы сайт стал настоящим помощником для всех, кто готовится к собеседованиям. Поэтому в ближайшее время я объявлю о старте краудфандинговой кампании, чтобы ускорить разработку, и я готов щедро отблагодарить всех, кто поддержит проект.

А те, кто поддержит проект первыми, получат специальные лимитированные выгодные вознаграждения. Следите за этим телеграм-каналом (https://t.me/+b2fZN17A9OQ3ZmJi), если хотите стать первыми спонсорами.
@backendquiz

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

08 Feb, 21:31


🤔 Что такое XSS? Примеры. Как защитить приложение?

Это уязвимость, при которой злоумышленник может вставить вредоносный скрипт на веб-страницу, что позволяет ему красть данные пользователя или выполнять действия от его имени.
Примеры:
1. Ввод кода на JavaScript в форму, который затем отображается в браузере без фильтрации.
2. Перехват сессий через фальсификацию cookies.
Как защититься:
1. Проверять и экранировать пользовательский ввод.
2. Использовать CSP (Content Security Policy) для ограничения выполнения скриптов.
3. Хранить cookies с флагом HttpOnly.
@backendquiz

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

08 Feb, 09:33


🤔 Какие основные элементы запроса на сервере?

Запрос на сервере включает несколько ключевых частей, которые обеспечивают передачу данных и команд от клиента к серверу.

🟠Стартовая линия (Request Line)
Метод: Указывает тип запроса и действия, которые сервер должен выполнить. Основные методы включают:
GET: Запрос на получение данных с сервера.
POST: Отправка данных на сервер для обработки (например, форма).
PUT: Замена существующего ресурса на сервере.
DELETE: Удаление ресурса с сервера.
PATCH: Частичное обновление ресурса.
URI (Uniform Resource Identifier): Показывает путь к ресурсу на сервере.
Версия протокола HTTP: Указывает используемую версию HTTP, например, HTTP/1.1.

🟠Заголовки (Headers)
Метаданные, которые предоставляют дополнительную информацию о запросе. Примеры заголовков:
Host: Указывает имя хоста и, возможно, номер порта сервера (например, www.example.com).
User-Agent: Информация о клиентском приложении, производящем запрос (например, браузер).
Accept: Типы данных, которые клиент готов принять (например, text/html, application/json).
Content-Type: Тип данных, передаваемых в теле запроса (например, application/json для JSON данных).
Authorization: Информация для аутентификации, если запрос требует авторизации.

🟠Тело запроса (Body)
Содержит данные, отправляемые на сервер. Тело запроса используется в методах POST, PUT, PATCH для передачи данных, таких как формы, файлы или JSON-объекты. Для методов GET и DELETE тело запроса обычно не применяется.

🚩Причины наличия этих компонентов

🟠Метод и URI
Метод определяет действие, которое клиент хочет выполнить, а URI указывает конкретный ресурс, к которому это действие относится. Это основа понимания сервером того, что именно запрашивает клиент.

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

🟠Тело запроса
Тело запроса содержит основное содержание, которое клиент хочет отправить на сервер. Например, данные формы, JSON-объекты или файлы. Без тела запроса невозможно передать на сервер данные, которые нужно обработать.

POST /submit-form HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 27

name=John+Doe&age=30

Ставь 👍 и 📚
@backendquiz

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

07 Feb, 21:35


🤔 Что такое CGI? Какие у него преимущества и недостатки?

Это технология, используемая для обработки запросов и создания динамических веб-страниц с помощью серверных скриптов.
Преимущества:
1. Простота реализации.
2. Независимость от языков программирования (поддерживаются Python, Perl и др.).
3. Легкость интеграции с сервером.
Недостатки:
1. Медлительность: для каждого запроса создается новый процесс.
2. Высокая нагрузка на сервер при большом количестве запросов.
3. Устаревший подход, замененный современными технологиями (FastCGI, PHP, Node.js).
@backendquiz

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

07 Feb, 09:37


🤔 Какова разница между Postgres и MySQL?

Обе являются реляционными системами управления базами данных (СУБД), но имеют значительные отличия, которые могут повлиять на выбор системы в зависимости от конкретного проекта.

🟠Архитектура и модель хранения данных
PostgreSQL представляет собой объектно-реляционную СУБД (ORDBMS), которая поддерживает возможность расширения, сложные структуры данных и дополнительные функции. Она применяет MVCC (Multiversion Concurrency Control) для обработки транзакций.
MySQL является классической реляционной СУБД (RDBMS). По умолчанию использует механизм хранения InnoDB, который поддерживает ACID, но менее гибок по сравнению с PostgreSQL.

🟠Язык SQL и расширенные функции
PostgreSQL поддерживает более сложные конструкции SQL, такие как CTE (Common Table Expressions), оконные функции, пользовательские типы данных и полнотекстовый поиск.
MySQL менее гибок в отношении сложных SQL-запросов, хотя в последних версиях добавлена поддержка CTE и оконных функций.

🟠Производительность
MySQL лучше подходит для простых операций чтения и небольших нагрузок, особенно в веб-приложениях, где скорость выполнения запросов имеет важное значение.
PostgreSQL более оптимизирован для сложных аналитических запросов, работы с большими объемами данных и параллельной обработки.

🟠Расширяемость
PostgreSQL предлагает возможность добавления новых типов данных, операторов и написания пользовательских функций на различных языках (PL/pgSQL, Python, JavaScript и других).
MySQL менее гибок, хотя поддерживает хранимые процедуры и триггеры.

🟠Совместимость с ACID и репликация
PostgreSQL полностью соответствует стандарту ACID, поддерживает сложные транзакции и строгую консистентность данных.
MySQL также поддерживает ACID (через InnoDB), но раньше его основным преимуществом была высокая скорость за счет возможного ослабления требований к консистентности.

🟠Масштабируемость и репликация
MySQL традиционно использовался для масштабирования с помощью мастер-слейв репликации и шардинга.
PostgreSQL поддерживает логическую и потоковую репликацию, а также такие расширения, как Citus, которые позволяют эффективно масштабировать базу данных горизонтально.

🟠Поддержка JSON и NoSQL-функций
PostgreSQL изначально поддерживает JSONB, что делает его хорошим вариантом для гибридных реляционно-документных решений.
MySQL также поддерживает JSON, но его функциональность более ограничена.

🟠Сообщество и лицензия
PostgreSQL является полностью open-source (лицензия PostgreSQL) и активно развивается сообществом.
MySQL принадлежит Oracle, и хотя существует open-source версия, некоторые функции доступны только в коммерческих редакциях.

Ставь 👍 и 📚
@backendquiz

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

06 Feb, 21:39


🤔 Какие основные принципы инкапсуляции?

1. Скрытие деталей реализации:
- Внешний интерфейс предоставляет доступ к функциям объекта, не раскрывая его внутреннюю логику.
2. Контроль доступа:
- Применение модификаторов доступа (private, protected, public) для ограничения доступа к атрибутам и методам.
3. Упрощение взаимодействия:
- Инкапсуляция позволяет пользователям взаимодействовать с объектами через простой и понятный интерфейс, не углубляясь в детали их работы.
@backendquiz

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

06 Feb, 15:40


🤔 Что такое SOLID?

Это акроним, состоящий из пяти ключевых принципов объектно-ориентированного программирования и дизайна, которые помогают разработчикам создавать более ясный, гибкий и поддерживаемый код. Эти принципы были предложены Робертом Мартином, известным также как Uncle Bob, и являются основополагающими в области программной инженерии.

🟠 Принцип единственной ответственности
Этот принцип утверждает, что у каждого класса должна быть только одна причина для изменения, что подразумевает, что класс должен иметь лишь одну ответственность или задачу. Это помогает уменьшить сложность и увеличить читаемость кода, что делает его более управляемым и легким для поддержки. Когда класс выполняет лишь одну задачу, его легче тестировать и изменять без влияния на другие части системы.

🟠 Принцип открытости/закрытости
Программные сущности, такие как классы, модули и функции, должны быть открыты для расширения, но закрыты для модификации. Это означает, что поведение классов должно быть расширяемым без изменения их исходного кода. Для реализации этого принципа часто используются абстракции и интерфейсы, которые позволяют добавлять новые функции через наследование и полиморфизм, не нарушая существующий код.

🟠 Принцип подстановки Барбары Лисков
Объекты подклассов должны быть заменяемы объектами суперклассов без нарушения корректности программы. Это означает, что если у нас есть базовый класс и его подкласс, то мы должны иметь возможность заменить экземпляры базового класса экземплярами подкласса без изменения желаемого поведения программы. Этот принцип поддерживает полиморфизм и гарантирует, что производные классы могут корректно взаимодействовать с остальным кодом.

🟠 Принцип разделения интерфейсов
Клиенты не должны зависеть от интерфейсов, которые они не используют. Этот принцип направлен на создание узкоспециализированных интерфейсов, которые являются специфичными для отдельных клиентов. Таким образом, классы, реализующие эти интерфейсы, не будут обязаны реализовывать методы, которые им не нужны. Это уменьшает сложность и улучшает управляемость кода, а также способствует гибкости и повторному использованию интерфейсов.

🟠 Принцип инверсии зависимостей
Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба типа модулей должны зависеть от абстракций. Этот принцип направлен на уменьшение зависимости высокоуровневого кода от низкоуровневых деталей, что позволяет легче изменять и тестировать систему. Реализация этого принципа часто включает использование инверсии управления и внедрения зависимостей, что способствует созданию более гибких и модульных архитектур.

Ставь 👍 и 📚
@backendquiz

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

05 Feb, 21:43


🤔 Каковы отличия между SQLite и Express SQL?

1. SQLite:
- Это встроенная реляционная база данных, которая хранит все данные в одном файле.
- Она легковесная, не требует серверного программного обеспечения и идеально подходит для небольших проектов.
- Поддерживает стандартный SQL, но имеет ограничения в функциональности, например, не поддерживает масштабируемость и сложные запросы.

2. Express SQL:
- Это не база данных, а фреймворк (Express.js) в Node.js, который может взаимодействовать с SQL-базами данных, такими как MySQL и PostgreSQL.
- Применяется для создания серверной логики, которая предоставляет доступ к базам данных через API.
@backendquiz

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

05 Feb, 09:45


🤔 Что такое 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

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

04 Feb, 21:47


🤔 Что представляет собой модульное программирование?

Это способ разработки, при котором приложение разбивается на самостоятельные модули (компоненты), каждый из которых решает определённую задачу.
Преимущества:
1. Упрощение процесса поддержки и тестирования.
2. Увеличение возможности повторного использования кода.
3. Снижение взаимосвязи между компонентами.
@backendquiz

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

04 Feb, 09:49


🤔 Почему синглтон считается антипаттерном?

Синглтон может быть антипаттерном в определённых ситуациях и для некоторых разработчиков, несмотря на свою популярность, из-за множества потенциальных проблем, которые он может вызвать.

🟠Глобальное состояние
Синглтон представляет собой глобальное состояние, которое может изменяться из любого места в программе. Это усложняет отслеживание и понимание изменений состояния, что затрудняет отладку и тестирование.

🟠Нарушение принципов ООП
Синглтон нарушает принцип единственной ответственности (SRP), так как он объединяет функциональность и управление своим экземпляром. Это также противоречит принципу инверсии зависимостей (DIP), поскольку клиенты напрямую зависят от конкретного класса.

🟠Тестируемость
Синглтоны затрудняют написание модульных тестов, поскольку глобальное состояние сохраняется между тестами, что может приводить к непредсказуемому поведению. Мокинг и замена синглтона в тестах становятся сложными задачами.

🟠Жесткие зависимости
Использование синглтона создает жесткие зависимости между классами, что делает код менее гибким и увеличивает связность. Это затрудняет изменения и поддержку кода в будущем.

🟠Масштабируемость и многопоточность
Синглтоны могут вызывать проблемы в многопоточных приложениях. Обеспечение потокобезопасности требует дополнительных усилий, а ошибки в реализации могут привести к состояниям гонки и другим проблемам.

🟠Легаси код и сложность
Синглтоны часто приводят к созданию легаси кода, который трудно модифицировать и расширять. В крупных проектах синглтоны могут усложнять структуру кода и его поддержку.

Ставь 👍 и 📚
@backendquiz

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

03 Feb, 21:52


🤔 В чем отличие аутентификации от авторизации?

1. Аутентификация:
- Это процесс проверки, кто именно является пользователем (например, через логин и пароль).
- Она отвечает на вопрос: "Кто вы?"

2. Авторизация:
- Это процесс определения, какие права доступа имеет пользователь к ресурсам.
- Она отвечает на вопрос: "Что вам разрешено делать?"
@backendquiz

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

03 Feb, 09:55


🤔 Что такое транзакция?

Транзакция в рамках баз данных представляет собой набор операций, которые выполняются как единое целое. Она должна быть выполнена полностью или отменена, чтобы сохранить целостность и согласованность данных. Основные характеристики транзакции определяются набором правил, известных как ACID:

🚩Свойства ACID

🟠Атомарность:
Транзакция либо выполняется полностью, либо не выполняется вообще. Если возникает ошибка, все операции транзакции отменяются. Например, в банковской системе перевод денег между счетами требует списания суммы с одного счета и зачисления на другой. Если одна операция не выполнится, другая также должна быть отменена.

🟠Консистентность:
По завершении транзакции данные должны оставаться в согласованном состоянии, соответствующем всем установленным правилам и ограничениям. В инвентарной системе при добавлении нового товара необходимо проверять допустимость всех значений, таких как положительное количество и правильная категория.

🟠Изоляция:
Выполнение транзакций происходит изолированно друг от друга, так что параллельные транзакции не влияют на промежуточные состояния друг друга. Если две транзакции пытаются изменить одни и те же данные, одна из них должна завершиться до начала изменений другой, чтобы избежать конфликтов.

🟠Долговечность:
После завершения транзакции её результаты сохраняются даже в случае сбоя системы. Если транзакция по записи данных в базу данных завершилась успешно, данные останутся сохраненными даже после перезагрузки сервера.

🚩Этапы выполнения транзакции

1⃣Начало выполнения транзакции.
2⃣Выполняются все необходимые операции (вставка, обновление, удаление и т.д.).
3⃣Если все операции выполнены успешно, изменения фиксируются.
4⃣Если произошла ошибка, все изменения отменяются, возвращая базу данных в исходное состояние.

🚩Применение транзакций

🟠Обеспечивают целостность операций перевода денежных средств.
🟠Гарантируют корректное обновление информации о заказах и инвентаре.
🟠Обеспечивают правильность резервирования мест или ресурсов.

Ставь 👍 и 📚
@backendquiz

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

02 Feb, 21:56


🤔 Какие существуют типы блокировок в Postgres?

1. Блокировки на уровне строк: они блокируют отдельные строки (например, при использовании SELECT FOR UPDATE).
2. Блокировки на уровне таблиц: они блокируют всю таблицу для различных операций (ACCESS SHARE, ROW EXCLUSIVE, EXCLUSIVE и так далее).
3. Консультативные блокировки: это пользовательские блокировки, которые задаются вручную для синхронизации.
@backendquiz

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

02 Feb, 09:59


🤔 Какие элементы включает в себя ответ сервера?

Ответ сервера, особенно в контексте HTTP, состоит из нескольких основных компонентов. Эти элементы предоставляют клиенту информацию о результате запроса, статусе обработки и, если нужно, сами данные. Главные части ответа включают:

🟠Стартовая линия
Стартовая линия содержит информацию о статусе ответа и включает:
Версию протокола HTTP: Например, HTTP/1.1.
Код состояния: Числовой код, обозначающий результат обработки запроса. К примеру, 200 (OK), 404 (Not Found), 500 (Internal Server Error).
Причинная фраза: Описание статуса, понятное человеку. Например, OK, Not Found, Internal Server Error.
HTTP/1.1 200 OK

🟠Заголовки
Заголовки предоставляют метаданные о ответе. Они состоят из пар "ключ-значение" и могут включать:
Date: Дата и время отправки ответа.
Content-Type: Тип содержимого ответа (например, text/html, application/json).
Content-Length: Размер тела ответа в байтах.
Server: Информация о сервере, который отправил ответ.
Set-Cookie: Установка cookies.
Content-Type: application/json
Content-Length: 85
Server: Apache/2.4.1 (Unix)
Set-Cookie: sessionId=abc123; Path=/; HttpOnly

🟠Тело ответа
Тело ответа содержит данные, которые сервер отправляет клиенту. Формат и содержание тела зависят от типа ответа и могут включать:
HTML-страницы
JSON-объекты
XML-данные
Файлы (например, изображения, документы)
{
"id": 123,
"name": "John Doe",
"email": "[email protected]"
}

Пример полного HTTP-ответа
HTTP/1.1 200 OK
Date: Tue, 27 Jul 2024 12:28:53 GMT
Content-Type: application/json
Content-Length: 85
Server: Apache/2.4.1 (Unix)
Set-Cookie: sessionId=abc123; Path=/; HttpOnly

{
"id": 123,
"name": "John Doe",
"email": "[email protected]"
}

Ставь 👍 и 📚
@backendquiz

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

02 Feb, 09:57


⬆️ Откройте для себя мир программирования вместе с @DragonsCoder!
🔥 ЗДЕСЬ ВАС ОЖИДАЕТ 🔥
⚙️ Практические проекты с открытым исходным кодом — учитесь на реальных задачах.
📢 Новейшие новости о новых разработках и передовых технологиях.
❤️ Полезные ресурсы для улучшения навыков программирования.
🔰 Присоединяйтесь к @DragonsCoder и станьте частью мира разработки!
@backendquiz

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

01 Feb, 22:00


🤔 Что такое блокировки в базах данных?

Это способ, который не позволяет нескольким транзакциям одновременно обращаться к одним и тем же данным. Это нужно для того, чтобы сохранить целостность данных, согласовать действия и избежать конфликтов.
@backendquiz

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

01 Feb, 10:02


🤔 Что такое git?

Это система контроля версий, которая распределена и была создана Линусом Торвальдсом в 2005 году. Она используется для отслеживания изменений в исходном коде во время разработки программного обеспечения. Git позволяет нескольким разработчикам одновременно работать над одним проектом, не опасаясь потерять свою работу или перезаписать изменения друг друга.

🚩Основные понятия и функции

🟠Репозиторий (Repository)
Это место, где хранится проект, включая все файлы и историю их изменений.

🟠Коммит (Commit)
Это зафиксированный момент текущего состояния файлов в репозитории. Коммиты создают историю изменений проекта.

🟠Ветвь (Branch)
Это отдельная линия разработки. Ветви позволяют работать над разными функциями или исправлениями параллельно, не вмешиваясь в основную кодовую базу.

🟠Слияние (Merge)
Это процесс объединения изменений из одной ветви в другую. Обычно это делается для интеграции новых функций или исправлений из отдельных ветвей в основную ветвь.

🟠Клон (Clone)
Это создание копии удалённого репозитория на локальном компьютере разработчика.

🟠Форк (Fork)
Это создание копии чужого репозитория (обычно на платформах вроде GitHub) для внесения собственных изменений, не влияя на оригинальный проект.

🟠Запрос на слияние (Pull Request или Merge Request)
Это запрос на включение изменений из одной ветви в другую, часто используемый на совместных платформах (например, GitHub, GitLab).

🟠Ремот (Remote)
Это удалённый репозиторий, который может быть связан с локальным репозиторием. Основные команды взаимодействуют с ним для синхронизации данных.

🚩Основные команды

🟠git init
Это команда для создания нового локального репозитория.
🟠git clone [URL]
Эта команда клонирует удалённый репозиторий на локальную машину.
🟠git add [файл/папка]
Она добавляет изменения в индекс (это стадия подготовки к коммиту).
🟠git commit -m "Сообщение"
Эта команда создаёт коммит с указанным сообщением.
🟠git status
Позволяет проверить состояние файлов в рабочем каталоге и индексе.
🟠git log
Служит для просмотра истории коммитов.
🟠git branch
Эта команда управляет ветвями (создание, просмотр, удаление).
🟠git checkout [ветка/коммит]
Позволяет переключаться между ветвями или возвращаться к определённому коммиту.
🟠git merge [ветка]
Эта команда сливает указанную ветку с текущей.
🟠git pull
Она получает изменения из удалённого репозитория и сливает их с текущей веткой.
🟠git push
Эта команда отправляет изменения из локального репозитория в удалённый.

Ставь 👍 и 📚
@backendquiz

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

31 Jan, 22:04


🤔 Как можно обнаружить "медленный запрос" и изучить его в PostgreSQL?

1. Включить запись медленных запросов: настроить log_min_duration_statement.
2. Использовать расширение pg_stat_statements для анализа наиболее часто выполняемых запросов.
3. Применить EXPLAIN или EXPLAIN ANALYZE для изучения плана выполнения запроса.
@backendquiz

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

31 Jan, 10:06


🤔 В чем разница между LEFT JOIN и INNER JOIN?

Это два типа соединений в SQL, которые используются для объединения строк из двух или более таблиц на основе связанных столбцов. Главная разница заключается в том, какие строки попадают в результирующий набор данных.

🚩INNER JOIN

Этот тип соединения возвращает только те строки, которые имеют совпадающие значения в обеих таблицах. Если совпадений нет, строка не будет включена в результат.
SELECT Employees.name, Departments.department_name
FROM Employees
INNER JOIN Departments ON Employees.department_id = Departments.id;

🚩LEFT JOIN

LEFT JOIN возвращает все строки из левой таблицы и соответствующие строки из правой таблицы. Если в правой таблице нет совпадающих строк, в результирующем наборе будут NULL значения для столбцов правой таблицы.
SELECT Employees.name, Departments.department_name
FROM Employees
LEFT JOIN Departments ON Employees.department_id = Departments.id;

🚩Сравнение

🟠INNER JOIN
Возвращает только совпадающие строки. Если нет совпадений, строки не включаются в результат.

🟠LEFT JOIN
Возвращает все строки из левой таблицы. Включает совпадающие строки из правой таблицы. Если нет совпадений, строки из правой таблицы будут заполнены NULL значениями.

Ставь 👍 и 📚
@backendquiz

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

28 Jan, 10:16


🤔 Какова разница между rebase и merge?

В Git команды rebase и merge применяются для объединения изменений из различных веток, но делают это по-разному. Главное отличие заключается в том, как они сохраняют историю коммитов и как влияют на структуру репозитория.

🚩Основные отличия

🟠Merge (Слияние)
Объединяет две ветки, создавая новый коммит слияния, который имеет две родительских ветки. Сохраняет всю историю коммитов обеих веток без изменений. История ветвления и слияния остается. Если возникают конфликты, Git предложит их разрешить перед созданием коммита слияния.
git merge
git checkout main
git merge feature-branch

🟠Rebase (Перебазирование)
Переносит все коммиты текущей ветки на вершину целевой ветки. Это делает историю линейной, как будто изменения были сделаны последовательно. Изменяет историю коммитов, создавая новые коммиты для каждого коммита из текущей ветки. История ветвления исчезает. Если возникают конфликты, Git предложит их разрешить по мере переноса каждого коммита.
git rebase
git checkout feature-branch
git rebase main

🚩Плюсы и минусы

🟠Merge
Простота
Процесс слияния прост и понятен.
Сохранение истории
Вся история коммитов сохраняется, включая информацию о ветвлении и слиянии.
Коммиты слияния
Создаются дополнительные коммиты слияния, что может усложнить историю.

🟠Rebase
Чистая история
История линейная и более читабельная.
Упрощение навигации
Проще следить за последовательностью изменений.
Изменение истории
Изменение коммитов может привести к проблемам, если кто-то уже основывается на этих коммитах.
Конфликты
Может потребоваться больше усилий для разрешения конфликтов, особенно если коммитов много.

🚩Когда использовать

🟠Merge
Когда важно сохранить полную историю изменений, включая ветвление и слияние. В крупных командных проектах, где история изменений важна для отслеживания.

🟠Rebase
Когда важно иметь чистую и линейную историю изменений. Для интеграции изменений из основной ветки в текущую рабочую ветку перед отправкой изменений в основную ветку.

Ставь 👍 и 📚
@backendquiz

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

27 Jan, 16:21


🤔 В чем отличие между MySQL и NoSQL?

- MySQL (реляционная): хранит данные в таблицах с установленной схемой и использует язык SQL.
- NoSQL (нереляционная): предназначена для обработки неструктурированных данных, более адаптивна и поддерживает горизонтальное масштабирование.
@backendquiz

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

27 Jan, 10:20


🤔 Какие нормальные формы существуют в SQL?

Это процесс упорядочивания данных для снижения избыточности и предотвращения проблем при добавлении данных. Нормальные формы (NF) — это набор принципов, помогающих в нормализации баз данных.

🟠 Первая нормальная форма (1NF)
Таблица считается в 1NF, если: Все столбцы содержат атомарные значения, то есть каждое значение в столбце неделимо. Все строки уникальны, без повторяющихся строк.
Пример: Если у вас есть таблица с заказами и каждый заказ включает несколько продуктов, вместо того чтобы хранить все продукты в одном столбце, их нужно разбить на отдельные строки.

🟠 Вторая нормальная форма (2NF)
Таблица считается во 2NF, если: Она соответствует 1NF. Все неключевые столбцы полностью зависят от всего первичного ключа, а не от его части.
Пример: Если в таблице "Заказы" есть составной ключ (OrderID, ProductID), то столбцы, зависящие только от OrderID (например, OrderDate), должны быть вынесены в отдельную таблицу.

🟠 Третья нормальная форма (3NF)
Таблица считается в 3NF, если: Она соответствует 2NF. Все неключевые столбцы зависят только от первичного ключа, а не от других неключевых столбцов.
Пример: Если в таблице "Сотрудники" есть столбцы EmployeeID, DepartmentID и DepartmentName, нужно вынести DepartmentName в отдельную таблицу "Департаменты", чтобы избежать зависимости между неключевыми столбцами.

🟠 Бойс-Кодд нормальная форма (BCNF)
Таблица считается в BCNF, если: Она соответствует 3NF. Для каждой функциональной зависимости X -> Y, X является суперключом.
Пример: Если в таблице "Курс" есть зависимости (Professor, Course) -> Room и Room -> Capacity, необходимо изменить структуру таблицы так, чтобы не было зависимостей, где детерминанты не являются суперключами.

🟠 Четвертая нормальная форма (4NF)
Таблица считается в 4NF, если: Она соответствует BCNF. В ней отсутствуют многозначные зависимости (Multivalued Dependencies).
Пример: Если студент может записаться на несколько курсов и участвовать в нескольких клубах, то эти зависимости должны быть вынесены в отдельные таблицы.

🟠 Пятая нормальная форма (5NF)
Таблица считается в 5NF, если: Она соответствует 4NF. В ней нет соединительных зависимостей (Join Dependencies), которые нельзя разделить без потери данных.
Пример: Если у вас есть сложные зависимости между несколькими таблицами, нужно убедиться, что все соединения этих таблиц могут быть разложены обратно без потери информации.

🟠 Доменино-ключевая нормальная форма (DKNF)
Таблица считается в DKNF, если: Все ограничения и зависимости выражаются только через домены и ключи таблицы, и отсутствуют аномалии при вставке, обновлении или удалении данных.

Ставь 👍 и 📚
@backendquiz

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

26 Jan, 16:23


🤔 Какие существуют связи между моделями в базе данных?

1. Один к одному: связь между двумя таблицами, где каждой записи из одной таблицы соответствует одна запись из другой.
2. Один ко многим: связь, при которой одна запись связана с несколькими записями из другой таблицы.
3. Многие ко многим: связь между таблицами через промежуточную таблицу.
@backendquiz

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

26 Jan, 10:24


🤔 Что такое HTTP?

Это протокол прикладного уровня, который является основой передачи данных в Интернете. Он был создан для обмена гипертекстом и другими типами медиа между клиентами и серверами. Основные функции HTTP включают установление соединения, запрос ресурсов и получение ответов от сервера.

🚩 Основные компоненты HTTP:

🟠 Клиент и сервер
HTTP функционирует по модели клиент-сервер. Клиент, например, веб-браузер, отправляет запросы к серверу, который предоставляет доступ к запрашиваемым ресурсам.

🟠 URI (Унифицированный Идентификатор Ресурса)
Используется для идентификации ресурсов. Наиболее распространенным типом URI является URL (Унифицированный Локатор Ресурса).

🟠 Методы HTTP
Определяют действия, которые клиент хочет выполнить над ресурсом. Основные методы включают:
GET: Запрос данных с сервера.
POST: Отправка данных на сервер для обработки.
PUT: Обновление ресурса на сервере.
DELETE: Удаление ресурса с сервера.

🟠 Статус-коды
Серверы возвращают клиентам статус-коды, чтобы сообщить о результате обработки запроса. Например, 200 (OK) означает успешное выполнение запроса, а 404 (Not Found) — что ресурс не найден.

🟠 Заголовки HTTP
Содержат метаданные о запросе или ответе, такие как тип содержимого (Content-Type), длина содержимого (Content-Length), информация об авторизации и так далее.

🟠 Сообщения HTTP
Состоят из запроса от клиента и ответа от сервера, каждый из которых включает стартовую строку, заголовки и тело сообщения.

🚩 Как это используется:

🟠 Веб-серфинг
Каждый раз, когда пользователь вводит URL в адресной строке браузера или нажимает на ссылку, браузер отправляет HTTP-запрос к серверу, который возвращает HTML-страницу.

🟠 API
HTTP широко используется для взаимодействия между различными системами через RESTful API. Программы могут отправлять HTTP-запросы для получения данных или выполнения действий на удаленных серверах.

🟠 Мобильные приложения
Большинство мобильных приложений взаимодействуют с серверными частями через HTTP, запрашивая и отправляя данные, которые отображаются пользователю.

🟠 Загрузка файлов
HTTP используется для скачивания файлов из Интернета.

Ставь 👍 и 📚
@backendquiz

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

25 Jan, 16:26


🤔 Существуют ли различные варианты SQL?

Да, SQL имеет разные варианты, которые зависят от конкретной базы данных:
- MySQL использует LIMIT для ограничения количества результатов.
- PostgreSQL поддерживает RETURNING и более сложные функции для работы с JSON.
- SQL Server применяет TOP вместо LIMIT.
- SQLite является упрощённым вариантом и поддерживает только основные функции.
@backendquiz

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

25 Jan, 10:27


🤔 Какие существуют уровни изоляции транзакций?

Уровни изоляции транзакций определяют, насколько изменения, сделанные одной транзакцией, видны другим параллельным транзакциям. Они помогают управлять воздействием транзакций друг на друга и предотвращают различные аномалии, такие как "грязное" чтение, неповторяющееся чтение и фантомные чтения. В стандарте SQL-92 выделяют четыре уровня изоляции транзакций:

🚩Read Uncommitted (Чтение неподтвержденных данных)

Транзакция может видеть изменения, внесенные другими транзакциями, даже если эти изменения еще не были зафиксированы.

🟠Грязное чтение (Dirty Read)

Транзакция может считать данные, которые были изменены другой транзакцией, но не были зафиксированы.

🟠Неповторяющееся чтение (Non-repeatable Read)

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

🟠Фантомные чтения (Phantom Read)

Транзакция может обнаружить новые строки, добавленные другой транзакцией, при повторном выполнении запроса.

🚩Read Committed (Чтение подтвержденных данных)

Транзакция видит только те изменения, которые были зафиксированы другими транзакциями. Неподтвержденные изменения не доступны.

🟠Неповторяющееся чтение (Non-repeatable Read)

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

🟠Фантомные чтения (Phantom Read)

Транзакция может видеть новые строки, добавленные другой транзакцией, при повторном выполнении запроса.

🚩Repeatable Read (Повторяемое чтение)

Транзакция гарантирует, что если она прочитала данные в начале, эти данные останутся неизменными до завершения транзакции. Она не видит изменений, сделанных другими транзакциями после ее начала.

Фантомные чтения (Phantom Read): Транзакция может видеть новые строки, добавленные другой транзакцией, при повторном выполнении запроса.

🚩Serializable (Сериализуемость)

Транзакция выполняется так, как будто она единственная в системе. Другие транзакции не могут вносить изменения, пока текущая транзакция не завершится. Это самый строгий уровень изоляции, который предотвращает все аномалии (грязное чтение, неповторяющееся чтение, фантомные чтения).

-- Установка уровня изоляции

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

Пример на Java (использование JDBC)

connection.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);

connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);

connection.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);

connection.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);

Ставь 👍 и 📚
@backendquiz

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

24 Jan, 16:29


🤔 Как можно ограничить доступ к определённым полям в Postgres?

1. Использовать права доступа (GRANT и REVOKE) для ограничения прав на уровне столбцов.
2. Применить триггеры для контроля операций INSERT и UPDATE.
3. Настроить вьюхи (VIEW) для скрытия определённых столбцов.
@backendquiz

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

24 Jan, 10:30


🤔 Что ты знаешь о хеш-функциях?

Хеш-функция — это функция, которая принимает входные данные (ключ) и возвращает фиксированное значение, называемое хешем. Основная задача хеш-функции — преобразовать произвольные данные в числовое значение определенного диапазона.

🚩Основные свойства хеш-функции:

🟠 Детерминированность: Хеш-функция всегда должна возвращать одно и то же хеш-значение для одного и того же входного значения.
🟠 Равномерное распределение: Хорошая хеш-функция должна равномерно распределять хеш-значения по всему диапазону, чтобы минимизировать количество коллизий.
🟠 Быстрота вычисления: Хеш-функция должна быть достаточно быстрой, чтобы не замедлять общую производительность алгоритмов, которые её используют.
🟠 Минимизация коллизий: Коллизия возникает, когда два разных входных значения дают одно и то же хеш-значение. Хорошая хеш-функция должна минимизировать вероятность таких случаев.

🚩Применение хеш-функций:

🟠 Хеш-таблицы: Используются для вычисления индекса массива, где будет храниться значение, связанное с ключом. Это позволяет быстро выполнять операции вставки, удаления и поиска.
🟠 Криптография: Криптографические хеш-функции (например, SHA-256, MD5) используются для обеспечения целостности данных, создания цифровых подписей и безопасного хранения паролей.
🟠 Контроль целостности данных: Хеш-функции применяются для проверки целостности данных при передаче или хранении, позволяя выявлять ошибки или изменения в данных.
🟠 Генерация уникальных идентификаторов: Хеш-функции используются для генерации уникальных идентификаторов (например, UUID), основываясь на входных данных.

🚩Примеры хеш-функций:

🟠 Простая хеш-функция: Эта функция возвращает остаток от деления длины ключа на размер таблицы. Она проста, но не обеспечивает равномерное распределение.
def simple_hash(key, table_size):
return len(key) % table_size

🟠 Хеш-функция для строк (например, DJB2):
def djb2_hash(key):
hash_value = 5381
for char in key:
hash_value = ((hash_value
@backendquiz

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

24 Jan, 10:29


👩‍💻 Хотите организовать хранение данных в Kubernetes как профи?

На открытом уроке мы раскроем все секреты томов, хранилищ и работы с stateful-приложениями. Узнайте, как обеспечить отказоустойчивость и производительность данных в вашей инфраструктуре.

☁️ Освойте лучшие практики настройки Persistent Volume Claims, разберитесь с хранилищами от локальных до облачных и сделайте вашу систему неуязвимой.

Встречаемся 30 января в 20:00 мск. Участники получат скидку на обучение на курсе «Инфраструктурная платформа на основе Kubernetes»: https://clck.ru/3Fw78G

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

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

23 Jan, 16:32


🤔 Каковы основные цели использования Redis в проектах?

Redis служит для хранения данных в памяти, что обеспечивает быстрый доступ.
1. Он используется для кэширования, управления сессиями, обработки очередей сообщений и анализа данных.
2. Redis поддерживает сложные структуры данных, такие как списки, множества и хэши.
@backendquiz

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

23 Jan, 13:03


👩‍💻 Ваш код на C++ мог бы быть быстрее. Намного быстрее.

Почему ваши приложения работают медленнее, чем хотелось бы? Программа не использует потенциал процессора, а кэш и память работают в авральном режиме?

🗓 На открытом уроке «Оптимизация производительности на C++» 30 января в 20:00 мск мы разберем инструменты gprof, valgrind, Google Benchmark, секреты работы с кэш-памятью, управление памятью и даже оптимизации компилятора.

🦾 Присоединяйтесь к вебинару и сделайте свои приложения молниеносными!
Участники урока получат скидку на большое обучение «C++ Developer. Professional».

➡️ Узнать больше и зарегистрироваться: https://clck.ru/3Fu28t

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

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

23 Jan, 10:33


🤔 Расскажи о уровнях изоляции?

Уровни изоляции транзакций в SQL определяют, как параллельные транзакции взаимодействуют друг с другом и какие аномалии данных они предотвращают.

🟠Read Uncommitted
Позволяет видеть изменения, даже если они еще не зафиксированы. Аномалия: грязное чтение.
🟠Read Committed
Видит только изменения, которые были зафиксированы. Аномалия: неповторяющееся чтение.
🟠Repeatable Read
Обеспечивает консистентность чтения данных в рамках одной транзакции. Аномалия: фантомные чтения.
🟠Serializable
Обеспечивает полную изоляцию транзакций, как если бы они выполнялись последовательно. Аномалий нет.

Ставь 👍 и 📚
@backendquiz

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

23 Jan, 08:27


Ищете способы сделать Bitrix24 ещё мощнее? Мы знаем, как!

На открытом уроке вы узнаете, как интегрировать Bitrix24 с Google Workspace и Microsoft 365:
— Расширьте возможности CRM.
— Автоматизируйте рутинные задачи.
— Улучшите коммуникацию в компании.

Только реальные кейсы, примеры успешных интеграций и рекомендации от эксперта. Участники урока получат скидку на обучение на курсе «Разработчик Битрикс24».

Не упустите шанс! Встречаемся 27 января в 20:00 мск.

👉 Узнать больше: https://clck.ru/3FtMVB

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

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

22 Jan, 16:37


🤔 Что подразумевается под правильным кодом?

Правильный код — это такой код, который легко читать, поддерживать и который надёжен, соответствующий стандартам разработки.
1. Он должен эффективно решать задачу, минимизируя затраты ресурсов.
2. Код должен быть модульным, тестируемым и простым в расширении.
@backendquiz

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

22 Jan, 16:36


📺 Уникальная коллекция IT-собеседований

Более 370 реальных собеседований для программистов, тестировщиков, аналитиков и других IT-специалистов.

Собеседования от ведущих компаний: Сбер, Яндекс, ВТБ, Тинькофф, Озон, Wildberries и других.

🎯 Переходи по ссылке и присоединяйся к коллекции, чтобы повысить свои шансы на успешное трудоустройство!
@backendquiz

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

22 Jan, 12:31


⭐️ Symfony и Kafka — союз, о котором мечтают разработчики!

👉 Узнайте, как интеграция Symfony Messenger с Kafka делает обработку асинхронных задач надёжной и масштабируемой. Мы разберём примеры, лучшие практики и подводные камни.

Хотите уверенно работать с этой мощной связкой и прокачать свои проекты? 28 января в 20:00 мск вас ждёт открытый урок, где мы расскажем, как настроить и использовать Kafka как транспорт.

Спикер Михаил Каморин — Dev Tech Lead в Skyeng, участник и организатор конференций по PHP, член ПК Podlodka PHP Crew.

👉 Регистрируйтесь на вебинар сейчас и получите скидку на обучение на курсе «Symfony Framework»: https://clck.ru/3FtNrg

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

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

22 Jan, 10:37


🤔 Что такое MVVM?

Это архитектурный шаблон, который делит приложение на три части: Model (данные и логика), View (интерфейс) и ViewModel (связь между Model и View).

🚩Пример

Model
public class User
{
public string Name { get; set; }
public int Age { get; set; }
}

ViewModel
public class UserViewModel : INotifyPropertyChanged
{
private ObservableCollection _users;
public ObservableCollection Users
{
get { return _users; }
set
{
_users = value;
OnPropertyChanged(nameof(Users));
}
}

public UserViewModel()
{
Users = new ObservableCollection
{
new User { Name = "John Doe", Age = 30 },
new User { Name = "Jane Doe", Age = 25 }
};
}

public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}

View (XAML)

Код за View (Code-behind)
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new UserViewModel();
}
}

Ставь 👍 и 📚
@backendquiz

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

21 Jan, 16:40


🤔 Какие основные идеи принципа программирования DRY?

Этот принцип заключается в том, чтобы свести к минимуму дублирование кода.
1. Код, который повторяется в разных частях, следует вынести в одну общую функцию или модуль.
2. Использование DRY способствует улучшению читаемости, тестируемости и снижает вероятность ошибок.
@backendquiz

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

21 Jan, 10:41


🤔 Что такое CD (Непрерывная доставка / Непрерывное развертывание)?

Это практика автоматизации и оптимизации процессов доставки приложений и их обновлений в рабочую среду. Она является частью подхода DevOps и тесно связана с CI (Непрерывная интеграция).

🚩Два основных значения CD

🟠Непрерывная доставка
Непрерывная доставка предполагает автоматизацию процессов сборки, тестирования и подготовки приложения к выпуску в продакшн. Однако процесс развертывания остаётся ручным, чтобы команда могла контролировать его выполнение. Ключевые особенности:
Автоматическое развертывание приложения в тестовые и предрелизные среды.
Возможность развернуть приложение в продакшн в любой момент с минимальными усилиями.
Финальное решение о развертывании принимает человек.
Цель: быть готовым к безопасному и быстрому выпуску обновлений в любой момент.
Пример использования:
В интернет-магазине обновление функционала сначала разворачивается в тестовой среде. После успешной проверки QA-командой или бизнес-менеджером приложение вручную переносится в продакшн.

🟠Непрерывное развертывание
Непрерывное развертывание идёт дальше Непрерывной доставки, автоматически развертывая обновления в продакшн после успешного прохождения всех тестов. Процесс полностью автоматизирован и исключает ручное вмешательство. Ключевые особенности:
Абсолютная автоматизация — каждый подтверждённый код (коммит) автоматически попадает в продакшн.
Постоянный выпуск обновлений, минимизирующий разницу между разработкой и рабочей средой.
Цель: сократить время доставки функционала и исправлений до продакшна, обеспечивая быстрые релизы.
Пример использования:
В приложении социальной сети любые изменения (например, исправление ошибки или добавление нового поста) автоматически проходят через CI/CD pipeline и попадают в продакшн.

🚩Ключевые элементы CD

🟠CI/CD Pipeline
Автоматизированный процесс, включающий сборку, тестирование, развертывание.

🟠Тестирование
Юнит-тесты.
Интеграционные тесты.
Нагрузочные тесты.
Проверка безопасности.

🟠Оркестрация и управление
Использование инструментов (Jenkins, GitLab CI/CD, CircleCI, GitHub Actions). Контейнеризация (Docker, Kubernetes).

🟠Мониторинг
Автоматическое отслеживание работоспособности приложений (Prometheus, Grafana).

🚩Плюсы

Скорость
Ускоряет доставку новых функций и исправлений.
Качество
Раннее выявление ошибок благодаря автоматическим тестам.
Прозрачность
Процесс развертывания становится понятным для всей команды.
Гибкость
Возможность быстро реагировать на изменения требований.

Ставь 👍 и 📚
@backendquiz

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

20 Jan, 16:43


🤔 Каковы преимущества асинхронных операций?

Асинхронные операции позволяют выполнять задачи без остановки основного потока.
1. Они особенно полезны для работы с сетевыми запросами, вводом/выводом и длительными вычислениями.
2. Асинхронный подход увеличивает производительность и отзывчивость приложения.
@backendquiz

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

20 Jan, 10:44


🤔 Какие существуют принципы программирования?

Программирование включает в себя множество принципов, которые помогают разработчикам создавать эффективный, читаемый и поддерживаемый код.

🚩Принципы SOLID

🟠Принцип единственной ответственности (SRP)
Каждый класс должен иметь только одну конкретную ответственность. Например, класс Invoice должен заниматься исключительно логикой, связанной с инвойсами, и не должен отвечать за управление базой данных или интерфейсом пользователя.

🟠Принцип открытости/закрытости (OCP)
Классы должны быть открыты для расширения, но закрыты для изменения. Например, добавление нового типа фигуры должно происходить без изменения существующего кода классов фигур.

🟠Принцип подстановки Лискова (LSP)
Объекты базового класса должны быть заменяемыми объектами подклассов без нарушения корректности программы. Например, если класс Bird имеет метод fly, то подкласс Penguin не должен нарушать это условие.

🟠Принцип разделения интерфейсов (ISP)
Клиенты не должны быть вынуждены зависеть от интерфейсов, которые они не используют. Например, крупный интерфейс следует разделить на несколько специализированных интерфейсов.

🟠Принцип инверсии зависимостей (DIP)
Модули верхнего уровня не должны зависеть от модулей нижнего уровня; оба должны зависеть от абстракций. Например, для взаимодействия между классами следует использовать интерфейсы, а не конкретные реализации.

🚩Другие важные принципы

🟠Принцип DRY (Don't Repeat Yourself)
Избегайте дублирования кода, вынося повторяющиеся элементы в отдельные функции или классы. Например, используйте функции для повторяющихся блоков кода.

🟠Принцип KISS (Keep It Simple, Stupid)
Держите код простым и избегайте сложных решений, когда достаточно простого подхода. Например, не применяйте сложные алгоритмы там, где достаточно простого цикла.

🟠Принцип YAGNI (You Ain't Gonna Need It)
Не разрабатывайте функциональность, которая не нужна на данный момент. Например, добавляйте новые функции только по мере необходимости.

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

🟠Закон Деметры (LoD)
Объект должен взаимодействовать только с непосредственными "друзьями" и не вызывать цепочку вызовов. Например, используйте методы класса, не прибегая к вызову методов через несколько объектов.

🟠Принцип раннего выявления ошибок (Fail Fast)
Ошибки должны быть обнаружены как можно раньше. Например, проверяйте входные данные на валидность в начале функции.

🟠Композиция вместо наследования
Предпочитайте композицию наследованию для достижения гибкости. Например, используйте объекты других классов для расширения функциональности вместо создания подклассов.

🚩Принципы в Agile

🟠Сотрудничество с заказчиком важнее согласования условий контракта
Важно взаимодействовать с заказчиком, а не только следовать условиям контракта. Например, проводите регулярные встречи с заказчиком для обсуждения прогресса и изменений.

🟠Готовность к изменениям важнее следования плану
Быть готовым к изменениям важнее, чем строго следовать плану. Например, внедряйте новые требования, даже если они появляются на поздних стадиях разработки.

🚩Принципы в DevOps

🟠Инфраструктура как код
Управление инфраструктурой с помощью кода и автоматизации. Например, используйте Terraform или Ansible для развертывания серверов.

🟠Непрерывная интеграция/непрерывное развертывание (CI/CD)
Автоматизация сборки, тестирования и развертывания приложений. Например, используйте Jenkins или GitHub Actions для автоматизации процессов разработки.

Ставь 👍 и 📚
@backendquiz

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

19 Jan, 16:47


🤔 Что такое бинарное дерево?

Это структура данных, в которой каждый узел может иметь максимум двух потомков (левый и правый).
1. Оно применяется для быстрого поиска, добавления и удаления элементов.
2. Специфические случаи: бинарное дерево поиска (BST) и сбалансированные деревья (например, AVL и красно-чёрные деревья).
@backendquiz

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

19 Jan, 10:48


Основные HTTP-методы

HTTP-методы (или глаголы) определяют, какое действие клиент хочет выполнить с ресурсом на сервере.

GET
Назначение: Получение данных с сервера. Используется для чтения информации, не изменяя состояние сервера. Этот метод безопасен и идемпотентен, то есть выполнение одного и того же запроса несколько раз дает одинаковый результат.
Пример запроса страницы или API-ресурса:
GET /users/123

POST
Назначение: Создание нового ресурса или выполнение действий на сервере. Может изменять состояние сервера, например, добавляя новые данные. Этот метод не идемпотентен, то есть повторный запрос создает новый ресурс или дублирует операцию.
Пример создания нового пользователя:
POST /users

PUT
Назначение: Полное обновление ресурса на сервере. Этот метод идемпотентен, то есть повторный запрос с одинаковыми данными не изменяет результат.
Пример обновления профиля пользователя:
PUT /users/123

PATCH
Назначение: Частичное обновление ресурса. Обновляет только указанные поля, не затрагивая остальные. Этот метод не всегда идемпотентен, что зависит от реализации.
Пример обновления только имени пользователя:
PATCH /users/123

DELETE
Назначение: Удаление ресурса с сервера. Этот метод идемпотентен, то есть повторный запрос удаления того же ресурса не вызывает ошибку.
Пример удаления пользователя:
DELETE /users/123

HEAD
Назначение: Получение метаинформации о ресурсе без передачи его содержимого. Этот метод аналогичен GET, но сервер возвращает только заголовки ответа. Полезен для проверки существования ресурса или его свойств, например, размера.
Пример запроса:
HEAD /users/123

OPTIONS
Назначение: Запрос информации о поддерживаемых сервером методах или возможностях ресурса. Используется, например, в CORS для проверки, какие методы доступны для клиента.
Пример запроса:
OPTIONS /users

TRACE
Назначение: Диагностика и отладка соединения между клиентом и сервером. Возвращает запрос клиента в теле ответа, позволяя понять, какие изменения произошли на пути от клиента до сервера. Этот метод используется редко из-за риска безопасности.
Пример запроса:
TRACE /users/123

CONNECT
Назначение: Установка туннеля для защищённого соединения, например, через прокси. Чаще всего используется для создания HTTPS-соединений.
Пример запроса:
CONNECT www.example.com:443

Ставь 👍 и 📚
@backendquiz

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

18 Jan, 16:50


🤔 Как можно применять Celery

Это инструмент для выполнения асинхронных задач и управления очередями.
1. Применяется для выполнения фоновых задач, например, отправки писем или обработки данных.
2. Обеспечивает поддержку распределенной архитектуры, масштабируемость и возможность повторного выполнения задач.
@backendquiz

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

18 Jan, 10:51


🤔 Что такое нотация BigO?

Нотация Big O (О-большое) представляет собой математический способ, который используется в информатике для оценки производительности алгоритмов. Она показывает, как время выполнения или объем памяти, который использует алгоритм, изменяется по мере роста объема входных данных. Нотация Big O концентрируется на худшем случае, что позволяет оценить наихудший сценарий работы алгоритма.

🚩 Основные аспекты нотации Big O

🟠 Асимптотический анализ:
Нотация Big O описывает асимптотическое поведение алгоритмов, то есть их поведение при увеличении размера входных данных до бесконечности. Внимание уделяется ведущим слагаемым, а константы и менее значимые слагаемые игнорируются, так как они оказывают меньшее влияние на производительность при больших размерах входных данных.

🟠 Оценка худшего случая:
Нотация Big O демонстрирует наихудший возможный сценарий выполнения алгоритма, обеспечивая надежные гарантии его производительности.

🚩 Основные классы сложности

🟠 O(1) - Константная сложность:
Время выполнения не зависит от размера входных данных. Например, доступ к элементу массива по индексу.
🟠 O(log n) - Логарифмическая сложность:
Время выполнения увеличивается логарифмически с ростом объема входных данных. Например, бинарный поиск.
🟠 O(n) - Линейная сложность:
Время выполнения растет линейно с увеличением размера входных данных. Например, линейный поиск.
🟠 O(n log n) - Линейно-логарифмическая сложность:
Время выполнения растет линейно с логарифмическим множителем. Например, быстрая сортировка или сортировка слиянием.
🟠 O(n^2) - Квадратичная сложность:
Время выполнения пропорционально квадрату размера входных данных. Например, сортировка пузырьком или сортировка вставками.
🟠 O(2^n) - Экспоненциальная сложность:
Время выполнения удваивается с добавлением нового элемента. Например, решение задачи о коммивояжере методом полного перебора.
🟠 O(n!) - Факториальная сложность:
Время выполнения растет факториально с увеличением размера входных данных. Например, полный перебор всех возможных перестановок.

🚩 Примеры использования

1⃣ Поиск и сортировка:
Анализ эффективности различных алгоритмов сортировки (например, быстрая сортировка против сортировки пузырьком).
2⃣ Анализ алгоритмов и структур данных:
Оценка времени доступа, вставки и удаления в различных структурах данных (например, массивы, списки, деревья).
3⃣ Оптимизация программ:
Помощь в выборе наиболее эффективных алгоритмов и структур данных для решения конкретных задач.

Ставь 👍 и 📚
@backendquiz

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

17 Jan, 16:54


🤔 Что такое HTTP и HTTPS

1. HTTP (Протокол передачи гипертекстовой информации): это протокол, который передаёт данные между клиентом и сервером без использования шифрования.
2. HTTPS: это защищённый вариант HTTP, который применяет SSL/TLS для шифрования передаваемых данных.
3. HTTPS гарантирует безопасность, конфиденциальность и подлинность.

Ставь 👍 и 📚
@backendquiz

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

17 Jan, 14:30


🔥 Kotlin: ключ к современным backend-решениям!

Курс «Kotlin Backend Developer. Professional» — всё, что нужно для создания гибких и производительных приложений.

Что вы освоите:

✔️ Работу с Kotlin Multiplatform для JS, JVM, Android, iOS.
✔️ Spring, Ktor, RabbitMQ, Kafka, Postgres.
✔️ Создание архитектуры: монолиты, микросервисы и бессерверные решения.
✔️ Реальные кейсы: разработка стартапа с нуля.

Почему выбирают нас?

✔️ Живые лекции от экспертов топовых компаний.
✔️ Диплом OTUS, который признают крупные работодатели.
✔️ Практика, которая готовит к сложным проектам.

Не упустите шанс!

➡️ Пройдите тестирование и получите скидку: https://clck.ru/3Fo4ba

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

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

17 Jan, 10:56


🤔 Что такое индексы?

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

🚩 Зачем нужны индексы

🟠 Ускорение поиска данных
Основная задача индексов – сокращение времени, необходимого для нахождения записей в таблице. Без индексов базе данных пришлось бы проверять каждую запись для поиска нужной информации.

🟠 Улучшение производительности запросов
Индексы могут значительно повысить эффективность запросов SELECT, особенно тех, которые выполняются часто.

🟠 Сортировка данных
Индексы могут использоваться для ускорения процессов сортировки, так как данные в индексе могут быть отсортированы.

🟠 Уникальность
Индексы также обеспечивают уникальность значений в столбцах. Например, уникальный индекс гарантирует отсутствие повторяющихся значений в столбце.

🚩 Как используются индексы

🟠 Создание индексов
Индексы создаются с помощью SQL-запросов, таких как CREATE INDEX. Можно создавать индексы на один или несколько столбцов (составные индексы).

🟠 Типы индексов
Существует несколько типов индексов, включая B-дерево, хеш-индексы, битмап-индексы и другие. Каждый тип имеет свои особенности и используется в зависимости от конкретных задач.

🟠 Использование индексов в запросах
При выполнении запросов база данных автоматически применяет индексы для оптимизации поиска данных. Это не требует дополнительных действий от пользователя.

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

Ставь 👍 и 📚
@backendquiz

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

17 Jan, 10:55


Нейросети в Telegram: общение и создание изображений без ограничений.
@djakonda_smart_bot
@backendquiz

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

16 Jan, 16:58


🤔 Что можно сказать о хеш-функции

Хеш-функция преобразует данные произвольного размера в фиксированный размер.
1. Она применяется для создания ключей в хеш-таблицах, шифрования информации и проверки целостности данных.
2. Эффективная хеш-функция снижает вероятность коллизий и равномерно распределяет ключи.
@backendquiz

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

16 Jan, 09:59


«Клиент-серверная архитектура на Java» — это серьёзный апгрейд Java-скиллов. Если хочешь разобраться в тонкостях клиент-серверных приложений и не бояться сложных задач — тебе на этот курс!

Курс построен на формате живых вебинаров и домашних заданий с проверкой.

Старт курса - 25 января

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

Программа курса охватывает ключевые аспекты разработки клиент-серверных приложений на Java, включая:

☕️ Многопоточность в Java: изучение классов Thread и Runnable, использование атомарных типов данных, потокобезопасных коллекций и паттерна пула потоков для эффективной синхронизации и оптимизации задач.

🖥 Разработка графических интерфейсов: создание GUI с помощью библиотек Swing и JavaFX, применение архитектуры MVC и разметки на FXML для разработки удобных пользовательских интерфейсов.

🗄 Работа с базами данных: взаимодействие с базами данных через JDBC API, создание запросов, управление метаданными, предотвращение SQL-инъекций и интеграция этих знаний в разработку распределённых веб-приложений на Java с использованием сервлетов и фреймворков, таких как JSF.

Получить демо-доступ к курсу

Реклама. ООО "Инженеркатех" ИНН 9715483673

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

15 Jan, 17:02


🤔 Как функционирует хеш-таблица?

Хеш-таблица применяет хеш-функцию для превращения ключей в индексы массива.
1. При возникновении коллизий используется метод цепочек или открытая адресация.
2. Это позволяет быстро получать доступ к данным со средней сложностью O(1).
@backendquiz

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

15 Jan, 11:03


🤔 Для чего используются асинхронные операции?

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

🚩Методы

🟠Сетевое взаимодействие
HTTP-запросы: Асинхронные HTTP-запросы позволяют приложениям получать данные от веб-серверов, не замедляя работу пользовательского интерфейса. Например, это может быть загрузка данных из API, отправка форм и файлов. WebSockets: Обеспечивают двустороннюю связь между клиентом и сервером в реальном времени. Это используется в чатах, онлайн-играх и других приложениях, где требуется мгновенная передача данных. API-вызовы: Асинхронные вызовы к внешним API позволяют продолжать выполнение других операций, не дожидаясь ответа от сервера.

🟠Ввод/вывод (I/O)
Файловые операции: Асинхронное чтение и запись файлов дают возможность обрабатывать большие объемы данных, не блокируя основной поток выполнения. Работа с базами данных: Асинхронные запросы к базам данных уменьшают время ожидания и повышают масштабируемость приложения.

🟠Фоновые задачи и планирование
Обработка задач в фоне: Выполнение длительных задач, таких как обработка изображений, видео или данных, без блокировки основного потока. Это способствует улучшению пользовательского опыта, так как приложение остается отзывчивым. Периодические задания: Планирование и выполнение задач по расписанию, например, обновление данных, резервное копирование или мониторинг системы.

🟠Пользовательские интерфейсы
Асинхронные события: Обработка событий пользовательского интерфейса (например, нажатие кнопок или ввод данных) асинхронно для повышения отзывчивости приложений. Анимации и переходы: Асинхронное выполнение анимаций и переходов повышает пользовательский опыт благодаря плавности интерфейса.

🟠Обработка потоков данных
Стриминг данных: Асинхронная обработка потоков данных в реальном времени, таких как видео, аудио и данные с датчиков. Это позволяет эффективно управлять непрерывными потоками информации. Реактивное программирование: Асинхронное реагирование на изменения данных и событий. Реактивные системы позволяют обрабатывать данные по мере их поступления, что особенно актуально в приложениях с большим объемом данных.

🟠Обработка и анализ данных
Параллельные вычисления: Разделение больших задач на более мелкие, которые выполняются параллельно. Это улучшает производительность при обработке больших объемов данных или при выполнении сложных вычислений. Машинное обучение: Асинхронное обучение моделей и выполнение предсказаний позволяет эффективно использовать вычислительные ресурсы.

🚩Примеры использования

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

🟠Мобильные приложения
Асинхронные операции обеспечивают плавную работу интерфейса и эффективное использование ресурсов при выполнении сетевых запросов и операций ввода/вывода.

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

🟠Научные вычисления
Параллельное выполнение вычислительных задач и обработка больших объемов данных для повышения эффективности исследований.

Ставь 👍 и 📚
@backendquiz

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

14 Jan, 17:06


🤔 Что такое виртуальное окружение?

Виртуальное окружение позволяет изолировать зависимости проекта, чтобы избежать конфликтов между библиотеками различных приложений.
1. В Python это достигается с помощью venv или virtualenv.
2. Оно обеспечивает независимость пакетов и версий, необходимых для конкретного проекта.
@backendquiz

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

14 Jan, 11:08


🤔 Для чего можно применять Celery?

Celery поддерживает разные брокеры сообщений, такие как RabbitMQ и Redis, для управления очередями задач.

🚩 Основные возможности

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

🟠 Планирование задач
Поддержка периодических и запланированных заданий позволяет автоматизировать повторяющиеся процессы.

🟠 Управление распределёнными системами
Celery может управлять задачами в распределённой системе, используя несколько рабочих узлов для параллельного выполнения задач.

🟠 Масштабируемость
Легко масштабируется, добавляя больше рабочих узлов для повышения производительности.

🚩 Основные задачи

🟠 Фоновые задачи
Отправка электронной почты: Асинхронная отправка писем помогает улучшить производительность веб-приложений.
Обработка данных: Это включает в себя такие задачи, как анализ данных, обработка изображений или видео, преобразование форматов и другие ресурсоемкие операции.
Взаимодействие с API: Выполнение запросов к внешним API, что может быть долгим или неэффективным при синхронном выполнении.

🟠 Периодические задачи
Обновление данных: Регулярное обновление кэшей, индексов поиска или других данных в базе данных.
Мониторинг и сбор метрик: Периодический сбор и обработка метрик для мониторинга состояния системы.
Очистка данных: Периодическая очистка устаревших или временных данных из базы данных.

🟠 Уведомления и оповещения
Уведомления в реальном времени: Отправка уведомлений пользователям через различные каналы (email, SMS, push-уведомления).
Событийное оповещение: Реакция на события и триггеры, такие как изменения в базе данных или действия пользователя.

🟠 Работа с большими данными и машинным обучением
Параллельная обработка данных: Выполнение параллельных вычислений для обработки больших объемов данных.
Машинное обучение: Асинхронное обучение моделей и выполнение предсказаний на больших наборах данных.

🟠 Веб-скрейпинг и интеграция данных
Веб-скрейпинг: Асинхронный сбор данных с веб-сайтов для агрегации или анализа.
Интеграция данных: Асинхронная интеграция данных из различных источников и API.

🚩 Примеры использования

🟠 Веб-приложения
Улучшение производительности веб-приложений за счёт выполнения длительных операций в фоне.

🟠 Электронная коммерция
Обработка заказов, обновление статусов заказов и управление инвентарем в фоновом режиме.

🟠 Социальные сети
Обработка пользовательских данных, отправка уведомлений и обновление лент новостей.

🟠 Научные исследования
Выполнение сложных вычислений и обработка больших объемов данных в распределённой среде.

Ставь 👍 и 📚
@backendquiz

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

13 Jan, 17:10


🤔 Что представляет собой Docker Compose?

Это инструмент для управления приложениями, состоящими из нескольких контейнеров.
1. Он использует файл docker-compose.yml для описания конфигурации сервисов, сетей и томов.
2. Упрощает процесс запуска и координации нескольких контейнеров в одной системе.
@backendquiz

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

13 Jan, 11:10


🤔 Как работает аннотация transactional "под капотом"?

🟠 Создание прокси
Spring находит @Transactional и создает прокси для класса или метода.
🟠 Перехват вызова
Прокси перехватывает вызов метода, который аннотирован @Transactional.
🟠 Начало транзакции
Прокси передает управление TransactionInterceptor, который начинает транзакцию через PlatformTransactionManager.
🟠 Выполнение метода
Исходный метод выполняется.
🟠 Фиксация или откат транзакции
Если метод завершился успешно, транзакция фиксируется (commit). Если метод вызвал исключение, транзакция откатывается (rollback).

Ставь 👍 и 📚
@backendquiz

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

12 Jan, 17:14


🤔 Что такое нормализация?

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

1. Нормализация делится на несколько форм: 1НФ, 2НФ, 3НФ и другие, каждая из которых устраняет определённые виды дублирования данных.

2. Этот процесс способствует уменьшению объёма хранимой информации и улучшению скорости выполнения запросов.
@backendquiz

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

12 Jan, 17:13


🤔 Какие существуют паттерны в объектном проектировании?

🟠 Порождающие паттерны
Обеспечивают создание единственного экземпляра класса.
Factory Method: Создает объекты с помощью метода, не указывая конкретный класс.
Abstract Factory: Создает связанные группы объектов без указания их конкретных классов.
Builder: Постепенно формирует сложный объект.
Prototype: Создает объекты путем клонирования уже существующих экземпляров.

🟠 Структурные паттерны
Adapter: Преобразует интерфейс одного класса в интерфейс, который ожидают клиенты.
Bridge: Разделяет абстракцию и реализацию, позволяя их независимое изменение.
Composite: Структурирует объекты в древовидные структуры для представления иерархий.
Decorator: Динамически добавляет новые функции объектам.
Facade: Предоставляет единый интерфейс для набора интерфейсов подсистемы.
Flyweight: Поддерживает множество мелких объектов, разделяя их состояние.
Proxy: Представляет заменяющий объект, который контролирует доступ к другому объекту.

🟠 Поведенческие паттерны
Chain of Responsibility: Передает запрос по цепочке обработчиков.
Command: Инкапсулирует запрос как объект.
Interpreter: Определяет грамматику языка и интерпретатор для предложений на этом языке.
Iterator: Предоставляет способ последовательного доступа ко всем элементам коллекции.
Mediator: Обеспечивает взаимодействие множества объектов, избегая их прямых ссылок друг на друга.
Memento: Сохраняет и восстанавливает внутреннее состояние объекта.
Observer: Уведомляет зависимые объекты об изменениях состояния.
State: Позволяет объекту изменять свое поведение при изменении внутреннего состояния.
Strategy: Определяет семейство алгоритмов, инкапсулирует их и делает взаимозаменяемыми.
Template Method: Определяет структуру алгоритма в методе, оставляя реализацию шагов подклассам.
Visitor: Позволяет добавлять новые операции к объектам, не изменяя их классы.

Ставь 👍 и 📚
@backendquiz

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

09 Jan, 17:25


🤔 Что такое шардирование?

Шардирование — это способ деления больших объемов данных на более мелкие куски (шарды) для их распределенного хранения и обработки.

1. Каждый шард содержит часть информации и может располагаться на разных серверах.
2. Это способствует увеличению масштабируемости и производительности базы данных.
3. Главная сложность шардирования заключается в управлении распределением данных и в правильной маршрутизации запросов к соответствующим шардам.
@backendquiz

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

09 Jan, 11:25


🤔 Что такое транзакция в базе данных?

Это последовательность одной или нескольких операций с базой данных, которая выполняется как единое целое. Транзакции гарантируют, что все операции в рамках транзакции либо успешно завершатся, либо полностью отменятся, что обеспечивает целостность данных.

🚩Основные свойства транзакций (ACID)

🟠Атомарность
Транзакция должна быть выполнена полностью или не выполнена вовсе. Если какая-либо часть транзакции не удается, вся транзакция откатывается к исходному состоянию.

🟠Согласованность
Транзакция переводит базу данных из одного согласованного состояния в другое. Это означает, что после завершения транзакции все правила целостности данных должны быть выполнены.

🟠Изоляция
Результаты выполнения транзакции не должны быть видны другим параллельно выполняющимся транзакциям, пока данная транзакция не завершится. Это предотвращает влияние одной транзакции на другую.

🟠Устойчивость
После успешного завершения транзакции результаты должны быть зафиксированы в базе данных и сохранены, даже если произойдет сбой системы.

🚩Пример работы с транзакциями

На SQL
BEGIN TRANSACTION;

-- Пример операций внутри транзакции
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;

-- Если все операции прошли успешно
COMMIT;

-- Если произошла ошибка
ROLLBACK;

Пример на Java (использование JDBC)
Connection connection = null;
try {
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "user", "password");
connection.setAutoCommit(false); // Начало транзакции

// Пример операций внутри транзакции
PreparedStatement pstmt1 = connection.prepareStatement("UPDATE accounts SET balance = balance - 100 WHERE account_id = ?");
pstmt1.setInt(1, 1);
pstmt1.executeUpdate();

PreparedStatement pstmt2 = connection.prepareStatement("UPDATE accounts SET balance = balance + 100 WHERE account_id = ?");
pstmt2.setInt(1, 2);
pstmt2.executeUpdate();

connection.commit(); // Коммит транзакции
} catch (SQLException e) {
if (connection != null) {
try {
connection.rollback(); // Откат транзакции при ошибке
} catch (SQLException ex) {
ex.printStackTrace();
}
}
e.printStackTrace();
} finally {
if (connection != null) {
try {
connection.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}

Ставь 👍 и 📚
@backendquiz

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

08 Jan, 17:27


🤔 Какие недостатки есть у индекса?

1. Увеличенные расходы на запись: Индексы могут замедлять операции вставки, удаления и обновления, поскольку нужно обновлять индекс вместе с данными.
2. Затраты памяти: Индексы требуют дополнительного места на диске и в оперативной памяти.
3. Сложность управления: Неправильное использование индексов может ухудшить производительность запросов.
@backendquiz

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

08 Jan, 11:28


🤔 Что такое SOAP?

Это протокол, предназначенный для обмена структурированными сообщениями в распределённых вычислительных системах. Он базируется на XML и применяется для передачи данных между различными приложениями через сеть, зачастую используя протоколы HTTP или SMTP.

🚩Основные характеристики

🟠Протокол на основе XML
SOAP сообщения создаются в формате XML, что обеспечивает независимость от платформы и языка программирования.

🟠Стандартизованное сообщение
SOAP сообщение состоит из обязательных и необязательных компонентов:
Envelope: Определяет начало и конец сообщения.
Header: Опциональный элемент, который содержит метаинформацию о сообщении.
Body: Основное содержание сообщения, включающее данные и команды.
Fault: Опциональный элемент для обработки ошибок.

🟠Транспортные протоколы
Чаще всего используется с HTTP/HTTPS, но также может работать и с другими протоколами, такими как SMTP.

🟠Расширяемость
SOAP легко расширяется, позволяя добавлять дополнительные функции через заголовки и другие элементы.

🟠Независимость от платформы и языка
SOAP может быть использован в любой среде и на любом языке программирования, что обеспечивает высокую совместимость между различными системами.

🚩Плюсы

Независимость от платформы и языка
SOAP может взаимодействовать с любыми системами, которые поддерживают XML и HTTP/SMTP.
Строгое соблюдение стандартов
SOAP основывается на строгих стандартах, что обеспечивает надежность и предсказуемость взаимодействия.
Расширяемость
Легко адаптируется под специфические потребности через расширения и заголовки.
Встроенная обработка ошибок
Использует элемент Fault для детальной обработки и передачи ошибок.
Поддержка сложных операций
Подходит для сложных операций и распределённых транзакций.

🚩Минусы

Сложность
SOAP-сообщения могут быть сложными и громоздкими из-за использования XML.
Производительность
Использование XML увеличивает объем передаваемых данных, что может снизить производительность.
Оверхед
Требует дополнительных ресурсов для обработки и передачи XML-сообщений.

Ставь 👍 и 📚
@backendquiz

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

07 Jan, 17:30


🤔 Что представляет собой нотация Big O?

Это метод описания времени выполнения или потребления памяти алгоритмом в зависимости от размера входных данных.
• Например: O(1) (константное время), O(n) (линейное), O(log n) (логарифмическое).
Она позволяет оценивать эффективность алгоритмов и выбирать наилучший для конкретной задачи.

Ставь 👍 и 📚
@backendquiz

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

07 Jan, 11:31


🤔 Как функционируют индексы?

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

🚩Основные принципы работы индексов

🟠Структура данных
Индексы организованы в специальные структуры данных, такие как B-деревья, B+-деревья или хеш-таблицы. Эти структуры оптимизированы для быстрого поиска, добавления и удаления данных.

🟠Создание индексов
При создании индекса на одном или нескольких столбцах таблицы база данных формирует структуру данных, которая хранит значения этих столбцов в отсортированном порядке вместе с указателями на соответствующие строки таблицы. Это позволяет базе данных быстро находить нужные строки по значению индекса.

🟠Поиск по индексу
Когда выполняется запрос с условиями поиска по индексируемым столбцам, база данных может использовать индекс для быстрого нахождения строк. Вместо полного сканирования таблицы база данных проходит по дереву индекса и быстро находит нужные строки.

🟠Поддержание индексов
Когда данные в таблице изменяются (добавляются новые строки, изменяются или удаляются существующие), индексы также требуют обновления. Это может привести к дополнительным временным затратам на вставку и обновление данных, так как необходимо поддерживать актуальность структуры индекса.

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

🚩Виды индексов

🟠Первичный ключ (Primary Key)
Это уникальный индекс, который не допускает дубликатов и обычно используется для идентификации строк в таблице.

🟠Уникальный индекс (Unique Index)
Обеспечивает уникальность значений в индексируемом столбце, но допускает одно или несколько значений NULL.

🟠Обычный индекс (Non-Unique Index)
Используется для ускорения поиска и может содержать дублирующиеся значения.

🟠Составной индекс (Composite Index)
Индекс, созданный на нескольких столбцах. Полезен, когда запросы часто включают условия на несколько столбцов одновременно.

🟠Кластерный индекс (Clustered Index)
Определяет физический порядок хранения строк в таблице. У таблицы может быть только один кластерный индекс, так как строки могут быть отсортированы только одним способом.

🚩Примеры использования индексов

🟠Поиск и выборка данных
Запросы типа SELECT * FROM users WHERE age > 30 значительно ускоряются, если столбец age индексирован.

🟠Сортировка данных
Запросы типа SELECT * FROM users ORDER BY name будут быстрее, если столбец name индексирован.

🟠Соединение таблиц
Запросы, которые соединяют несколько таблиц по индексируемым столбцам, выполняются быстрее, так как индексы облегчают поиск соответствующих строк.

Ставь 👍 и 📚
@backendquiz

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

06 Jan, 17:34


🤔 Какие основные моменты принципа программирования KISS?

Этот принцип проектирования ориентирован на упрощение кода.
1. Программы должны быть простыми, минималистичными и легко воспринимаемыми.
2. Усложнения следует вводить только при необходимости.
3. Упрощение структуры и логики уменьшает вероятность ошибок и облегчает поддержку.
Этот принцип способствует созданию более надёжного и поддерживаемого кода.

Ставь 👍 и 📚
@backendquiz

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

06 Jan, 11:35


🤔 Какие проблемы могут возникнуть при восстановлении работоспособности системы?

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

🟠Идентификация причины сбоя
Определить корневую причину сбоя может быть трудно в сложных распределённых системах. Ложные сигналы и ошибки усложняют диагностику. Сбой может быть вызван внешним API, в то время как внутренние проблемы маскируют его. Непредсказуемые сбои в сети тоже могут быть проблемой. Используйте инструменты для логирования и мониторинга, такие как ELK Stack или Prometheus, а также внедряйте распределённый трейсинг, например, Jaeger или Zipkin.

🟠Потеря данных
Если данные не были надёжно сохранены, сбой может привести к их потере или непоследовательности. Запрос может быть частично обработан перед сбоем, и транзакция может быть утеряна из-за недоступности базы данных. Используйте механизмы журналирования, такие как write-ahead logging, а также реализуйте стратегии резервного копирования и восстановления. Применяйте идемпотентные операции для повторного выполнения.

🟠Недостаточная автоматизация восстановления
Ручное восстановление занимает много времени и подвержено ошибкам. Сложная последовательность действий для перезапуска зависимых сервисов и зависимость от человеческого фактора при переключении на резервные системы также могут быть проблемами. Автоматизируйте восстановление с помощью оркестрации, таких как Kubernetes или Ansible, и внедряйте механизмы самовосстановления.

🟠Каскадные отказы
Сбой одного компонента может привести к отказу других связанных компонентов. Например, перегрузка базы данных может вызвать сбой приложений, зависящих от неё, а потеря сетевого соединения между узлами может привести к массовой недоступности сервисов. Внедряйте изоляцию между компонентами, используя Circuit Breaker, и применяйте очереди сообщений для асинхронной обработки.

🟠Конфликтующие версии системы
Во время восстановления разные узлы системы могут использовать несовместимые версии программного обеспечения или данных. Это может происходить из-за некорректной миграции базы данных или разных версий микросервисов, что вызывает ошибки при взаимодействии. Используйте механизм версионирования API и схем данных, а также внедряйте "blue-green" или "canary" деплойменты.

🟠Ручные ошибки
Операторы могут допустить ошибки при восстановлении системы, особенно в стрессовых ситуациях. Например, неправильный ввод команд может привести к удалению данных, а неполное восстановление конфигурации после сбоя — к проблемам. Разрабатывайте чёткую документацию и сценарии действий при сбоях, а также используйте инфраструктуру как код для автоматизации настройки среды.

🟠Долгое время восстановления (RTO)
Система может быть недоступна слишком долго, что приводит к значительным убыткам. Это может происходить из-за затянувшегося процесса восстановления базы данных или задержек, связанных с необходимостью ручного вмешательства. Оптимизируйте процессы резервного копирования и восстановления, используя резервные копии с минимальными задержками, например, репликацию данных в режиме реального времени.

🟠Консистентность данных
После восстановления состояние данных может быть неконсистентным между компонентами. Например, пользователь может видеть устаревшие данные после переключения на резервный сервер, или могут возникнуть несогласованные транзакции в распределённых базах данных. Используйте механизмы консенсуса, такие как Raft или Paxos, и внедряйте стратегии "eventual consistency" для распределённых систем.

Ставь 👍 и 📚
@backendquiz

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

05 Jan, 17:37


🤔 Каково определение интерполяции?

Интерполяция — это метод замены значений переменных в строке.
• В JavaScript применяются шаблонные строки с использованием синтаксиса ${expression}.
• В CSS, например, в препроцессорах (Sass), интерполяция дает возможность динамически вставлять значения в свойства.

Ставь 👍 и 📚
@backendquiz

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

05 Jan, 11:38


🤔 Как можно проверить, насколько система устойчива к сбоям?

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

🚩Основные методы тестирования отказоустойчивости

🟠Инъекция отказов
Этот подход заключается в умышленном создании сбоев в системе для проверки её реакции. Используются специальные инструменты или ручные действия для моделирования отказов.
Например: недоступность узла, потеря сети или задержка, перегрузка памяти или процессора.

🟠Тестирование под высокой нагрузкой
Создаётся нагрузка, превышающая обычный уровень работы, чтобы определить, какие компоненты начинают давать сбой.
Например: увеличение числа запросов к API, уменьшение доступных системных ресурсов.

🟠Тестирование восстановления
Оценивается, насколько быстро и эффективно система может восстановиться после сбоя.
Например: перезапуск сервисов, переключение на резервные копии данных.

🟠Тестирование с изоляцией
Моделируются случайные сбои в производственной среде или её имитации для изучения поведения системы.
Пример: Chaos Monkey от Netflix.

🚩Что необходимо тестировать для проверки отказоустойчивости?

🟠Сетевые сбои
Потеря соединения между сервисами, высокая задержка или нестабильность сети.

🟠Сбой аппаратного обеспечения
Отключение сервера, отказ жёсткого диска или уменьшение доступной памяти.

🟠Сбои программного обеспечения
Непредвиденные ошибки в коде, утечки памяти или перегрузка из-за неэффективных алгоритмов.

🟠Перегрузка системы
Резкий рост числа пользователей или увеличение объёма входящих данных.

🟠Проблемы с внешними зависимостями
Недоступность внешних API или сервисов и непредсказуемое поведение внешних систем.

🚩Методы проведения тестов

🟠Симуляция отказов вручную
Включает выключение серверов, уменьшение доступной памяти или отключение сети.

🟠Использование инструментов для тестирования отказов
Chaos Monkey генерирует случайные сбои в продакшене, Gremlin моделирует различные виды отказов, Toxiproxy помогает симулировать проблемы с сетью, а Fault Injection Tool моделирует аппаратные и программные сбои.

🟠Эмуляция перегрузки
Используются инструменты для нагрузочного тестирования, такие как JMeter или Locust, для создания высокой нагрузки.

🟠Тестирование сценариев восстановления
Проверяется работа механизмов восстановления через ручное или автоматическое отключение сервисов.

🚩Ключевые показатели эффективности отказоустойчивости

🟠Время простоя
Как долго система остаётся недоступной после сбоя?

🟠Время восстановления
За сколько времени система восстанавливает свою работоспособность?

🟠Потеря данных
Какой объём данных теряется при сбоях?

🟠Стабильность после восстановления
Система возвращается в нормальное состояние или остаётся уязвимой?

🚩Советы по тестированию отказоустойчивости

🟠Тестируйте на всех уровнях
От отдельных компонентов до всей системы.

🟠Автоматизируйте тесты
Регулярно выполняйте сценарии отказа.

🟠Начинайте с изолированной среды
Минимизируйте риски в продакшене.

🟠Проводите тесты в реальных условиях
Только в зрелой системе для получения точных результатов.

🟠Документируйте результаты
Для анализа и улучшения системы.

Ставь 👍 и 📚
@backendquiz

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

04 Jan, 17:41


🤔 Что такое миксины?

Это способ повторного использования кода, который позволяет добавлять функции или свойства в классы или объекты.
• В CSS миксины представляют собой наборы стилей, которые можно использовать повторно.
• В JavaScript миксины реализуются путем передачи методов или функциональности между объектами.
Миксины помогают избежать дублирования кода и добавляют новые возможности.

Ставь 👍 и 📚
@backendquiz

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

04 Jan, 11:42


🤔 Основные проблемы при удалённом вызове процедур (RPC)

Удалённый вызов процедур (Remote Procedure Call, RPC) используется для взаимодействия между частями распределённой системы, позволяя одной системе вызывать функции, реализованные в другой. Хотя это удобно, RPC имеет ряд проблем, связанных с особенностями распределённых систем, сетевыми взаимодействиями и управлением состоянием.

🟠Ненадёжность сети
В отличие от локальных вызовов, удалённые зависят от сети, которая может быть ненадёжной. Пакеты могут теряться, задерживаться или приходить в неправильном порядке. Вызовы могут завершаться с таймаутами или зависать. Сложно восстанавливать связь после сетевых сбоев. Необходимо использовать повторные попытки с экспоненциальной задержкой. Системы должны быть спроектированы так, чтобы выдерживать временные сбои.

🟠Задержки
RPC неизбежно добавляет задержку из-за времени передачи данных по сети и обработки сообщений. Это может снизить производительность системы, особенно при большом количестве вызовов. Рекомендуется минимизировать количество RPC-вызовов, объединяя данные в пакеты, и использовать кеширование на стороне клиента.

🟠Сериализация и десериализация данных
Передача данных между системами требует их преобразования в формат, понятный обеим сторонам (например, JSON или Protobuf). Это может вызвать потерю производительности из-за дополнительной обработки и потенциальные ошибки преобразования из-за несовместимости форматов. Лучше использовать оптимальные протоколы сериализации, такие как Protobuf, который быстрее и компактнее, чем JSON. Также стоит тестировать совместимость форматов при изменении контрактов.

🟠Совместимость API
Изменение интерфейса RPC-сервиса, например, добавление новых параметров, может нарушить работу существующих клиентов. Это может привести к поломке системы из-за несовместимости старых клиентов с новым API. Рекомендуется применять версионирование API и использовать изменения, совместимые с предыдущими версиями, например, добавляя необязательные поля.

🟠Отсутствие атомарности
RPC вызывает функции в удалённой системе, где их выполнение не является атомарным. Это может привести к частичному выполнению операций и неконсистентности данных. Следует использовать механизмы транзакций, например, паттерн Saga для распределённых систем.

🟠Тайм-ауты и управление сбоями
Клиенты не могут точно знать, завершился ли удалённый вызов, если произошёл тайм-аут. Это может привести к повторению запроса и дублированию операций. Рекомендуется использовать идемпотентные операции и устанавливать чёткие тайм-ауты, а также информировать клиента о статусе.

🟠Сложность отладки
Отладка RPC сложнее из-за распределённого характера системы. Сложно отслеживать вызовы между сервисами и находить причины ошибок. Рекомендуется использовать распределённые трейсинг-системы, такие как Jaeger или Zipkin.

🟠Безопасность
RPC вызывает удалённые функции, которые могут быть подвержены атакам злоумышленников. Это может привести к утечке данных или несанкционированному выполнению операций. Необходимо использовать шифрование, например, TLS, а также применять аутентификацию и авторизацию, например, с использованием OAuth или JWT.

🟠Проблемы масштабирования
С увеличением нагрузки возрастает число RPC-вызовов, что может перегружать сервис и приводить к его замедлению или отказу. Рекомендуется использовать балансировку нагрузки и проектировать системы с учётом горизонтального масштабирования.

🟠Сильная связанность компонентов
RPC может сделать систему слишком зависимой, так как компоненты напрямую зависят от вызовов друг друга. Это усложняет изменения и тестирование. Рекомендуется применять более слабую связанность, например, через событийно-ориентированную архитектуру или очереди сообщений.

Ставь 👍 и 📚
@backendquiz

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

03 Jan, 17:44


🤔 Как функционирует браузер?

1. Обработка запроса: браузер отправляет HTTP-запрос к серверу для получения HTML-страницы.
2. Парсинг HTML: полученный код анализируется, создаётся DOM-дерево, которое описывает структуру страницы.
3. Загрузка ресурсов: CSS, JavaScript и изображения загружаются асинхронно. CSS формирует CSSOM (модель стилей), объединяясь с DOM.
4. Рендеринг: DOM и CSSOM объединяются в Render Tree, и браузер отображает страницу, выполняя раскладку и отрисовку.
5. JavaScript: выполняется на этапе рендеринга или после загрузки страницы, обновляя DOM.

Ставь 👍 и 📚
@backendquiz

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

03 Jan, 11:45


🤔 Как событийно-ориентированная архитектура способствует улучшению масштабируемости?

Событийно-ориентированная архитектура (EDA) повышает масштабируемость благодаря асинхронному и независимому взаимодействию между компонентами системы. Главный принцип EDA заключается в использовании событий в качестве триггеров для выполнения задач, что исключает прямую зависимость между инициатором события и его обработчиками. Это позволяет системе более гибко реагировать на увеличение нагрузки и распределять её между различными частями системы.

🚩Основные причины повышения масштабируемости в EDA

🟠Асинхронность взаимодействия
В событийно-ориентированной архитектуре компоненты взаимодействуют через обмен сообщениями (событиями) без необходимости ожидания ответа. Это уменьшает блокировки, позволяет эффективно использовать ресурсы и масштабировать каждый компонент независимо. Если пользователь инициирует действие, например, загрузку файла, событие помещается в очередь. Обработка события выполняется в отдельном потоке или сервисе, что позволяет одновременно обрабатывать множество запросов.

🟠Разделение ответственности
EDA основывается на слабой связанности компонентов: каждый сервис отвечает только за обработку определённых событий. Компоненты могут масштабироваться автономно, не влияя на другие части системы. Если в системе интернет-магазина одновременно увеличивается количество заказов и запросов аналитики, можно масштабировать сервис обработки заказов независимо от аналитического сервиса.

🟠Использование очередей и брокеров сообщений
События отправляются в очереди сообщений или брокеры (Kafka, RabbitMQ, AWS SNS/SQS), которые служат посредниками между производителями и потребителями событий. Это позволяет сглаживать пики нагрузки и временно сохранять события до их обработки, что улучшает масштабируемость. Если нагрузка на обработку возрастает, можно просто добавить больше обработчиков событий, не изменяя остальную часть системы.

🟠Поддержка горизонтального масштабирования
Сервисы, реагирующие на события, могут легко клонироваться (горизонтально масштабироваться) для увеличения пропускной способности системы. Видеохостинг может масштабировать сервисы обработки видео, чтобы справляться с возросшим количеством загрузок.

🟠События как единицы данных
В EDA события представляют собой чётко определённые сообщения, передающие состояние системы. Это упрощает добавление новых компонентов без изменения существующих. Новые компоненты могут подписываться на события и обрабатывать их, не нарушая текущую логику системы. Аналитическая система может быть подключена для обработки событий о действиях пользователей без необходимости вмешательства в код основной системы.

🟠Гибкость при высокой нагрузке
При внезапных всплесках трафика (например, во время распродаж) EDA позволяет накапливать события в очередях до тех пор, пока они не будут обработаны. Это снижает риск отказа системы под нагрузкой. Если сервис обработки платежей перегружен, события транзакций могут временно оставаться в очереди, чтобы быть обработанными позже.

🟠Интеграция с распределёнными системами
EDA хорошо подходит для распределённых систем, так как её архитектура учитывает разнообразие компонентов. Каждый компонент функционирует автономно, что облегчает их масштабирование и развёртывание в различных средах.

Ставь 👍 и 📚
@backendquiz

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

02 Jan, 17:46


🤔 Какие существуют типы JOIN?

1. INNER JOIN: возвращает строки, которые совпадают в обеих таблицах.
2. LEFT JOIN: возвращает все строки из левой таблицы и соответствующие строки из правой.
3. RIGHT JOIN: возвращает все строки из правой таблицы и соответствующие строки из левой.
4. FULL OUTER JOIN: объединяет все строки из обеих таблиц, заполняя отсутствующие значения NULL.
5. CROSS JOIN: возвращает декартово произведение строк двух таблиц.
6. SELF JOIN: соединяет таблицу с самой собой.

Ставь 👍 и 📚
@backendquiz

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

01 Jan, 17:50


🤔 Что такое транзакция?

Это серия операций с базой данных, которые выполняются как одно целое. Она должна соответствовать принципам ACID: атомарности, согласованности, изолированности и долговечности. Транзакции помогают поддерживать целостность данных даже при возникновении сбоев.

Ставь 👍 и 📚
@backendquiz

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

01 Jan, 11:52


🤔 Что такое Request/Reply и Publish/Subscribe?

Это два различных способа обмена сообщениями между частями распределённых систем. Они отличаются архитектурными принципами, целями и методами взаимодействия между отправителями и получателями.

🚩Request/Reply (Запрос/Ответ)

Это модель коммуникации, при которой один компонент системы отправляет запрос другому компоненту и ждёт ответа.

🟠Синхронность
Обычно предполагает синхронное взаимодействие, при котором отправитель ждёт ответа.
🟠Точечное взаимодействие
Один запрос адресован конкретному получателю.
🟠Идентификация корреляции
Для обработки ответа отправитель использует корреляционный идентификатор, чтобы сопоставить его с исходным запросом.

🚩Плюсы и минусы

Простота реализации.
Подходит для задач, где нужен немедленный результат (например, запрос данных из базы).
Уязвимость к задержкам (если один из компонентов медленный, это замедляет всю систему).
Меньшая масштабируемость из-за зависимости от синхронности.

🚩Publish/Subscribe (Публикация/Подписка)

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

🟠Асинхронность
Публикация сообщений и их получение подписчиками происходят независимо.
🟠Множественные подписчики
Сообщение может быть отправлено нескольким подписчикам одновременно.
🟠Темы или каналы
Публикация осуществляется в рамках определённых тем или каналов, а подписчики получают только интересующие их сообщения.

🚩Плюсы и минусы

Высокая масштабируемость.
Уменьшение связности компонентов (компоненты не знают друг о друге напрямую).
Асинхронность, позволяющая более эффективно использовать ресурсы.
Сложнее отлаживать из-за асинхронного характера.
Отсутствие гарантий доставки сообщений без дополнительных механизмов (в зависимости от реализации).

Ставь 👍 и 📚
@backendquiz

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

31 Dec, 17:55


🤔 Что такое Docker?

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

Ставь 👍 и 📚
@backendquiz

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

31 Dec, 11:56


🤔 Почему значение null считается ошибкой?

Значение null в программировании считается ошибкой, так как оно часто приводит к непредсказуемым проблемам, которые трудно отладить и исправить. Его использование стало настолько проблематичным, что создатель null — Тони Хоар — назвал это "миллиардной ошибкой" из-за множества вызванных ею проблем и уязвимостей.

🚩 Почему `null` считается ошибкой?

🟠 Проблема отсутствия значения
null обозначает "отсутствие значения", но концепция "пустоты" вносит неоднозначность в код. Например: "Отсутствует ли значение из-за ошибки или это нормальное поведение?".

🟠 Ошибки времени выполнения (NullPointerException)
Попытка вызвать метод или обратиться к полю объекта, который равен null, приводит к исключению, например, NullPointerException в Java или TypeError в JavaScript. Эти ошибки трудно предсказать на этапе компиляции, и они часто приводят к сбоям программы.

String name = null;
int length = name.length(); // NullPointerException

🟠 Затруднённая отладка
Ошибки, связанные с null, часто проявляются в неожиданных местах, что делает их сложными для поиска. Программисты тратят много времени на отладку, чтобы выяснить, откуда произошло значение null.

🟠 Повышенная вероятность ошибок
Каждый раз, когда переменная может быть null, программист должен явно проверять её наличие перед использованием. Это делает код многословным и менее понятным. Плохой код:
if (user != null && user.getAddress() != null) {
String city = user.getAddress().getCity();
}

🟠 Нарушение семантики типов
null не соответствует типу, описывающему переменную. Например, если переменная типа String равна null, значит, в ней фактически нет строки. Это нарушает типобезопасность и вносит неявное поведение в программу.

🟠 Неопределённость и ошибки логики
Часто null используется для обозначения нескольких состояний одновременно: "значение не инициализировано", "значение отсутствует" или "ошибка при получении данных". Это приводит к логическим ошибкам и неоднозначности.

🟠 Проблемы в многопоточных приложениях
Если несколько потоков работают с общим объектом, и один из них устанавливает его в null, то другие потоки могут столкнуться с ошибками времени выполнения.

🟠 Усложнение кода
Из-за потенциального наличия null разработчикам необходимо добавлять дополнительные проверки, чтобы избежать ошибок. Это делает код менее чистым и увеличивает вероятность пропустить проверку.

🚩 Альтернативы значению null

🟠 Optional-объекты
В Java, Kotlin и других языках существуют Optional (или аналоги), которые явно представляют "наличие или отсутствие значения". Это заставляет разработчика явно обрабатывать "пустое" состояние.
Optional name = Optional.ofNullable(user.getName());
name.ifPresent(System.out::println);

🟠 Монады (Maybe/Option)
В функциональных языках (Haskell, Scala) применяются монады Maybe/Option, которые безопасно обрабатывают отсутствие значения.

🟠 Инициализация значений по умолчанию
Вместо использования null можно задавать значения по умолчанию, такие как пустая строка "" или 0 для чисел.

🟠 Null Object Pattern
Это шаблон проектирования, при котором вместо null используется специальный "пустой объект", обладающий предсказуемым поведением. Например, вместо null можно вернуть объект с "пустыми" методами.
class NullUser extends User {
@Override
public String getName() {
return "Unknown User";
}
}

🟠 Языки с безопасной обработкой
В Kotlin и Swift типы разделяются на nullable и non-nullable. Компилятор требует от разработчика обрабатывать потенциальный null.
val name: String? = null // nullable
println(name?.length) // Безопасный вызов

Ставь 👍 и 📚
@backendquiz

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

30 Dec, 17:59


🤔 Какие виды HTTP запросов ты знаешь? В чем их различия?

1. GET: запрашивает информацию с сервера, не изменяя ее.
2. POST: отправляет данные на сервер для создания нового ресурса.
3. PUT: обновляет или заменяет существующие данные, а также может создать новый ресурс.
4. DELETE: удаляет ресурс с сервера.
5. PATCH: вносит частичные изменения в ресурс.
6. OPTIONS: предоставляет информацию о доступных методах для данного ресурса.

Ставь 👍 и 📚
@backendquiz

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

30 Dec, 12:00


🤔 В чём заключается отличие между параллелизмом и многопоточностью?

Это два различных, но связанных понятия, которые часто применяются в контексте выполнения задач в программировании. Хотя они могут показаться похожими, их цели, принципы и области применения отличаются.

🚩Определения

🟠Параллелизм
Это одновременное выполнение нескольких задач или частей задачи на нескольких процессорных ядрах или машинах. Это подразумевает физический параллельный запуск операций. Например, выполнение двух различных операций одновременно на двух ядрах процессора. Параллелизм направлен на повышение производительности программы за счёт разделения работы.

🟠Многопоточность
Это метод, при котором одна программа делится на несколько потоков, работающих псевдопараллельно (по очереди или параллельно, в зависимости от числа ядер процессора). Потоки работают в рамках одного процесса и используют общую память. Многопоточность позволяет эффективно применять ресурсы процессора при переключении между задачами. Она часто используется для работы с I/O-операциями, где потоки могут ожидать данные и не блокировать выполнение программы.

🚩Детальное сравнение

🟠Физическое vs логическое выполнение
Параллелизм использует физическую многозадачность, когда задачи выполняются одновременно на разных ядрах процессора или разных машинах. Многопоточность может использовать псевдопараллельность: потоки переключаются на одном ядре процессора (с помощью планировщика ОС) или действительно работают параллельно на нескольких ядрах.

🟠Использование ресурсов
В параллелизме ресурсы распределяются между несколькими задачами (например, вычисления на CPU). В многопоточности потоки могут совместно использовать общую память и другие ресурсы одного процесса.

🟠Типы задач
Для параллелизма подходят задачи, которые можно разделить на независимые подзадачи, выполняющиеся одновременно (например, обработка данных в больших системах или рендеринг видео). Многопоточность лучше подходит для задач, которые требуют ожидания ввода/вывода или требуют выполнения нескольких задач в рамках одного приложения (например, интерфейс пользователя и фоновый процесс).

🟠Пример на практике
Параллелизм: Видеокодирование, где каждый кадр обрабатывается на различных ядрах процессора одновременно. Многопоточность: Веб-сервер, который одновременно обрабатывает несколько пользовательских запросов, используя потоки.

🚩Параллелизм и многопоточность вместе

Многопоточность может использоваться для достижения параллелизма при наличии нескольких процессорных ядер. Например, если у программы несколько потоков и у компьютера два ядра, операционная система может распределить потоки на разные ядра, что создаст параллельное выполнение. Если же у процессора одно ядро, потоки будут псевдопараллельными, так как процессор будет быстро переключаться между ними.

🚩Примеры из жизни

🟠Параллелизм
Несколько поваров готовят разные блюда на отдельных кухонных станциях одновременно. Распределённые вычисления: большая задача разбивается и выполняется на нескольких серверах.
🟠Многопоточность
Один человек (процессор) выполняет несколько задач по очереди: ставит суп вариться, затем режет салат, затем проверяет суп. Псевдопараллельность: даже если задачи не выполняются одновременно, переключение между ними создаёт иллюзию многозадачности.

Ставь 👍 и 📚
@backendquiz

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

29 Dec, 18:03


🤔 Какие существуют коды ответов HTTP?

1. 1xx (Информационные): сообщения о процессе запроса (например, 100 Continue).
2. 2xx (Успех): успешное завершение запроса (например, 200 OK, 201 Created).
3. 3xx (Перенаправления): требуется дополнительное действие от клиента (например, 301 Moved Permanently, 302 Found).
4. 4xx (Ошибки клиента): проблемы с запросом (например, 400 Bad Request, 401 Unauthorized, 404 Not Found).
5. 5xx (Ошибки сервера): проблемы на стороне сервера (например, 500 Internal Server Error, 503 Service Unavailable).
@backendquiz

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

29 Dec, 12:04


🤔 Что такое переполнение стека?

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

🚩 Что такое стек?

Это структура данных, которая работает по принципу LIFO (последним пришёл — первым вышел). В контексте выполнения программ стек используется для хранения:
🟠 Адресов возврата функций при их вызовах.
🟠 Локальных переменных и параметров функции.
🟠 Информации о контексте выполнения программы.

🚩 Причины переполнения стека

🟠 Бесконечная рекурсия
Если функция вызывает саму себя бесконечно, не имея условия для завершения, стек будет заполняться до тех пор, пока не исчерпает выделенную память. Функция рекурсивно вызывает саму себя без выхода.

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

🟠 Выделение больших локальных переменных
Стек имеет ограниченный размер, поэтому выделение больших структур или массивов как локальных переменных может быстро исчерпать стек. Пример: создание большого массива как локальной переменной внутри функции.

🟠 Ошибка в циклических вызовах
Несколько функций могут бесконечно вызывать друг друга, что приводит к быстрому переполнению стека.

🚩 Признаки и последствия переполнения стека

🟠 Ошибка времени выполнения
В большинстве языков программирования возникает ошибка StackOverflowError или подобная. В C/C++ это может вызвать сегментационный сбой. В Java, Python и других языках будет выброшено исключение о переполнении стека.

🟠 Сбой программы
Программа аварийно завершает работу из-за невозможности выделить дополнительное пространство для стека.

🟠 Отсутствие видимых симптомов
В некоторых системах переполнение стека может привести к непредсказуемому поведению программы, включая повреждение данных или утечку памяти.

🚩 Как избежать переполнения стека?

🟠 Использование правильной рекурсии
Убедитесь, что рекурсивные функции имеют условие завершения. Для глубокой рекурсии можно применять хвостовую рекурсию, которая оптимизируется компилятором в некоторых языках.

🟠 Использование циклов вместо рекурсии
Если это возможно, заменяйте рекурсивные вызовы итеративными циклами, чтобы избежать глубокой стека вызовов.

🟠 Динамическое выделение памяти
Для больших структур данных используйте кучу вместо стека для выделения памяти, так как она имеет больший объём доступного пространства.

🟠 Контроль размера стека
В некоторых языках можно увеличить размер стека через настройки среды выполнения или компилятора. Например, в C/C++ можно задать размер стека с помощью опций компиляции. В Java размер стека можно увеличить с помощью параметра -Xss.

🟠 Анализ кода
Используйте анализаторы статического кода и профилировщики, чтобы выявить функции, которые вызывают избыточную глубину стека.

🟠 Оптимизация локальных переменных
Старайтесь избегать больших локальных переменных или структур, выделяя их в куче.

Ставь 👍 и 📚
@backendquiz

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

28 Dec, 18:07


🤔 Что означает "сложность алгоритма"?

Это характеристика, которая показывает, как изменяются ресурсы (время или память), необходимые для выполнения алгоритма, в зависимости от объема входных данных.
• Временная сложность оценивает количество операций (например, O(n), O(log n)).
• Пространственная сложность определяет объем памяти, необходимый для работы алгоритма.
Сложность помогает сравнивать эффективность различных алгоритмов.

Ставь 👍 и 📚
@backendquiz

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

28 Dec, 12:08


🤔 Какие преимущества и недостатки имеют изменяемые и неизменяемые значения?

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

🚩Определения

🟠Изменяемые значения (Mutable)
Это значения или структуры данных, которые могут быть изменены после их создания. Например, массивы, списки и словари в Python или объекты в Java.
🟠Неизменяемые значения (Immutable)
Это значения или структуры данных, которые не могут быть изменены после их создания. Любое изменение приводит к созданию нового объекта. Примеры: строки (string) и кортежи в Python, объекты String в Java или const в некоторых языках программирования.

🚩Плюсы и минусы изменяемых

Эффективное использование памяти
Поскольку изменяемые объекты обновляются "на месте", нет необходимости создавать новые копии объекта, что экономит память.

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

Гибкость
Изменяемые объекты более удобны для задач, которые требуют частых модификаций, таких как добавление или удаление элементов.

Простота записи
Код с изменяемыми объектами часто выглядит проще и понятнее для операций обновления значений.

Неожиданное поведение (побочные эффекты)
При передаче изменяемых объектов между функциями или частями программы их изменение в одном месте может непредсказуемо повлиять на другие части кода.

Сложность отладки
Из-за изменения значений "на месте" сложнее отследить, где именно произошло изменение объекта.

Проблемы в многопоточных программах
Одновременные изменения одного и того же объекта в разных потоках могут привести к состояниям гонки (race conditions) и другим ошибкам. Это требует дополнительной синхронизации.

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

🚩Плюсы и минусы неизменяемых

Безопасность и предсказуемость
Неизменяемые значения гарантируют, что данные не изменятся после создания. Это снижает вероятность непредсказуемых ошибок и упрощает отладку.

Потокобезопасность (Thread Safety)
Неизменяемые объекты безопасны для многопоточного программирования, так как их состояние не может быть изменено после создания. Это устраняет проблемы синхронизации.

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

История изменений и откаты
Благодаря неизменяемости можно сохранять "снимки" состояния программы, что полезно для версирования данных, откатов и реализации функции отмены/возврата.

Оптимизация в компиляторах и кэшировании
Неизменяемые объекты могут кэшироваться и повторно использоваться компилятором или средой выполнения, что повышает производительность.

Накладные расходы по памяти
При каждом изменении неизменяемого объекта создаётся новая копия, что может привести к большому расходу памяти, особенно при работе с большими данными.

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

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

Усложнение кода
Код, работающий с неизменяемыми объектами, может выглядеть более громоздким из-за необходимости создания новых копий при каждом изменении.

Ставь 👍 и 📚
@backendquiz

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

27 Dec, 18:11


🤔 Что представляет собой Git-flow?

Это метод работы с ветками в Git, который структурирует процесс разработки и выпуска. Он включает в себя основные ветки: main (или master), develop, а также временные ветки для новых функций (feature), исправлений (hotfix) и релизов (release). Git-flow облегчает управление разработкой, одновременной работой и циклом релизов.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 (https://t.me/easy_c_sharp/380)
@backendquiz

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

27 Nov, 09:46


👩‍💻 Хотите стать востребованным Java-разработчиком, освоить Spring и выйти на новый уровень в карьере и доходе?

Обучение на курсе «Разработчик на Spring Framework» — ваш шанс прокачаться и выйти на более серьёзные проекты!

✔️ Вы освоите Spring Boot, Spring MVC, Spring Security и ещё большое количество технологий.
✔️ Оттачивайте навыки на практике — каждое домашнее задание превратится в полноценное приложение!
✔️ У нас практикующие эксперты, живые лекции и проектный подход — всё, что сделает из вас сильного специалиста.

Станьте профессионалом, который уверенно работает с микросервисной архитектурой, быстро доносит идеи до production-grade и владеет Spring на уровне, который ценят в топовых компаниях. Диплом OTUS откроет вам двери к новым возможностям и амбициозным проектам.

🎁 В "Черную пятницу", скидки на курс до 15%! Подробности у менеджеров.

➡️ Последний шанс попасть в этот набор! Пройдите короткий тест и получите скидку: https://clck.ru/3Erjjs

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

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

16 Nov, 08:45


📶 Открытый урок «Инструменты для выгрузки данных»

🗓 21 ноября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Data Engineer» от Otus.

На вебинаре:

✔️разберем существующие инструменты для переливки больших наборов данных;
✔️ сформулируем основные требования к ним;
✔️ изучим их работу на практике и сравним.

🔗 Ссылка на регистрацию: https://clck.ru/3Ecs7R

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

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

12 Nov, 14:28


👩‍💻 Открытый урок «Интернационализация и локализация в приложениях Spring»

🗓 25 ноября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Разработчик на Spring Framework» от Otus.

Узнайте, как эффективно реализовать интернационализацию и локализацию в Spring-приложениях.

На вебинаре разберем:

✔️работу с классом Locale, использование MessageSource в Spring Boot и без него;
✔️ способы хранения и смены локали в веб-приложениях;
✔️ локализацию в шаблонах Thymeleaf и сообщений Bean Validation;
✔️ обсудим, почему не стоит локализовывать исключения;
✔️ проанализируем исходный код для лучшего понимания процессов.

🔗 Ссылка на регистрацию: https://clck.ru/3EYxbi

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

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

24 Oct, 10:17


⁉️Хотите повысить свою квалификацию в php-разработке?

🐘 Инвестируйте в успех своей карьеры прямо сейчас!
На курсе «PHP Developer. Professional» вы получите:

✔️ Инфраструктура — Docker, виртуальные машины, облака, сетевое взаимодействие, обеспечение безопасности приложения, Composer, управление зависимостями, очереди и построение асинхронного взаимодействия.
✔️ Хранилище — PostgreSQL, MySQL, NoSQL (Clickhouse, ElasticSearch) и взаимодействие PHP с различными типами хранилищ.
✔️ Тестирование — не только unit-тесты, но и покрытие тестами всех слоёв приложения

➡️ Пройдите короткий тест прямо сейчас, чтобы получить специальную цену на обучение: https://clck.ru/3EAB34

🎁 А еще приятный бонус: до конца октября действует скидка 10% на обучение.

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

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

23 Oct, 09:00


Прими участие в «Хакатоне по разработке кибериммунных технологий 3.0» от «Лаборатории Касперского» с призовым фондом 1 000 000 рублей!

Регистрация на хакатон открыта до 15 ноября: https://cnrlink.com/cyberimmunehack3bkquiz

Приглашаем разработчиков, аналитиков, архитекторов ПО, экспертов по информационной безопасности и студентов программирования и кибербезопасности. Участвуй индивидуально или в команде до 5 человек.

Тебе предстоит разработать систему удалённого управления автомобилем для каршеринга, устойчивую к кибератакам. Специальных знаний в автомобильной отрасли не требуется — задача будет понятна всем, независимо от опыта.

Это твой шанс прокачать навыки в кибербезопасности и пообщаться с экспертами «Лаборатории Касперского».

Ключевые даты:
• 15 октября – 15 ноября – регистрация участников
• 8 ноября – митап с экспертами и игра «Огнеборец»
• 15 ноября – старт хакатона
• 17 ноября – дедлайн загрузки решений
• 22 ноября – подведение итогов и объявление победителей

Регистрируйся, прояви себя и внеси вклад в безопасность каршеринговых сервисов: https://cnrlink.com/cyberimmunehack3bkquiz

Реклама. АО «Лаборатория Касперского». ИНН 7713140469. erid: LjN8KFTSn

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

22 Oct, 13:34


Laravel - ключ к успешной карьере PHP-разработчика!

🦾 Пройди тест по Laravel! 🦾

➡️ Проверь себя и свои знания. Сможешь сдать — пройдёшь на продвинутый курс "Framework Laravel" от OTUS по специальной цене.

👩‍💻 Присоединяйся к новому потоку онлайн-курса «Framework Laravel» в OTUS. В программе курса — удобные и мощные наработки огромного Laravel-сообщества, а практика — решение бизнес-задач.

👨‍💻 За 3 месяца обучения твое портфолио пополнится мини-проектами и выпускной работой.

Приятный бонус Курс можно приобрести в рассрочку и без переплаты

👉 ПРОЙТИ ТЕСТ

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

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

17 Oct, 10:47


🐘 Что нового в PHP 8.4 и как это повлияет на вашу работу?

Приглашаем на открытый урок

🗓 23 октября в 20:00 МСК

🆓 Бесплатно. Урок в рамках старта курса «PHP Developer. Professional»

На вебинаре разберем:

- какие нововведения появятся в PHP 8.4;
- как эти изменения повлияют на вашу работу;
- какие новые функции и улучшения ждут разработчиков.

Спикер Александр Пряхин — технический руководитель юнита в Авито, ITIL4 Certified.

Все участники вебинара получат специальную цену на обучение!

🔗 Ссылка на регистрацию: https://clck.ru/3Dy67P

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

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

16 Oct, 07:33


🔔 Хотите узнать, как Service Mesh и Istio могут улучшить управление трафиком и безопасность ваших микросервисов?

Ждем вас на открытом вебинаре 21 октября в 20:00 мск, где мы разберем:

- что такое Service Mesh и его значение в современной разработке ПО;
- основные функции и возможности Istio;
- как установить Istio в кластер Kubernetes и настроить базовые политики управления трафиком.

⌨️ Урок для DevOps-инженеров, системных администраторов, Backend-разработчиков и архитекторов программного обеспечения.

Встречаемся в преддверии старта курса «Инфраструктурная платформа на основе Kubernetes». Все участники вебинара получат специальную цену на обучение!

➡️ Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://clck.ru/3Dx8Cg

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

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

15 Oct, 13:05


Laravel - ключ к успешной карьере PHP-разработчика!

🦾 Пройди тест по Laravel! 🦾

➡️ Проверь себя и свои знания. Сможешь сдать — пройдёшь на продвинутый курс "Framework Laravel" от OTUS по специальной цене.

👩‍💻 Присоединяйся к новому потоку онлайн-курса «Framework Laravel» в OTUS. В программе курса — удобные и мощные наработки огромного Laravel-сообщества, а практика — решение бизнес-задач.

👨‍💻 За 3 месяца обучения твое портфолио пополнится мини-проектами и выпускной работой.

Приятный бонус Курс можно приобрести в рассрочку и без переплаты

👉 ПРОЙТИ ТЕСТ

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

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

14 Oct, 10:05


Работаете в облачных средах? А хотите узнать, как пользоваться Prometheus в Kubernetes, чтобы собирать метрики для мониторинга?

👨‍💻🛠👨🏻‍💻 Если вы девопс или SRE – ждём вас на вебинаре «Метрики и Prometheus»

Вы сможете:

- настроить сбор и мониторинг метрик с использованием Prometheus
- развернуть Prometheus в Kubernetes
- интегрировать Prometheus с вашими приложениями
- создать приложение на Spring Boot, которое будет отправлять метрики в Prometheus для дальнейшего анализа

Присоединяйтесь!

🗓 23 октября, 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Microservice Architecture»

🔴 Записаться: https://clck.ru/3DvKPY

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

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

10 Oct, 15:35


👩‍💻 Устали от ограничений RESTful API?
Хотите узнать, как использовать GraphQL в Laravel?


📆 Ждем вас на открытом вебинаре 16 октября в 20:00 мск.

Где мы разберем:

✔️ сравнение RESTful и GraphQL;
✔️ как предоставить API, используя GraphQL;
✔️ как работать с GraphQL на фронтэнде.

Встречаемся в преддверии старта курса «Framework Laravel».
Все участники вебинара получат специальную цену на обучение!

👉 Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://clck.ru/3Dpq2o

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

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

09 Oct, 11:16


Хотите узнать, как превратить массив в пирамиду и ускорить сортировку данных?

Ждем вас на бесплатном вебинаре 14 октября в 20:00 мск, где мы разберем:

- как реализовать алгоритм сортировки выбором с линейной сложностью;
- как превратить массив в пирамиду (кучу) для быстрого доступа к максимальному элементу;
- как создать алгоритм пирамидальной сортировки с квазилинейной сложностью — О(N log N);
- визуальные примеры работы алгоритма на конкретных числах.

🚀 Спикер Евгений Волосатов — программист баз данных и преподаватель с огромным и разнообразным опытом, автор статей и учебных программ по C#, Java, PHP.

Встречаемся в преддверии старта курса «Алгоритмы и структуры данных». Все участники вебинара получат специальную цену на обучение!

Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://clck.ru/3DomEn

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

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

08 Oct, 11:12


🐘 Курс для PHP-разработчиков, которые хотят профессионального роста.

Пройди тест по PHP и проверь свои знания, готов ли ты к обучению на курсе.

Ответишь — пройдешь на продвинутый курс "PHP Developer. Professional" от OTUS по специальной цене + получишь доступ к записям открытых уроков курса курса

👉 ПРОЙТИ ТЕСТ: https://clck.ru/3DnKHF

Приятный бонус Курс можно приобрести в рассрочку и без переплаты

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

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

03 Oct, 08:19


🐘 Разработчики на PHP, устали от «тормозящего» кода и избыточного потребления памяти?

📆 Дата и время: ждем вас на открытом вебинаре 9 октября в 20:00 мск,

Где мы разберем:

➡️ как устроены процессорные кеши и оперативная память;
➡️ внутреннее представление данных в PHP;
➡️ простые и эффективные приёмы для ускорения работы вашего кода.

Спикер Дмитрий Кириллов — соучредитель и технический директор одного из крупнейших сервисов онлайн-регистрации бизнеса в России, имеет высшее педагогическое образование.

Встречаемся в преддверии старта курса «PHP Developer. Professional». Все участники вебинара получат специальную цену на обучение!

👉 Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://clck.ru/3DfXs5

Приятный бонус Курс можно приобрести в рассрочку и без переплаты

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

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

01 Oct, 16:22


👩‍💻 Актуальное повышение квалификации для PHP-разработчиков

Пройди тест по Laravel !

➡️ Проверь себя и свои знания. Сможешь сдать — пройдёшь на продвинутый курс "Framework Laravel" от OTUS по специальной цене.

👨‍💻 За 3 месяца обучения твое портфолио пополнится мини-проектами и выпускной работой.

Приятный бонус Курс можно приобрести в рассрочку и без переплаты

➡️ ПРОЙТИ ТЕСТ: https://clck.ru/3DcR2t

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

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

30 Sep, 09:00


🎊Как эффективно скалировать Node.js-серверы и улучшить производительность приложений?

Узнайте на открытом вебинаре 2 октября в 20:00 мск, где мы разберем:

- встроенные способы скалирования в Node.js;
- как использовать Docker-контейнеры для скалирования;
- примеры облачных решений и Kubernetes для Node.js.

Спикер Николай Лапшин — опытный архитектор, тимлид, преподаватель и разработчик с широким технологическим стеком.

Встречаемся в преддверии старта курса «Node.js Developer». Все участники вебинара получат специальную цену на обучение!

➡️➡️Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://clck.ru/3Db9iY

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

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

26 Sep, 12:08


🐘 Тест по PHP

Проверь насколько хорошо ты знаешь PHP, ты начинающий junior или крепкий Middle?

Ответишь — сможешь пройти на продвинутый курс "PHP Developer. Professional" от OTUS по специальной цене + получишь чек-лист "Solid и типичные ошибки на собеседованиях" .

👉 ПРОЙТИ ТЕСТ: https://clck.ru/3DWpCD

Приятный бонус Курс можно приобрести в рассрочку и без переплаты

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

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

25 Sep, 14:08


#вакансия
Яндекс 🌍 Путешествия ищут того, кто станет одним из столпов в развитии по-настоящему масштабного проекта для каждого, кто хотя бы раз ездил в отпуск (а значит, для всех!) 😎

Если вы знаете классические алгоритмы и структуры данных, разрабатывали сложные веб-приложения или системы обработки данных и умеете проектировать системы, откликайтесь на вакансию 📩

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

25 Sep, 13:32


👩‍💻 Приглашаем на открытый урок «Динамичный фронтэнд на PHP с Laravel Livewire».

📆 Дата и время: 2 октября в 20:00 мск

Участие бесплатное

Вебинар состоится в рамках онлайн-курса «Framework Laravel» в OTUS.

В ходе занятия мы рассмотрим:

➡️ Возможности Laravel Livewire.
➡️ Создание приложения с использованием Livewire с нуля.

Продолжить изучение фреймворка вы сможете на курсе, который можно приобрести в рассрочку.

👉 Регистрируйтесь прямо сейчас, чтобы не пропустить урок: https://clck.ru/3DUUz5

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

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

20 Sep, 13:17


🔥 Пройди тест по Laravel ! 🔥

➡️ Проверь себя и свои знания. Сможешь сдать — пройдёшь на продвинутый курс "Framework Laravel" от OTUS по специальной цене.

👩‍💻 Присоединяйся к новому потоку онлайн-курса «Framework Laravel» в OTUS. В программе курса — удобные и мощные наработки огромного Laravel-сообщества, а практика — решение бизнес-задач.

👨‍💻 За 3 месяца обучения твое портфолио пополнится мини-проектами и выпускной работой.

Приятный бонус Курс можно приобрести в рассрочку и без переплаты

👉 ПРОЙТИ ТЕСТ

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

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

19 Sep, 11:16


🐘 Тест по PHP

Проверь насколько хорошо ты знаешь PHP

Ответишь — пройдешь на продвинутый курс "PHP Developer. Professional" от OTUS по специальной цене + получишь чек-лист "Solid и типичные ошибки на собеседованиях" .

👉 ПРОЙТИ ТЕСТ: https://clck.ru/3DPRJS

Приятный бонус Курс можно приобрести в рассрочку и без переплаты

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

2,024

subscribers

302

photos

6

videos