Java Core
Какие типы есть в Java?
Переполнение
byte
Методы
Перезагрузка метода
Переопределение (override) метода
Object
Что такое POJO?
Коллекции
Collection
Методы
List
Методы:
ArrayList
Операции
Вставка
Удаление
Конструкторы
LinkedList
Vector
Stack
Set
SortedSet
Методы
NavigableSet (наследник SortedSet)
Методы
TreeSet
Конструкторы:
HashSet
LinkedHashSet
Map
Методы
SortedMap
NavigableMap
HashMap
Отличие HashMap
WeakHashMap
IdentityHashMap
TreeMap
LinkedHashMap
Красно-черное дерево (дополнить)
Queue
Методы Queue
PriorityQueue
Deque
Методы Deque
ArrayDeque
Контракт equals и hashCode, == vs equals
Сложность операций
Память в JVM
Stack
Основные свойства
Heap
Stack vs Heap
Утечка памяти
Сборщик мусора
Принцип работы
Этапы сборки мусора
Пометка объектов как живых
Зачистка мертвых объектов
Компактное расположение оставшихся объектов в памяти
Сборка мусора по поколениям
Типы ссылок
Strong reference (сильная ссылка)
Soft reference (мягкая ссылка)
Weak reference (слабая ссылка)
Phantom reference (фантомная ссылка)
Какие сборщики мусора реализованы в виртуальной машине HotSpot.
Serial (последовательный)
Parallel (параллельный)
ConcurrentMarkSweep (CMS)
Garbage-First (G1)
Метод finalize()
Пул Integer
Исключения
Сериализация
Singleton
Нюансы String
JIT-компилятор (JustInTime, dynamic-translation)
Модификаторы
transient
Функциональные интерфейсы
Список:
java.lang
java.util.function
java.util.concurrent
Метаданные
Аннотации
@Target
@Retention(RetentionPolicy)
Java IO/NIO
Отличия
Из чего состоит
buffer-based vs stream-based
Блокирующий и неблокирующий ввод/вывод
Селекторы
Пример
Итог
Источник
Spring Boot
IoC Container
Плюсы
Жизненный цикл context
1. Парсирование конфигурации и создание BeanDefinition
Способы конфигурирования контекста:
XML-конфигурации
Конфигурация через аннотации с указанием пакета для сканирования
Конфигурация через аннотации с указанием класса с @Configuration или с указанием пакета сканирования
Groovy конфигурация
2. Настройка созданных BeanDefinition
3. Создание кастомных FactoryBean
4. Создание экземпляров бинов
5. Настройка созданных бинов
JDK dynamic proxy и BeanPostProcessor
Bean
Свойства
Scope
Жизненный цикл
Статическое внедрение зависимости
MVC (Model-View-Controller)
Некоторые аннотации
ConditionalOn* (ConditionalOnProperty, ConditionalOnMissingBean и т.д.)
@Controller
@Service
@Scheduled
@RequestMapping
@RequestBody
@RequestParam
@PathVariable
@Qualifier
@Scope
@Component vs @Service vs @Repository vs @Controller
Как работать с Redis в Spring
Какие есть репозитории
CrudRepository
Вопросы
Методы
PagingAndSortingRepository
Методы
JpaRepository
Методы
Работа с Entity
@Entity
@Table
@Column(name, unique, nullable, length)
@Id
@GeneratedValue
AUTO
IDENTITY
SEQUENCE
TABLE
Аннотация @GenericGenerator
Связь на уровне таблиц
@OneToOne
@OneToMany
@ManyToOne
@ManyToMany
@JoinColumn
Кэширование в Spring
@Cacheable
@CacheEvict
@CachePut
Spring Cloud
Spring Cloud Context
Spring Cloud Security
Spring Cloud OpenFeign
Spring Validation
AOP
Транзакции в Spring
Transactional
TransactionManager
Алгоритм создания новой транзакции:
EntityManager
Источники
Авторизация
JSON Web Token (JWT)
Общее
Принцип работы
Проверка подлинности
Header
Payload
Signature и создание токена
Access и refresh token
Некоторые аспекты безопасности
Источники
Архитектура
ООП
Абстракция
Инкапсуляция
Наследование
Полиморфизм.
SOLID
Single Responsibility Principle (принцип единой ответственности)
Open closed Principle (принцип открытости-закрытости)
Liskov substitution Principle (принцип подстановки Барбары Лисков)
Interface Segregation Principle (принцип разделения интерфейсов)
Dependency Inversion Principle (принцип инверсии зависимостей)
Принципы разработки
DRY (Don’t Repeat Yourself)
KISS (Keep It Simple, Stupid)
REST
Принципы REST API
Отделение клиента от сервера
Отсутствие записи состояния клиента
Кэшируемость
Единство интерфейса
Многоуровневость системы
Предоставление кода по запросу
Начало от нуля
Ресурс
URI ресурса
Методы HTTP-запроса
Микросервисная архитектура vs монолит
Паттерны проектирования
Порождающие
Фабричный метод (factory method)
Абстрактная фабрика
Строитель
Прототип
Синглтон (одиночка)
Структурные паттерны
Адаптер
Декоратор (обертка)
Заместитель (proxy)
Мост
Фасад
Поведенческие паттерны
Итератор
Наблюдатель
Шаблонный метод
Стратегия
Цепочка обязанностей
Команда
Состояние
Отношения между классами и объектами
Наследование
Ассоциация
Агрегация
Композиция
Источники
Асинхронность и реактивность
Синхронность и асинхронность
Атомарные операции
AtomicInteger/AtomicLong
AtomicBoolean
AtomicReference
AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray
DoubleAdder/DoubleAccumulator
DoubleAdder
DoubleAccumulator
LongAccumulator, LongAdder
Lock'и
Методы
lock()
lockInterruptibly()
tryLock()
unlock()
Condition
ReentrantLock
ReentrantReadWriteLock
StampedLock
Потокобезопасные коллекции
List
ConcurrentHashMap
ConcurrentSkipListMap
Set
Объекты синхронизации
Барьер (реализация - CyclicBarrier)
Phaser
Сихронизация потоков
Mutex (мьютекс)
Монитор
Semaphore
Оператор synchronized
volatile
Параллельный запуск задач
Thread Pool
Executor
ExecutorService
submit
List invokeAll(Collection<? extends Callable> tasks)
T invokeAny(Collection<? extends Callable> tasks)
shutdown()
shutdownNow()
awaitTermination()
isShutdown()
isTerminated()
Реализации пулов
Что плохого в использовании CommonPool при executor? Какие плюсы, какие подводные камни?
ThreadPoolExecutor
ScheduledExecutorService и ScheduledThreadPoolExecutor
ForkJoinPool
Stream
parallelStream
Промежутоные операции
Завершающие операции Stream
Future
CompletableFuture
Методы
Порождающие
Промежуточные
Deadlock и Race condition
Источники
Базы данных
Блокировки
Оптимистичная блокировка
Пессимистичная блокировка
Блокировка при чтении
Блокировка при записи
Join'ы
INNER JOIN
LEFT JOIN
RIGHT JOIN
Транзакции
Свойства транзакции (ACID)
Феномены параллельного выполнения транзакций
Уровни изоляции транзакций
SQL vs noSQL
Реляционные БД
Нереляционные БД (NoSQL)
Масштабируемость
Индексы
Секционирование таблиц
Обзор
Секционирование по диапазонам
Секционирование по списку
Секционирование по хешу
Декларативное секционирование
Секционирование с использованием наследования
Пример
Оптимизация запросов
Constraint
Блок WHERE и операторы фильтрации
Представление vs материализованное представление
Операторы
WITH
creteria builder
Источники
Брокеры сообщений
Kafka vs RabbitMQ
RabbitMQ
Queue
Пример создания очереди
Свойства очереди
Publisher (или Producer)
Пример публикации сообщения
Consumer
Некоторые свойства аннотации @RabbitListener:
Exchange
Default Exchange
Direct Exchange
Fanout Exchange
Topic Exchange
Header Exchange
Пример
Binding
Пример
Источники
Крипто
Web3
Шифрование
Асимметричное
Симметричное
Что будет если (как сделать) %task_name%
Юнит тестирование
Mockito 4
Аннотации
Функции
Mockito
OngoingStubbing
Assertins
JUnit 5
AssertJ 3
Assertions
AbstractAssert
AbstractObjectAssert
AbstractThrowableAssert
Источники