diff --git a/dev/architecture/Бизнес-логика.md b/dev/architecture/Бизнес-логика.md new file mode 100644 index 00000000..5e16a9e8 --- /dev/null +++ b/dev/architecture/Бизнес-логика.md @@ -0,0 +1,33 @@ +--- +aliases: + - бизнес-логике +tags: + - maturity/🌱 +date: 2024-10-16 +zero-link: +parents: +linked: +--- +Бизнес-логика — это совокупность правил, процессов и операций, которые определяют, как бизнес-приложение или [[Информационная система|система]] обрабатывает данные и выполняет свои функции в соответствии с требованиями бизнеса. Она описывает последовательность действий, условия и правила, которые управляют поведением системы при выполнении бизнес-задач. + +Основные аспекты бизнес-логики: + +- **Правила и ограничения**: Определяют, что можно и нельзя делать в системе. +- **Процессы и операции**: Описывают последовательность шагов для достижения определенного результата. +- **Валидация данных**: Проверяет корректность и целостность вводимых или обрабатываемых данных. +- **Взаимодействие с данными**: Определяет, как данные создаются, читаются, обновляются и удаляются. + +Бизнес-логика отделена от пользовательского интерфейса и технической инфраструктуры, что позволяет легко вносить изменения в систему при изменении бизнес-требований без необходимости переписывать всю программу. +*** +## Мета информация +**Область**:: [[../../meta/zero/00 Архитектура ПО|00 Архитектура ПО]] +**Родитель**:: +**Источник**:: +**Создана**:: [[2024-10-16]] +**Автор**:: +### Дополнительные материалы +- + +### Дочерние заметки + + diff --git a/dev/architecture/Бэкенд.md b/dev/architecture/Бэкенд.md index 1defd8e7..7b443bd4 100644 --- a/dev/architecture/Бэкенд.md +++ b/dev/architecture/Бэкенд.md @@ -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 Архитектура ИС]] diff --git a/dev/java/JDeps.md b/dev/java/JDeps.md new file mode 100644 index 00000000..e0ef96b0 --- /dev/null +++ b/dev/java/JDeps.md @@ -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]] + +### Дочерние заметки + + diff --git a/dev/java/JLink.md b/dev/java/JLink.md new file mode 100644 index 00000000..6da05c75 --- /dev/null +++ b/dev/java/JLink.md @@ -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]] + +### Дочерние заметки + + diff --git a/dev/java/Java Platform Module System.md b/dev/java/Java Platform Module System.md new file mode 100644 index 00000000..3518c4e6 --- /dev/null +++ b/dev/java/Java Platform Module System.md @@ -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]] +**Автор**:: +### Дополнительные материалы +- + +### Дочерние заметки + + diff --git a/dev/java/Голосарий Java.md b/dev/java/Голосарий Java.md new file mode 100644 index 00000000..06088b63 --- /dev/null +++ b/dev/java/Голосарий Java.md @@ -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]] +**Автор**:: +### Дополнительные материалы +- + +### Дочерние заметки + + diff --git a/meta/date/daily/2024-10-19.md b/meta/date/daily/2024-10-19.md new file mode 100644 index 00000000..902851b7 --- /dev/null +++ b/meta/date/daily/2024-10-19.md @@ -0,0 +1,8 @@ +## Заметки созданные в этот день + + +- [[2024-10-19 1729318046]] +- [[Семантический разрыв]] +- [[Голосарий Java]] + + diff --git a/meta/files/images/Pasted image 20241019092032.png b/meta/files/images/Pasted image 20241019092032.png new file mode 100644 index 00000000..c0319572 Binary files /dev/null and b/meta/files/images/Pasted image 20241019092032.png differ diff --git a/meta/files/images/Pasted image 20241019092300.png b/meta/files/images/Pasted image 20241019092300.png new file mode 100644 index 00000000..b8d88286 Binary files /dev/null and b/meta/files/images/Pasted image 20241019092300.png differ diff --git a/meta/files/images/Pasted image 20241019092501.png b/meta/files/images/Pasted image 20241019092501.png new file mode 100644 index 00000000..ded487b4 Binary files /dev/null and b/meta/files/images/Pasted image 20241019092501.png differ diff --git a/meta/files/images/Pasted image 20241019093016.png b/meta/files/images/Pasted image 20241019093016.png new file mode 100644 index 00000000..3ce9fad3 Binary files /dev/null and b/meta/files/images/Pasted image 20241019093016.png differ diff --git a/meta/files/images/comp/Pasted image 20241019092032.png b/meta/files/images/comp/Pasted image 20241019092032.png new file mode 100644 index 00000000..82fd8e9d Binary files /dev/null and b/meta/files/images/comp/Pasted image 20241019092032.png differ diff --git a/meta/files/images/comp/Pasted image 20241019092032.png.md5 b/meta/files/images/comp/Pasted image 20241019092032.png.md5 new file mode 100644 index 00000000..9f3d2f61 --- /dev/null +++ b/meta/files/images/comp/Pasted image 20241019092032.png.md5 @@ -0,0 +1 @@ +d1daeba3f033bd31d7700b6e3ae83c73 diff --git a/meta/files/images/comp/Pasted image 20241019092300.png b/meta/files/images/comp/Pasted image 20241019092300.png new file mode 100644 index 00000000..9d2adfe3 Binary files /dev/null and b/meta/files/images/comp/Pasted image 20241019092300.png differ diff --git a/meta/files/images/comp/Pasted image 20241019092300.png.md5 b/meta/files/images/comp/Pasted image 20241019092300.png.md5 new file mode 100644 index 00000000..bef33ccd --- /dev/null +++ b/meta/files/images/comp/Pasted image 20241019092300.png.md5 @@ -0,0 +1 @@ +8f7e1d3f4bffeeb715397ccc50793e50 diff --git a/meta/files/images/comp/Pasted image 20241019092501.png b/meta/files/images/comp/Pasted image 20241019092501.png new file mode 100644 index 00000000..4718e37d Binary files /dev/null and b/meta/files/images/comp/Pasted image 20241019092501.png differ diff --git a/meta/files/images/comp/Pasted image 20241019092501.png.md5 b/meta/files/images/comp/Pasted image 20241019092501.png.md5 new file mode 100644 index 00000000..31f98a12 --- /dev/null +++ b/meta/files/images/comp/Pasted image 20241019092501.png.md5 @@ -0,0 +1 @@ +b583807a29d4001779d2bcc488afe0f4 diff --git a/meta/files/images/comp/Pasted image 20241019093016.png b/meta/files/images/comp/Pasted image 20241019093016.png new file mode 100644 index 00000000..a99f65e3 Binary files /dev/null and b/meta/files/images/comp/Pasted image 20241019093016.png differ diff --git a/meta/files/images/comp/Pasted image 20241019093016.png.md5 b/meta/files/images/comp/Pasted image 20241019093016.png.md5 new file mode 100644 index 00000000..26b8a028 --- /dev/null +++ b/meta/files/images/comp/Pasted image 20241019093016.png.md5 @@ -0,0 +1 @@ +7e5a2e00ff0b9f306201c3081346764c diff --git a/meta/files/images/webp/Pasted image 20241019092032.webp b/meta/files/images/webp/Pasted image 20241019092032.webp new file mode 100644 index 00000000..040841ba Binary files /dev/null and b/meta/files/images/webp/Pasted image 20241019092032.webp differ diff --git a/meta/files/images/webp/Pasted image 20241019092032.webp.md5 b/meta/files/images/webp/Pasted image 20241019092032.webp.md5 new file mode 100644 index 00000000..9f3d2f61 --- /dev/null +++ b/meta/files/images/webp/Pasted image 20241019092032.webp.md5 @@ -0,0 +1 @@ +d1daeba3f033bd31d7700b6e3ae83c73 diff --git a/meta/files/images/webp/Pasted image 20241019092300.webp b/meta/files/images/webp/Pasted image 20241019092300.webp new file mode 100644 index 00000000..e1f317c8 Binary files /dev/null and b/meta/files/images/webp/Pasted image 20241019092300.webp differ diff --git a/meta/files/images/webp/Pasted image 20241019092300.webp.md5 b/meta/files/images/webp/Pasted image 20241019092300.webp.md5 new file mode 100644 index 00000000..bef33ccd --- /dev/null +++ b/meta/files/images/webp/Pasted image 20241019092300.webp.md5 @@ -0,0 +1 @@ +8f7e1d3f4bffeeb715397ccc50793e50 diff --git a/meta/files/images/webp/Pasted image 20241019092501.webp b/meta/files/images/webp/Pasted image 20241019092501.webp new file mode 100644 index 00000000..b3ac3e32 Binary files /dev/null and b/meta/files/images/webp/Pasted image 20241019092501.webp differ diff --git a/meta/files/images/webp/Pasted image 20241019092501.webp.md5 b/meta/files/images/webp/Pasted image 20241019092501.webp.md5 new file mode 100644 index 00000000..31f98a12 --- /dev/null +++ b/meta/files/images/webp/Pasted image 20241019092501.webp.md5 @@ -0,0 +1 @@ +b583807a29d4001779d2bcc488afe0f4 diff --git a/meta/files/images/webp/Pasted image 20241019093016.webp b/meta/files/images/webp/Pasted image 20241019093016.webp new file mode 100644 index 00000000..fbbb73cd Binary files /dev/null and b/meta/files/images/webp/Pasted image 20241019093016.webp differ diff --git a/meta/files/images/webp/Pasted image 20241019093016.webp.md5 b/meta/files/images/webp/Pasted image 20241019093016.webp.md5 new file mode 100644 index 00000000..26b8a028 --- /dev/null +++ b/meta/files/images/webp/Pasted image 20241019093016.webp.md5 @@ -0,0 +1 @@ +7e5a2e00ff0b9f306201c3081346764c diff --git a/meta/zero/00 Java разработка.md b/meta/zero/00 Java разработка.md index 787a483a..505d9798 100644 --- a/meta/zero/00 Java разработка.md +++ b/meta/zero/00 Java разработка.md @@ -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)