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

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

Відкрити в Telegram

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

Показати більше
1 731
Підписники
Немає даних24 години
-47 днів
-830 день
Залучення підписників
червень '26
червень '26
+8
в 0 каналах
травень '26
+3
в 0 каналах
Get PRO
квітень '26
+3
в 0 каналах
Get PRO
березень '26
+3
в 0 каналах
Get PRO
лютий '26
+13
в 0 каналах
Get PRO
січень '26
+4
в 0 каналах
Get PRO
грудень '25
+7
в 0 каналах
Get PRO
листопад '25
+13
в 0 каналах
Get PRO
жовтень '25
+7
в 0 каналах
Get PRO
вересень '25
+4
в 0 каналах
Get PRO
серпень '25
+3
в 0 каналах
Get PRO
липень '25
+4
в 0 каналах
Get PRO
червень '25
+9
в 0 каналах
Get PRO
травень '25
+7
в 0 каналах
Get PRO
квітень '25
+9
в 0 каналах
Get PRO
березень '25
+13
в 0 каналах
Get PRO
лютий '25
+10
в 0 каналах
Get PRO
січень '25
+10
в 0 каналах
Get PRO
грудень '24
+1
в 0 каналах
Get PRO
листопад '24
+2
в 0 каналах
Get PRO
жовтень '24
+68
в 0 каналах
Get PRO
вересень '24
+8
в 0 каналах
Get PRO
серпень '24
+11
в 0 каналах
Get PRO
липень '24
+8
в 0 каналах
Get PRO
червень '24
+8
в 0 каналах
Get PRO
травень '24
+6
в 0 каналах
Get PRO
квітень '24
+11
в 0 каналах
Get PRO
березень '24
+25
в 13 каналах
Get PRO
лютий '24
+16
в 0 каналах
Get PRO
січень '24
+30
в 4 каналах
Get PRO
грудень '23
+31
в 3 каналах
Get PRO
листопад '23
+15
в 0 каналах
Get PRO
жовтень '23
+24
в 0 каналах
Get PRO
вересень '23
+41
в 0 каналах
Get PRO
серпень '23
+10
в 0 каналах
Get PRO
липень '23
+17
в 0 каналах
Get PRO
червень '23
+18
в 0 каналах
Get PRO
травень '23
+27
в 0 каналах
Get PRO
квітень '23
+12
в 0 каналах
Get PRO
березень '23
+12
в 0 каналах
Get PRO
лютий '23
+16
в 0 каналах
Get PRO
січень '23
+14
в 0 каналах
Get PRO
грудень '22
+13
в 0 каналах
Get PRO
листопад '22
+83
в 0 каналах
Get PRO
жовтень '22
+33
в 0 каналах
Get PRO
вересень '22
+26
в 0 каналах
Get PRO
серпень '22
+118
в 0 каналах
Get PRO
липень '22
+127
в 0 каналах
Get PRO
червень '22
+39
в 0 каналах
Get PRO
травень '22
+35
в 0 каналах
Get PRO
квітень '22
+35
в 0 каналах
Get PRO
березень '22
+6
в 0 каналах
Get PRO
лютий '22
+23
в 0 каналах
Get PRO
січень '22
+23
в 0 каналах
Get PRO
грудень '21
+24
в 0 каналах
Get PRO
листопад '21
+15
в 0 каналах
Get PRO
жовтень '21
+117
в 0 каналах
Get PRO
вересень '21
+100
в 0 каналах
Get PRO
серпень '21
+477
в 0 каналах
Get PRO
липень '21
+330
в 0 каналах
Get PRO
червень '21
+311
в 0 каналах
Get PRO
травень '21
+221
в 0 каналах
Get PRO
квітень '21
+203
в 0 каналах
Get PRO
березень '21
+101
в 0 каналах
Get PRO
лютий '21
+67
в 0 каналах
Get PRO
січень '21
+36
в 0 каналах
Get PRO
грудень '20
+1 942
в 0 каналах
Дата
Залучення підписників
Згадування
Канали
23 червня+1
22 червня0
21 червня0
20 червня0
19 червня0
18 червня0
17 червня+1
16 червня0
15 червня0
14 червня0
13 червня0
12 червня+1
11 червня0
10 червня+1
09 червня0
08 червня+2
07 червня0
06 червня+1
05 червня0
04 червня0
03 червня0
02 червня0
01 червня+1
Дописи каналу
Осталось 3 часа до конца акции: «Пожизненный PRO тариф — по цене 1 года» Поиск работы отнимает силы, время и веру в себя, но
Осталось 3 часа до конца акции: «Пожизненный PRO тариф — по цене 1 года» Поиск работы отнимает силы, время и веру в себя, но не у тех кто использует easyoffer PRO. Успей сделать самую выгодную инвестицию в развитие своей карьеры. Акция закончится уже сегодня 23 июня 23:59 по мск: 👉 https://easyoffer.ru/pro @backendquiz

2
🤔 Что тебе известно про нереляционные базы данных? Представляют собой системы управления базами данных, которые не используют традиционную реляционную модель. Эти базы данных разработаны для работы с большими объемами данных, высокой скоростью обработки запросов и гибкостью в моделировании данных. 🚩Основные типы нереляционных баз данных: 🟠Документные базы данных Хранят данные в формате документов (например, JSON, BSON, XML). Например, MongoDB, CouchDB. Подходит для приложений, работающих с данными, которые могут иметь гибкую и изменяющуюся структуру. 🟠Колонковые базы данных Хранят данные в виде столбцов, а не строк. Это позволяет эффективно обрабатывать большие объемы данных и выполнять аналитические запросы. Например Apache Cassandra, HBase. Аналитика, обработка больших данных, телекоммуникации. 🟠Ключ-значение базы данных Хранят данные в виде пар "ключ-значение". Очень проста по своей природе и обеспечивает быструю работу. Например Redis, Riak, DynamoDB. Кеширование, сессии пользователей, реализация простых хранилищ данных. 🟠Графовые базы данных Хранят данные в виде графов с узлами, ребрами и свойствами. Отлично подходят для моделирования связей и взаимосвязей между данными. Например Neo4j, OrientDB. Социальные сети, рекомендательные системы, управление сетями. 🚩Плюсы ➕Гибкость модели данных: Легко справляются с изменяющимися и разнообразными данными. ➕Масштабируемость: Хорошо масштабируются как горизонтально (добавление новых серверов), так и вертикально (увеличение мощности серверов). ➕Производительность: Обеспечивают высокую производительность для специфичных типов операций и больших объемов данных. ➕Обработка больших данных: Способны эффективно обрабатывать большие объемы данных и быстро реагировать на запросы. 🚩Минусы ➖Отсутствие стандартов: Разные системы могут использовать разные модели и API, что может усложнять переход между ними. ➖Ограниченная поддержка сложных запросов: Могут не поддерживать сложные SQL-запросы и транзакции, привычные для реляционных баз данных. ➖Консистентность данных: Некоторые NoSQL базы данных жертвуют строгой консистентностью ради доступности и масштабируемости (в соответствии с теоремой CAP). 🚩Примеры использования: 🟠Социальные сети Графовые базы данных для моделирования взаимоотношений между пользователями. 🟠Интернет-магазины Документные базы данных для хранения информации о продуктах с различной структурой данных. 🟠Аналитические платформы Колонковые базы данных для выполнения сложных аналитических запросов на больших объемах данных. 🟠Кеширование Ключ-значение базы данных для быстрого доступа к часто используемым данным. Ставь 👍 и 📚 @backendquiz
59
3
Последний день акции: «Пожизненный PRO тариф — по цене 1 года» 🚀 PRO включает: – Полный доступ ко всем грейдам и профессиям
Последний день акции: «Пожизненный PRO тариф — по цене 1 года» 🚀 PRO включает: – Полный доступ ко всем грейдам и профессиям – База live-coding задач и вопросов из технических собеседований с вероятностью их встречи – Примеры лучших ответов от Senior разработчиков – 1100+ записи реальных собеседований, в том числе в топовые компании (Сбер, Авито, Яндекс, WB, OZON, МТС и др.) – База 400+ тестовых заданий от компаний. – Автоотклики на вакансии в хедхантер – Аналитика ТОП-требований из вакансий для лучшего написания резюме и прохождения ATS систем рекрутеров – Генератор уникального резюме и CV под каждую вакансию – Тренажеры подготовки к собеседованию: «Реальное собеседование» и «Проработка вопросов» по методике интервальных повторений (как Anki) – (скоро) Агрегатор вакансий – (скоро) Сообщество Акция закончится уже сегодня 23 июня 23:59 по мск: 👉 https://easyoffer.ru/pro @backendquiz
37
4
‍Пожизненный PRO тариф — по цене 1 года. Покупаешь один раз — пользуешься всю жизнь: 👉 https://easyoffer.ru/pro 🚀 PRO-доступ закроет 99% проблем на пути к офферу: 1. Полный доступ ко всем грейдам и профессиям. Не важно, Junior вы или Senior, Тестировщик, Разработчик, Проджект — вы получите материалы под ваш текущий уровень и цели, без ограничений. 2. База live-coding задач и вопросов с реальных собесов с уникальной системой вероятности их встречи. Вы будете готовиться не вслепую, а точечно по тем темам, которые спрашивают чаще всего. 3. Эталонные ответы от Senior-разработчиков. Никакой воды и догадок — только четкие, структурированные решения, за которые дают «зеленый свет» к офферу 4. 1100+ записей реальных собеседований (включая топы: Сбер, Авито, Яндекс, WB, OZON, МТС). Вы увидите всё изнутри: как спрашивают, как отвечают сильные кандидаты и на каких ошибках проваливаются 80% проходящих. 5. База 400+ тестовых заданий. Если вы еще студент, то практикуйтесь на решении задач, которые помогут попасть на собес 6. Автоотклики на Хедхантере — пока вы спите, ваше резюме летит к рекрутерам автоматически. Это экономия сотен часов ручного кликанья. 7. Аналитика ТОП-требований из вакансий. Мы парсим рынок и показываем, какие скиллы сейчас в цене. Это позволит вам точечно апгрейдить резюме и проходить суровые ATS-фильтры (которые отсеивают до 75% резюме еще до просмотра рекрутером). 8. Генератор уникального резюме и CV под каждую вакансию. Забудьте про «универсальное» резюме — нейросеть адаптирует ваш опыт под конкретную позицию за минуту, повышая шансы на приглашение в разы. 9. Тренажеры подготовки к собеседованию: «Реальное собеседование» — сценарий вопросов из реальных интервью «Проработка вопросов» — флеш карточки с вопросами/ответами по методике интервальных повторений (как Anki) 10. (Скоро) Агрегатор вакансий — все вакансии из HH, Telegram, LinkedIn и других площадок в одной ленте. 11. (Скоро) Закрытое комьюнити — нетворкинг и помощь в сложных вопросах от таких же целеустремленных айтишников. Завтра последний день акции: 👉 https://easyoffer.ru/pro @backendquiz
63
5
🤔 Какие знаешь принципы ООП? Объектно-ориентированное программирование (ООП) базируется на нескольких ключевых принципах, которые помогают создавать гибкие, понятные и легко поддерживаемые программы. 🟠Абстракция (Abstraction) Абстракция заключается в выделении значимых характеристик объекта и игнорировании незначимых. Это позволяет создавать упрощенные модели реальных объектов. 🟠Инкапсуляция (Encapsulation) Инкапсуляция скрывает внутренние детали объекта и позволяет взаимодействовать с объектом только через определенные методы. Это защищает данные от некорректного использования и облегчает изменение и поддержку кода. 🟠Наследование (Inheritance) Наследование позволяет создавать новые классы на основе существующих. Новый класс (наследник) получает все свойства и методы родительского класса и может добавлять новые или изменять существующие. 🟠Полиморфизм (Polymorphism) Полиморфизм позволяет объектам разных классов обрабатывать запросы одинаковым образом. Это достигается через переопределение методов в наследуемых классах и интерфейсы. 🟠Композиция (Composition) Композиция предполагает создание объектов других классов внутри данного класса. Это позволяет использовать функциональность существующих классов, не создавая зависимостей через наследование. 🟠Агрегация (Aggregation) Агрегация - это специальный вид композиции, который позволяет одному объекту быть частью другого с возможностью существования вне этого объекта. Агрегация описывает "имеет" отношения. 🚩Важность принципов ООП 🟠Упрощение разработки Принципы ООП позволяют создавать более понятный и структурированный код. 🟠Повторное использование кода Наследование и полиморфизм способствуют использованию уже написанных классов в новых контекстах. 🟠Поддерживаемость кода Инкапсуляция и абстракция делают код легче в сопровождении и модификации. Ставь 👍 и 📚 @backendquiz
75
6
🤔 Почему NULL часто называют «Ошибкой на миллиард долларов»? Термин «Ошибка на миллиард долларов» (The Billion Dollar Mistake) был введён Тони Хоаром (Tony Hoare), создателем NULL, который в 2009 году на конференции признался, что введение NULL было его крупнейшей ошибкой. Название связано с тем, что NULL стал причиной множества багов, сбоев в программах и уязвимостей, что привело к огромным финансовым потерям в индустрии. 🚩Какие проблемы вызывает `NULL`? 🟠NullPointerException (NPE) и аварийные сбои - Попытка вызвать метод у NULL приводит к ошибке NullPointerException в Java, NullReferenceException в C# и аналогичным сбоям в других языках. - Это одна из самых распространённых ошибок в программировании. 🟠Дополнительные проверки и сложность кода - Из-за NULL приходится постоянно писать проверки if (x != null), что раздувает код и делает его менее читаемым. - Если забыть такую проверку, можно получить неожиданный сбой. 🟠Слабая типизация и отсутствие явности - NULL можно передавать в любую функцию или объект, что ломает строгую типизацию. - Код становится менее предсказуемым. 🟠Проблемы с базами данных - NULL в SQL ведёт себя неинтуитивно (NULL != NULL, сравнение может давать UNKNOWN). - Может приводить к некорректным вычислениям в агрегатных функциях. 🟠Уязвимости в безопасности - Некоторые атаки используют NULL для взлома систем (например, null dereference в C/C++ может привести к DoS-атаке). - NULL может скрывать ошибки и приводить к утечке данных. 🚩Какие альтернативы `NULL`? 🟠Optional / Maybe (Java, Kotlin, Haskell, Rust) - Использование обёрток вроде Optional (Java) или Option (Rust) позволяет явно указывать возможность отсутствия значения. 🟠Исключения вместо `NULL` (C# и Java) - Вместо возврата NULL можно выбрасывать осмысленные исключения (IllegalArgumentException, NotFoundException). 🟠Специальные значения по умолчанию - Вместо NULL можно использовать дефолтные объекты (EmptyList, GuestUser и т. д.). 🟠Типы-юнит (Tagged Union) в функциональных языках - Например, в Haskell и Rust применяют Either, Option, что делает обработку NULL-подобных случаев более явной. Ставь 👍 и 📚 @backendquiz
89
7
🤔 Что такое HTTP и HTTPs? HTTP (HyperText Transfer Protocol) — это протокол прикладного уровня для передачи гипертекста между клиентом (например, веб-браузером) и сервером. Он является основой для обмена данными в веб-пространстве и используется для передачи HTML-документов, изображений, видео и других ресурсов. 🚩Как работает HTTP 🟠Запрос-ответ HTTP работает по модели запрос-ответ, где клиент отправляет запрос серверу, а сервер возвращает ответ. Запросы и ответы состоят из трех основных частей: Стартовая строка: Определяет метод запроса (например, GET, POST) и URI (Uniform Resource Identifier). Заголовки: Несут метаданные, такие как тип контента, длина контента, информация о сессии и т. д. Тело: Содержит данные, отправляемые в запросе или ответе (например, данные формы, JSON). 🟠Методы HTTP Основные методы включают: GET: Запрашивает данные с сервера. POST: Отправляет данные на сервер для создания или обновления ресурса. PUT: Обновляет существующий ресурс. DELETE: Удаляет ресурс. HEAD: Запрашивает только заголовки без тела ответа. OPTIONS: Запрашивает информацию о возможностях сервера для определенного ресурса. 🟠Статусы ответа Сервер отвечает статусными кодами, которые показывают результат обработки запроса. Например: 200 OK: Запрос успешно обработан. 404 Not Found: Ресурс не найден. 500 Internal Server Error: Внутренняя ошибка сервера. 🚩HTTPS (HyperText Transfer Protocol Secure) HTTPS (HyperText Transfer Protocol Secure) — это расширение HTTP, которое использует шифрование для защиты данных, передаваемых между клиентом и сервером. HTTPS обеспечивает конфиденциальность, целостность и аутентификацию данных. 🚩Как работает HTTPS 🟠Шифрование HTTPS использует протоколы SSL (Secure Sockets Layer) или его более современную версию TLS (Transport Layer Security) для шифрования данных. Это предотвращает перехват и чтение данных третьими лицами. 🟠Аутентификация Серверы, использующие HTTPS, имеют цифровые сертификаты, которые проверяются клиентом. Это гарантирует, что клиент общается с подлинным сервером, а не с мошенником. 🟠Целостность данных Шифрование также обеспечивает целостность данных, предотвращая их изменение или подмену во время передачи. 🚩Как установить HTTPS 1⃣Получение сертификата Для использования HTTPS владелец сайта должен получить цифровой сертификат от доверенного центра сертификации (CA). 2⃣Настройка сервера Установите сертификат на сервере и настройте его для использования HTTPS. 3⃣Перенаправление трафика Обеспечьте перенаправление HTTP-трафика на HTTPS для повышения безопасности. 🚩Преимущества HTTPS ➕Безопасность Защищает данные от перехвата и изменения. ➕Доверие пользователей Пользователи больше доверяют сайтам с HTTPS, что может повысить их активность и лояльность. ➕SEO Поисковые системы, такие как Google, предпочитают сайты с HTTPS, что может улучшить их ранжирование в результатах поиска. Ставь 👍 и 📚 @backendquiz
74
8
Привет, ребята! У нас для вас отличные новости — на easyoffer вышло сразу несколько крупных обновлений: 1. Автоотклики на HeadHunter Снова работают в полную силу — можно смело возвращаться к активному поиску. 2. Новый раздел «Резюмейкер» Теперь вы можете быстро создавать уникальные резюме, адаптированные под каждую вакансию, и сразу добавлять сопроводительное письмо. Это заметно повышает шансы получить приглашение на собеседование. 3. База вопросов стала чище Мы навели порядок и удалили около 30% дубликатов. Ориентироваться стало проще. –––––––––––––––––– 🔥 Акция в честь обновления Пожизненный тариф easyoffer PRO — по цене одного года. Успейте до 23 июня: 👉 https://easyoffer.ru/pro (https://easyoffer.ru/pro?utm_source=tg&utm_medium=my_group&utm_campaign=pro-forever) –––––––––––––––––– Что дальше? В ближайшие пару недель добавим ещё два раздела: 1. Сообщество с чатами по всем профессиональным направлениям. 2. Агрегатор вакансий, чтобы поиск работы стал ещё удобнее. @backendquiz
88
9
🤔 В чем разница между Scrum и Kanban ? Это два популярных метода управления проектами и процессами, используемых в Agile-разработке. Оба они помогают командам улучшать производительность и управление работой, но имеют различные подходы и принципы. Вот основные различия между Scrum и Kanban: 🚩Scrum 🟠Структура Фиксированные спринты: Работа делится на временные интервалы, называемые спринтами, обычно длительностью 2-4 недели. Роли: В Scrum определены конкретные роли, такие как Scrum-мастер, Product Owner и команда разработки. 🟠Процессы и церемонии Планирование спринта: Каждому спринту предшествует планирование, где команда определяет, какие задачи будут выполнены. Ежедневные Scrum-встречи: Короткие ежедневные встречи (Stand-ups) для обсуждения прогресса, препятствий и планов на день. Ретроспектива спринта: В конце каждого спринта команда анализирует, что прошло хорошо, что можно улучшить, и как это сделать. 🟠Артефакты Product Backlog: Список всех задач и требований для продукта. Sprint Backlog: Список задач, выбранных для выполнения в текущем спринте. Burn-down Chart: График, показывающий оставшееся количество работы в спринте. 🟠Изменения в ходе спринта Изменения в задачах не допускаются после начала спринта. Все задачи должны быть зафиксированы до начала спринта. 🚩Kanban 🟠Структура Непрерывный поток работы: Kanban не имеет фиксированных временных интервалов или спринтов. Работа выполняется непрерывно. Роли: В Kanban нет строгих определений ролей. Команда может включать любые роли по мере необходимости. 🟠Процессы и церемонии Визуализация работы: Kanban использует доску с колонками для визуализации рабочего процесса (например, "To Do", "In Progress", "Done"). Лимиты на количество задач в работе (WIP): Ограничивает количество задач, которые могут находиться в определенных колонках одновременно, чтобы предотвратить перегрузку и улучшить поток работы. 🟠Артефакты Kanban-доска: Основной инструмент для визуализации работы и контроля за её состоянием. Карточки задач: Представляют отдельные задачи на Kanban-доске. 🟠Изменения в ходе работы Изменения допускаются в любой момент времени. Задачи могут добавляться, изменяться и удаляться по мере необходимости. Ставь 👍 и 📚 @backendquiz
84
10
Как правильно работать с резервным копированием в облаке? 25 июня приглашаем на бесплатный вебинар от MWS Cloud Platform всех
Как правильно работать с резервным копированием в облаке? 25 июня приглашаем на бесплатный вебинар от MWS Cloud Platform всех, кто работает с облаками. ⚫️Развеем мифы, разберём лучшие современные подходы и инструменты. ⚫️Обсудим интеграцию в процессы, консистентность, точечное восстановление и безопасность. Поговорим о плюсах нативных облачных инструментов. ⚫️Проведём демо в MWS Cloud Platform и ответим на ваши вопросы. Зарегистрируйтесь, чтобы не пропустить! ⏰ 25 июня в 14:00 (мск) ✅ Зарегистрироваться (https://mws.ru/events/tech-webinar25062026/?utm_source=tg_seeding&utm_medium=cpp&utm_campaign=webinar_reserv_copy&utm_content=_&erid=2VfnxvuSQre) @backendquiz
77
11
🤔 Что такое транзакция в БД ? Это последовательность одной или нескольких операций над базой данных, которая выполняется как единое целое. Транзакции обеспечивают, что все операции в рамках транзакции либо успешно выполняются, либо полностью отменяются, что гарантирует целостность данных. 🚩Основные свойства транзакций (ACID) 🟠Atomicity (Атомарность) Транзакция должна быть либо выполнена полностью, либо не выполнена вовсе. Если какая-то часть транзакции не удается, вся транзакция откатывается (roll back) к исходному состоянию. 🟠Consistency (Согласованность) Транзакция переводит базу данных из одного согласованного состояния в другое. Это означает, что после завершения транзакции все правила целостности данных должны быть соблюдены. 🟠Isolation (Изоляция) Результаты выполнения транзакции не должны быть видны другим параллельно выполняющимся транзакциям до тех пор, пока данная транзакция не завершится. Это предотвращает влияние одной транзакции на другую. 🟠Durability (Устойчивость) После успешного завершения транзакции (коммита) ее результаты должны быть зафиксированы в базе данных и сохранены, даже если произойдет сбой системы. 🚩Пример работы с транзакциями На 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
82
12
🤔 Объяснение легаси-кода для непрофессионалов? Это термин, которым называют старый код или программное обеспечение, созданное много лет назад, но до сих пор используемое. Важно понимать, что "легаси" не обязательно означает "плохой". Этот код может быть ценным и выполнять критически важные задачи, но у него есть свои особенности и проблемы, которые делают работу с ним сложной. 🚩Почему появляется легаси-код? 🟠Возраст программного обеспечения. Программы, написанные 5, 10 или даже 20 лет назад, продолжают работать, хотя технологии уже изменились. 🟠Отсутствие документации. Разработчики, написавшие код, могли уйти из компании, не оставив подробных объяснений. 🟠Эволюция требований. Код, который был написан для одних задач, со временем начинает использоваться для других, часто без переработки. 🟠Изменения технологий. Код создавался на старых версиях языков программирования, библиотек или платформ, которые сегодня уже не поддерживаются. 🚩Проблемы легаси-кода 🟠Плохая читаемость Код может быть сложно понять, особенно если он написан без соблюдения современных стандартов или правил. 🟠Отсутствие тестов Старый код часто создавался без автоматизированных тестов, что усложняет внесение изменений. 🟠Зависимость от устаревших технологий Код может использовать библиотеки или платформы, которые больше не обновляются или не поддерживаются. 🟠Сложность изменений Даже небольшие правки могут вызвать неожиданные ошибки, поскольку никто не знает всех последствий изменений. 🚩Зачем сохранять легаси-код? 🟠Работает — не трогай Если код выполняет свою задачу, компании часто решают оставить его как есть. 🟠Критически важные задачи Легаси-код может управлять банковскими системами, производственными линиями или другими системами, от которых зависит бизнес. 🟠Высокая стоимость переписывания Полная переработка кода может занять годы и потребовать огромных ресурсов. 🚩Что с ним делать? 🟠Поддерживать Исправлять ошибки и улучшать работу системы по мере необходимости. 🟠Обновлять Переходить на современные технологии частями, чтобы минимизировать риски. 🟠Переписывать Создать новую систему, если старая больше не отвечает требованиям, но это требует времени и ресурсов. Ставь 👍 и 📚 @backendquiz
100
13
🤔 В чем разница get от post? Методы GET и POST являются двумя наиболее часто используемыми HTTP-методами для передачи данных между клиентом и сервером. Они выполняют разные задачи и имеют свои особенности и случаи применения. 🚩GET 🟠Цель использования Метод GET используется для получения данных с сервера. Это наиболее часто используемый метод для запросов, которые не изменяют состояние сервера. 🟠Передача данных Данные передаются через URL в строке запроса (query string). Это делает данные видимыми и ограничивает их размер. 🟠Кэширование Запросы GET могут кэшироваться браузерами, серверами и прокси-серверами. Это позволяет ускорить повторные запросы и снизить нагрузку на сервер. 🟠Идемпотентность GET-запросы являются идемпотентными, что означает, что повторное выполнение одного и того же GET-запроса приведет к одному и тому же результату, не изменяя состояние ресурса. 🟠Безопасность GET-запросы считаются безопасными, так как они не изменяют данные на сервере. 🚩POST 🟠Цель использования Метод POST используется для отправки данных на сервер, чтобы создать или изменить ресурсы. Это подходящий метод для операций, которые изменяют состояние сервера. 🟠Передача данных Данные передаются в теле запроса. Это позволяет отправлять большие объемы данных и сохранять конфиденциальность данных, поскольку они не видны в URL. 🟠Кэширование Запросы POST не кэшируются браузерами и прокси-серверами по умолчанию. Это обеспечивает, что данные будут отправлены на сервер каждый раз при выполнении запроса. 🟠Идемпотентность POST-запросы не являются идемпотентными. Каждый новый POST-запрос может привести к созданию новых ресурсов или изменению существующих, что делает их выполнение неоднозначным при повторении. 🟠Безопасность POST-запросы более безопасны в плане передачи данных, так как информация передается в теле запроса и не видна в URL. 🚩Примеры использования 🟠GET Получение информации о пользователе, загрузка страницы или получение данных с API. 🟠POST Отправка формы с данными регистрации, добавление нового товара в базу данных, обновление информации о пользователе. Ставь 👍 и 📚 @backendquiz
101
14
🤔 Что такое BigO notation? Big O notation (О-большое) - это математическая нотация, используемая в информатике для описания производительности алгоритма. Она выражает, как время выполнения или потребление памяти алгоритма растет по мере увеличения размера входных данных. Big O notation фокусируется на худшем случае, что помогает оценить наихудший сценарий для работы алгоритма. 🚩Основные концепции Big O notation 🟠Асимптотический анализ: Big O notation используется для описания асимптотического поведения алгоритмов, то есть их поведения при приближении размера входных данных к бесконечности. Основное внимание уделяется ведущим слагаемым и игнорированию констант и менее значимых слагаемых, поскольку они имеют меньшее влияние на производительность при больших размерах входных данных. 🟠Оценка худшего случая: Big O notation показывает наихудший возможный сценарий выполнения алгоритма, обеспечивая надежные гарантии его производительности. 🚩Основные классы сложности 🟠O(1) - Константная сложность: Время выполнения не зависит от размера входных данных. Доступ к элементу массива по индексу. 🟠O(log n) - Логарифмическая сложность: Время выполнения увеличивается логарифмически с увеличением размера входных данных. Бинарный поиск. 🟠O(n) - Линейная сложность: Время выполнения растет линейно с увеличением размера входных данных. Линейный поиск. 🟠O(n log n) - Линейно-логарифмическая сложность: Время выполнения растет линейно с логарифмическим множителем. Быстрая сортировка, сортировка слиянием. 🟠 O(n^2) - Квадратичная сложность: Время выполнения растет пропорционально квадрату размера входных данных. Сортировка пузырьком, сортировка вставками. 🟠O(2^n) - Экспоненциальная сложность: Время выполнения удваивается с каждым добавлением нового элемента. Решение задачи о коммивояжере полным перебором. 🟠O(n!) - Факториальная сложность: Время выполнения растет факториально с увеличением размера входных данных. Полный перебор всех возможных перестановок. 🚩Примеры использования 1⃣Поиск и сортировка: Анализ эффективности различных алгоритмов сортировки (например, быстрая сортировка vs. сортировка пузырьком). 2⃣Анализ алгоритмов и структур данных: Оценка времени доступа, вставки и удаления в различных структурах данных (например, массивы, списки, деревья). 3⃣Оптимизация программ: Помощь в выборе наиболее эффективных алгоритмов и структур данных для решения конкретных задач. Ставь 👍 и 📚 @backendquiz
99
15
🤔 Как можно заблокировать конкретные поля в 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
97
16
🤔 Чем отличается RIGHT, LEFT, INNER, JOIN? JOIN в SQL используется для объединения строк из двух таблиц на основе связанного между ними столбца. Существует несколько видов JOIN, и каждый из них определяет, какие строки из таблиц попадут в итоговый результат. 🟠INNER JOIN Выбирает только те строки, у которых есть совпадения в обеих таблицах. Если в одной из таблиц нет соответствующего значения, строка не попадет в результат. 🟠LEFT JOIN (или LEFT OUTER JOIN) Возвращает все строки из левой таблицы, а из правой – только совпадающие. Если в правой таблице нет совпадения, в итоговом наборе будут NULL-значения. 🟠RIGHT JOIN (или RIGHT OUTER JOIN) Возвращает все строки из правой таблицы, а из левой – только совпадающие. Если в левой таблице нет соответствующего значения, в результате появятся NULL. 🟠FULL JOIN (или FULL OUTER JOIN) Возвращает все строки из обеих таблиц. Если в одной из таблиц нет соответствующей записи, подставляются NULL. Ставь 👍 и 📚 @backendquiz
143
17
🤔 Что знаешь о принципах программирования KISS? Это принцип проектирования и разработки, который предполагает, что системы и решения должны быть максимально простыми и избегать ненужной сложности. Этот принцип особенно важен в программировании и инженерии, так как помогает создавать более понятные, поддерживаемые и надежные системы. 🚩Аспекты 🟠Простота Системы должны быть простыми в понимании и использовании. Чем проще система, тем меньше вероятность возникновения ошибок. Простота достигается за счет минимизации количества компонентов и взаимодействий между ними. 🟠Ясность Код должен быть понятным и легко читаемым. Это облегчает его поддержку и модификацию. Использование понятных имен переменных, функций и классов, а также понятная структура кода способствуют ясности. 🟠Избегание избыточности Компоненты или функциональность следует избегать. Если какой-то элемент системы не добавляет реальной ценности, его следует убрать. Это включает в себя как аппаратное, так и программное обеспечение. 🟠Модульность Системы должны быть разбиты на небольшие, независимые модули, каждый из которых выполняет свою четко определенную задачу. Модульность помогает в тестировании, повторном использовании и поддержке кода. 🚩Примеры применения 🟠Программирование При разработке функций или методов следует избегать создания слишком сложных алгоритмов, если можно использовать более простые и понятные решения. Использование стандартных библиотек и инструментов вместо написания собственного кода с нуля, когда это возможно. 🟠Проектирование систем В системной архитектуре следует избегать излишнего усложнения связей между компонентами системы. Использование простых и проверенных шаблонов проектирования вместо сложных и экспериментальных решений. 🟠Документация Документация должна быть простой и понятной, избегая излишне технических или сложных объяснений. Хорошо структурированная и лаконичная документация помогает пользователям и разработчикам быстрее понять систему. 🚩Плюсы ➕Легкость понимания и поддержки Простые системы легче понимать и поддерживать, что снижает затраты на обучение и поддержку. ➕Снижение количества ошибок Чем проще система, тем меньше вероятность возникновения ошибок и проблем при её использовании. ➕Повышение производительности Простые решения часто требуют меньше ресурсов и могут работать быстрее и эффективнее. ➕Улучшение масштабируемости Простые и модульные системы легче масштабировать и расширять по мере необходимости. Ставь 👍 и 📚 @backendquiz
147
18
🤔 Какие есть статус коды? Статус коды HTTP используются для обозначения результата обработки запроса сервером. 🚩Информационные (100-199) 🟠100 Continue Сервер получил начальную часть запроса клиента и ожидает продолжения. 🟠101 Switching Protocols Клиент запросил изменение протокола, и сервер согласен выполнить это. 🚩Успешные (200-299) 🟠200 OK Запрос успешно обработан, и сервер отправляет запрашиваемые данные. 🟠201 Created Запрос успешно выполнен, и в результате был создан новый ресурс. 🟠202 Accepted Запрос принят для обработки, но обработка еще не завершена. 🟠204 No Content Запрос успешно выполнен, но сервер не возвращает никаких данных. 🚩Перенаправления (300-399) 🟠301 Moved Permanently Запрашиваемый ресурс был окончательно перемещен на новый URI. 🟠302 Found Запрашиваемый ресурс временно доступен по другому URI. 🟠304 Not Modified Данные не изменились, клиент может использовать кэшированную версию. 🚩Клиентские ошибки (400-499) 🟠400 Bad Request Сервер не может обработать запрос из-за ошибки клиента (например, неверный синтаксис). 🟠401 Unauthorized Для доступа к запрашиваемому ресурсу требуется аутентификация. 🟠403 Forbidden У клиента нет прав на доступ к запрашиваемому ресурсу. 🟠404 Not Found Запрашиваемый ресурс не найден на сервере. 🟠405 Method Not Allowed Метод, указанный в запросе, не поддерживается данным ресурсом. 🚩Ошибки сервера (500-599) 🟠500 Internal Server Error Общая ошибка сервера, когда обработка запроса не может быть завершена. 🟠501 Not Implemented Сервер не поддерживает функциональность, необходимую для обработки запроса. 🟠502 Bad Gateway Сервер, выполняющий роль шлюза или прокси, получил недействительный ответ от вышестоящего сервера. 🟠503 Service Unavailable Сервер временно не доступен (например, из-за перегрузки или технического обслуживания). 🟠504 Gateway Timeout Сервер, выполняющий роль шлюза или прокси, не дождался ответа от вышестоящего сервера вовремя. Ставь 👍 и 📚 @backendquiz
120
19
🤔 Что происходит в конце спринта? В конце спринта в гибких методологиях разработки (например, Scrum) проводится серия мероприятий и активностей, направленных на подведение итогов работы команды, оценку достигнутого результата и планирование улучшений. Эти процессы обеспечивают прозрачность, оценку эффективности и подготовку к следующему спринту. 🚩Основные события в конце спринта 🟠Завершение задач спринта Все задачи, включённые в спринт, должны быть либо выполнены, либо перенесены с соответствующими комментариями. Завершённые задачи проверяются на соответствие критериям "готовности" (Definition of Done, DoD). Если задачи не выполнены, они возвращаются в бэклог продукта для повторной оценки в будущем. 🟠Демонстрация инкремента (Sprint Review) Показать заинтересованным сторонам результат работы команды. Команда демонстрирует готовый продукт или его обновления. Обсуждаются выполненные задачи, изменения в продукте и обратная связь от заказчиков или других участников. Результат: обновление бэклога продукта с учётом новой информации. 🟠Ретроспектива спринта (Sprint Retrospective) Цель: анализировать, что прошло хорошо, что можно улучшить и какие действия предпринять в будущем. Участники обсуждают положительные моменты, трудности и проблемы, возникшие в процессе работы. Генерируются идеи для улучшения, которые затем внедряются в следующих спринтах. Используются форматы для выявления проблем, такие как "Start, Stop, Continue" или "Что было хорошо, что плохо, что можно улучшить". 🟠Обновление метрик Обновление burndown chart, velocity chart или других метрик, используемых для отслеживания прогресса. Анализ выполнения целей спринта (например, процент выполненных задач). Уроки, извлечённые из анализа метрик, учитываются при планировании будущих спринтов. 🚩Итоговые действия перед началом нового спринта 🟠Рефайнмент бэклога продукта С учётом новых идей, задач и обратной связи обновляется приоритет задач. 🟠Подготовка к планированию следующего спринта (Sprint Planning) Команда и Product Owner готовятся к обсуждению целей нового спринта. 🟠Документирование Фиксация результатов спринта, включая завершённые задачи, обратную связь и итоги ретроспективы. Ставь 👍 и 📚 @backendquiz
137
20
🤔 Что такое http? то протокол прикладного уровня, который является основой передачи данных в Интернете. Он был разработан для передачи гипертекста и других типов медиа между клиентами и серверами. Основные функции HTTP включают инициализацию соединения, запрос ресурсов и получение ответов от сервера. 🚩Основные компоненты HTTP: 🟠Клиент и сервер HTTP работает по модели клиент-сервер. Клиент, например, веб-браузер, инициирует запросы к серверу, который предоставляет доступ к запрашиваемым ресурсам. 🟠URI (Uniform Resource Identifier) Используется для идентификации ресурсов. Наиболее распространенным типом URI является URL (Uniform Resource Locator). 🟠Методы 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
139