java update
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Struchkov Mark 2024-10-20 20:19:00 +03:00
parent ab46572c61
commit 83f1e16f77
No known key found for this signature in database
GPG Key ID: A3F0AC3F0FA52F3C
17 changed files with 366 additions and 35 deletions

View 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) -->

View File

@ -3,42 +3,45 @@ aliases:
tags:
- maturity/🌱
date: 2024-10-19
zero-link:
parents:
linked:
---
**Code block (блок кода)**. Это фрагмент программы, заключенный между фигурными скобками `{}`. Он может быть частью метода, цикла, условия или других конструкций. В блоке кода содержатся операторы (statements), которые выполняются в порядке их написания.
#### Code block (блок кода)
Это фрагмент программы, заключенный между фигурными скобками `{}`. Он может быть частью метода, цикла, условия или других конструкций. В блоке кода содержатся операторы (statements), которые выполняются в порядке их написания.
![[../../meta/files/images/Pasted image 20241019092032.png]]
**Statement (оператор, предложение, инструкция)**. Выполняет какое-то действие, но не возвращает значения. Оператор заканчивается точкой с запятой `;`, однако сам символ `;` не является частью выражения (expression).
#### Statement (оператор, предложение, инструкция)
Выполняет какое-то действие, но не возвращает значения. Оператор заканчивается точкой с запятой `;`, однако сам символ `;` не является частью выражения (expression).
![[../../meta/files/images/Pasted image 20241019092300.png]]
**Expression (выражение)**
Выражение — это часть кода, которая вычисляет значение. Оно может включать переменные, константы, операторы и вызовы методов.
#### Expression (выражение)
Выражение — это часть кода, которая вычисляет **значение**. Оно может включать переменные, константы, операторы и вызовы методов.
Выражение может быть использовано как часть оператора или в других контекстах, например, внутри условий.
#### Значение
Это результат вычисления выражения (исключая выражения с типом `void`). Значения могут быть сохранены в переменные, переданы в методы в качестве **аргументов**, а также приняты методами в виде **параметров**. При передаче значения в метод оно копируется - [[Передача значений в метод в Java]].
**Имя метода**. Имя метода идентифицирует конкретную функцию или действие, которое выполняет метод.
**Аргументы метода.** В 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`) и имя, но ей может не присваиваться значение сразу.
#### Переменная
это именованная область памяти, которая используется для хранения данных. Переменная может содержать различные типы данных, такие как числа, строки или объекты. Она позволяет программам запоминать значения и использовать их в дальнейшем.
#### Declaration (объявление)
Это процесс создания переменной, метода или другой сущности в программе с указанием её типа и имени. При объявлении переменной указывается её тип (например, `int`, `String`) и имя, но ей может не присваиваться значение сразу.
Объявление сообщает компилятору, что данная переменная или метод существует и будет использоваться в дальнейшем. Объявление может сопровождаться **инициализацией** — присвоением переменной значения при её создании.
@ -53,6 +56,10 @@ void myMethod() {
// тело метода
}
```
#### Область видимости
это часть программы, в которой переменная доступна для использования. Переменные видимы и могут быть использованы только в пределах той области, где они были объявлены.
#### Локальная переменная
это переменная, объявленная внутри метода или блока кода. Она существует только в пределах этого метода или блока и недоступна за его пределами. После завершения работы метода или блока локальная переменная удаляется из памяти.
***
## Мета информация

36
dev/java/Куча.md Normal file
View 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) -->

View 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) -->

View 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) -->

View 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) -->

View 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) -->

View 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) -->

View 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) -->

Binary file not shown.

After

Width:  |  Height:  |  Size: 731 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 KiB

View File

@ -0,0 +1 @@
a4349e620be07c2424843212bb5f573d

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

View File

@ -0,0 +1 @@
a4349e620be07c2424843212bb5f573d

View File

@ -8,6 +8,7 @@ title: Java разработка
В коммуникациях и обучении всегда важно устранить или уменьшить [[../../../../_inbox/Семантический разрыв|семантический разрыв]] между людьми, поэтому рекомендую переодически обращаться к [[../../dev/java/Голосарий Java|голосарию Java]], чтобы использовать одни и те же термины и определения.
Основные узлы:
- [Устройство Java](Устройство%20Java.md)
- [[../../dev/java/Многопоточность в Java|Многопоточность в Java]]
- Системы сборки
@ -20,6 +21,13 @@ title: Java разработка
- [Hibernate](00%20Hibernate.md)
- [[../../../../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)
@ -50,7 +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 в разработке]]
- [[../../dev/Не используйте var в Java|Не используйте var в Java]]
## Дополнительно
- [Нативные сборки в Java](../../dev/java/Нативные%20сборки%20в%20Java.md)

View File

@ -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 -->

View 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) -->