---
title: Основные концепции · часть 1
seo:
  title: Основные концепции · часть 1 — Systems Analyst
  description: Тема «Основные концепции · часть 1» для собеседования Systems Analyst. Что такое WSDL? Что такое идемпотентность? Почему это важно?
---

[Все темы Systems Analyst](/systems-analyst)

## <strong>Что такое</strong> <code>WSDL</code><strong>?</strong> [#q-14bee738d69b812790d5e65676464be6]

<code>WSDL</code> (Web Services Description Language) — это язык описания
веб-сервисов, который используется для описания доступных функций, структуры
данных, протоколов и методов коммуникации для веб-сервиса. Основные аспекты
<code>WSDL</code>&#58;

1. <strong>Описание сервиса</strong>&#58; WSDL описывает доступные операции
   (методы) сервиса, параметры этих операций и типы данных, которые они
   используют.

1. <strong>Протоколы и форматы</strong>&#58; Описывает протоколы и форматы
   сообщений, используемые для обмена данными между клиентами и сервисом. Это
   может включать SOAP (Simple Object Access Protocol) или другие протоколы.

1. <strong>Местоположение и доступ</strong>&#58; WSDL может содержать информацию
   о местоположении (адресе) сервиса и методах доступа к нему (например, HTTP
   GET, POST, SOAP).

1. <strong>Используемые типы данных</strong>&#58; Определяет структуры данных,
   используемые в запросах и ответах сервиса, обеспечивая единообразие в
   коммуникации.

<code>WSDL</code> часто используется в средах, где требуется автоматическое
создание клиентских приложений на основе описания веб-сервиса, так как оно
позволяет генерировать код для взаимодействия с сервисом, учитывая его
возможности и структуру данных.

:::note[Ссылки для изучения]

1. [Как аналитику работать с задачами на интеграции](https://habr.com/ru/articles/735332/)
   :::

---

## <strong>Что такое идемпотентность? Почему это важно?</strong> [#q-14bee738d69b81e4b32cffcf71de81ac]

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

<strong>Почему это важно&#58;</strong>

1. <strong>Безопасность</strong>&#58; Идемпотентные операции минимизируют риски
   случайных или нежелательных изменений данных.

1. <strong>Надежность</strong>&#58; Повторное выполнение операции не вызывает
   неожиданных эффектов или ошибок.

1. <strong>Устойчивость к сетевым сбоям</strong>&#58; В случае сбоев или
   дублирования запросов, идемпотентность помогает избежать нежелательных
   последствий.

Примеры идемпотентных операций включают запросы <code>HTTP</code> методом <code>GET</code>, удаление ресурсов (<code>DELETE</code>), и использование уникальных идентификаторов для предотвращения дублирования операций.

:::note[Ссылки для изучения]

1. [Как аналитику работать с задачами на интеграции](https://habr.com/ru/articles/735332/)
   :::

---

## <code>DELETE</code> <strong>– идемпотентный метод?</strong> [#q-14bee738d69b8177ac06fe9a7381eba1]

Да. Несколько одинаковых DELETE имеют тот же ожидаемый эффект над ресурсом, что и один&#58; ресурс удалён. Ответы могут различаться, например 204 при первом удалении и 404 при повторном. Идемпотентность не требует одинаковых кодов ответа и не запрещает журналирование.

:::note[Ссылки для изучения]

1. [Как аналитику работать с задачами на интеграции](https://habr.com/ru/articles/735332/)
   :::

---

## <strong>Есть некий</strong> <code>UI</code><strong>, нужно написать к нему веб-сервис. Опишите вашу постановку – что в ней будет.</strong> [#q-14bee738d69b81ba9a7ffd775bb1eb13]

Постановка задачи на создание веб-сервиса для <code>UI</code> включает следующие основные шаги и компоненты&#58;

{/* prettier-ignore */}
1. <strong>Определение функциональных требований&#58;</strong>

    - Определение API эндпоинтов и методов (GET, POST, PUT, DELETE) веб-сервиса.

    - Разработка структуры данных для запросов и ответов (JSON или XML формат).

1. <strong>Разработка веб-сервиса&#58;</strong>

    - Создание маршрутов (routes) для обработки различных HTTP запросов от UI.

    - Реализация бизнес-логики для обработки запросов и взаимодействия с базой данных или другими сервисами.

1. <strong>Аутентификация и авторизация&#58;</strong>

    - Внедрение механизмов аутентификации и авторизации для защиты API от несанкционированного доступа.

1. <strong>Тестирование&#58;</strong>

    - Проведение тестирования API для проверки функциональности и соответствия требованиям.

1. <strong>Документация&#58;</strong>

    - Написание документации к API (например, с использованием OpenAPI/Swagger) для удобства использования разработчиками UI.

1. <strong>Развёртывание и мониторинг&#58;</strong>

    - Развертывание веб-сервиса на сервере.

    - Настройка мониторинга для отслеживания работы веб-сервиса и выявления возможных проблем.

1. <strong>Поддержка и обновление&#58;</strong>

    - Поддержка и обновление веб-сервиса в соответствии с изменяющимися требованиями и обратной связью от пользователей.

:::note[Ссылки для изучения]

1. [Как аналитику работать с задачами на интеграции](https://habr.com/ru/articles/735332/)
   :::

---

## <strong>Что такое синхронные и асинхронные вызовы?</strong> [#q-14bee738d69b8106b0a9cae4318f1c25]

Синхронные и асинхронные вызовы относятся к способу организации выполнения операций или функций в программном коде&#58;

{/* prettier-ignore */}
1. <strong>Синхронные вызовы&#58;</strong>

    - В синхронных вызовах выполнение программы блокируется до завершения операции.

    - Когда код выполняет синхронный вызов, он ждёт завершения этого вызова, прежде чем продолжить дальнейшее выполнение.

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

1. <strong>Асинхронные вызовы&#58;</strong>

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

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

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

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

:::note[Ссылки для изучения]

1. [Как аналитику работать с задачами на интеграции](https://habr.com/ru/articles/735332/)
   :::

---

## <strong>Чем</strong> <code>Kafka</code> <strong>отличается от</strong> <code>RabbitMQ</code><strong>?</strong> [#q-14bee738d69b8105b3cad9206a464403]

<code>Kafka</code> и <code>RabbitMQ</code> - это два различных брокера
сообщений, оба известные своими способностями обработки сообщений, но они имеют
несколько ключевых различий&#58;

{/* prettier-ignore */}
1. <strong>Архитектура&#58;</strong>

    - <strong>Kafka&#58;</strong> Построен как распределённая система, которая распределяет данные по разным брокерам в кластере. Он разработан для высокой пропускной способности и устойчивости к отказам.

    - <strong>RabbitMQ&#58;</strong> Ориентирован на классическую AMQP (Advanced Message Queuing Protocol) архитектуру. Он более традиционный и прост в использовании для разнообразных сценариев.

1. <strong>Производительность и масштабирование&#58;</strong>

    - <strong>Kafka&#58;</strong> Очень высокая пропускная способность и поддержка масштабирования до тысяч и миллионов сообщений в секунду.

    - <strong>RabbitMQ&#58;</strong> Хорошо масштабируется вертикально, но его производительность может быть ограничена при работе с большими объемами сообщений.

1. <strong>Хранение сообщений&#58;</strong>

    - <strong>Kafka&#58;</strong> Хранит сообщения в виде лога, что делает его хорошим выбором для построения потоковой обработки данных (stream processing).

    - <strong>RabbitMQ&#58;</strong> Хранит сообщения в памяти или на диске, в зависимости от настроек, и обеспечивает гибкость в выборе способа хранения.

1. <strong>Гарантии доставки сообщений&#58;</strong>

    - Kafka сохраняет порядок записей внутри одной партиции. Гарантии доставки и обработки зависят от подтверждений, фиксации offset, идемпотентного producer и транзакций; глобального порядка между партициями нет.

    - RabbitMQ использует publisher confirms и подтверждения потребителей для надёжной доставки. При сбоях возможны повторы, поэтому обработчики должны уметь их распознавать или быть идемпотентными. Сквозная обработка exactly once не гарантируется автоматически.

1. <strong>Применение&#58;</strong>

    - <strong>Kafka&#58;</strong> Часто используется для стриминга данных, аналитики, мониторинга и других сценариев, требующих высокой пропускной способности и упорядоченности данных.

    - <strong>RabbitMQ&#58;</strong> Широко применяется в микросервисной архитектуре, интеграционных задачах и там, где требуется более традиционная система очередей сообщений.

:::note[Ссылки для изучения]

1. [Как аналитику работать с задачами на интеграции](https://habr.com/ru/articles/735332/)
   :::

---

## <strong>Клиент читает в</strong> <code>Kafka</code> <strong>два последних сообщения. Как тому же клиенту заново прочитать эти два последние сообщения?</strong> [#q-14bee738d69b813390ddc68ba9f1d780]

Для повторного чтения используйте consumer.seek(partition, offset). Сохраните партицию и offset нужных записей; offset задаёт позицию внутри партиции, а не всего топика. Записи должны ещё храниться в журнале.

Для каждой нужной партиции установите позицию на offset первой из перечитываемых записей и снова вызовите poll. Группа хранит подтверждённые позиции чтения, а не сами сообщения. Если записи были в разных партициях, единого offset для последних двух нет.

В примере с двумя последними сообщениями в <code>Kafka</code>&#58;

1. Определить оффсеты последних двух сообщений, которые клиент уже прочитал.

1. Установить оффсеты на начальные значения, соответствующие этим сообщениям.

1. Прочитать сообщения с установленными оффсетами из темы <code>Kafka</code>.

:::note[Ссылки для изучения]

1. [Как аналитику работать с задачами на интеграции](https://habr.com/ru/articles/735332/)
   :::

---

## <strong>Приходилось ли вам писать</strong> <code>JSON</code><strong>? С помощью чего вы писали</strong> <code>JSON</code><strong>?</strong> [#q-14bee738d69b81bdbee0caf8da86c317]

Расскажите о реальном опыте. JSON можно писать в текстовом редакторе или получать сериализацией данных&#58; например, JSON.stringify в JavaScript или json.dumps в Python. Проверяйте синтаксис и согласованную схему; JSON является форматом данных, а не языком программирования.

:::note[Ссылки для изучения]

1. [Как аналитику работать с задачами на интеграции](https://habr.com/ru/articles/735332/)
   :::
