java update
33
dev/architecture/Бизнес-логика.md
Normal file
@ -0,0 +1,33 @@
|
||||
---
|
||||
aliases:
|
||||
- бизнес-логике
|
||||
tags:
|
||||
- maturity/🌱
|
||||
date: 2024-10-16
|
||||
zero-link:
|
||||
parents:
|
||||
linked:
|
||||
---
|
||||
Бизнес-логика — это совокупность правил, процессов и операций, которые определяют, как бизнес-приложение или [[Информационная система|система]] обрабатывает данные и выполняет свои функции в соответствии с требованиями бизнеса. Она описывает последовательность действий, условия и правила, которые управляют поведением системы при выполнении бизнес-задач.
|
||||
|
||||
Основные аспекты бизнес-логики:
|
||||
|
||||
- **Правила и ограничения**: Определяют, что можно и нельзя делать в системе.
|
||||
- **Процессы и операции**: Описывают последовательность шагов для достижения определенного результата.
|
||||
- **Валидация данных**: Проверяет корректность и целостность вводимых или обрабатываемых данных.
|
||||
- **Взаимодействие с данными**: Определяет, как данные создаются, читаются, обновляются и удаляются.
|
||||
|
||||
Бизнес-логика отделена от пользовательского интерфейса и технической инфраструктуры, что позволяет легко вносить изменения в систему при изменении бизнес-требований без необходимости переписывать всю программу.
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../../meta/zero/00 Архитектура ПО|00 Архитектура ПО]]
|
||||
**Родитель**::
|
||||
**Источник**::
|
||||
**Создана**:: [[2024-10-16]]
|
||||
**Автор**::
|
||||
### Дополнительные материалы
|
||||
-
|
||||
|
||||
### Дочерние заметки
|
||||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
||||
|
@ -17,7 +17,7 @@ linked:
|
||||
- Сетевой ввод-вывод. Обычно сводится к общению с [Rеverse proxy](Rеverse%20proxy.md) – прием http-запроса и ответ на него, и со всевозможными сервисами, которые хранят данные – это могут быть БД, очереди, memcaсhed и т.п.
|
||||
- Склеивание строк – сериализовать данные в JSON, сформировать шаблон на основе html, посчитать sh1 или md5? выполнить сжатие данных.
|
||||
|
||||
А что такое бизнес-логика в бэкенде? Это проверки наподобие "если значение переменных больше 3-х, делай это", "если пользователь авторизован, покажи одно, если не авторизован – покажи другое". Бывают, конечно, отдельные задачи, например, по изменению размера картинки, преобразования видео, но чаще всего такие задачи решаются вне бэкенда с использованием очередей, воркеров и т.д.
|
||||
А что такое [[бизнес-логика]] в бэкенде? Это проверки наподобие "если значение переменных больше 3-х, делай это", "если пользователь авторизован, покажи одно, если не авторизован – покажи другое". Бывают, конечно, отдельные задачи, например, по изменению размера картинки, преобразования видео, но чаще всего такие задачи решаются вне бэкенда с использованием очередей, воркеров и т.д.
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../../meta/zero/00 Архитектура ИС|00 Архитектура ИС]]
|
||||
|
43
dev/java/JDeps.md
Normal file
@ -0,0 +1,43 @@
|
||||
---
|
||||
aliases:
|
||||
tags:
|
||||
- maturity/🌱
|
||||
date: 2024-10-15
|
||||
zero-link:
|
||||
parents:
|
||||
linked:
|
||||
---
|
||||
JDeps — это инструмент для анализа зависимостей модулей и пакетов, который был введён в [[../../../../knowledge/dev/java/JDK 8|JDK 8]], ещё до появления модульной системы [[Java Platform Module System|JPMS]]. Основная задача JDeps — помочь разработчикам понять, как модули и пакеты связаны друг с другом внутри проекта.
|
||||
|
||||
Основные возможности:
|
||||
- Показывает, какие модули используются в проекте, какие зависимости между ними существуют и какие модули вызывают друг друга.
|
||||
- Позволяет анализировать, какие библиотеки и классы реально используются, что помогает очищать проект от лишних зависимостей
|
||||
|
||||
Пример запуска Jdeps
|
||||
```bash
|
||||
jdeps --multi-release 17 --ignore-missing-deps -q -recursive --print-module-deps -cp 'project-core/build/lib/boot/*':'project-core/build/lib/main/*':'project-core/build/app/*' project-core/build/app/*
|
||||
|
||||
Output:
|
||||
jdk.zipfs,jdk.management,jdk.crypto.cryptoki,java.security.jgss,jdk.crypto.ec
|
||||
```
|
||||
|
||||
- `--multi-release 17`: указывает на использование многоверсионного JAR-файла для JDK 17, что позволяет учитывать разные версии классов для разных версий JDK.
|
||||
- `--ignore-missing-deps`: игнорирует отсутствующие зависимости, чтобы избежать ошибок при их отсутствии.
|
||||
- `-q`: отключает подробный вывод, что делает команду менее «шумной» и оставляет только ключевые данные.
|
||||
- `-recursive`: указывает JDeps анализировать зависимости всех модулей рекурсивно.
|
||||
- `--print-module-deps`: выводит список всех модулей, которые требуются для работы проекта.
|
||||
- `-cp`: указывает путь к классам и библиотекам проекта.
|
||||
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../../meta/zero/00 Java разработка|00 Java разработка]]
|
||||
**Родитель**::
|
||||
**Источник**::
|
||||
**Создана**:: [[2024-10-15]]
|
||||
**Автор**::
|
||||
### Дополнительные материалы
|
||||
- [[JLink]]
|
||||
|
||||
### Дочерние заметки
|
||||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
||||
|
55
dev/java/JLink.md
Normal file
@ -0,0 +1,55 @@
|
||||
---
|
||||
aliases:
|
||||
tags:
|
||||
- maturity/🌱
|
||||
date: 2024-10-15
|
||||
zero-link:
|
||||
parents:
|
||||
linked:
|
||||
---
|
||||
JLink — это мощный инструмент, который был введён в [[../../../../knowledge/dev/java/Java 9|Java 9]] как часть модульной системы [[Java Platform Module System|JPMS]]. Его основная задача — создание кастомизированных [[JDK]], включающих только необходимые модули для работы конкретного приложения.
|
||||
|
||||
Благодаря исключению ненужных модулей, приложения, собранные с помощью JLink, становятся легче и быстрее загружаются. Это особенно важно для приложений, работающих в ограниченных средах, например, в микросервисной архитектуре или на встраиваемых устройствах. Меньший размер JRE снижает время старта и использование оперативной памяти, что критично в условиях ограниченных ресурсов.
|
||||
|
||||
Например, обычный JRE содержит десятки модулей, таких как `java.sql` или `java.xml`, которые могут быть не нужны конкретному приложению. Используя JLink, разработчик может создать минимальный набор модулей, достаточный для его проекта.
|
||||
|
||||
Основная команда JLink выглядит следующим образом:
|
||||
```bash
|
||||
jlink --module-path $JAVA_HOME/jmods --add-modules <список модулей> --output <путь_к_результирующей_JRE>
|
||||
```
|
||||
|
||||
- `--module-path` указывает путь к модульной системе JDK, которая по умолчанию находится в папке `jmods` в вашем JDK.
|
||||
- `--add-modules` определяет, какие модули будут включены в итоговую сборку JRE. Это могут быть как модули стандартной библиотеки (например, `java.base`), так и модули вашего приложения.
|
||||
- `--output` указывает папку, в которую будет выведена готовая сборка JRE.
|
||||
|
||||
**Основные опции JLink**
|
||||
- `–-strip-debug`. Удаляет символы отладки из итоговой сборки JRE. Это помогает дополнительно уменьшить размер JRE, особенно когда приложение не нуждается в отладочной информации.
|
||||
- `--compress`. отвечает за сжатие файлов в сборке JRE. Она поддерживает несколько уровней сжатия:
|
||||
- 0 — без сжатия (по умолчанию),
|
||||
- 1 — сжатие классов, но без применения дорогих методов сжатия,
|
||||
- 2 — максимальное сжатие, что снижает размер сборки, но может замедлить время загрузки.
|
||||
- `-–strip-native-commands`. Эта опция удаляет нативные команды (например, инструменты вроде jcmd, jmap, и другие утилиты), которые не нужны в большинстве рабочих окружений.
|
||||
- `--launcher`. Позволяет создавать собственные лаунчеры для вашего приложения. Это может быть полезно для упрощения запуска приложения конечными пользователями. Лаунчеры создаются в директории bin сгенерированной JRE. Пример `--launcher myapp_launcher=myapp.module/com.example.Main`
|
||||
- `--bind-services`. Полезна для автоматического связывания сервисов, если приложение использует `ServiceLoader`. Эта опция необходима, когда модульная система управляет загрузкой сервисов, и их нужно зарегистрировать для запуска приложения.
|
||||
- `--target`. Позволяет создавать JRE для других платформ (например, создавать сборку для Linux с машины на Windows). Пример `--target linux-x64`
|
||||
|
||||
[[JDeps]] анализирует зависимости приложения, автоматически определяя, какие модули используются, а JLink на основе этого анализа создаёт кастомную JRE
|
||||
|
||||
Пример совместного использования JDeps и JLink:
|
||||
```bash
|
||||
jlink --add-modules $(jdeps --multi-release 17 --ignore-missing-deps -q -recursive --print-module-deps -cp 'project-core/build/lib/boot/*':'project-core/build/lib/main/*':'project-core/build/app/*' project-core/build/app/*) --strip-debug --no-man-pages --no-header-files --compress=2 --output ./build/jdk
|
||||
```
|
||||
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../../meta/zero/00 Java разработка|00 Java разработка]]
|
||||
**Родитель**::
|
||||
**Источник**::
|
||||
**Создана**:: [[2024-10-15]]
|
||||
**Автор**::
|
||||
### Дополнительные материалы
|
||||
- [[JDeps]]
|
||||
|
||||
### Дочерние заметки
|
||||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
||||
|
58
dev/java/Java Platform Module System.md
Normal file
@ -0,0 +1,58 @@
|
||||
---
|
||||
aliases:
|
||||
- модули
|
||||
- модуль
|
||||
- модулей
|
||||
- JPMS
|
||||
- модульную систему
|
||||
tags:
|
||||
- maturity/🌱
|
||||
date: 2024-10-15
|
||||
zero-link:
|
||||
parents:
|
||||
linked:
|
||||
---
|
||||
Модульная система Java (JPMS), представленная в [[../../../../knowledge/dev/java/Java 9|Java 9]], позволяет разработчикам разбивать приложения на логически обособленные блоки — модули.
|
||||
|
||||
> [!WARNING] Не Maven/Gradle модули
|
||||
> Модули в Maven и Gradle — это структурные единицы системы сборки, которые помогают управлять зависимостями и сборкой проекта, но они не являются модулями в контексте модульной системы Java (JPMS).
|
||||
|
||||
Модуль - это набор пакетов, содержащих типы (классы и интерфейсы) ресурсы и другие виды статической информации.
|
||||
|
||||
**Какие проблемы решает?**
|
||||
- Делает зависимости явными
|
||||
- Улучшает [[../architecture/Инкапсуляция|инкапсуляцию]], предотвращая создание нежелательных зависимостей между модулями. Все привыкли к модификаторам доступов у классов, но у пакетов модификаторов доступа не было.
|
||||
|
||||
Одним из ключевых преимуществ JPMS является чёткий контроль зависимостей. В старой системе через classpath все классы и пакеты были доступны друг другу без явного указания разрешений, что часто приводило к ошибкам и некорректному использованию библиотек. С JPMS разработчики могут точно указывать, какие зависимости нужны модулю и какие его части будут видимы другим модулям.
|
||||
## Дескриптор
|
||||
Каждый модуль имеет дескриптор - файл `module-info.java`, который содержит описание того, какие зависимости необходимы модулю и какие пакеты он экспортирует для других.
|
||||
|
||||
Дескриптор описывает:
|
||||
- Импортируемые, экспортируемые, транзитивно-экспортируемые пакеты.
|
||||
|
||||
Пример простого дескриптора:
|
||||
```java title=module-info.java
|
||||
module com.example.myapp {
|
||||
requires java.sql;
|
||||
exports com.example.myapp.service;
|
||||
}
|
||||
```
|
||||
|
||||
В этом примере модуль `com.example.myapp` использует (`requires`) модуль `java.sql` и экспортирует (`exports`) пакет `com.example.myapp.service`, который может быть использован другими модулями. Все остальные пакеты, не указанные в директиве `exports`, остаются приватными и недоступными для других модулей.
|
||||
|
||||
> [!NOTE] Обратная совместимость
|
||||
> Модульная система разработана с учётом совместимости с предыдущими версиями JDK. Проекты, которые не перешли на JPMS, могут по-прежнему использовать старую систему через classpath.
|
||||
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../../meta/zero/00 Java разработка|00 Java разработка]]
|
||||
**Родитель**:: [[../../../../knowledge/dev/java/Устройство Java|Устройство Java]]
|
||||
**Источник**::
|
||||
**Создана**:: [[2024-10-15]]
|
||||
**Автор**::
|
||||
### Дополнительные материалы
|
||||
-
|
||||
|
||||
### Дочерние заметки
|
||||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
||||
|
69
dev/java/Голосарий Java.md
Normal file
@ -0,0 +1,69 @@
|
||||
---
|
||||
aliases:
|
||||
tags:
|
||||
- maturity/🌱
|
||||
date: 2024-10-19
|
||||
zero-link:
|
||||
parents:
|
||||
linked:
|
||||
---
|
||||
**Code block (блок кода)**. Это фрагмент программы, заключенный между фигурными скобками `{}`. Он может быть частью метода, цикла, условия или других конструкций. В блоке кода содержатся операторы (statements), которые выполняются в порядке их написания.
|
||||
|
||||
![[../../meta/files/images/Pasted image 20241019092032.png]]
|
||||
|
||||
**Statement (оператор, предложение, инструкция)**. Выполняет какое-то действие, но не возвращает значения. Оператор заканчивается точкой с запятой `;`, однако сам символ `;` не является частью выражения (expression).
|
||||
|
||||
![[../../meta/files/images/Pasted image 20241019092300.png]]
|
||||
|
||||
**Expression (выражение)**
|
||||
Выражение — это часть кода, которая вычисляет значение. Оно может включать переменные, константы, операторы и вызовы методов.
|
||||
|
||||
Выражение может быть использовано как часть оператора или в других контекстах, например, внутри условий.
|
||||
|
||||
**Имя метода**. Имя метода идентифицирует конкретную функцию или действие, которое выполняет метод.
|
||||
|
||||
**Аргументы метода.** В Java метод всегда имеет список аргументов, даже если они отсутствуют. В таком случае используются пустые скобки `()`.
|
||||
|
||||
![[../../meta/files/images/Pasted image 20241019093016.png]]
|
||||
|
||||
**Параметры метода.** Параметры метода — это переменные, указанные в скобках при его объявлении. Эти параметры получают значения при вызове метода.
|
||||
|
||||
Есть есть для того, кто вызывает метод передаваемые значения называются аргументами, а уже в самом методе аргументы называются параметрами.
|
||||
|
||||
**Сигнатура метода.** Сигнатура метода включает его имя и список аргументов, но не возвращаемый тип. Это ключевой элемент для различения методов с одинаковыми именами, но разными параметрами.
|
||||
|
||||
**Квалификатор.** Это часть выражения слева от точки, указывающая на объект или класс, через который вызывается метод или поле. Квалификатор может быть необязательным и иногда отсутствовать.
|
||||
|
||||
![[../../meta/files/images/Pasted image 20241019092501.png]]
|
||||
|
||||
Например, в выражении `System.out.println()` квалификатором для метода `println` является `out`, а для `out` — `System`.
|
||||
|
||||
**Declaration (объявление)**. Это процесс создания переменной, метода или другой сущности в программе с указанием её типа и имени. При объявлении переменной указывается её тип (например, `int`, `String`) и имя, но ей может не присваиваться значение сразу.
|
||||
|
||||
Объявление сообщает компилятору, что данная переменная или метод существует и будет использоваться в дальнейшем. Объявление может сопровождаться **инициализацией** — присвоением переменной значения при её создании.
|
||||
|
||||
Пример объявления переменной:
|
||||
```java
|
||||
int myNumber; // Объявление переменной типа int с именем myNumber
|
||||
```
|
||||
|
||||
Пример объявления метода:
|
||||
```java
|
||||
void myMethod() {
|
||||
// тело метода
|
||||
}
|
||||
```
|
||||
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../../meta/zero/00 Java разработка|00 Java разработка]]
|
||||
**Родитель**::
|
||||
**Источник**::
|
||||
**Создана**:: [[2024-10-19]]
|
||||
**Автор**::
|
||||
### Дополнительные материалы
|
||||
-
|
||||
|
||||
### Дочерние заметки
|
||||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
||||
|
8
meta/date/daily/2024-10-19.md
Normal file
@ -0,0 +1,8 @@
|
||||
## Заметки созданные в этот день
|
||||
<!-- QueryToSerialize: LIST WHERE "garden/ru" and (contains(date, this.file.link) or contains(Создана, this.file.link)) -->
|
||||
<!-- SerializedQuery: LIST WHERE "garden/ru" and (contains(date, this.file.link) or contains(Создана, this.file.link)) -->
|
||||
- [[2024-10-19 1729318046]]
|
||||
- [[Семантический разрыв]]
|
||||
- [[Голосарий Java]]
|
||||
<!-- SerializedQuery END -->
|
||||
|
BIN
meta/files/images/Pasted image 20241019092032.png
Normal file
After Width: | Height: | Size: 476 KiB |
BIN
meta/files/images/Pasted image 20241019092300.png
Normal file
After Width: | Height: | Size: 446 KiB |
BIN
meta/files/images/Pasted image 20241019092501.png
Normal file
After Width: | Height: | Size: 404 KiB |
BIN
meta/files/images/Pasted image 20241019093016.png
Normal file
After Width: | Height: | Size: 405 KiB |
BIN
meta/files/images/comp/Pasted image 20241019092032.png
Normal file
After Width: | Height: | Size: 121 KiB |
@ -0,0 +1 @@
|
||||
d1daeba3f033bd31d7700b6e3ae83c73
|
BIN
meta/files/images/comp/Pasted image 20241019092300.png
Normal file
After Width: | Height: | Size: 116 KiB |
@ -0,0 +1 @@
|
||||
8f7e1d3f4bffeeb715397ccc50793e50
|
BIN
meta/files/images/comp/Pasted image 20241019092501.png
Normal file
After Width: | Height: | Size: 106 KiB |
@ -0,0 +1 @@
|
||||
b583807a29d4001779d2bcc488afe0f4
|
BIN
meta/files/images/comp/Pasted image 20241019093016.png
Normal file
After Width: | Height: | Size: 105 KiB |
@ -0,0 +1 @@
|
||||
7e5a2e00ff0b9f306201c3081346764c
|
BIN
meta/files/images/webp/Pasted image 20241019092032.webp
Normal file
After Width: | Height: | Size: 48 KiB |
@ -0,0 +1 @@
|
||||
d1daeba3f033bd31d7700b6e3ae83c73
|
BIN
meta/files/images/webp/Pasted image 20241019092300.webp
Normal file
After Width: | Height: | Size: 46 KiB |
@ -0,0 +1 @@
|
||||
8f7e1d3f4bffeeb715397ccc50793e50
|
BIN
meta/files/images/webp/Pasted image 20241019092501.webp
Normal file
After Width: | Height: | Size: 42 KiB |
@ -0,0 +1 @@
|
||||
b583807a29d4001779d2bcc488afe0f4
|
BIN
meta/files/images/webp/Pasted image 20241019093016.webp
Normal file
After Width: | Height: | Size: 42 KiB |
@ -0,0 +1 @@
|
||||
7e5a2e00ff0b9f306201c3081346764c
|
@ -5,6 +5,9 @@ zero-link:
|
||||
- "[[00 Разработка]]"
|
||||
title: Java разработка
|
||||
---
|
||||
В коммуникациях и обучении всегда важно устранить или уменьшить [[../../../../_inbox/Семантический разрыв|семантический разрыв]] между людьми, поэтому рекомендую переодически обращаться к [[../../dev/java/Голосарий Java|голосарию Java]], чтобы использовать одни и те же термины и определения.
|
||||
|
||||
Основные узлы:
|
||||
- [Устройство Java](Устройство%20Java.md)
|
||||
- [[../../dev/java/Многопоточность в Java|Многопоточность в Java]]
|
||||
- Системы сборки
|
||||
@ -17,7 +20,17 @@ title: Java разработка
|
||||
- [Hibernate](00%20Hibernate.md)
|
||||
- [[../../../../knowledge/dev/java/other/Jackson|Jackson]]
|
||||
- [Снипеты для Java](00%20Снипеты%20для%20Java.md)
|
||||
|
||||
## Версии Java
|
||||
- [[Java 1]]
|
||||
- [Java 7](Java%207.md)
|
||||
- [[Java 8 LTS]]
|
||||
- [Java 9](Java%209.md)
|
||||
- [[Java 10]]
|
||||
- [Java 11 LTS](Java%2011%20LTS.md)
|
||||
- [Java 12](Java%2012.md)
|
||||
- [[Java 15]]
|
||||
- [[Java 17 LTS]]
|
||||
- [[../../dev/java/Java 21 LTS|Java 21 LTS]]
|
||||
## Мои образовательные статьи
|
||||
- [Функциональные интерфейсы и лямбды в Java](https://struchkov.dev/blog/ru/lambda-expression-java/)
|
||||
- [Основы памяти в Java: Куча и Стек](https://struchkov.dev/blog/ru/memory-in-java/)
|
||||
@ -37,17 +50,7 @@ title: Java разработка
|
||||
- [Не используйте @Data](../../dev/java/Не%20используйте%20@Data.md)
|
||||
- [Возвращайте пустую коллекцию вместо null](../../dev/java/Возвращайте%20пустую%20коллекцию%20вместо%20null.md)
|
||||
- [[../../dev/java/Границы применимости Tuple и Pair в разработке|Границы применимости Tuple и Pair в разработке]]
|
||||
## Версии Java
|
||||
- [[Java 1]]
|
||||
- [Java 7](Java%207.md)
|
||||
- [[Java 8 LTS]]
|
||||
- [Java 9](Java%209.md)
|
||||
- [[Java 10]]
|
||||
- [Java 11 LTS](Java%2011%20LTS.md)
|
||||
- [Java 12](Java%2012.md)
|
||||
- [[Java 15]]
|
||||
- [[Java 17 LTS]]
|
||||
- [[../../dev/java/Java 21 LTS|Java 21 LTS]]
|
||||
|
||||
## Дополнительно
|
||||
- [Нативные сборки в Java](../../dev/java/Нативные%20сборки%20в%20Java.md)
|
||||
|
||||
|