BA & SA | 10000 Interview questions – Telegram
BA & SA | 10000 Interview questions
8.67K subscribers
134 photos
8 videos
277 links
Вопросы и задачи, которые задают на собеседованиях на позицию Бизнес и Системного аналитика. По вопросам сотрудничества- @StarlinkGPT
Download Telegram
4646. Вы проектируете схему БД для интернет-магазина. Товар может принадлежать нескольким категориям, и каждая категория может содержать множество товаров. Как правильно смоделировать связь «многие ко многим»?
Anonymous Quiz
1%
Добавить поле category_id в таблицу products.
8%
Добавить поле product_id в таблицу categories.
88%
Создать отдельную таблицу-связку product_categories с внешними ключами.
3%
Хранить список ID категорий в текстовом поле товара.
👩‍🏫Объяснение:
Связь «многие ко многим» не может быть реализована через одно внешнее ключевое поле в одной из таблиц. Это нарушит нормализацию и приведет к проблемам с целостностью и обновлением данных. Отдельная таблица product_categories хранит пары (product_id, category_id), что позволяет гибко добавлять и удалять связи. Хранение списков в текстовом поле (вариант 4) — это антипаттерн, делающий выборку и агрегацию крайне неэффективной.
№4647 категория вопросов: #DBMS
4647. В системе участились жалобы на медленную выборку пользователей по email. Поле email уже проиндексировано. В чем может быть причина, если запрос ищет по полному совпадению (WHERE email = 'user@domain.com')?
Anonymous Quiz
10%
Индексы не работают для текстовых полей
62%
В таблице накопилось большое количество «мертвых» записей (bloat) из-за частых обновлений и удалений
5%
Необходимо сменить тип поля с VARCHAR на TEXT
22%
Следует создать дополнительный индекс по полю id
👩‍🏫Объяснение:
Индексы по текстовым полям прекрасно работают для операций равенства. Однако, если в таблице интенсивно происходит UPDATE или DELETE, физические страницы индекса и таблицы фрагментируются. Это заставляет СУБД читать много пустых или полупустых страниц, чтобы найти нужные строки. Решением является периодическая процедура обслуживания (например, VACUUM FULL в PostgreSQL или перестройка индекса). Смена типа данных или лишний индекс не решат эту проблему производительности.
№4648 категория вопросов: #DBMS
4648. Для нового функционала аналитики необходимо хранить иерархическую структуру отделов компании с неограниченным уровнем вложенности. Какая модель хранения будет наиболее эффективной для частых запросов «найти всех потомков отдела X»?
Anonymous Quiz
56%
Использовать рекурсивные запросы (CTE) с таблицей, где есть поля id и parent_id.
20%
Создать отдельную таблицу связей для каждого уровня вложенности.
17%
Использовать документоориентированную NoSQL БД, отказавшись от иерархии.
👩‍🏫Объяснение:
Это классический и гибкий подход для работы с иерархиями в реляционных БД. Поле parent_id формирует связь, а рекурсивный запрос позволяет обходить дерево в глубину или ширину. Хранение пути (вариант 2) уязвимо к изменениям и сложно поддерживается. Создание таблиц под каждый уровень (3) не подходит для неограниченной вложенности. Выбор NoSQL (4) должен быть обоснован другими требованиями, а не только иерархией. CTE — стандартное и поддерживаемое решение.
№4649 категория вопросов: #DBMS
4649. Вы анализируете требования к системе кэширования сессий пользователей. Данные: простые ключ-значение, время жизни — 15 минут, объем данных огромен, доступ должен быть мгновенным. Какую технологию предпочтете?
Anonymous Quiz
82%
Использовать специализированное in-memory хранилище, такое как Redis.
8%
Создать таблицу в основной реляционной PostgreSQL БД.
3%
Запись сессий в файлы на диске.
7%
Использовать докуменную БД MongoDB.
👩‍🏫Объяснение:
Ключевые слова здесь: «время жизни», «ключ-значение», «мгновенный доступ». Redis создан именно для таких сценариев: это резидентная (in-memory) БД, что обеспечивает микросекундную скорость отклика. Она имеет встроенные механизмы TTL (время жизни данных). Основная реляционная БД (2) будет излишне нагружена и медленна для этой задачи. Файлы (3) и MongoDB (4) не обеспечат требуемой скорости и удобства управления TTL.
№4650 категория вопросов: #DBMS
4650. При проектировании БД для системы заказов вы столкнулись с требованием: «Стоимость заказа должна всегда равняться сумме стоимостей его позиций». Где должна быть реализована эта бизнес-логика?
Anonymous Quiz
19%
В отдельном микросервисе, который валидирует заказы.
11%
В логике фронтенда, перед отправкой данных.
9%
Только в коде backend-приложения.
61%
На уровне БД, с помощью триггера, который пересчитывает и обновляет итог.
👩‍🏫Объяснение:
Это требование относится к целостности данных (consistency). Если логика находится только в backend-коде (2), то прямой доступ к БД в обход приложения (например, для исправлений) нарушит это правило. Триггер гарантирует, что правило выполняется всегда, при любом изменении данных. Это самый надежный уровень защиты бизнес-инварианта. Хотя дублирование проверок в коде приложения — это good practice, основная гарантия должна быть со стороны хранилища данных.
№4651 категория вопросов: #DBMS
4651. Для хранения и сложного поиска по полуструктурированным логам действий пользователей (JSON с разными наборами полей) лучше всего подходит:
Anonymous Quiz
14%
Реляционная БД с заранее определенными колонками.
74%
Документоориентированная NoSQL БД, такая как MongoDB или Elasticsearch.
7%
Классическая SQL БД с хранением JSON в текстовом поле.
5%
Графовая база данных.
👩‍🏫Объяснение:
Полуструктурированные данные с меняющейся схемой — их родная стихия. Такие БД позволяют хранить каждый документ (лог) с его уникальным набором полей и эффективно индексировать и искать по вложенным атрибутам. Elasticsearch дополнительно дает мощные полнотекстовые и аналитические возможности. Реляционная БД (1) будет требовать сложных миграций при изменении структуры логов, а хранение JSON в текстовом поле (3) резко снизит возможности поиска. Графовая БД (4) предназначена для других задач.
№4652 категория вопросов: #DBMS
👩‍🏫Объяснение:
Денормализация — это сознательное нарушение нормальных форм для увеличения скорости чтения, путем исключения дорогостоящего JOIN. Материализованное представление — это «снимок» результата JOIN, который периодически обновляется. Это классический trade-off между скоростью чтения и актуальностью данных. Увеличение памяти может помочь, но не решит проблему кардинально. Два последовательных запроса (3) часто работают еще медленнее.
№4653 категория вопросов: #DBMS