Compare commits
2 Commits
f01dc801c0
...
83f1e16f77
Author | SHA1 | Date | |
---|---|---|---|
83f1e16f77 | |||
ab46572c61 |
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 Архитектура ИС]]
|
||||
|
26
dev/cryptography/Скачать сертификат сайта.md
Normal file
@ -0,0 +1,26 @@
|
||||
---
|
||||
tags:
|
||||
- maturity/🌱
|
||||
date:
|
||||
- - 2024-01-10
|
||||
zero-link: []
|
||||
parents:
|
||||
---
|
||||
```shell
|
||||
openssl s_client -showcerts -connect www.example.com:443
|
||||
```
|
||||
|
||||
Эта команда выведет сертификат в консоль. Далее нужно скопировать все, что между `-----BEGIN CERTIFICATE-----` и `-----END CERTIFICATE-----` включая эти строки.
|
||||
|
||||
Скопированные данные вставить в текстовый документ и сохранить с расширением `*.cer`.
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../../meta/zero/00 Криптография|00 Криптография]]
|
||||
**Родитель**::
|
||||
**Источник**::
|
||||
**Автор**::
|
||||
**Создана**:: [[2024-01-10]]
|
||||
### Дополнительные материалы
|
||||
-
|
||||
### Дочерние заметки
|
||||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
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) -->
|
||||
|
76
dev/java/Голосарий Java.md
Normal file
@ -0,0 +1,76 @@
|
||||
---
|
||||
aliases:
|
||||
tags:
|
||||
- maturity/🌱
|
||||
date: 2024-10-19
|
||||
---
|
||||
#### Code block (блок кода)
|
||||
Это фрагмент программы, заключенный между фигурными скобками `{}`. Он может быть частью метода, цикла, условия или других конструкций. В блоке кода содержатся операторы (statements), которые выполняются в порядке их написания.
|
||||
|
||||
![[../../meta/files/images/Pasted image 20241019092032.png]]
|
||||
#### Statement (оператор, предложение, инструкция)
|
||||
Выполняет какое-то действие, но не возвращает значения. Оператор заканчивается точкой с запятой `;`, однако сам символ `;` не является частью выражения (expression).
|
||||
|
||||
![[../../meta/files/images/Pasted image 20241019092300.png]]
|
||||
#### Expression (выражение)
|
||||
Выражение — это часть кода, которая вычисляет **значение**. Оно может включать переменные, константы, операторы и вызовы методов.
|
||||
|
||||
Выражение может быть использовано как часть оператора или в других контекстах, например, внутри условий.
|
||||
#### Значение
|
||||
Это результат вычисления выражения (исключая выражения с типом `void`). Значения могут быть сохранены в переменные, переданы в методы в качестве **аргументов**, а также приняты методами в виде **параметров**. При передаче значения в метод оно копируется - [[Передача значений в метод в Java]].
|
||||
|
||||
Важно отметить, что само значение **нельзя изменить**, однако переменной, которая хранит это значение, можно присвоить новое значение.
|
||||
#### Имя метода
|
||||
Имя метода идентифицирует конкретную функцию или действие, которое выполняет метод.
|
||||
#### Аргументы метода
|
||||
В 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) -->
|
||||
|
36
dev/java/Куча.md
Normal file
@ -0,0 +1,36 @@
|
||||
---
|
||||
aliases:
|
||||
- куче
|
||||
- кучей
|
||||
tags:
|
||||
- maturity/🌱
|
||||
date: 2024-10-19
|
||||
zero-link:
|
||||
parents:
|
||||
linked:
|
||||
---
|
||||
Куча — это область памяти, используемая для динамического распределения во время выполнения программы. В отличие от стека, ==данные в куче могут существовать дольше, чем отдельные вызовы функций, а объёмы памяти, выделяемой в куче, обычно гораздо больше, чем в стеке.==
|
||||
|
||||
Куча идеально подходит для хранения данных, которые должны существовать дольше времени выполнения функции, или для работы с большими объёмами данных. Однако работа с кучей требует тщательного управления: ==если объекты не удаляются, когда они больше не нужны, это может привести к утечке памяти==, что, в свою очередь, может вызвать исчерпание доступной памяти.
|
||||
|
||||
Куча в Java — это область памяти, где создаются все объекты. Когда вы создаёте объект с помощью оператора `new`, он размещается в куче. Основное отличие стека и кучи в Java от их общего представления связано с автоматическим управлением памятью. В Java не нужно явно освобождать память в куче, так как этим занимается [[gc/Garbage Collector|сборщик мусора]].
|
||||
|
||||
Для наглядности представим стек и кучу. Серые объекты потеряли свою связь со стеком, и их нужно удалить, чтобы освободить память для новых объектов.
|
||||
|
||||
![[../../meta/files/images/Pasted image 20241019192034.png]]
|
||||
|
||||
> [!NOTE]
|
||||
> Объекты могут содержать методы, а методы — локальные переменные. Эти локальные переменные хранятся в стеке потока, даже если сам объект, которому принадлежат методы, находится в куче.
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../../meta/zero/00 Java разработка|00 Java разработка]]
|
||||
**Родитель**:: [[../../../../knowledge/dev/java/Устройство Java|Устройство Java]]
|
||||
**Источник**::
|
||||
**Создана**:: [[2024-10-19]]
|
||||
**Автор**::
|
||||
### Дополнительные материалы
|
||||
-
|
||||
|
||||
### Дочерние заметки
|
||||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
||||
|
48
dev/java/Передача значений в метод в Java.md
Normal file
@ -0,0 +1,48 @@
|
||||
---
|
||||
aliases:
|
||||
tags:
|
||||
- maturity/🌱
|
||||
date: 2024-10-19
|
||||
---
|
||||
Важно понимать, как происходит передача данных в методы. При передаче [[Примитивный тип|примитивных типов]] в метод, копируется **значение** переменной. Это значит, что ==любые изменения, которые вы делаете с переменной внутри метода, не влияют на оригинальную переменную.==
|
||||
|
||||
Однако, при передаче [[Ссылочный тип|ссылочных типов]] копируется значение ссылки на объект, а не сам объект. Это значит, что ==если изменить содержимое объекта через эту ссылку, изменения отразятся и на оригинальном объекте==.
|
||||
|
||||
Это часто становится причиной ошибок у новичков, поэтому представьте, что [[Примитивный тип|примитивные типы]] — это как копирование листа бумаги: вы даете кому-то копию, и он может писать на ней, но оригинал останется нетронутым. А [[Ссылочный тип|ссылочные типы]] — это как передача адреса на дом: если кто-то приедет по адресу и изменит что-то в доме, оригинальный дом изменится, даже если у каждого будет только этот “адрес”.
|
||||
|
||||
```java
|
||||
public class Example {
|
||||
public static void main(String[] args) {
|
||||
int primitive = 5;
|
||||
modifyPrimitive(primitive);
|
||||
System.out.println("После изменения примитива: " + primitive); // Выведет 5
|
||||
|
||||
int[] reference = {1, 2, 3};
|
||||
modifyReference(reference);
|
||||
System.out.println("После изменения ссылочного типа: " + reference[0]); // Выведет 100
|
||||
}
|
||||
|
||||
public static void modifyPrimitive(int number) {
|
||||
number = 10; // Изменение копии примитива, оригинал не затронут
|
||||
}
|
||||
|
||||
public static void modifyReference(int[] array) {
|
||||
array[0] = 100; // Изменение объекта по ссылке, оригинальный массив изменится
|
||||
}
|
||||
}
|
||||
```
|
||||
- В примере с примитивным типом (int), значение переменной primitive не изменяется, потому что в метод передаётся копия значения.
|
||||
- В примере с массивом (ссылочный тип), изменяется оригинальный объект, так как в метод передается ссылка на массив, и мы изменяем содержимое этого объекта через ссылку.
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../../meta/zero/00 Java разработка|00 Java разработка]]
|
||||
**Родитель**::
|
||||
**Источник**::
|
||||
**Создана**:: [[2024-10-19]]
|
||||
**Автор**::
|
||||
### Дополнительные материалы
|
||||
-
|
||||
|
||||
### Дочерние заметки
|
||||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
||||
|
28
dev/java/Примитивный тип.md
Normal file
@ -0,0 +1,28 @@
|
||||
---
|
||||
aliases:
|
||||
- примитивных типов
|
||||
- примитивные типы
|
||||
tags:
|
||||
- maturity/🌱
|
||||
date: 2024-10-19
|
||||
zero-link:
|
||||
parents:
|
||||
linked:
|
||||
---
|
||||
- Логические: boolean - true, false
|
||||
- Целочисленные: byte, short, int, long - 42, -1
|
||||
- Дробные: float, double - 3.141, NaN
|
||||
- Символьные (UTF-16): CHAR
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../../meta/zero/00 Java разработка|00 Java разработка]]
|
||||
**Родитель**::
|
||||
**Источник**::
|
||||
**Создана**:: [[2024-10-19]]
|
||||
**Автор**::
|
||||
### Дополнительные материалы
|
||||
- [[Ссылочный тип|Ссылочный тип]]
|
||||
|
||||
### Дочерние заметки
|
||||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
||||
|
32
dev/java/Ссылочный тип.md
Normal file
@ -0,0 +1,32 @@
|
||||
---
|
||||
aliases:
|
||||
- ссылочных типов
|
||||
- ссылочные типы
|
||||
tags:
|
||||
- maturity/🌱
|
||||
date: 2024-10-19
|
||||
zero-link:
|
||||
parents:
|
||||
linked:
|
||||
---
|
||||
Ссылочные типы позволяют работать с пользовательскими типами данных, такими как объекты классов. Однако, важно понимать, что ==переменная ссылочного типа не хранит сами данные объекта. Вместо этого переменная хранит **ссылку** на объект==, который находится в области памяти, называемой [[Куча|кучей]] (heap).
|
||||
|
||||
Когда вы объявляете переменную ссылочного типа, например:
|
||||
```java
|
||||
MyClass obj = new MyClass();
|
||||
```
|
||||
|
||||
Переменная `obj` ==не содержит сам объект класса `MyClass`, а лишь хранит адрес этого объекта в памяти==. То есть, в самой переменной хранится ссылка на объект, а не его данные. Все операции с такой переменной выполняются через эту ссылку.
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../../meta/zero/00 Java разработка|00 Java разработка]]
|
||||
**Родитель**::
|
||||
**Источник**::
|
||||
**Создана**:: [[2024-10-19]]
|
||||
**Автор**::
|
||||
### Дополнительные материалы
|
||||
- [[Примитивный тип|Примитивный тип]]
|
||||
|
||||
### Дочерние заметки
|
||||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
||||
|
34
dev/snippet/Добавление сертификата в JVM.md
Normal file
@ -0,0 +1,34 @@
|
||||
---
|
||||
tags:
|
||||
- maturity/🌱
|
||||
date:
|
||||
- - 2024-01-10
|
||||
---
|
||||
Первым делом необходимо [скачать сертификат сайта](../cryptography/Скачать%20сертификат%20сайта.md).
|
||||
|
||||
Теперь используя `keytool` добавим сертификат в JVM.
|
||||
|
||||
```shell
|
||||
keytool -importcert -file cert_name.cer -keystore keystore_path -storepass "changeit" -noprompt -alias "alias_cert"
|
||||
```
|
||||
|
||||
Где
|
||||
- `cert_name.cer` - имя сертификата
|
||||
- `keystore_path` - путь до хранилища сертификатов в JVM
|
||||
- Пример: `jdk_path/lib/security/cacerts`
|
||||
- `alias_cert` - алиас для сертификата
|
||||
|
||||
> [!WARNING]
|
||||
> Возможно потребуется выход из системы, чтобы применились изменения.
|
||||
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../../meta/zero/00 Снипеты для Java|00 Снипеты для Java]]
|
||||
**Родитель**::
|
||||
**Источник**::
|
||||
**Автор**::
|
||||
**Создана**:: [[2024-01-10]]
|
||||
### Дополнительные материалы
|
||||
-
|
||||
### Дочерние заметки
|
||||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
34
dev/Не используйте var в Java.md
Normal file
@ -0,0 +1,34 @@
|
||||
---
|
||||
aliases:
|
||||
tags:
|
||||
- maturity/🌱
|
||||
- content/opinion
|
||||
date: 2024-10-20
|
||||
zero-link:
|
||||
parents:
|
||||
linked:
|
||||
---
|
||||
Использование var, введенное в [[../../../knowledge/dev/java/Java 10|Java 10]], может на первый взгляд показаться удобным инструментом для сокращения объема кода. Однако есть и проблемы:
|
||||
|
||||
Одним из основных недостатков использования `var` является то, что он скрывает тип переменной, что приводит к пониженной [[Читаемый код|читаемости кода]], особенно на этапе ревью. В коде, который разработчик может читать через несколько месяцев или передать другим коллегам, ==отсутствие явного типа затрудняет понимание происходящего==.
|
||||
|
||||
Например, следующий код не даёт никакой информации о том, что такое `result` и что возвращает метод `process()`.
|
||||
|
||||
```java
|
||||
var result = process();
|
||||
```
|
||||
|
||||
Это может привести к путанице, особенно если метод возвращает обобщённый тип или коллекцию. Без явного указания типов разработчикам придётся тратить дополнительное время на выяснение, что происходит.
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../meta/zero/00 Java разработка|00 Java разработка]]
|
||||
**Родитель**::
|
||||
**Источник**::
|
||||
**Создана**:: [[2024-10-20]]
|
||||
**Автор**::
|
||||
### Дополнительные материалы
|
||||
-
|
||||
|
||||
### Дочерние заметки
|
||||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
||||
|
37
dev/Читаемый код.md
Normal file
@ -0,0 +1,37 @@
|
||||
---
|
||||
aliases:
|
||||
- читаемость кода
|
||||
- читаемости кода
|
||||
tags:
|
||||
- maturity/🌱
|
||||
- content/opinion
|
||||
date: 2024-10-20
|
||||
zero-link:
|
||||
parents:
|
||||
linked:
|
||||
---
|
||||
Код — это не только набор инструкций для машины, но и средство общения между разработчиками. Большую часть времени программисты проводят, читая чужой код, поэтому ==каждый фрагмент кода должен быть понятен не только автору, но и другим членам команды==. Удобство чтения и понимания кода коллегами — один из ключевых факторов успешной [[../productivity/Эффективная команда разработки|командной работы]]. Это требует от разработчиков внимательного подхода к написанию кода: важно писать не только для себя, но и для своих коллег.
|
||||
|
||||
Если ваш код понятен только вам и не может быть поддержан другими, это сигнал того, что вы недостаточно эффективный разработчик.
|
||||
|
||||
**Рекомендации**:
|
||||
- **Пишите просто и ясно**. Используйте понятные и распространённые конструкции языка, которые легко читаются и понимаются коллегами.
|
||||
- **Не усложняйте**. Не стремитесь использовать сложные или малоизвестные возможности языка, если они не приносят очевидной пользы. Простота всегда предпочтительнее.
|
||||
- **Комментируйте важные моменты**. Там, где логика может быть неочевидной, добавьте комментарии, которые объясняют цель или обоснование ваших решений.
|
||||
- **Следуйте соглашениям по стилю**. Соблюдайте единые стандарты кодирования, принятые в команде, будь то соглашения о стиле, именовании или форматировании.
|
||||
- **Используйте осмысленные имена**. Переменные, функции и классы должны иметь названия, которые чётко отражают их назначение. Избегайте сокращений, если они могут быть непонятны другим.
|
||||
- **Проводите регулярные ревью кода**. Обратная связь от коллег помогает выявить возможные сложности в понимании кода и улучшить его качество.
|
||||
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../meta/zero/00 Разработка|00 Разработка]]
|
||||
**Родитель**::
|
||||
**Источник**::
|
||||
**Создана**:: [[2024-10-20]]
|
||||
**Автор**::
|
||||
### Дополнительные материалы
|
||||
-
|
||||
|
||||
### Дочерние заметки
|
||||
<!-- 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/Pasted image 20241019192034.png
Normal file
After Width: | Height: | Size: 731 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/comp/Pasted image 20241019192034.png
Normal file
After Width: | Height: | Size: 252 KiB |
@ -0,0 +1 @@
|
||||
a4349e620be07c2424843212bb5f573d
|
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
|
BIN
meta/files/images/webp/Pasted image 20241019192034.webp
Normal file
After Width: | Height: | Size: 154 KiB |
@ -0,0 +1 @@
|
||||
a4349e620be07c2424843212bb5f573d
|
@ -5,6 +5,10 @@ zero-link:
|
||||
- "[[00 Разработка]]"
|
||||
title: Java разработка
|
||||
---
|
||||
В коммуникациях и обучении всегда важно устранить или уменьшить [[../../../../_inbox/Семантический разрыв|семантический разрыв]] между людьми, поэтому рекомендую переодически обращаться к [[../../dev/java/Голосарий Java|голосарию Java]], чтобы использовать одни и те же термины и определения.
|
||||
|
||||
Основные узлы:
|
||||
|
||||
- [Устройство Java](Устройство%20Java.md)
|
||||
- [[../../dev/java/Многопоточность в Java|Многопоточность в Java]]
|
||||
- Системы сборки
|
||||
@ -18,6 +22,23 @@ title: Java разработка
|
||||
- [[../../../../knowledge/dev/java/other/Jackson|Jackson]]
|
||||
- [Снипеты для Java](00%20Снипеты%20для%20Java.md)
|
||||
|
||||
Обучение:
|
||||
- [[../../dev/java/Голосарий Java|Голосарий Java]]
|
||||
- Типы
|
||||
- [[../../dev/java/Примитивный тип|Примитивный тип]]
|
||||
- [[../../dev/java/Ссылочный тип|Ссылочный тип]]
|
||||
- [[../../dev/java/Передача значений в метод в Java|Передача значений в метод в Java]]
|
||||
## Версии 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 +58,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]]
|
||||
- [[../../dev/Не используйте var в Java|Не используйте var в Java]]
|
||||
## Дополнительно
|
||||
- [Нативные сборки в Java](../../dev/java/Нативные%20сборки%20в%20Java.md)
|
||||
|
||||
|
@ -6,17 +6,24 @@ zero-link:
|
||||
aliases:
|
||||
- Скрипты на Java
|
||||
---
|
||||
- [Парсинг URL c помощью регулярки](../../dev/snippet/Парсинг%20URL%20c%20помощью%20регулярки.md)
|
||||
- [Сериализация и Десериализация даты в Jackson](../../dev/snippet/Сериализация%20и%20Десериализация%20даты%20в%20Jackson.md)
|
||||
- [Создание linux сервиса для Java приложения](../../dev/snippet/Создание%20linux%20сервиса%20для%20Java%20приложения.md)
|
||||
- [Игнорирование ошибок сертификата OkHttp3](../../dev/snippet/Игнорирование%20ошибок%20сертификата%20OkHttp3.md)
|
||||
- [Mock конфигурация Oauth2 для SpringBoot](../../dev/snippet/Mock%20конфигурация%20Oauth2%20для%20SpringBoot.md)
|
||||
- [Несколько подключений к базе H2](../../dev/snippet/Несколько%20подключений%20к%20базе%20H2.md)
|
||||
- [Дебаг приложения на этапе компиляции IntelliJ IDEA](../../dev/snippet/Дебаг%20приложения%20на%20этапе%20компиляции%20IntelliJ%20IDEA.md)
|
||||
- [Логирование SQL в Hibernate](../../dev/java/hibernate/Логирование%20SQL%20в%20Hibernate.md)
|
||||
- [Бинарный поиск на Java](../../dev/java/Бинарный%20поиск%20на%20Java.md)
|
||||
- [[../../dev/snippet/Проблема с Hibernate Reactive в Telegram SDK для Java|Проблема с Hibernate Reactive в Telegram SDK для Java]]
|
||||
- [[../../dev/snippet/Реализация SHA-256 на Java|Реализация SHA-256 на Java]]
|
||||
- [[../../../../_inbox/Реализация GZIP в Java|Реализация GZIP в Java]]
|
||||
- [[../../dev/snippet/Реализация Base64 на Java|Реализация Base64 на Java]]
|
||||
- [[../../dev/snippet/Преобразование Json из коллекции в Java объект при помощи Jackson|Преобразование Json из коллекции в Java объект при помощи Jackson]]
|
||||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Область, this.file.link) or contains(zero-link, this.file.link) -->
|
||||
<!-- SerializedQuery: LIST FROM [[]] WHERE contains(Область, this.file.link) or contains(zero-link, this.file.link) -->
|
||||
- [[Реализация GZIP в Java]]
|
||||
- [[MD5]]
|
||||
- [[SHA-256]]
|
||||
- [[Логирование SQL в Hibernate]]
|
||||
- [[StartupEvent в Quarkus]]
|
||||
- [[Бинарный поиск на Java]]
|
||||
- [[Mock конфигурация Oauth2 для SpringBoot]]
|
||||
- [[Дебаг приложения на этапе компиляции IntelliJ IDEA]]
|
||||
- [[Игнорирование ошибок сертификата OkHttp3]]
|
||||
- [[Несколько подключений к базе H2]]
|
||||
- [[Парсинг URL c помощью регулярки]]
|
||||
- [[Преобразование Json из коллекции в Java объект при помощи Jackson]]
|
||||
- [[Проблема с Hibernate Reactive в Telegram SDK для Java]]
|
||||
- [[Реализация Base64 на Java]]
|
||||
- [[Реализация SHA-256 на Java]]
|
||||
- [[Сериализация и Десериализация даты в Jackson]]
|
||||
- [[Создание linux сервиса для Java приложения]]
|
||||
- [[Добавление сертификата в JVM]]
|
||||
<!-- SerializedQuery END -->
|
||||
|
32
productivity/Эффективная команда разработки.md
Normal file
@ -0,0 +1,32 @@
|
||||
---
|
||||
aliases:
|
||||
tags:
|
||||
- maturity/🌱
|
||||
date: 2024-10-20
|
||||
zero-link:
|
||||
parents:
|
||||
linked:
|
||||
---
|
||||
В программной разработке часто упускается из виду один важный аспект: это командная работа. Написание кода — не просто индивидуальная деятельность, а коллективный процесс, требующий эффективного взаимодействия между всеми членами команды. В больших проектах успех невозможен, если каждый действует исключительно самостоятельно, не оглядываясь на коллег.
|
||||
|
||||
Вот несколько ключевых принципов, которые помогут разработчикам осознать важность командного подхода и находить баланс между личной эффективностью и потребностями команды.
|
||||
## Совместная работа
|
||||
Результат работы — это общая ответственность. В одиночку создать успешный продукт сложно, так как успех зависит от слаженности всех элементов системы. Каждый участник команды должен осознавать, что его работа — это не просто код, а часть общей задачи. ==Успех проекта напрямую зависит от качества взаимодействия, координации и взаимопонимания между участниками.==
|
||||
## Читаемость кода
|
||||
- [[../dev/Читаемый код|Читаемый код]]
|
||||
## Время на взаимодействие — залог успеха
|
||||
Часто можно встретить мнение, что разработчики должны тратить 100% своего времени на написание кода. Однако успех больших проектов зависит от многих аспектов: ревью кода, обсуждения архитектурных решений, согласование подходов и документация. Эти процессы являются неотъемлемой частью командной работы и требуют выделения времени. Умение разработчика эффективно коммуницировать и обсуждать решения с коллегами столь же важно, как и умение писать код.
|
||||
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../meta/zero/00 Командная продуктивность|00 Командная продуктивность]]
|
||||
**Родитель**::
|
||||
**Источник**::
|
||||
**Создана**:: [[2024-10-20]]
|
||||
**Автор**::
|
||||
### Дополнительные материалы
|
||||
-
|
||||
|
||||
### Дочерние заметки
|
||||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
||||
|