Инкапсуляция - это механизм сокрытия данных и объединения их с методами для работы с этими данными.
Наследование позволяет одному классу (подклассу) наследовать поля и методы другого класса (суперкласса). Множественного наследия нет. Пример:
class Animal {
void makeSound() {
System.out.println("Animal sound");
}
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Bark");
}
}Полиморфизм — как обычно, свойство иметь один интерфейс и множество реализаций, необходимо отметить метод ключевым словом @Override. Вызов переопределенного метода во время выполнения, а не компиляции. При переопределении меняется логика метода, но никак не его аргументы или тип возвращаемого значения. Также к полиморфизму относится и перегрузка метода, позволяет обойтись одним названием для множества функций, из различий - аргументы или тип возвращаемого значения.
Ключевое слово final запрещает переопределение методов или наследование классов. 2. Redis — это нереляционная СУБД типа ключ-значение, работающее в памяти (in-memory). Применение:
- Кэш
- Очередь сообщений
- Публикация/подписка (Pub/Sub)
Выполняет функцию хранилища и кеша для основной, центральной базы данных (Postgres или Mongo)
- In-memory хранилище — все данные в оперативной памяти для максимальной скорости
- Однопоточная модель — обрабатывает запросы последовательно (без race conditions)
- Поддержка персистентности:
-
- RDB (снимки состояния)
-
- AOF (лог операций)
- Сетевой протокол RESP — простой текстовый/бинарный формат запросов
- Типы данных: строки, списки, хеши, множества, сортированные множества и др.
- Модели развертывания:
-
- Одиночный сервер
-
- Master-Slave репликация
-
- Cluster (шардирование)
- Механизмы оптимизации:
-
- Пайплайнинг команд
-
- Мультиплексирование I/O (epoll/kqueue)
- Доп. функции: Pub/Sub, транзакции, Lua-скрипты, TTL для ключей
MongoDB — это документоориентированная NoSQL база данных.
- Хранит данные в формате BSON (бинарный JSON).
- Аналог таблицы в SQL — это коллекция.
- Аналог строки — это документ (обычно объект JSON).
- Документы могут иметь разную структуру внутри одной коллекции. Пример документа:
{
"_id": "123",
"name": "Alice",
"age": 30,
"skills": ["Java", "MongoDB"]
}MongoDB используется для хранения гибких, слабо структурированных данных, масштабируется горизонтально, имеет репликацию.
Запись в Redis
- Клиент отправляет команду (например, SET key value) через TCP-соединение.
- Redis записывает данные в память.
- Возвращает клиенту подтверждение.
Чтение в Redis
- Клиент отправляет команду (например, GET key).
- Redis ищет ключ в памяти.
- Возвращает значение клиенту.
Удаление в Redis
- Команда DEL key удаляет ключ и его значение.
- Также можно установить время жизни ключа с помощью EXPIRE key seconds или SET key value EX seconds.
Высокопроизводительность благодаря:
- Хранение всех данных в оперативной памяти (RAM)
- Однопоточная модель (без блокировок между потоками)
- Оптимизированные структуры данных
- Асинхронная персистенция
Огранизовать очередь сообщений в Redis можно через тип данных List:
// Producer
redisClient.rpush("taskQueue", "task1");
// Consumer
String task = redisClient.blpop(0, "taskQueue").get(1);В Java с Redis, можно работать через библиотеку Jedis.