Общие Flashcards
Шаблоны проектирования
- порождающие (синглтон, билдер, фабрика)
- структурные (прокси, бридж, адаптер, декоратор, фасад)
- поведенческие (стратегия, команда, итератор)
- паттерны декомпозиции (DDD, по бизнес возможностям)
- паттерны перехода на микросервисы (душитель, параллельный запуск)
- распределенные транзакции (сага, 2pc)
- коммуникация и устойчивость (API gateway, Discovery, circuit braker, retry)
- развертывание (blue green deployment)
- sidecar container
- external configuration
- backend for frontend
распределенные транзакции
сага, 2pc
оркестратор, хореография
JMM
Стек, Хип
Методы Object
getClass():
hashCode():
equals(Object obj):
clone()
toString()
notify()
notifyAll()
wait()
finalize()
принципы ООП
инкапсуляция наследование полиморфизм
SOLID
Single Responsibility
Open/Closed
Liskov Substitution
Interface Segregation
Dependency Inversion
размеры примитивных типов
byte: 1 , 27 = 128
short: 2, 215 = 32768
int: 4, 231
long: 8, 263
float: 4,
double: 8
char: 2, 2**16
Exceptions
Классы многопоточности
Класс Thread - предоставляет самый базовый способ создания и управления потоками в Java.
Интерфейс Runnable - позволяет определить задачу, которую может выполнить поток.
Класс Executor - предоставляет удобный способ управления группой потоков
Классы Lock и Condition из пакета java.util.concurrent.locks - предоставляют механизмы блокировки и синхронизации доступа к общим ресурсам.
Классы Semaphore и CyclicBarrier из пакета java.util.concurrent - предоставляют дополнительные средства для управления поведением параллельного кода.
Классы AtomicBoolean, AtomicInteger и AtomicReference из пакета java.util.concurrent.atomic - предоставляют безопасные атомарные операции над примитивными типами данных и объектами.
Классы CountDownLatch и Exchanger из пакета java.util.concurrent - предоставляют дополнительные возможности для синхронизации потоков.
Run Time Data Areas
Heap, Method Area, JVM Stack, Native Method Stack
GC
default G1 since java9, responsiveness Shenandoah, big heap ZGC
G1: mark and sweep concurrently, compact not
ZGC: compact concurrently
Shenandoah: copy object object first and change reference than delete
old - serial, parallel
Stream average
List<Integer> integerList = List.of(1, 2, 3, 4, 5);
double result = integerList.stream()
первый вариант
.mapToInt(Integer::intValue)
.average()
.orElse(0.0);
второй вариант
.reduce(0, Integer::sum) / (double) integerList.size();</Integer>
Stream 1-10
IntStream.iterate(0, i -> i + 1)
.limit(10)
IntStream.rangeClosed(1, 10)
Stream lower case
List<String> list = Stream.of(strings)
.map(String::toUpperCase)
.toList(); or .collect(Collectors.toList());</String>
Stream combine string
List<String> letters = Arrays.asList("a", "b", "c", "d", "e");
String result = letters.stream().reduce("", String::concat);</String>