1. Реляционные СУБД VS NoSQL СУБД

  • В чем основные различия между реляционными базами данных (SQL) и NoSQL базами данных?
  • Какие существуют различные типы NoSQL баз данных (Key-Value, Document, Column-Family, Graph) и их области применения?
  • Когда следует выбрать SQL вместо NoSQL, и наоборот?
  • Какие компромиссы существуют между гибкостью схемы в NoSQL и строгими схемами в SQL?
  • Как работает eventual consistency в NoSQL базах данных?

2. Теорема CAP

  • Что такое теорема CAP и как она применяется к системам баз данных?
  • Объясните три свойства теоремы CAP (Консистентность, Доступность, Устойчивость к разделению).
  • Может ли база данных быть CA (Consistent & Available), но не Partition Tolerant?
  • Какие компромиссы существуют при выборе Доступности вместо Консистентности в распределенных системах?

3. ACID-транзакции

  • Что такое ACID в реляционных базах данных?
  • Объясните атомарность, консистентность, изолированность и долговечность с примерами.
  • В чем разница между строгой консистентностью, eventual consistency и консистентностью чтения собственных записей (trong consistency, eventual consistency, read-your-writes consistency)?
  • Как базы данных обеспечивают долговечность транзакций?
  • В чем разница между оптимистическим и пессимистическим контролем конкурентности (Optimistic and Pessimistic Concurrency Control)?
  • Как работает MVCC (Multi-Version Concurrency Control) в PostgreSQL?
  • Как уровни изоляции (Read Uncommitted, Read Committed, Repeatable Read, Serializable) влияют на поведение транзакций?

4. Индексы и оптимизация запросов

  • Что такое индексы баз данных и как они улучшают производительность запросов?
  • В чем разница между кластеризованными и некластеризованными индексами?
  • Как работает индекс B-дерева, и почему он так часто используется?
  • Что такое хеш-индексы и когда их следует использовать?
  • Что такое покрывающий индекс и как он ускоряет запросы?
  • Какие минусы у наличия слишком большого количества индексов?
  • Как партиционирование улучшает производительность в крупных базах данных?
  • В чем разница между горизонтальным и вертикальным партиционированием?
  • Что такое анализ плана выполнения запроса и как он может помочь в оптимизации запросов?
  • Как материализованные представления улучшают производительность чтения?
  • Что такое шардирование и как оно помогает масштабировать базы данных?

5. Основы SQL (DML, DDL, триггеры, функции)

  • В чем разница между DML (язык манипуляции данными) и DDL (язык определения данных)?
  • Какие ключевые SQL команды существуют в DML и DDL?
  • Что такое хранимая процедура и чем она отличается от функции?
  • Что такое триггеры и когда их следует использовать?
  • Как работают оконные функции в SQL?
  • В чем разница между HAVING и WHERE в SQL?
  • Как Общие Табличные Выражения (CTE) улучшают читаемость запросов?
  • Объясните разницу между INNER JOIN, LEFT JOIN, RIGHT JOIN и FULL OUTER JOIN.
  • Как работает SQL инъекция и как ее можно предотвратить?

6. Оптимизация производительности баз данных

  • Чем отличаются рабочие нагрузки с преобладанием чтения и записи при проектировании баз данных?
  • Что такое горячие точки (hotspots) в базах данных и как их можно уменьшить?
  • Как пул подключений улучшает производительность базы данных?
  • В чем разница между ленивой и жадной загрузкой (lazy loading vs. eager loading), и как это влияет на запросы в базах данных?
  • Как денормализация улучшает производительность?
  • Когда следует использовать кэширование, такие как Redis или Memcached?
  • Что такое репликация баз данных и как она улучшает доступность?
  • Что такое read-реплики и когда их следует использовать?

7. Нормализация базы данных (1NF, 2NF, 3NF, BCNF и т.д.)

  • Что такое нормализация базы данных и почему она важна?
  • Объясните 1-ю нормальную форму (1NF) с примером.
  • Объясните 2-ю нормальную форму (2NF) и как она устраняет частичные зависимости.
  • Объясните 3-ю нормальную форму (3NF) и как она устраняет транзитивные зависимости.
  • Что такое форма Бойса-Кодда (BCNF) и когда она требуется?
  • Какие компромиссы существуют при чрезмерной нормализации?
  • Когда следует использовать денормализацию?

8. Моделирование хранилищ данных (DWH)

Inmon vs. Kimball Approaches

  • В чем разница между верхне- и нижнеуровневым подходами Inmon и Kimball?
  • Когда следует использовать нормализованный подход Inmon к хранилищу данных?
  • Когда следует использовать подход моделирования по измерениям Kimball?

Star Schema vs. Snowflake Schema

  • Что такое Star Schema и почему он используется в OLAP системах?
  • Чем Snowflake Schema отличается от Star Schema?
  • Когда следует выбрать Star Schema вместо Snowflake Schema?

Data Vault

  • Что такое моделирование Data Vault и как оно отличается от схем Star/Snowflake?
  • Какие три основные сущности в Data Vault (Hubs, Links, Satellites)?
  • Какие преимущества использования Data Vault в современных DWH?

9. Продвинутые темы в базах данных

  • Чем столбцовые базы данных (ClickHouse, Apache Parquet, Redshift) отличаются от строковых баз данных?
  • Что такое графовая база данных и когда ее следует использовать?
  • Что такое база данных временных рядов и почему она оптимизирована для данных временных рядов?
  • Чем NewSQL базы данных (CockroachDB, Google Spanner) отличаются от традиционных реляционных баз данных?
  • Что такое OLTP и OLAP системы и когда их следует использовать?
  • Как события, как источник данных (Event Sourcing), влияют на проектирование баз данных?

10. Реальные сценарии и кейс-стадии

  • Как бы вы спроектировали систему базы данных с высокой доступностью для банковского приложения?
  • Как бы вы оптимизировали медленно работающий SQL запрос в большой базе данных?
  • Как бы вы решили, использовать ли PostgreSQL или MongoDB для конкретного проекта?
  • Как вы обрабатываете миграции баз данных в архитектуре микросервисов?
  • Как вы предотвращаете узкие места в базе данных в приложении с высоким трафиком?