diff --git a/dev/devops/docker/Docker Network.md b/dev/devops/docker/Docker Network.md new file mode 100644 index 00000000..3eac77b4 --- /dev/null +++ b/dev/devops/docker/Docker Network.md @@ -0,0 +1,20 @@ +--- +aliases: +tags: + - maturity/🌱 +date: + - - 2024-03-25 +zero-link: + - "[[../../../meta/zero/00 Docker|00 Docker]]" +parents: +linked: +--- +ΠŸΡ€ΠΈ запускС Π΄ΠΎΠΊΠ΅Ρ€Π° создаСтся локальная ΡΠ΅Ρ‚ΡŒ ΠΈ поднимаСтся NAT. ΠŸΡ€ΠΈ запускС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π΅ΠΌΡƒ выдаСтся IP адрСс ΠΈΠ· этой локальной сСти. А ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΏΠΎΡ€Ρ‚ для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π² iptables добавляСтся новая запись пСрСадрСсации с ΠΏΠΎΡ€Ρ‚Π° хостовой ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΠ²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ IP адрСс ΠΈ ΠΏΠΎΡ€Ρ‚ Π² локальной сСти. Из-Π·Π° этого Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ просСдаСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. + +Если ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π½Π΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ сСти, Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ привязаны ΠΊ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ сСти. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ срСдствами Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΅Π³ΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ IP адрСс. + +- ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊ нСскольким сСтям (Π±Π΅Π· рСстарта) +- Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Service Discovery +- МоТно Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ IP адрСсов +## Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ +- [Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ IP-адрСс подсСти Docker ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ](Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ%20IP-адрСс%20подсСти%20Docker%20ΠΏΠΎ%20ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.md) \ No newline at end of file diff --git a/dev/java/Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск Π½Π° Java.md b/dev/java/Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск Π½Π° Java.md index d7f35936..e51c395f 100644 --- a/dev/java/Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск Π½Π° Java.md +++ b/dev/java/Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск Π½Π° Java.md @@ -12,7 +12,7 @@ parents: linked: link: https://struchkov.dev/blog/ru/java-binary-search/ --- -### Π‘Π΅Π· рСкурсии +## Π‘Π΅Π· рСкурсии ```java public class Binary { @@ -43,7 +43,7 @@ public class Binary { } ``` -### Π‘ использованиСм рСкурсии +## Π‘ использованиСм рСкурсии ```java public class Binary { diff --git a/dev/java/ИспользованиС wildcard imports Π² Java.md b/dev/java/ИспользованиС wildcard imports Π² Java.md new file mode 100644 index 00000000..b0641017 --- /dev/null +++ b/dev/java/ИспользованиС wildcard imports Π² Java.md @@ -0,0 +1,137 @@ +--- +aliases: +tags: + - maturity/🌱 + - type/opinion +date: + - - 2024-09-06 +zero-link: + - "[[../garden/ru/meta/zero/00 Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°|00 Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°]]" +parents: +linked: +--- +Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ подстановочный Π·Π½Π°ΠΊ (`*`) Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ…Β `import` для добавлСния всСх классов ΠΈΠ· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°. Но Π² Ρ…ΠΎΠ΄Π΅ Ρ€Π΅Π²ΡŒΡŽ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· вас, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, просили ΡƒΠ±Ρ€Π°Ρ‚ΡŒ этот подстановочный Π·Π½Π°ΠΊ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса. РазбСрСмся ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°ΠΊ подстановки? + +Но ΠΏΡ€Π΅ΠΆΠ΄Π΅, Π΄Π°Π²Π°ΠΉΡ‚Π΅ вспомним, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса, ΠΏΠΎΠΌΠΈΠΌΠΎ названия, содСрТит Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:Β `java.util.List`.Β ==Вакая запись позволяСт Π½Π°ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ классы с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ….== + +```java +package com.example; + +public class WithoutImport { + + public static void main(String[] args) { + + java.util.List myList = new java.util.ArrayList(); + + } +} +``` + +Однако, полная запись вСсьма Π½Π΅ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½Π°, поэтому Π² Java сущСствуСт ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° – `import`. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ компилятору источник ΠΈΠΌΠ΅Π½ классов, статичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ статичСских ΠΈΠΌΠ΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² ΠΊΠΎΠ΄Π΅. Один Ρ€Π°Π· написали ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса, Π° дальшС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ класса. + +```java +package com.example; + +import java.util.ArrayList; +import java.util.List; + +public class WithImport { + + public static void main(String[] args) { + + List myList = new ArrayList(); + + } + +} +``` + +Если ΠΌΡ‹ скомпилируСм ΠΈ запустим эти ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ. + +Π˜ΠΌΠΏΠΎΡ€Ρ‚ с подстановочными Π·Π½Π°ΠΊΠ°ΠΌΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ компилятору ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° классов Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΡ€ΠΈ использовании ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° с wildcard ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²ΠΎ врСмя компиляции ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒΡΡ. Но Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв это Π½Π΅ ΠΎΠΊΠ°ΠΆΠ΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎΠ³ΠΎ влияния. + +Π’ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ Π½Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌΠΈ компилятора, ΠΈ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΉΡ‚ΠΈ ΠΈΡ… Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΡΠ½ΠΈΡ‚ΡŒ это, ΠΌΡ‹ напишСм ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΎΠΌ с подстановочными Π·Π½Π°ΠΊΠ°ΠΌΠΈ. + +```java +package com.example; + +import java.util.*; + +public class WithWildCard { + public static void main(String[] args) { + + List myList = new ArrayList(); + + } +} +``` + +Если ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ этого класса, Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ + +```bytecode +Compiled from "WithWildCard.java" +public class com.example.WithWildCard { + public com.example.WithWildCard(); + Code: + 0: aload_0 + 1: invokespecial #1 // Method java/lang/Object."":()V + 4: return + + public static void main(java.lang.String[]); + Code: + 0: new #2 // class java/util/ArrayList + 3: dup + 4: invokespecial #3 // Method java/util/ArrayList."":()V + 7: astore_1 + 8: return +} +``` + +Если ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ с Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΎΠ±Π° ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄. + +Π’ΠΎ врСмя выполнСния Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, Π° Π½Π΅ исходный ΠΊΠΎΠ΄.Β ==Π’ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π΅ Π½Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°.== Из этого ясно слСдуСт, Ρ‡Ρ‚ΠΎ использованиС ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° с подстановочными Π·Π½Π°ΠΊΠ°ΠΌΠΈ Π½Π΅ влияСт Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Java-прилоТСния Π²ΠΎ врСмя выполнСния. + +## НСдостатки +Π’Π°ΠΊ Ссли использованиС подстановочного Π·Π½Π°ΠΊΠ° Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‚ΠΎ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ Π΅Π³ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ? + +### ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΠΈΠΌΠ΅Π½ +Бамая ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ имСнования. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π° класса ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΒ `org.test.Parser`Β ΠΈΒ `dev.lib.Parser`. Π’ нашСм ΠΊΠΎΠ΄Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚ с wildcard: + +```java +import org.test.* +import dev.lib.* +``` + +ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΎΡ‚Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ классов с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Π² Π΄Π²ΡƒΡ… Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ…, ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ Π±ΡƒΒ­Π΄Π΅Ρ‚ прСдпринята ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· этих классов. + +Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ Π²Π΅Ρ€ΡΠΈΡŽ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Допустим Ρƒ нас Π±Ρ‹Π»Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° с классом `org.test.Parser`, Π° ΠΏΠΎΡ‚ΠΎΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚ΠΎΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ» класс `dev.lib.Parser`, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊ имСнования Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ, хотя Ρ€Π°Π½ΡŒΡˆΠ΅ всС Π±Ρ‹Π»ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ. +### Чистый ΠΊΠΎΠ΄ +Π˜ΠΌΠΏΠΎΡ€Ρ‚Ρ‹ с подстановочными Π·Π½Π°ΠΊΠ°ΠΌΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π½Π°ΠΌ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ списка ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΎΠ². Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, это влияСт Π½Π° Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ страниц Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ исходного ΠΊΠΎΠ΄Π°, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΠ½ добСрСтся Π΄ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π»ΠΎΠ³ΠΈΠΊΡƒ. НСсомнСнно, Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ - это Ρ‚Π°ΠΊΠΆΠ΅ чистый ΠΊΠΎΠ΄. + +Π­Ρ‚Π° идСя Ρ‚Π°ΠΊΠΆΠ΅ поддСрТиваСтся Π² ΠΊΠ½ΠΈΠ³Π΅ "Чистый ΠΊΠΎΠ΄" Π ΠΎΠ±Π΅Ρ€Ρ‚Π° К. ΠœΠ°Ρ€Ρ‚ΠΈΠ½Π°. ЀактичСски, ΠΊΠ½ΠΈΠ³Π° Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹ с подстановочными Π·Π½Π°ΠΊΠ°ΠΌΠΈ ΠΏΡ€ΠΈ использовании Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… классов ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ источника. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π΄Π²Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ классов, ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вСсь ΠΏΠ°ΠΊΠ΅Ρ‚. + +Однако, я Π½Π΅ ΡΡ‡ΠΈΡ‚Π°ΡŽ это ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ IntelliJ IDEA автоматичСски скрываСт всС строки ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΎΠ². + +![](../../meta/files/images/Pasted%20image%2020240906164456.png) + +Π’Π°ΠΊΠΆΠ΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΡƒΡ…ΡƒΠ΄ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ‡Π΅Ρ‚ΠΊΠΎΠ³ΠΎ прСдставлСния ΠΎ ΠΏΠΎΠ»Π½ΠΎΠΌ ΠΏΡƒΡ‚ΠΈ классов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² ΠΊΠΎΠ΄Π΅. + +Однако, это Ρ‚ΠΎΠΆΠ΅ Π½Π΅ являСтся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. Достаточно удСрТивая Ctrl (cmd) навСсти курсор Π½Π° класс ΠΈ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ этот класс размСщаСтся. + +![](../../meta/files/images/Pasted%20image%2020240906164524.png) + +Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ "чистого ΠΊΠΎΠ΄Π°" Π±ΠΎΠ»Π΅Π΅ Π½Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹. + +## Настройки Π² Idea +Intellij Idea автоматичСски сворачиваСт ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»Π½Ρ‹Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹ ΠΈΠ· ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π΄ΠΎΡΡ‚ΠΈΠ³Π°ΡŽΡ‚ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ количСства. Π­Ρ‚Π° опция настраиваСтся Π² Ρ€Π°Π΄Π΅Π»Π΅ Preferences > Editor > Code Style > Java Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ imports. + +![](../../meta/files/images/Pasted%20image%2020240906164551.png) + +Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ автоматичСскоС сворачиваниС ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΎΠ² достаточно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ число 999. Π’ΠΎΡ‚ ΠΈ всС, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Idea Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΡΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹. + +## Π Π΅Π·ΡŽΠΌΠΈΡ€ΡƒΡŽ +ИспользованиС подстановочных ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΎΠ² Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ повлияСт Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΎ врСмя выполнСния, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²ΠΎ врСмя компиляции. + +Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° ΠΈΠΌΠ΅Π½. Шанс этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π΅ Π²Π΅Π»ΠΈΠΊ, Π½ΠΎ ΠΈ Π½Π΅ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ. + +Π§Ρ‚ΠΎ касаСтся "чистого ΠΊΠΎΠ΄Π°", Ρ‚ΠΎ с использованиСм соврСмСнных IDE эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ являСтся Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ. \ No newline at end of file diff --git a/dev/java/НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ @Data.md b/dev/java/НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ @Data.md new file mode 100644 index 00000000..a70c077b --- /dev/null +++ b/dev/java/НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ @Data.md @@ -0,0 +1,29 @@ +--- +aliases: +tags: + - maturity/🌱 + - type/opinion +date: + - - 2023-11-20 +zero-link: + - "[[00 Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°]]" +parents: +linked: +article: https://struchkov.dev/blog/ru/do-not-use-lombok-data/ +--- +МногиС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ² использования Lombok. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, это холиварная Ρ‚Π΅ΠΌΠ°. Но Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Lombok Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, Ρ‚ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ хотя Π±Ρ‹ спорныС ΠΈ ΠΎΡ‚ΠΊΡ€ΠΎΠ²Π΅Π½Π½ΠΎ Π²Ρ€Π΅Π΄Π½Ρ‹Π΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ. + +Одна ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… – это `@Data`. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…,Β [ΠΌΠ°Π»ΠΎ ΠΊΡ‚ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΏΠΎΠ΄ собой скрываСт](https://projectlombok.org/features/Data). + +- `@ToString`. НС помню, ΠΊΠΎΠ³Π΄Π° послСдний Ρ€Π°Π· пСрСопрСдСлял `toString()`. А Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ содСрТит Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ? +- `@EqualsAndHashCode`. Π­Ρ‚ΠΎ самая врСдная аннотация Π² @Data.Β ==ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚Β `equals()`Β ΠΈΒ `hashCode()`Β ΠΏΠΎ всСм полям.==Β ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ гСнСрация ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΠ»Π°ΡΡŒ ΠΏΠΎ всСм полям. НапримСр, для сущности достаточно ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°. +- `@Getter`Β /Β `@Setter`. Π—Π΄Π΅ΡΡŒ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ. +- `@RequiredArgsConstructor`. Π’ΠΎΠΆΠ΅ ΠΎΠΊΠ΅ΠΉ. + +Основная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²Β `@EqualsAndHashCode`. МоТно, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΒ `@EqualsAndHashCode.Exclude`. Π­Ρ‚Π° аннотация Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅ ΠΏΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ, Π½ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°ΡΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ это Π½Π°Π΄ ΠΏΠΎΡ‡Ρ‚ΠΈ всСми полями Π² сущности? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎΒ `@EqualsAndHashCode.Include` просто Π½Π΅ сработаСт, нСльзя ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΡƒΠΆΠ½Ρ‹Π΅ поля, Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ всС Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅. + +Π’Π°ΠΊΠΆΠ΅ ΠΈΠ·Π±Π΅Π³Π°ΠΉΡ‚Π΅ всСх Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π°Β `experemental`. ВсС Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ ΠΈΠ· этого ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ, ΠΈ ΠΏΡ€ΠΈ этом ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… вСрсий. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ· этого ΠΏΠ°ΠΊΠ΅Ρ‚Π° являСтся [@FieldNameConstants](https://projectlombok.org/features/experimental/FieldNameConstants), Π·Π° ΠΏΠ°Ρ€Ρƒ Π»Π΅Ρ‚ с Π½Π΅ΠΉ Π½Π΅ Π±Ρ‹Π»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π° всС ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ. + +Π‘ Lombok ΠΊΠΎΠ΄ выглядит Ρ‡ΠΈΡ‰Π΅, Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈ Π² случаС с Π»ΡŽΠ±Ρ‹ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ магичСским инструмСнтом, Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ прилоТСния ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒΡΡ, Π»ΠΈΠ±ΠΎ ΠΎΠ½ΠΎ вовсС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ. +## Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ +- [Lombok + JPA: Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΉΡ‚ΠΈ Π½Π΅ Ρ‚Π°ΠΊ? / Π₯Π°Π±Ρ€](https://habr.com/ru/company/haulmont/blog/564682/) \ No newline at end of file diff --git a/dev/java/Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ enum Π² Java.md b/dev/java/Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ enum Π² Java.md new file mode 100644 index 00000000..e9136562 --- /dev/null +++ b/dev/java/Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ enum Π² Java.md @@ -0,0 +1,32 @@ +--- +aliases: +tags: + - maturity/🌱 + - type/opinion +date: + - - 2023-11-20 +zero-link: + - "[[../../meta/zero/00 Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°|00 Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°]]" +parents: +linked: +article: https://note.struchkov.dev/sravnieniie-enum-v-java/ +--- +Enum это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠ°ΠΊ ΠΈ всС Π² Java. Однако это особСнный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π΅Π½ΡƒΠΌΠ° создаётся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π΄ΠΈΠ½ΠΎΠΆΠ΄Ρ‹. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅: + +```java +enum TestEnum {ONE, TWO, THREE} +``` + +Если ΠΌΡ‹ создадим 10 ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…Β `TestEnum.ONE`, Ρ‚ΠΎ всС ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. И поэтому enum ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `==` ΠΈ это ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. + +Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΠΊΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ прСимущСства. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΡ… Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ. + +**Π’Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅Β `NullPointerException`.** И это ΠΏΡ€Π°Π²Π΄Π°, Π½ΠΎ Ссли Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡΒ ΠΏΡ€Π°Π²ΠΈΠ»Π° ["сравнСниС константы слСва"](Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅%20константы%20слСва%20Π²%20Java.md), Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΈ использовании `.equals()`Β `NullPointerException`Β Π²Π°ΠΌ Π½Π΅ ΡΡ‚Ρ€Π°ΡˆΠ΅Π½. + +**ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Β ==Β Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС.** БыстрСС Ρ‡Π΅Π³ΠΎ? Π’ΠΈΠ΄ΠΈΠΌΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Β `.equals()`. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Β `.equals()`Β Ρƒ enum. + +![](../../meta/files/images/Pasted%20image%2020231120093026.png) + +**ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Β ==Β Π±ΠΎΠ»Π΅Π΅ понятный синтаксичСски.**Β Π­Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΏΠΎΡ‡Π΅ΠΌΡƒ? Для сравнСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡΒ `.equals()`. Enum это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π›ΠΎΠ³ΠΈΡ‡Π½Π΅Π΅ ΠΈ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΒ `.equals()` для сравнСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Ρ‚ΡŒ Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅ сравнСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². + +На ΠΌΠΎΠΉ взгляд, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΒ `.equals()`, Π³Π»Π°Π²Π½ΠΎΠ΅ Π½Π΅ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π΅ "[Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ константы слСва](Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅%20константы%20слСва%20Π²%20Java.md)". \ No newline at end of file diff --git a/dev/java/Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ константы слСва Π² Java.md b/dev/java/Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ константы слСва Π² Java.md new file mode 100644 index 00000000..81ab87b5 --- /dev/null +++ b/dev/java/Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ константы слСва Π² Java.md @@ -0,0 +1,63 @@ +--- +aliases: +tags: + - maturity/🌱 + - type/opinion +date: + - - 2024-09-06 +zero-link: + - "[[../../meta/zero/00 Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°|00 Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°]]" +parents: +linked: +--- +ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ enum, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° статус ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² систСмС: "ΠΎΠ½Π»Π°ΠΉΠ½", "ΠΎΡ„Π»Π°ΠΉΠ½" ΠΈ "занят". + +```java +public enum UserStatus { + + ONLINE, OFFLINE, BUSY + +} +``` + +```java +public class User { + + ... + + @Column(name = "status") + @Enumerated(EnumType.STRING) + private UserStatus status; + + ... + +} +``` + +Π‘ΠΊΠΎΡ€Π΅Π΅ всСго для выполнСния бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ Π²Π°ΠΌ потрСбуСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ статус ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ + +```java +if (user.getStatus().equals(UserStatus.ONLINE)) { + // to do something +} +``` + +Π’Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ всС ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ, миссия Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°. Но Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ НО. Π§Ρ‚ΠΎ Ссли `getStatus()`Β Π²Π΅Ρ€Π½Π΅Ρ‚ Π²Π°ΠΌΒ `null`? ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅Β `NullPointerException`. + +Π§Ρ‚ΠΎΠ±Ρ‹ этого ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ слСдуСт ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€Π°Π²ΠΈΠ»Π° "БравнСния константы слСва". Оно ΠΎΡ‡Π΅Π½ΡŒ простоС. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΌΡ‹ Ρ‚ΠΎΡ‡Π½ΠΎ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎΒ `UserStatus.ONLINE` сущСствуСт, поэтому `.equals()` стоит Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΡ‚ Π½Π΅Π³ΠΎ. + +```java +if (UserStatus.ONLINE.equals(user.getStatus())) { + // to do something +} +``` + +Π’ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ситуациях Π΄Π΅Π»Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ со строками: + +```java +if ("Иванов".equals(user.getLastName())) { + // to do something +} +``` + +Π­Ρ‚ΠΎ простоС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ вас ΠΎΡ‚Β `NullPointerException`. \ No newline at end of file diff --git a/index.md b/index.md index a324a5b7..c5081504 100644 --- a/index.md +++ b/index.md @@ -19,8 +19,9 @@ enableToc: false - [Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°](meta/zero/00%20Java%20Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°.md) - [Quarkus](meta/zero/00%20Quarkus.md) - [SpringBoot](meta/zero/00%20SpringBoot.md) -## Π§Π΅Π³ΠΎ стоит ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ -> [!WARNING] DISCLAMER -> ΠŸΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅ Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΈ исправлСния фактичСских ошибок. Но ==Π½Π΅ стоит ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° грамматичСскиС ошибки ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΈ.== Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ это ΠΌΠΎΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ + - [00 Hibernate](meta/zero/00%20Hibernate.md) + - [DevOps](meta/zero/00%20DevOps.md) + - [Docker](meta/zero/00%20Docker.md) + - [Алгоритмы](meta/zero/00%20Алгоритм.md) diff --git a/meta/files/images/Pasted image 20231120093026.png b/meta/files/images/Pasted image 20231120093026.png new file mode 100644 index 00000000..806e887c Binary files /dev/null and b/meta/files/images/Pasted image 20231120093026.png differ diff --git a/meta/files/images/Pasted image 20240906164456.png b/meta/files/images/Pasted image 20240906164456.png new file mode 100644 index 00000000..c713707d Binary files /dev/null and b/meta/files/images/Pasted image 20240906164456.png differ diff --git a/meta/files/images/Pasted image 20240906164524.png b/meta/files/images/Pasted image 20240906164524.png new file mode 100644 index 00000000..bfee7ba4 Binary files /dev/null and b/meta/files/images/Pasted image 20240906164524.png differ diff --git a/meta/files/images/Pasted image 20240906164551.png b/meta/files/images/Pasted image 20240906164551.png new file mode 100644 index 00000000..4cb55887 Binary files /dev/null and b/meta/files/images/Pasted image 20240906164551.png differ diff --git a/meta/zero/00 DevOps.md b/meta/zero/00 DevOps.md new file mode 100644 index 00000000..4b5a5795 --- /dev/null +++ b/meta/zero/00 DevOps.md @@ -0,0 +1,7 @@ +--- +tags: + - type/zero-link +parents: + - "[[00 Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°]]" +title: DevOps +--- diff --git a/meta/zero/00 Docker.md b/meta/zero/00 Docker.md new file mode 100644 index 00000000..c2048a6d --- /dev/null +++ b/meta/zero/00 Docker.md @@ -0,0 +1,21 @@ +--- +tags: + - type/zero-link +zero-link: + - "[[00 DevOps|00 DevOps]]" +--- +Для изоляции ΠΈ управлСния рСсурсами ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ [cgroup](Control%20group.md). Π’Π°ΠΊ ΠΆΠ΅ для изоляции Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ [Namespace](Namespace.md). ВсС это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» ядра Linux, поэтому Π½Π΅ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ сильного влияния Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Однако, Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ остороТным ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с диском ΠΈ ΡΠ΅Ρ‚ΡŒΡŽ. Π‘ ΡΡƒΡ‚ΡŒΡŽ большС всСго ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈ запускС nginx ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ просадку Π² 5%. + +ΠžΠ±Ρ‹Ρ‡Π½ΠΎ docker запускаСтся ΠΎΡ‚ root ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. + +- [ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ Docker](ΠšΠΎΠΌΠ°Π½Π΄Ρ‹%20Docker.md) +- [Dockerfile](Dockerfile.md) +- [Docker Network](../../dev/devops/docker/Docker%20Network.md) +- [Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Ρ„Π°ΠΉΠ»ΠΎΠ² Docker](Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°%20Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°%20Ρ„Π°ΠΉΠ»ΠΎΠ²%20Docker.md) +- [ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° мусора Π² Docker](ΠžΡ‡ΠΈΡΡ‚ΠΊΠ°%20мусора%20Π²%20Docker.md) + - [Настройка Ρ€ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π»ΠΎΠ³ΠΎΠ² Π² Docker](Настройка%20Ρ€ΠΎΡ‚Π°Ρ†ΠΈΠΈ%20Π»ΠΎΠ³ΠΎΠ²%20Π²%20Docker.md) +## ПолСзноС +- Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° для Π°Π½Π°Π»ΠΈΠ·Π° Π΄ΠΎΠΊΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²: [Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° Dive](Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π°%20Dive.md) +- Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° [Hadolint](https://github.com/hadolint/hadolint). ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ Π΄ΠΎΠΊΠ΅Ρ€ Ρ„Π°ΠΉΠ» Π½Π° ΠΏΠ»ΠΎΡ…ΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ. +- xfs Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ +- Native Overlay Diff Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ (docker info) \ No newline at end of file diff --git a/meta/zero/00 Hibernate.md b/meta/zero/00 Hibernate.md index bbd4d132..2c0145ed 100644 --- a/meta/zero/00 Hibernate.md +++ b/meta/zero/00 Hibernate.md @@ -1,5 +1,5 @@ --- -parents: +zero-link: - "[[00 Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°]]" tags: - type/zero-link diff --git a/meta/zero/00 Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°.md b/meta/zero/00 Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°.md index d6eece81..d2504aa0 100644 --- a/meta/zero/00 Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°.md +++ b/meta/zero/00 Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°.md @@ -9,8 +9,14 @@ title: Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° - [Устройство Java](Устройство%20Java.md) - [Π‘Π½ΠΈΠΏΠ΅Ρ‚Ρ‹ для Java](../../../garden/ru/meta/zero/00%20Π‘Π½ΠΈΠΏΠ΅Ρ‚Ρ‹%20для%20Java.md) - Π€Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ - - [SpringBoot](00%20SpringBoot.md) - [Quarkus](00%20Quarkus.md) + - [SpringBoot](00%20SpringBoot.md) + - [Hibernate](00%20Hibernate.md) +## Мои рассуТдСния +- [ИспользованиС wildcard imports Π² Java](../../dev/java/ИспользованиС%20wildcard%20imports%20Π²%20Java.md) +- [Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ константы слСва Π² Java](../../dev/java/Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅%20константы%20слСва%20Π²%20Java.md) +- [Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ enum Π² Java](../../dev/java/Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅%20enum%20Π²%20Java.md) +- [НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ @Data](../../dev/java/НС%20ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅%20@Data.md) ## ВСрсии Java - [[Java 1]] - [Java 7](Java%207.md)