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 для конкретного проекта?
- Как вы обрабатываете миграции баз данных в архитектуре микросервисов?
- Как вы предотвращаете узкие места в базе данных в приложении с высоким трафиком?