BA & SA | 10000 Interview questions
Вопросы и задачи, которые задают на собеседованиях на позицию Бизнес и Системного аналитика. По вопросам сотрудничества- @DeliveryManager7
Показати більше📈 Аналітичний огляд Telegram-каналу BA & SA | 10000 Interview questions
Канал BA & SA | 10000 Interview questions (@systemanalystinterview) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 10 210 підписників, посідаючи 3 873 місце в категорії Кар'єра та 64 191 місце у регіоні Росія.
📊 Показники аудиторії та динаміка
З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 10 210 підписників.
За останніми даними від 15 червня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на 301, а за останні 24 години на -1, загальне охоплення залишається високим.
- Статус верифікації: Не верифікований
- Рівень залученості (ER): Середній показник залученості аудиторії становить 3.19%. Протягом перших 24 годин після публікації контент зазвичай збирає 2.35% реакцій від загальної кількості підписників.
- Охоплення публікацій: В середньому кожен допис отримує 326 переглядів. Протягом першої доби публікація в середньому набирає 240 переглядів.
- Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 3.
- Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як объяснение, индекс, user_id, субд, паттерн.
📝 Опис та контентна політика
Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
“Вопросы и задачи, которые задают на собеседованиях на позицию Бизнес и Системного аналитика. По вопросам сотрудничества- @DeliveryManager7”
Завдяки високій частоті оновлень (останні дані отримано 16 червня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Кар'єра.
is_deleted и индекса заставляет все запросы на чтение включать условие WHERE is_deleted = false. Даже с индексом 100 млн записей, где 95% – активные, это всё равно сканирует много данных. Кроме того, мягко удалённые записи со временем накапливаются и занимают место. Восстановление работает, но производительность падает.
Решение – отдельная архивная таблица (B):
Основная таблица orders содержит только активные заказы (без удалённых).
При удалении заказ перемещается в таблицу deleted_orders (возможно, в том же или другом физическом хранилище).
Фоновый процесс раз в день удаляет из deleted_orders записи старше 30 дней.
Восстановление – перенести строку обратно в orders.
Преимущества:
Основная таблица остаётся маленькой и быстрой.
Архивную таблицу можно хранить на более дешёвом и медленном диске, сжатой.
Простые запросы (SELECT * FROM orders) не требуют фильтрации по is_deleted.
Недостатки:
Требуется фоновый процесс перемещения данных (можно реализовать через триггер + job).
Если восстанавливать часто, то перемещения туда-обратно могут стать нагрузкой.
Почему не подходят другие варианты:
C (физическое удаление + резервные копии) – восстановление сложно, требует разворачивания бэкапа.
D (партиционирование по дате удаления) – помогает, но не решает проблему накопления «мёртвых» записей в основной таблице.
Реальный пример:
В сервисе управления заказами Ozon удалённые заказы переносятся в отдельную таблицу, и только последние 30 дней хранятся в горячем архиве. Это позволило сократить размер основной таблицы на 70%.
Что должен зафиксировать аналитик:
«Удалённые объекты должны храниться отдельно от активных с автоматической очисткой через 30 дней».
«Фоновый процесс не должен создавать блокировок в основной таблице».
Вывод: Для больших таблиц с функцией восстановления архитектура с отдельной архивной таблицей предпочтительнее мягкого удаления.value = 5, увеличивают в памяти до 6, затем оба записывают 6. В результате значение станет 6, хотя должно было стать 7 (потерян один инкремент).
Решение – атомарный UPDATE:
В большинстве реляционных СУБД (PostgreSQL, MySQL, Oracle) оператор UPDATE SET value = value + 1 является атомарным. База данных блокирует строку на время обновления, но не блокирует чтение (за счёт MVCC в PostgreSQL или разных механизмов). При параллельных вызовах второй вызов увидит уже увеличенное значение и корректно увеличит его ещё раз.
Почему не подходят другие варианты:
A (два отдельных запроса) – не атомарно, гонка неизбежна.
C (SELECT ... FOR UPDATE) – да, решает проблему, но блокирует строку даже для чтения другими транзакциями (пессимистическая блокировка). Это может снизить производительность. Атомарный UPDATE обычно быстрее.
D (UPSERT) – работает, но тяжеловесно, если гарантированно существует запись.
Важно для аналитика:
Если нужен атомарный инкремент – используйте один UPDATE.
Если нужно прочитать старое значение перед обновлением (например, для логирования), то придётся использовать SELECT ... FOR UPDATE в транзакции.
Для высоконагруженных счётчиков (лайки, просмотры) часто используют Redis (атомарный INCR), а периодически синхронизируют с БД.
Реальный пример:
В счетчике просмотров видео на YouTube используется атомарный UPDATE в базе данных для финальной консистентности, а промежуточные инкременты накапливаются в Redis.
Что должен зафиксировать аналитик:
«При обновлении счётчика использовать атомарный UPDATE SET field = field + 1 без предварительного чтения».
Если нужно получить предыдущее значение – оформить требование на пессимистическую блокировку.
Вывод: Простой атомарный UPDATE – самое производительное и надёжное решение для счётчиков без необходимости читать старое значение./v1/customers, /v2/customers) – самый простой и наглядный. Минус: меняется endpoint, клиентам нужно обновлять код вызовов.
Через параметр запроса (?version=2) – менее явно, может кэшироваться некорректно.
Через заголовок Accept – стандартный способ для REST, основанный на медиатипах. Клиент указывает желаемую версию в заголовке, например: Accept: application/vnd.myapi.v2+json. Сервер, прочитав заголовок, сериализует ответ в соответствующем формате.
Почему B – правильный ответ:
Использование Accept соответствует принципам REST (content negotiation).
Не засоряет URL, сохраняет единый endpoint.
Позволяет гибко комбинировать версию и формат (JSON, XML).
Сравнение с другими вариантами:
A (параметр ?version) – тоже возможен, но менее чистый с точки зрения REST.
C (разные URL) – классический подход, но вопрос явно описывает заголовок как способ указать версию.
D (тело запроса) – нестандартно, требует разбора тела до того, как будет понята версия (курица-яйцо).
Реальный пример:
GitHub API версионирует через заголовок Accept: application/vnd.github.v3+json. Это позволяет им добавлять новые поля, не ломая старых клиентов.
Что должен зафиксировать аналитик:
В требованиях указать, что API поддерживает версионирование через заголовок Accept.
Документировать возможные значения (v1, v2, latest).
Определить политику депрекации старых версий.
Вывод: Версионирование через заголовок Accept – гибкий и REST-совместимый способ, особенно когда URL должен оставаться стабильным.
Вже доступно! Дослідження Telegram за 2025 — головні інсайти року 
