Home - darmoise/wiki GitHub Wiki

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

Источники

⚠️ **GitHub.com Fallback** ⚠️