4865. Заказчик утвердил пороги скоринга (отказ < 50, проверка 50–70). Через месяц бизнес просит изменить пороги на 40 и 65. Изменение требует перевыпуска релиза. Что упустил аналитик?
Anonymous Quiz
10%
Не провёл нагрузочное тестирование правил
73%
Не предусмотрел внешнюю конфигурацию порогов
4%
Не согласовал правила с юристами
14%
Не зафиксировал логику в формальной спецификации
Бизнес-правила, особенно в скоринге или ценообразовании, со временем меняются. Если пороги (50 и 70 баллов) жёстко зашить в код, каждое изменение правила потребует нового релиза, тестирования и развертывания. Это медленно, дорого и рискованно.
Что должен был сделать аналитик:
Выделить варьируемые параметры – в данном случае пороги и, возможно, саму шкалу.
Требовать, чтобы эти параметры хранились во внешней конфигурации (файл, база данных, административная панель) и могли изменяться без перекомпиляции и передеплоя.
Зафиксировать в требованиях механизм динамической настройки – например, «система должна считывать пороги скоринга из таблицы БД при старте и периодически перечитывать их без остановки».
Почему не подходят другие варианты:
A (нагрузочное тестирование) – не связано с изменчивостью правил.
C (согласование с юристами) – полезно, но не решает проблему частых изменений.
D (формальная спецификация) – нужна, но без гибкости всё равно потребуется перекомпиляция.
Реальный кейс:
В одном банке кредитные пороги менялись раз в месяц. Они были закодированы в Java-классах. Каждый раз команда делала релиз (2 дня). После перехода на конфигурационный файл с автоматической перезагрузкой изменения стали занимать 10 минут.
Что должен зафиксировать аналитик (расширенное требование):
«Пороговые значения для принятия решения по скорингу должны быть вынесены во внешний конфигурационный файл или базу данных. Система должна перечитывать их без перезапуска при изменении. Интервал перечитывания – не более 5 минут. Изменение порогов не должно требовать остановки работы системы».
Дополнительные аспекты:
Аудит изменений – кто, когда и почему изменил порог.
Валидация новых порогов (например, нижний порог не может быть выше верхнего).
Возможность A/B-тестирования разных порогов в разных сегментах клиентов.
Вывод: Аналитик обязан выявлять параметры бизнес-правил, которые могут меняться со временем, и закладывать их во внешнюю конфигурацию. Это ускоряет внесение изменений и снижает стоимость доработок.
Please open Telegram to view this post
VIEW IN TELEGRAM
4866. При вызове внешнего API мобильное приложение отправляет запрос и продолжает работу, а ответ приходит позже через callback. Как на диаграмме последовательности обозначить такой асинхронный вызов?
Anonymous Quiz
8%
Сплошная стрелка с заполненным треугольником
63%
Открытая стрелка (незаполненный треугольник)
23%
Пунктирная стрелка с ромбом
7%
Двойная сплошная стрелка
Синхронное сообщение – сплошная стрелка с заполненным треугольником (отправитель ждёт ответа).
Асинхронное сообщение – открытая стрелка (незаполненный треугольник). Отправитель не блокируется.
Ответ (callback) изображается отдельным асинхронным сообщением в обратном направлении (или сплошной стрелкой, если это возврат управления).
Реальный пример: Приложение отправляет запрос на оплату в платёжный шлюз и продолжает показывать анимацию. Через некоторое время шлюз присылает результат на webhook – это отдельное асинхронное сообщение.
Ошибка: Если нарисовать синхронную стрелку, подразумевается блокировка, что не соответствует реальности.
Вывод: Аналитик, моделируя интеграции, должен различать синхронные и асинхронные вызовы на диаграммах последовательности.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Хочешь зарабатывать в Telegram, но канал стоит на месте?
❌ системы.
❌ понимания.
❌ результата.
Мне постоянно пишут:
✅ «Почему не идут подписчики?»
✅ «Почему нет продаж?»
✅ «Что я делаю не так?»
Ответ почти всегда один — у тебя нет базы.
Не хватает понимания маркетинга, продвижения и логики заработка в Telegram.
И именно поэтому я собрала папку, где уже есть всё необходимое:
— как расти в Telegram
— где брать трафик
— как превращать подписчиков в деньги
— как выстроить систему, а не надеяться на «повезёт»
Ссылка: https://t.me/addlist/sieqVFdCuh5iZWIy
Записывайся в подборку🫶
Скорее всего, ты просто делаешь всё «наугад».
Мне постоянно пишут:
Ответ почти всегда один — у тебя нет базы.
Не хватает понимания маркетинга, продвижения и логики заработка в Telegram.
И именно поэтому я собрала папку, где уже есть всё необходимое:
— как расти в Telegram
— где брать трафик
— как превращать подписчиков в деньги
— как выстроить систему, а не надеяться на «повезёт»
Ссылка: https://t.me/addlist/sieqVFdCuh5iZWIy
Записывайся в подборку
Please open Telegram to view this post
VIEW IN TELEGRAM
4867. В таблице orders есть колонка order_number с последовательными числами, но некоторые номера пропущены (например, из-за отката транзакций). Как найти все пропущенные номера без циклов?
Anonymous Quiz
42%
Использовать оконную функцию LAG() и найти разрывы
31%
Сделать LEFT JOIN с таблицей всех возможных чисел
17%
Применить GROUP BY и HAVING COUNT(*) = 0
10%
Использовать NOT EXISTS с подзапросом на соседние номера
order_number - LAG(order_number) > 1Пример запроса:
sql
WITH gaps AS (
SELECT
LAG(order_number) OVER (ORDER BY order_number) AS prev_num,
order_number AS curr_num
FROM orders
)
SELECT (prev_num + 1) AS missing_start, (curr_num - 1) AS missing_end
FROM gaps
WHERE curr_num - prev_num > 1;
Почему другие варианты хуже:
B (LEFT JOIN с таблицей всех чисел) – требует генерации последовательности, что при больших диапазонах неэффективно.
C (GROUP BY) – не может найти пропуски без генерации всех значений.
D (NOT EXISTS) – потребует для каждого номера подзапрос, что медленно.
Реальный кейс: В интернет-магазине из-за ошибок в интеграции номера заказов иногда пропускались. Аналитик написал запрос с
LAG()Вывод:
LAG()Please open Telegram to view this post
VIEW IN TELEGRAM
4868. Пользователь авторизовался на сайте и начал заполнять корзину. На следующем шаге его запрос попал на другой сервер, и корзина «обнулилась». Как называется механизм, обеспечивающий попадание всех запросов одного пользователя на один сервер?
Anonymous Quiz
65%
Сессионная аффинность (sticky sessions)
12%
Циклический алгоритм (round robin)
13%
Алгоритм наименьших соединений (least connections)
11%
Хеширование IP-адреса (IP hash)
Что такое sticky sessions (сессионная аффинность)?
Балансировщик «привязывает» пользователя к определённому серверу на время его сессии. Обычно это делается:
По IP-адресу (не очень надёжно, так как несколько пользователей могут быть за одним NAT).
По cookie, которую балансировщик устанавливает клиенту (более надёжно).
Все последующие запросы этого пользователя направляются на тот же сервер, где хранятся его сессионные данные.
Почему не подходят другие варианты:
B (round robin) – как раз вызывает проблему, так как запросы распределяются по очереди без учёта сессии.
C (least connections) – направляет запрос на сервер с наименьшим числом активных соединений, тоже не учитывает сессию.
D (IP hash) – один из способов реализации sticky sessions, но это не общее название механизма, а частная техника. Правильным ответом является именно термин «sticky sessions» (сессионная аффинность).
Реальный пример:
В интернет-магазине на платформе Magento с несколькими бэкенд-серверами не настроили sticky sessions. Пользователи жаловались, что корзина очищается при переходе на страницу оформления заказа. После включения sticky sessions на балансировщике (HAProxy) проблема исчезла.
Что должен зафиксировать аналитик:
В требованиях к отказоустойчивости и масштабированию указать необходимость поддержки сессионной аффинности.
Уточнить, где хранить сессии (в памяти сервера, в Redis, в БД).
Если используется Redis для централизованного хранения сессий, sticky sessions не нужны, но требуется надёжный Redis-кластер.
Вывод: Sticky sessions — простой способ решить проблему «потери» сессии при масштабировании, но он создаёт свою проблему: при отказе сервера пользователь теряет сессию. Более современный подход — централизованное хранилище сессий (Redis) и отказ от липких сессий. Аналитик должен понимать оба варианта и выбирать под требования.
Please open Telegram to view this post
VIEW IN TELEGRAM
4869. В приложении онлайн-кинотеатра при падении сервиса рекомендаций пользователь не может смотреть фильм, так как запрос на получение рекомендаций блокирует загрузку плеера. Какой принцип архитектуры был нарушен?
Anonymous Quiz
3%
Горизонтальное масштабирование
81%
Отказоустойчивость с сохранением основной функции
3%
Событийная архитектура
13%
Изоляция данных
Как правильно:
Разделить критический и не критический функционал.
При ошибке рекомендаций показывать пользователю плеер, а рекомендации загружать асинхронно (или не показывать вовсе).
Использовать таймауты и fallback-значения.
Реальный кейс: В Netflix при падении сервиса рекомендаций пользователь всё равно может смотреть фильм. Это достигается за счёт асинхронных вызовов и fallback.
Вывод: Аналитик должен закладывать в требования graceful degradation: «При недоступности модуля рекомендаций плеер должен работать, а рекомендации не должны блокировать показ».
Please open Telegram to view this post
VIEW IN TELEGRAM
4870. Нужно протестировать форму заказа с 5 параметрами, каждый из которых может принимать 10 значений. Полный перебор даст 100 000 комбинаций. Какая техника тест-дизайна сократит количество тестов, сохранив покрытие всех пар параметров?
Anonymous Quiz
18%
Эквивалентное разбиение
55%
Попарное тестирование (Pairwise / All-pairs)
24%
Анализ граничных значений
3%
Исследовательское тестирование
❤2
Пример для 5 параметров × 10 значений: полный перебор = 100 000 тестов. Pairwise сокращает до ~50–100 тестов при том же покрытии пар. Инструменты: PICT от Microsoft, Hexawise, AllPairs.
Реальный кейс: В тестировании поисковой системы (параметры: регион, язык, категория, сортировка, фильтры) pairwise позволил сократить количество тестов с 10 000 до 200, найдя при этом 95% багов.
Вывод: Аналитик должен рекомендовать pairwise для сложных комбинаторных форм, экономя время тестирования.
Please open Telegram to view this post
VIEW IN TELEGRAM
4871. При оформлении заказа нужно: зарезервировать товар на складе и списать деньги. Если списание не удалось, резерв должен быть отменён. Сервисы имеют свои базы. Какой паттерн обеспечит согласованность?
Anonymous Quiz
9%
Двухфазная фиксация (2PC)
78%
Сага (Saga) с компенсирующими транзакциями
13%
Распределённая блокировка
0%
Общая база данных
❤2
В примере:
Сервис склада резервирует товар.
Сервис платежей списывает деньги. Если ошибка → сервис склада компенсирует резерв (отменяет резерв).
Двухфазная фиксация (2PC) медленна и не масштабируется. Общая БД – антипаттерн.
Реальный кейс: В Uber используется Saga для согласования поездки: создание заказа, поиск водителя, списание средств. При сбое любого этапа запускается компенсация.
Вывод: Для распределённых транзакций в микросервисах аналитик должен требовать Saga с явными компенсациями.
Please open Telegram to view this post
VIEW IN TELEGRAM