BA & SA | 10000 Interview questions
10.2K subscribers
173 photos
14 videos
343 links
Вопросы и задачи, которые задают на собеседованиях на позицию Бизнес и Системного аналитика. По вопросам сотрудничества- @DeliveryManager7
Download Telegram
4630. Какой механизм позволяет временно хранить результаты запросов и быстро возвращать их при повторных обращениях, уменьшая нагрузку на источник данных?
Anonymous Quiz
92%
Кэширование
2%
Шардирование
5%
Репликация
1%
Индексирование
👩‍🏫Объяснение:
Кэширование — это механизм хранения копии данных в быстродоступном хранилище, чтобы ускорить получение этих данных при повторных запросах и снизить нагрузку на первичный источник.

🔍 Простая аналогия:
Представьте библиотеку:

Первичный источник: Книгохранилище в подвале (медленно)
Кэш: Полка на абонементе (быстро)

Библиотекарь: Сначала проверяет полку, если книги нет — идет в хранилище

💡 Как кэширование работает в интеграциях:

Без кэша:

```text
Клиент → Запрос → Сервис → [Сложный расчет/Запрос к БД] → Ответ
↑ (каждый раз заново!) ↓
└─────────────────────────────────────────────────────┘
С кэшем:

text
Клиент → Запрос → Сервис → [Проверка кэша]

[Данные в кэше?] → Да → Возврат из кэша (быстро!)
↓ Нет
[Выполнение запроса к источнику]

[Сохранение в кэш] → Возврат клиенту
```

🎯 Типы кэширования в интеграциях:

Кэш на стороне клиента:
Браузер кэширует статические ресурсы (CSS, JS, изображения)
Mobile app кэширует данные локально
Срок жизни: от часов до дней

Кэш на стороне сервера:

```nginx
# Пример настройки кэширования в Nginx
location /api/products {
proxy_cache products_cache;
proxy_cache_valid 200 5m; # Кэшировать успешные ответы 5 минут
proxy_pass http://product-service;
}
Распределенный кэш:

Redis, Memcached, Hazelcast

Общий кэш для всех экземпляров сервиса
```

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

```java
// Spring Cache с Redis
@Cacheable(value = "products", key = "#id")
public Product getProduct(String id) {
return productRepository.findById(id); // Дорогой запрос к БД
}
```

⚡️ Стратегии кэширования:

Cache-Aside (Lazy Loading):

Проверить кэш → если нет → получить из источника → сохранить в кэш

Самый распространенный подход

Write-Through:

Запись сначала в кэш, затем в источник
Гарантирует актуальность данных

Write-Behind:

Запись сначала в кэш, затем асинхронно в источник
Высокая производительность записи

🔥 Практические примеры:

Пример 1: Кэширование справочников

Города, валюты, типы документов
Меняются редко, запрашиваются часто
Можно кэшировать на 24 часа

Пример 2: Кэширование результатов сложных расчетов

Аналитические отчеты
Рекомендательные алгоритмы
Кэшировать на 1 час или до изменения исходных данных

Пример 3: Кэширование сессий пользователей

Информация о пользователе после логина
Сохранять в Redis с TTL 30 минут

⚠️ Проблемы и решения:

Проблема: Устаревшие данные (Stale Data)
Решение:

Инвалидация кэша при изменении данных

TTL (Time-To-Live) — автоматическое удаление старых записей

Версионирование ключей кэша

Проблема: "Пробоина кэша" (Cache Miss Storm)
Решение:

Предзагрузка популярных данных
Использование "теплого" кэша
Блокировка (Locking) при первом запросе

👨‍💼 Что должен учитывать системный аналитик:

Определять кандидатов на кэширование:
Какие данные читаются чаще, чем изменяются?
Какие запросы самые дорогие по времени/ресурсам?

Проектировать стратегию инвалидации:

Как узнавать об изменениях данных?
Нужна ли синхронная инвалидация или можно по TTL?
Определять требования к актуальности:
"Данные должны быть актуальны в течение 5 минут"
"Допустима задержка до 1 часа для аналитических данных"
Учитывать объемы данных:
Сколько памяти потребуется?
Нужен ли distributed кэш?
№4631 категория вопросов: #INTEGRATION
4631. Какой протокол обмена сообщениями использует модель "публикация-подписка" (pub/sub) и гарантирует доставку сообщений даже при временной недоступности получателя?
Anonymous Quiz
4%
HTTP
26%
WebSocket
59%
AMQP
11%
SMTP
👩‍🏫Объяснение:
AMQP (Advanced Message Queuing Protocol) — это открытый стандартный протокол прикладного уровня для асинхронной передачи сообщений между системами. Он поддерживает модель публикации-подписки (pub/sub) и гарантирует доставку сообщений даже при временных сбоях.

🔍 Ключевые особенности AMQP:

Гарантии доставки:

At-most-once (максимум один раз)
At-least-once (минимум один раз)
Exactly-once (ровно один раз) — через механизмы идемпотентности

Модели обмена:

Очереди (Queues): Точечная доставка
Топики/Exchange (Topics): Публикация-подписка
RPC: Запрос-ответ

Надежность:

Подтверждение получения (acknowledgments)
Сохранение сообщений на диск
Транзакционность

💡 Как работает AMQP в интеграциях:

Архитектурные компоненты:
Producer/Publisher: Отправитель сообщений
Exchange: Маршрутизатор сообщений
Queue: Очередь сообщений
Consumer/Subscriber: Получатель сообщений

Пример потока:

```text
Producer → [Exchange] → [Binding Rules] → [Queue] → Consumer
↓ ↓
(по routing key) (сохраняется до обработки)
```

🎯 Реализации AMQP:

RabbitMQ — самая популярная реализация

```python
# Пример публикации сообщения в RabbitMQ
channel.basic_publish(
exchange='orders',
routing_key='new.order',
body=json.dumps(order_data),
properties=pika.BasicProperties(
delivery_mode=2, # Сохранять на диск
)
)
Apache Qpid
```

Azure Service Bus (частичная поддержка AMQP)

🔥 Практические сценарии использования:

Сценарий 1: Обработка заказов в e-commerce

Пользователь создает заказ → сообщение в очередь new_orders

Сервис валидации, сервис платежей, сервис склада подписываются на очередь
Каждый сервис обрабатывает заказ независимо
Если сервис платежей временно недоступен, сообщение остается в очереди

Сценарий 2: Сбор логов и метрик

Все сервисы публикуют логи в exchange logs
Exchange маршрутизирует логи в разные очереди по severity
Сервис мониторинга и сервис аналитики подписываются на нужные очереди

Сценарий 3: Фоновая обработка задач

Пользователь загружает видео → сообщение в очередь video_processing
Воркеры берут задачи из очереди и обрабатывают
Можно масштабировать количество воркеров по нагрузке

⚡️ Преимущества AMQP:

Надежность:

Сообщения сохраняются на диск
Подтверждение получения
Автоматическое восстановление соединений

Гибкость маршрутизации:

Direct (точная маршрутизация по ключу)
Fanout (всем подписчикам)
Topic (по шаблону ключа)
Headers (по заголовкам сообщения)

Управление потоком:

QoS (Quality of Service) — ограничение неподтвержденных сообщений
Поддержка backpressure

Кластеры и отказоустойчивость:

Репликация очередей между узлами
Автоматическое переподключение при сбоях

⚠️ Сложности и решения:

Проблема: Гарантированный порядок доставки
Решение: Использовать одну очередь на потребителя или механизмы sequencing

Проблема: Накопление сообщений при сбое потребителя
Решение: Dead Letter Queues (DLQ) + алертинг

Проблема: Персистентность vs производительность
Решение: Балансировать между delivery_mode=1 (transient) и delivery_mode=2 (persistent)

👨‍💼 Роль системного аналитика:

Проектирование топологии обмена сообщениями:
Какие exchange, очереди и routing keys нужны?
Какие bindings между ними?
Определение требований к доставке:
Нужны ли гарантии exactly-once?
Какие таймауты и retry политики?
Как обрабатывать poison messages?
Проектирование форматов сообщений:

```json
{
"message_id": "uuid",
"timestamp": "2024-01-15T10:30:00Z",
"type": "order.created",
"version": "1.0",
"payload": {...},
"metadata": {...}
}
```

Планирование мониторинга:

Длина очередей
Latency обработки сообщений
Rate публикации/потребления
🔥2
№4632 категория вопросов: #INTEGRATION
4632. Какой механизм позволяет системе А отправлять запросы системе Б через промежуточный сервер, который скрывает сетевую структуру внутренней системы?
Anonymous Quiz
65%
Прокси-сервер
13%
Фаервол
11%
DNS-сервер
11%
Балансировщик нагрузки
👩‍🏫Объяснение:
Прокси-сервер выступает в роли промежуточного звена между клиентом и сервером, скрывая внутреннюю структуру сети и обеспечивая дополнительные функции: кэширование, аутентификацию, трансформацию запросов. В интеграциях обратный прокси (reverse proxy) часто используется для маршрутизации запросов к внутренним сервисам без прямого доступа клиентов к ним.
№4633 категория вопросов: #INTEGRATION
4633. Какой паттерн интеграции используется, когда система А вызывает систему Б, которая затем вызывает систему В, и результат возвращается по цепочке обратно?
Anonymous Quiz
0%
Параллельный вызов
8%
Шина событий
6%
Публикация-подписка
85%
Цепочка сервисов (Chained Services)
👩‍🏫Объяснение:
Паттерн "Цепочка сервисов" предполагает последовательный вызов сервисов, где результат одного сервиса передается следующему. Это создает синхронную цепочку зависимостей. Пример: сервис заказов вызывает сервис валидации, затем сервис платежей, затем сервис уведомлений. Недостаток — увеличение общего времени отклика и риск каскадных сбоев.
№4634 категория вопросов: #INTEGRATION
4634. Какой формат сериализации данных использует бинарную кодировку и часто применяется в высокопроизводительных RPC-фреймворках?
Anonymous Quiz
7%
JSON
8%
XML
81%
Protocol Buffers
3%
CSV
👩‍🏫Объяснение:
Protocol Buffers (protobuf) — это бинарный формат сериализации данных, разработанный Google. Он компактнее и быстрее JSON/XML, использует строгую типизацию через .proto-файлы. Широко используется в gRPC для высокопроизводительных RPC-вызовов между микросервисами благодаря эффективной кодировке и поддержке потоковой передачи.
№4635 категория вопросов: #INTEGRATION
4635. Что из перечисленного является основной функцией Service Mesh в контексте интеграции микросервисов?
Anonymous Quiz
70%
Управление трафиком между сервисами
13%
Хранение бизнес-логики
13%
Рендеринг пользовательского интерфейса
4%
Управление базой данных
👩‍🏫Объяснение:
Service Mesh (сервисная сетка) — это инфраструктурный слой для управления коммуникацией между микросервисами. Основные функции: балансировка нагрузки, обнаружение сервисов, шифрование трафика (mTLS), политики повторов и ограничения запросов, распределенная трассировка. Популярные реализации: Istio, Linkerd, Consul.
№4636 категория вопросов: #INTEGRATION
4636. Какой механизм позволяет синхронизировать данные между двумя базами данных в разных географических регионах с минимальной задержкой?
Anonymous Quiz
23%
Пакетная репликация по расписанию
42%
Master-Slave репликация
31%
Multi-Master репликация
3%
Ручное копирование данных
👩‍🏫Объяснение:
Multi-Master репликация позволяет нескольким узлам (мастерам) принимать запросы на запись и реплицировать изменения друг другу. Это обеспечивает высокую доступность и меньшую задержку для пользователей в разных регионах. Сложность — разрешение конфликтов при одновременном изменении одних данных в разных мастерах.
№4638 категория вопросов: #INTEGRATION