en
Feedback

Don't get caught by a cheater! Telemetrio finds and tags such channels πŸ‘‰ If you want to see the tag, subscribe

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

Open in Telegram

πŸ“š Π›Π°ΠΉΡ„Ρ…Π°ΠΊΠΈ, ΠΏΡ€ΠΈΡ‘ΠΌΡ‹ ΠΈ Π»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ для Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². Всё, Ρ‡Ρ‚ΠΎ ускорит ΠΊΠΎΠ΄ ΠΈ ΠΏΡ€ΠΎΠΊΠ°Ρ‡Π°Π΅Ρ‚ Π½Π°Π²Ρ‹ΠΊΠΈ. Java, Spring, Maven, Hibernate. По всСм вопросам @evgenycarter РКН clck.ru/3KoGeP

Show more

πŸ“ˆ Analytical overview of Telegram channel Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

Channel Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° (@bookjava) in the Russian language segment is an active participant. Currently, the community unites 10 006 subscribers, ranking 12 158 in the Technologies & Applications category and 63 521 in the Russia region.

πŸ“Š Audience metrics and dynamics

Since its creation on Π½Π΅Π²Ρ–Π΄ΠΎΠΌΠΎ, the project has demonstrated rapid growth, gathering an audience of 10 006 subscribers.

According to the latest data from 26 October, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -56 over the last 30 days and by -1 over the last 24 hours, overall reach remains high.

  • Verification status: Not verified
  • Engagement rate (ER): The average audience engagement rate is 8.06%. Within the first 24 hours after publication, content typically collects 4.04% reactions from the total number of subscribers.
  • Post reach: On average, each post receives 806 views. Within the first day, a publication typically gains 404 views.
  • Reactions and interaction: The audience actively supports content: the average number of reactions per post is 4.
  • Thematic interests: Content is focused on key topics such as string, интСрфСйс, строка, boot, api.

πŸ“ Description and content policy

The author describes the resource as a platform for expressing subjective opinions:
β€œπŸ“š Π›Π°ΠΉΡ„Ρ…Π°ΠΊΠΈ, ΠΏΡ€ΠΈΡ‘ΠΌΡ‹ ΠΈ Π»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ для Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². Всё, Ρ‡Ρ‚ΠΎ ускорит ΠΊΠΎΠ΄ ΠΈ ΠΏΡ€ΠΎΠΊΠ°Ρ‡Π°Π΅Ρ‚ Π½Π°Π²Ρ‹ΠΊΠΈ. Java, Spring, Maven, Hibernate. По всСм вопросам @evgenycarter РКН clck.ru/3KoGeP”

Thanks to the high frequency of updates (latest data received on 27 October, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.

10 006
Subscribers
-124 hours
-77 days
-5630 days
Posts Archive
⁉️ API описано, Π½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° всё Ρ€Π°Π²Π½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΅Π³ΠΎ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ? ДокумСнтация устарСваСт, ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π»ΠΎΠΌΠ°ΡŽΡ‚ΡΡ, Π° согласованиС Π·Π°
⁉️ API описано, Π½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° всё Ρ€Π°Π²Π½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΅Π³ΠΎ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ? ДокумСнтация устарСваСт, ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π»ΠΎΠΌΠ°ΡŽΡ‚ΡΡ, Π° согласованиС Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Π΅ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°? πŸ‘©β€πŸ’»ΠŸΡ€ΠΈΠ³Π»Π°ΡˆΠ°Π΅ΠΌ Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΡƒΡ€ΠΎΠΊ Β«OpenAPI + SpringΒ» πŸ—“ 15 апрСля Π² 20:00 МБК πŸ†“ На ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ ΡƒΡ€ΠΎΠΊΠ΅ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ, ΠΊΠ°ΠΊ OpenAPI ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ навСсти порядок: ΠΎΡ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ спСцификаций Π΄ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π² прилоТСния Π½Π° Spring. ПокаТСм, ΠΊΠ°ΠΊ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ количСство ошибок, ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ прСдсказуСмой. Π Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ сцСнарии: Π³Π΄Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…. Π£Ρ€ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ, Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌ ΠΈ всСм, ΠΊΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с API. πŸ”— Бсылка Π½Π° Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ: https://vk.cc/cWnqAQ Π Π΅ΠΊΠ»Π°ΠΌΠ°. ООО Β«ΠžΡ‚ΡƒΡ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅Β», ΠžΠ“Π Π 1177746618576

Π‘ΠΎΠ²Π΅Ρ‚ Spring FrameworkπŸ’‘ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π°Π²Ρ‚ΠΎΡΠΎΠΏΡ€ΡΠ³Π°Ρ‚ΡŒ нСсколько Π±ΠΈΠ½ΠΎΠ², Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ интСрфСйс, Π² список, содСрТащий вс
Π‘ΠΎΠ²Π΅Ρ‚ Spring FrameworkπŸ’‘ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π°Π²Ρ‚ΠΎΡΠΎΠΏΡ€ΡΠ³Π°Ρ‚ΡŒ нСсколько Π±ΠΈΠ½ΠΎΠ², Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ интСрфСйс, Π² список, содСрТащий всС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ список с ΠΎΠ±Ρ‰ΠΈΠΌ Ρ‚ΠΈΠΏΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΡŽ конструктора, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅, ΠΈΠ»ΠΈ ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΡŽ поля. πŸ“² ΠœΡ‹ Π² MAX πŸ‘‰@BookJava

πŸ“Œ Java Record: ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π­Ρ‚ΠΎ ΠšΡ€ΡƒΡ‚ΠΎ? БСгодня расскаТу Π²Π°ΠΌ ΠΎ record Π² Java – ΠΌΠΎΡ‰Π½ΠΎΠΌ инструмСнтС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ упростит Π²Π°ΡˆΡƒ Тизнь ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с нСизмСняСмыми ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. πŸ”Ή Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ record? Π’Π²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ Π² Java 14, record – это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ класса, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для хранСния Π΄Π°Π½Π½Ρ‹Ρ…. Он автоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚: βœ… ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ βœ… Π“Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹ (Π½ΠΎ Π±Π΅Π· get Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ) βœ… equals(), hashCode(), toString() πŸ”Ή ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования

public record User(String name, int age) {}
Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ эквивалСнтСн написанию ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ класса с полями, конструктором, Π³Π΅Ρ‚Ρ‚Π΅Ρ€Π°ΠΌΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ equals/hashCode/toString, Π½ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ всСго ΠΎΠ΄Π½Ρƒ строку! πŸ”Ή ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° record πŸš€ МСньшС ΠΊΠΎΠ΄Π° – Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π±ΠΎΠΉΠ»Π΅Ρ€ΠΏΠ»Π΅ΠΉΡ‚ΠΎΠ² πŸš€ Π˜ΠΌΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ – Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ послС создания πŸš€ Π§ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ – сразу Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для хранСния Π΄Π°Π½Π½Ρ‹Ρ… πŸ”Ή ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ: ❗ Поля record всСгда final ❗ НаслСдованиС ΠΎΡ‚ record Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ πŸ“² ΠœΡ‹ Π² MAX πŸ‘‰@BookJava

πŸš€ Stream API Π² Java: 5 ΠΌΠΎΡ‰Π½Ρ‹Ρ… Ρ‚Ρ€ΡŽΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ‹ ΠΌΠΎΠ³ Π½Π΅ Π·Π½Π°Ρ‚ΡŒ Stream API – ΠΎΠ΄Π½Π° ΠΈΠ· самых ΠΊΡ€ΡƒΡ‚Ρ‹Ρ… Ρ„ΠΈΡ‡ Π² Java, Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ map(), filter() ΠΈ collect(). Π”Π°Π²Π°ΠΉ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ 5 ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Ρ‚Ρ€ΡŽΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ΄Π΅Π»Π°ΡŽΡ‚ ΠΊΠΎΠ΄ элСгантнСС ΠΈ эффСктивнСС! πŸ”Ή 1. Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° элСмСнтов (Collectors.groupingBy) Π Π°Π·Π±ΠΈΠ²Π°Π΅ΠΌ список строк Π½Π° Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅:

List<String> words = List.of("apple", "banana", "cat", "dog", "elephant");
Map<Integer, List<String>> grouped = words.stream()
        .collect(Collectors.groupingBy(String::length));

System.out.println(grouped);
// {3=[cat, dog], 5=[apple], 6=[banana], 8=[elephant]}
πŸ”Ή 2. Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты (distinct()) Π€ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅ΠΌ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅:

List<Integer> numbers = List.of(1, 2, 2, 3, 4, 4, 5);
List<Integer> unique = numbers.stream()
        .distinct()
        .collect(Collectors.toList());

System.out.println(unique); // [1, 2, 3, 4, 5]
πŸ”Ή 3. ΠŸΡ€ΠΎΠΏΡƒΡΠΊ N элСмСнтов (skip(n)) Π₯ΠΎΡ‚ΠΈΠΌ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 3 элСмСнта ΠΈ Π²Π·ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ:

List<String> names = List.of("Alice", "Bob", "Charlie", "David", "Eve");
List<String> skipped = names.stream()
        .skip(3)
        .collect(Collectors.toList());

System.out.println(skipped); // [David, Eve]
πŸ”Ή 4. Найти максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (max()) Допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ список чисСл, Π½Π°ΠΉΠ΄Π΅ΠΌ максимальноС:

List<Integer> nums = List.of(10, 20, 30, 5, 15);
Optional<Integer> maxNum = nums.stream().max(Integer::compareTo);

maxNum.ifPresent(System.out::println); // 30
πŸ”Ή 5. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, содСрТит Π»ΠΈ список Π½ΡƒΠΆΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (anyMatch()) Допустим, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Π² спискС число большС 100:

List<Integer> nums = List.of(10, 50, 200, 30);
boolean hasLargeNumber = nums.stream().anyMatch(n -> n > 100);

System.out.println(hasLargeNumber); // true
πŸ”₯ Stream API – это ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с коллСкциями. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΅Π³ΠΎ, ΠΈ ваш ΠΊΠΎΠ΄ станСт Ρ‡ΠΈΡ‰Π΅, ΠΊΠΎΡ€ΠΎΡ‡Π΅ ΠΈ быстрСС! πŸ“² ΠœΡ‹ Π² MAX πŸ‘‰@BookJava

πŸ”₯ 5 ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² проСктирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π’ ΠΌΠΈΡ€Π΅ Java Π΅ΡΡ‚ΡŒ сотни ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² проСктирования, Π½ΠΎ эти 5 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‡Π°Ρ‰Π΅ всСго. Если Π²Ρ‹ ΠΈΡ… освоитС, ваш ΠΊΠΎΠ΄ станСт Ρ‡ΠΈΡ‰Π΅, Π³ΠΈΠ±Ρ‡Π΅ ΠΈ Π»Π΅Π³Ρ‡Π΅ Π² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅. 1️⃣ Singleton ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΠ΄Π½ΠΈΠΌ экзСмпляром. ПолСзСн для логирования, Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, кэшСй. πŸ”Ή ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° (Lazy Initialization, thread-safe):

public class Singleton {
    private static volatile Singleton instance;
    private Singleton() {}
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}
⚑ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Spring Bean, Hibernate SessionFactory. 2️⃣ Factory Method ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±Π΅Π· привязки ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ классу. ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚, Ссли Ρƒ вас ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с ΠΎΠ±Ρ‰Π΅ΠΉ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ. πŸ”Ή ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

interface Product {
    void create();
}

class ConcreteProductA implements Product {
    public void create() { System.out.println("Π‘ΠΎΠ·Π΄Π°Π½ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ A"); }
}

class ProductFactory {
    public static Product createProduct(String type) {
        if ("A".equals(type)) return new ConcreteProductA();
        throw new IllegalArgumentException("НСизвСстный Ρ‚ΠΈΠΏ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°");
    }
}
⚑ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² JDBC (DriverManager.getConnection). 3️⃣ Builder ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ слоТныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ пошагово. ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌ конструкторам с ΠΊΡƒΡ‡Π΅ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². πŸ”Ή ΠŸΡ€ΠΈΠΌΠ΅Ρ€ (Lombok @Builder Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅!):

@Builder
public class Car {
    private String model;
    private int year;
    private String engine;
}

Car car = Car.builder().model("Tesla").year(2024).engine("Electric").build();
⚑ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² StringBuilder, HttpRequest Π² Java 11+. 4️⃣ Observer ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π½Π° события ΠΈ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π½ΠΈΡ…. Часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² GUI, event-driven систСмах. πŸ”Ή ΠŸΡ€ΠΈΠΌΠ΅Ρ€ (Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»ΡŒ Π·Π° событиями):

interface Observer {
    void update(String message);
}

class User implements Observer {
    private String name;
    public User(String name) { this.name = name; }
    public void update(String message) {
        System.out.println(name + " ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅: " + message);
    }
}

class Channel {
    private List<Observer> observers = new ArrayList<>();
    public void subscribe(Observer o) { observers.add(o); }
    public void notifyAll(String message) {
        for (Observer o : observers) { o.update(message); }
    }
}
⚑ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Spring Events, RxJava. 5️⃣ Decorator ДобавляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π±Π΅Π· измСнСния Π΅Π³ΠΎ структуры. Часто примСняСтся Π² Π»ΠΎΠ³Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ… IO. πŸ”Ή ΠŸΡ€ΠΈΠΌΠ΅Ρ€ (Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ Π½Π°Π΄ OutputStream):

class LoggingOutputStream extends OutputStream {
    private OutputStream wrapped;
    public LoggingOutputStream(OutputStream wrapped) { this.wrapped = wrapped; }
    @Override
    public void write(int b) throws IOException {
        System.out.println("ЗаписываСм Π±Π°ΠΉΡ‚: " + b);
        wrapped.write(b);
    }
}
⚑ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² BufferedReader, Logger, Spring Security Filters. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ проСктирования. πŸ“² ΠœΡ‹ Π² MAX πŸ‘‰@BookJava

πŸš€ ΠŸΠΎΠ΄Π±ΠΎΡ€ΠΊΠ° ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… IT ΠΊΠ°Π½Π°Π»ΠΎΠ² Π² Max БистСмноС администрированиС, DevOps πŸ“Œ https://max.ru/i_odmin ВсС для систСмного администратора https://max.ru/bash_srv Bash Π‘ΠΎΠ²Π΅Ρ‚Ρ‹ https://max.ru/sysadminof Книги для Π°Π΄ΠΌΠΈΠ½ΠΎΠ², ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ https://max.ru/i_odmin_book Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° БистСмного Администратора https://max.ru/i_devops DevOps: ПишСм ΠΎ Docker, Kubernetes ΠΈ Π΄Ρ€. 1C Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° πŸ“Œ https://max.ru/odin1c_rus CΡ‚Π°Ρ‚ΡŒΠΈ, курсы, совСты, ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΊΠΎΠ΄Π° 1Π‘ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ C++πŸ“Œ https://max.ru/cpp_lib Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° C/C++ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ GoπŸ“Œ https://max.ru/golang_lib Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Go (Golang) Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ReactπŸ“Œ https://max.ru/react_lib React ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Python πŸ“Œ https://max.ru/python_of Python акадСмия. https://max.ru/BookPython Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Python Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° πŸ“Œ https://max.ru/bookjava Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° GitHub БообщСство πŸ“Œ https://max.ru/githublib Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎΠ΅ ΠΈΠ· GitHub Π‘Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… (Data Base) πŸ“Œ https://max.ru/database_info ВсС ΠΏΡ€ΠΎ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π€Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° πŸ“Œ https://max.ru/frontend_1 ΠŸΠΎΠ΄Π±ΠΎΡ€ΠΊΠΈ для frontend Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ πŸ“Œ https://max.ru/programmist_of Книги ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ https://max.ru/proglb Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста https://max.ru/bfbook Книги для программистов ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ πŸ“Œ https://max.ru/bookflow Π›Π΅ΠΊΡ†ΠΈΠΈ, Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊΠΈ, Π΄ΠΎΠΊΠ»Π°Π΄Ρ‹ с IT ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΉ https://max.ru/itmozg ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹, Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€Ρ‹, новости ΠΈΠ· ΠΌΠΈΡ€Π° IT https://max.ru/php_lib Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° PHP программиста πŸ‘¨πŸΌβ€πŸ’»πŸ‘©β€πŸ’» Π¨ΡƒΡ‚ΠΊΠΈ программистов πŸ“Œ https://max.ru/itumor Π¨ΡƒΡ‚ΠΊΠΈ программистов Π—Π°Ρ‰ΠΈΡ‚Π°, Π²Π·Π»ΠΎΠΌ, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ πŸ“Œ https://max.ru/thehaking Канал ΠΎ кибСрбСзопасности https://max.ru/xakkep_1 Π₯Π°ΠΊΠ΅Ρ€ Free Книги, ΡΡ‚Π°Ρ‚ΡŒΠΈ для Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€ΠΎΠ² πŸ“Œ https://max.ru/odesigners Π‘Ρ‚Π°Ρ‚ΡŒΠΈ, ΠΊΠ½ΠΈΠ³ΠΈ для Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° πŸ“Œ https://max.ru/Pomatematike Канал ΠΏΠΎ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ https://max.ru/phismat_1 ΠžΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎ, ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΠΎ Π€ΠΈΠ·ΠΈΠΊΠ΅ ΠΈ ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ Вакансии πŸ“Œ https://max.ru/progjob Вакансии Π² IT ΠœΠΈΡ€ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ πŸ“Œ https://max.ru/mir_teh Канал для Π»ΡŽΠ±ΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Бонус πŸ“Œ https://max.ru/piterspb_78 Π‘Π²Π΅ΠΆΠΈΠ΅ новости Π‘Π°Π½ΠΊΡ‚-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³Π° https://max.ru/mockva_life Π‘Π²Π΅ΠΆΠΈΠ΅ новости ΠœΠΎΡΠΊΠ²Ρ‹

1️⃣ Π§Π΅ΠΌ record Π»ΡƒΡ‡ΡˆΠ΅ class Π² Java? Π’ Java 14 появился record – Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ классов, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ хранСния Π΄Π°Π½Π½Ρ‹Ρ…. Π§Π΅ΠΌ ΠΎΠ½ Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ class? Π”Π°Π²Π°ΠΉΡ‚Π΅ разбСрёмся! πŸ”Ή Π—Π°ΠΏΠΈΡΡŒ ΠΏΡ€ΠΎΡ‚ΠΈΠ² класса ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ класс:

class Person {
    private final String name;
    private final int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public String getName() { return name; }
    public int getAge() { return age; }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + "}";
    }
}
Много бойлСрплСйта… Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС с record:

record Person(String name, int age) {}
βœ… МСньшС ΠΊΠΎΠ΄Π° βœ… АвтоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ toString(), equals(), hashCode() βœ… Π˜ΠΌΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ⚠️ Когда НЕ стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ record? - Если Π½ΡƒΠΆΠ΅Π½ измСняСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ - Если трСбуСтся слоТная бизнСс-Π»ΠΎΠ³ΠΈΠΊΠ° Π²Π½ΡƒΡ‚Ρ€ΠΈ класса Π’Ρ‹ ΡƒΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ record Π² своих ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…? Π”Π΅Π»ΠΈΡ‚Π΅ΡΡŒ ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ! πŸš€ πŸ“² ΠœΡ‹ Π² MAX πŸ‘‰@BookJava

πŸ”₯ Π Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ CompletableFuture: ΠΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ Π² Java Π±Π΅Π· Π±ΠΎΠ»ΠΈ ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΊΠΎΠ»Π»Π΅Π³ΠΈ! БСгодня ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ CompletableFuture, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ асинхронный ΠΊΠΎΠ΄ Π² Java Π±Π΅Π· коллбэков ΠΈ ΠΏΠΎΡ‚Π΅Ρ€ΡŒ Π² Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. πŸ“Œ 1. ΠŸΠΎΡ‡Π΅ΠΌΡƒ CompletableFuture? Π’ Java Π΄Π°Π²Π½ΠΎ Π΅ΡΡ‚ΡŒ Future, Π½ΠΎ ΠΎΠ½ Π½Π΅ΡƒΠ΄ΠΎΠ±Π΅Π½: ❌ НСльзя ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Π·Π°Π΄Π°Ρ‡. ❌ Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ .get(). ❌ НСт ΡƒΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ². πŸ‘‰ CompletableFuture Ρ€Π΅ΡˆΠ°Π΅Ρ‚ всС эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, позволяя ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ошибки ΠΈ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ. πŸ“Œ 2. Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования

import java.util.concurrent.CompletableFuture;

public class AsyncExample {
    public static void main(String[] args) {
        CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
            sleep(2000);
            return "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!";
        });

        future.thenAccept(result -> System.out.println("Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: " + result));

        System.out.println("Π­Ρ‚ΠΎΡ‚ тСкст вывСдСтся Ρ€Π°Π½ΡŒΡˆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°!");
        sleep(3000); // Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»Π°ΡΡŒ Ρ€Π°Π½ΡŒΡˆΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ
    }

    private static void sleep(int ms) {
        try { Thread.sleep(ms); } catch (InterruptedException ignored) {}
    }
}
πŸ”Ή Π—Π΄Π΅ΡΡŒ supplyAsync() выполняСт Π·Π°Π΄Π°Ρ‡Ρƒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅, Π° thenAccept() позволяСт асинхронно ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. πŸ“Œ 3. ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π·Π°Π΄Π°Ρ‡

CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> "Hello");
CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> "World");

CompletableFuture<String> result = future1.thenCombine(future2, (s1, s2) -> s1 + " " + s2);

System.out.println(result.join()); // Hello World
βœ… thenCombine() ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π΄Π²ΡƒΡ… асинхронных Π·Π°Π΄Π°Ρ‡. πŸ“Œ 4. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок (exceptionally)

CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
    if (Math.random() > 0.5) {
        throw new RuntimeException("Π§Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ!");
    }
    return "ВсС Ρ…ΠΎΡ€ΠΎΡˆΠΎ!";
}).exceptionally(ex -> "Ошибка: " + ex.getMessage());

System.out.println(future.join());
βœ… Если Π² supplyAsync() ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка, ΠΎΠ½Π° обработаСтся Π² exceptionally(), ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ ΡƒΠΏΠ°Π΄Ρ‘Ρ‚. πŸ“Œ 5. Запуск Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π·Π°Π΄Π°Ρ‡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ

CompletableFuture<Void> allTasks = CompletableFuture.allOf(
    CompletableFuture.runAsync(() -> sleepAndPrint("Π—Π°Π΄Π°Ρ‡Π° 1", 1000)),
    CompletableFuture.runAsync(() -> sleepAndPrint("Π—Π°Π΄Π°Ρ‡Π° 2", 2000)),
    CompletableFuture.runAsync(() -> sleepAndPrint("Π—Π°Π΄Π°Ρ‡Π° 3", 1500))
);

allTasks.join(); // ДоТдёмся Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ всСх Π·Π°Π΄Π°Ρ‡

private static void sleepAndPrint(String msg, int ms) {
    try { Thread.sleep(ms); } catch (InterruptedException ignored) {}
    System.out.println(msg);
}
βœ… allOf() позволяСт Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ нСсколько Π·Π°Π΄Π°Ρ‡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ ΠΈ Π΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ ΠΈΡ… Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ. πŸ“Œ Π˜Ρ‚ΠΎΠ³ πŸ”Ή CompletableFuture – это ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒΡŽ Π² Java. πŸ”Ή ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ошибки, ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ. πŸ”Ή Π£Π»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Future ΠΈ ExecutorService. πŸ“² ΠœΡ‹ Π² MAX πŸ‘‰@BookJava

πŸš€ΠšΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Optional Π² Java Optional<T> Π² Java β€” это ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ null значСниями, Π½ΠΎ часто Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ основныС ошибки ΠΈ Π»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ. ❌ ΠŸΠ»ΠΎΡ…ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹: 1️⃣ ИспользованиС Optional ΠΊΠ°ΠΊ поля Π² классС

class User {
    Optional<String> name; // ❌ ΠŸΠ»ΠΎΡ…Π°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°
}
Π›ΡƒΡ‡ΡˆΠ΅ просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ String, Π° Ссли Π½ΡƒΠΆΠ½ΠΎ, Ρ‚ΠΎ ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Optional ΠΏΡ€ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅. 2️⃣ ИспользованиС isPresent() вмСсто ifPresent()

if (optionalValue.isPresent()) {
    process(optionalValue.get()); // ❌ ΠΠ΅ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ
}
Π›ΡƒΡ‡ΡˆΠ΅ Ρ‚Π°ΠΊ:

optionalValue.ifPresent(this::process); // βœ… ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄
πŸ“Œ Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования:

public Optional<User> findUserById(int id) {
    return Optional.ofNullable(userRepository.get(id));
}
πŸ’‘ ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ использованиС Optional ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ NullPointerException ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Ρ‡ΠΈΡ‰Π΅. πŸ”₯ А ΠΊΠ°ΠΊ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Optional? ΠŸΠΈΡˆΠΈΡ‚Π΅ Π² коммСнтариях! πŸš€ πŸ“² ΠœΡ‹ Π² MAX πŸ‘‰@BookJava

πŸ”΄ Π—Π°Π²Ρ‚Ρ€Π° тСстовоС собСсСдованиС с Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ 1 апрСля(ΡƒΠΆΠ΅ Π·Π°Π²Ρ‚Ρ€Π°!) Π² 19:00 ΠΏΠΎ мск ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ΅ собСсСд
πŸ”΄ Π—Π°Π²Ρ‚Ρ€Π° тСстовоС собСсСдованиС с Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ 1 апрСля(ΡƒΠΆΠ΅ Π·Π°Π²Ρ‚Ρ€Π°!) Π² 19:00 ΠΏΠΎ мск ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ΅ собСсСдованиС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° настоящСС ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ Π½Π° Middle Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. Как это Π±ΡƒΠ΄Π΅Ρ‚: πŸ“‚ Π’ΠΈΠΊΡ‚ΠΎΡ€ Анохин, ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΠ· WildBerries, Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ вопросы ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ-Π΄ΠΎΠ±Ρ€ΠΎΠ²ΠΎΠ»ΡŒΡ†Ρƒ πŸ“‚ Π’ΠΈΠΊΡ‚ΠΎΡ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ рСспондСнта, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ½ΡΡ‚ΡŒ Ρ‡Π΅Π³ΠΎ ΠΎΡ‚ вас ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΡΠΎΠ±Π΅ΡΠ΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ πŸ“‚ Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π΄Π°Ρ‚ΡŒ любой вопрос Π’ΠΈΠΊΡ‚ΠΎΡ€Ρƒ Π­Ρ‚ΠΎ бСсплатно. Π­Ρ„ΠΈΡ€ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… мСнторской ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΡ‚ ШОРВКАВ для Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хотят ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ свой Π³Ρ€Π΅ΠΉΠ΄, Π—ΠŸ ΠΈ ΠΏΡ€ΠΎΠΊΠ°Ρ‡Π°Ρ‚ΡŒ скиллы. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈ Π² нашСго Π±ΠΎΡ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ссылку Π½Π° эфир β†’ @shortcut_sh_bot Π Π΅ΠΊΠ»Π°ΠΌΠ°. О Ρ€Π΅ΠΊΠ»Π°ΠΌΠΎΠ΄Π°Ρ‚Π΅Π»Π΅.

πŸš€Π Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ConcurrentHashMap БСгодня разбСрёмся, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ConcurrentHashMap Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Ρ‡Π΅ΠΌ HashMap, ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ HashMap, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ потокобСзопасСн ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ бСсконСчным Ρ†ΠΈΠΊΠ»Π°ΠΌ ΠΏΡ€ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ConcurrentHashMap ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠ΅Π³ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, Ρ‡Ρ‚ΠΎ позволяСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ частями ΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π±Π΅Π· ΠΏΠΎΠ»Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ всСй структуры. πŸ“Œ ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ особСнности: - Π”Π΅Π»ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° сСгмСнты (Π΄ΠΎ JDK 8 ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ synchronized ΠΈ CAS ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (начиная с JDK 8). - Π§Ρ‚Π΅Π½ΠΈΠ΅ (get()) Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. - Π—Π°ΠΏΠΈΡΡŒ (put()) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ минимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. - НСт null ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ HashMap). ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:

import java.util.concurrent.ConcurrentHashMap;

public class Main {
    public static void main(String[] args) {
        ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();

        map.put("Java", 1);
        map.put("Python", 2);
        map.put("C++", 3);

        System.out.println(map.get("Java")); // 1
    }
}
πŸ“² ΠœΡ‹ Π² MAX πŸ‘‰@BookJava

Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Checked ΠΈ Unchecked ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ Π²ΠΎ врСмя выполнСния? Π”Π°, Π² Java Π΅ΡΡ‚ΡŒ сущСствСнныС различия ΠΌΠ΅ΠΆΠ΄Ρƒ checked (провСряСмыми) ΠΈ unchecked (нСпровСряСмыми) ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ Π²ΠΎ врСмя выполнСния. 1. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° этапС компиляции - Checked ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ Π½Π° этапС компиляции. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ Π»ΠΈΠ±ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ try-catch), Π»ΠΈΠ±ΠΎ объявили Π΅Π³ΠΎ Π² сигнатурС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ throws). Если этого Π½Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΊΠΎΠ΄ Π½Π΅ скомпилируСтся. - Unchecked ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ: НС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ Π½Π° этапС компиляции. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ»ΠΈ объявлСния. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΈΠ·-Π·Π° логичСских ошибок Π² ΠΊΠΎΠ΄Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, NullPointerException, ArrayIndexOutOfBoundsException). 2. ПовСдСниС Π²ΠΎ врСмя выполнСния - Checked ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ: Π­Ρ‚ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ связаны с внСшними Ρ„Π°ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌ Π²Π²ΠΎΠ΄ΠΎΠΌ-Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ, сСтСвыми соСдинСниями) ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ Π² Ρ…ΠΎΠ΄Π΅ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Если Ρ‚Π°ΠΊΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ выбрасываСтся ΠΈ Π½Π΅ обрабатываСтся, ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ стСку Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‡Π΅Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ. - Unchecked ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ: Π­Ρ‚ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ часто Π²Ρ‹Π·Π²Π°Π½Ρ‹ ошибками Π² ΠΊΠΎΠ΄Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ноль, ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ null). Если Ρ‚Π°ΠΊΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ выбрасываСтся ΠΈ Π½Π΅ пСрСхватываСтся, ΠΎΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ стСку Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡ… Π½Π΅ трСбуСтся ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ, это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠΌΡƒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. 3. НаслСдованиС - Checked ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ: ВсС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Exception (Π½ΠΎ Π½Π΅ RuntimeException), ΡΠ²Π»ΡΡŽΡ‚ΡΡ провСряСмыми. - Unchecked ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ: ВсС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ RuntimeException ΠΈΠ»ΠΈ Error, ΡΠ²Π»ΡΡŽΡ‚ΡΡ нСпровСряСмыми. 4. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ - Checked ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ: IOException, SQLException, ClassNotFoundException. - Unchecked ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ: NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException. 5. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π²ΠΎ врСмя выполнСния - Checked ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ: ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ Π½Π° этапС компиляции, Π²Ρ‹ обязаны явно ΠΈΡ… ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ устойчивым, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ объСм. - Unchecked ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ: ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ Π½Π° этапС компиляции, ΠΈΡ… слоТнСС ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌΠΈ Π² ΠΊΠΎΠ΄Π΅. 6. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ - НСт Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ checked ΠΈ unchecked ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ Π²ΠΎ врСмя выполнСния. Π‘Ρ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ выбрасывания ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Π° для ΠΎΠ±ΠΎΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ². Π˜Ρ‚ΠΎΠ³ - Checked ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ: ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ компилятором, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для recoverable (восстанавливаСмых) ситуаций. - Unchecked ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ: НС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ компилятором, часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΈΠ·-Π·Π° ошибок Π² ΠΊΠΎΠ΄Π΅ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠΌΡƒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ссли Π½Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹. Оба Ρ‚ΠΈΠΏΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π²Π΅Π΄ΡƒΡ‚ сСбя схоТим ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²ΠΎ врСмя выполнСния, Π½ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° этапС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. πŸ“² ΠœΡ‹ Π² MAX πŸ‘‰@BookJava

πŸš€ Π‘ΠΎΠ²Π΅Ρ‚ ΠΏΠΎ Java API πŸš€ ΠŸΡ€ΠΈ использовании Integer.valueOf(int) ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ значСния Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ -128 Π΄ΠΎ 127 ΠΊΡΡˆΠΈΡ€ΡƒΡŽΡ‚ΡΡ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π—Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ этого Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π Π°Π·ΠΌΠ΅Ρ€ кэша ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΡ†ΠΈΠΈ -XX:AutoBoxCacheMax=<Ρ€Π°Π·ΠΌΠ΅Ρ€>. πŸ”₯ πŸ“² ΠœΡ‹ Π² MAX πŸ‘‰@BookJava

Π‘ΠΎΠ²Π΅Ρ‚ ΠΏΠΎ Java πŸ’‘β˜•οΈ Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС Π΄Π½ΠΈ мСсяца, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Ρ‡Π°Ρ‚ΡŒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° YearMonth, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ дСнь, Π° Π·Π°Ρ‚Π΅ΠΌ исп
Π‘ΠΎΠ²Π΅Ρ‚ ΠΏΠΎ Java πŸ’‘β˜•οΈ Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС Π΄Π½ΠΈ мСсяца, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Ρ‡Π°Ρ‚ΡŒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° YearMonth, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ дСнь, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ datesUntil(), которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Stream всСх Π΄Π½Π΅ΠΉ Π΄ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π΄Π°Ρ‚Ρ‹. πŸ“² ΠœΡ‹ Π² MAX πŸ‘‰@BookJava

πŸ‘©β€πŸ’» ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΡƒΡ€ΠΎΠΊ Β«Spring Boot Actuator: основы ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΈ управлСния ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌΒ» πŸ—“ 30 ΠΌΠ°Ρ€Ρ‚Π° Π² 20:00 МБК πŸ†“ БСсплатно.
πŸ‘©β€πŸ’» ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΡƒΡ€ΠΎΠΊ Β«Spring Boot Actuator: основы ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΈ управлСния ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌΒ» πŸ—“ 30 ΠΌΠ°Ρ€Ρ‚Π° Π² 20:00 МБК πŸ†“ БСсплатно. Π£Ρ€ΠΎΠΊ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… старта курса Β«Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π° Spring FrameworkΒ» ΠΎΡ‚ Otus. Π£Π·Π½Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ эффСктивно Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² Spring-прилоТСниях. На Π²Π΅Π±ΠΈΠ½Π°Ρ€Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ: Знакомимся с Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ возмоТностями Spring Boot Actuator β€” Π²Π°ΠΆΠ½Ρ‹ΠΌ инструмСнтом для контроля ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. О Ρ‡Ρ‘ΠΌ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ: βœ”οΈ Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ Spring Boot Actuator. βœ”οΈ КакиС Π·Π°Π΄Π°Ρ‡ΠΈ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с прилоТСниями. βœ”οΈ Базовая настройка Actuator. βœ”οΈ ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ ΠΈ ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠšΠΎΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ интСрСсно: ΠΠ°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌ Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π°ΠΌ, Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΡΡ с Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. πŸ”— Бсылка Π½Π° Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ: https://vk.cc/cVR0CO Π Π΅ΠΊΠ»Π°ΠΌΠ°. ООО Β«ΠžΡ‚ΡƒΡ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅Β», ΠžΠ“Π Π 1177746618576

πŸ–₯️ Java: ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΈΠ»ΠΈ ΠΏΠΎ ссылкС? πŸ€” Π’ Java ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π΄Π°Π½Π½Ρ‹Ρ… происходит Π’ΠžΠ›Π¬ΠšΠž ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ (pass-by-value). Однако Ρ€Π°Π±ΠΎΡ‚Π° с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ввСсти Π² Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΈΠ΄Π΅Ρ‚ ΠΏΠΎ ссылкС. πŸ”Ή Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π² Java? βœ… ΠŸΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ (int, double, char): пСрСдаСтся копия значСния. ИзмСнСния Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π΅ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. βœ… ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (экзСмпляры классов): пСрСдаСтся копия ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π° Π½Π΅ сам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½ΠΎ нСльзя ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ саму ссылку Π½Π° Π½Π΅Π³ΠΎ. πŸ“Œ ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ πŸ”Ή ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ измСняСтся)

public class Test {
    public static void modifyPrimitive(int num) {
        num = 10;  // Π­Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ локальноС
    }

    public static void main(String[] args) {
        int x = 5;
        modifyPrimitive(x);
        System.out.println(x);  // Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚: 5 (Π½Π΅ измСнилось)
    }
}
πŸ”Ή ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ состояния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° сохраняСтся)

class Person {
    String name;
}

public class Test {
    public static void modifyObject(Person p) {
        p.name = "Alice";  // Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
    }

    public static void main(String[] args) {
        Person person = new Person();
        person.name = "Bob";
        modifyObject(person);
        System.out.println(person.name);  // Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚: Alice
    }
}
πŸ”Ή ΠŸΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ссылки (Π½Π΅ измСняСт ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚)

class Person {
    String name;
}

public class Test {
    public static void reassignReference(Person p) {
        p = new Person();  // ΠŸΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ссылки (локально)
        p.name = "Charlie";
    }

    public static void main(String[] args) {
        Person person = new Person();
        person.name = "Bob";
        reassignReference(person);
        System.out.println(person.name);  // Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚: Bob (Π½Π΅ измСнилось)
    }
}
πŸ”₯ Π˜Ρ‚ΠΎΠ³ πŸ”Ή Java всСгда ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ! πŸ”Ή ΠŸΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΊΠΎΠΏΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. πŸ”Ή ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΊΠΎΠΏΠΈΠΈ ссылок, Π½ΠΎ измСнСния Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ. πŸ”Ή Если Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ саму ссылку, это Π½Π΅ повлияСт Π½Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. πŸ“² ΠœΡ‹ Π² MAX πŸ‘‰@BookJava

Π‘ΠΎΠ²Π΅Ρ‚ ΠΏΠΎ Java πŸ’‘ Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ большиС ΠΈ слоТныС Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌΠΈ, ΠΌΠ½Π΅ нравится ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏ
Π‘ΠΎΠ²Π΅Ρ‚ ΠΏΠΎ Java πŸ’‘ Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ большиС ΠΈ слоТныС Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌΠΈ, ΠΌΠ½Π΅ нравится ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с "by". Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹Π·ΠΎΠ² sorted() становится мСньшС ΠΈ читаСтся ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΊΠ°ΠΊ СстСствСнный язык. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ статичСский ΠΈΠΌΠΏΠΎΡ€Ρ‚. πŸ“² ΠœΡ‹ Π² MAX πŸ‘‰@BookJava

Scala создан Π½Π° Π±Π°Π·Π΅ Java, Π½ΠΎ ΠΏΡ€ΠΈ этом остаётся Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΌ ΠΈ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ языком. ΠŸΡ€ΠΈ этом ΠΎΠ½ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΡΠΎΡ‡Π΅Ρ‚Π°ΡŽΡ‚ΡΡ: Π²Ρ‹
Scala создан Π½Π° Π±Π°Π·Π΅ Java, Π½ΠΎ ΠΏΡ€ΠΈ этом остаётся Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΌ ΠΈ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ языком. ΠŸΡ€ΠΈ этом ΠΎΠ½ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΡΠΎΡ‡Π΅Ρ‚Π°ΡŽΡ‚ΡΡ: Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Java-ΠΊΠΎΠ΄ Π²Π½ΡƒΡ‚Ρ€ΠΈ Scala. На Scala Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ микросСрвисы, систСмы Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ, Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для машинного обучСния ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ высоконагруТСнныС сСрвисы. ΠŸΡ€ΠΈΠ³Π»Π°ΡˆΠ°Π΅ΠΌ Π½Π° ΡΠ΅Ρ€ΠΈΡŽ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΡƒΡ€ΠΎΠΊΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄ стартом курса Β«Scala-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΒ»: πŸ“†1 апрСля Π² 20:00 Π Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Cats Validated. ΠŸΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Either Π½Π΅ΡƒΠ΄ΠΎΠ±Π΅Π½ для Ρ‚Π°ΠΊΠΈΡ… Π·Π°Π΄Π°Ρ‡, научимся ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ всС ошибки сразу ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ Ρ„ΠΎΡ€ΠΌΡ‹ рСгистрации. Π’Ρ‹ ΠΏΠΎΠΉΠΌΡ‘Ρ‚Π΅, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Validated, Π° ΠΊΠΎΠ³Π΄Π° Either, ΠΈ смоТСтС ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ это Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅. πŸ“†14 апрСля Π² 20:00 Π˜Π·ΡƒΡ‡ΠΈΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ возмоТности Scala Ρ‡Π΅Ρ€Π΅Π· case classes ΠΈ pattern matching. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ бСзопасныС ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с событиями ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ чистый, понятный ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² production. πŸ“†20 апрСля Π² 20:00 ΠŸΠΎΠ³Ρ€ΡƒΠ·ΠΈΠΌΡΡ Π² Ρ‚Π΅ΠΌΡƒ эффСктов Π² Scala. Π Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ эффСкты ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ прСдсказуСмый ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄. Рассмотрим Option, Either, Future, Π° Ρ‚Π°ΠΊΠΆΠ΅ Cats Effect ΠΈ ZIO, ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ… Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡Π°Ρ…. πŸ’₯ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠΉΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π½Π°Π²Ρ‹ΠΊΠΈ Scala ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ ΠΎΠ± ΡƒΡ€ΠΎΠΊΠ°Ρ… ΠΈ рСгистрация: https://vk.cc/cVMvN3 Π Π΅ΠΊΠ»Π°ΠΌΠ°. ООО Β«ΠžΡ‚ΡƒΡ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅Β», ΠžΠ“Π Π 1177746618576, www.otus.ru

πŸ”Œ ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ API: REST, GraphQL ΠΈΠ»ΠΈ gRPC? 🧱 1. REST (Классика ΠΈ Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚) REST (Representational State Transfer) - это
πŸ”Œ ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ API: REST, GraphQL ΠΈΠ»ΠΈ gRPC? 🧱 1. REST (Классика ΠΈ Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚) REST (Representational State Transfer) - это Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ стандарт ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… API (GitHub, Stripe, Telegram) построСны Π½Π° Π½Π΅ΠΌ. Π‘ΡƒΡ‚ΡŒ: Π’ Ρ†Π΅Π½Ρ‚Ρ€Π΅ всСго находится РСсурс (Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅). А дСйствия Π½Π°Π΄ Π½ΠΈΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· стандартныС HTTP-ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (Π“Π»Π°Π³ΠΎΠ»Ρ‹). β€’ GET /users/123 - Π”Π°ΠΉ ΠΌΠ½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ 123. β€’ POST /users - Π‘ΠΎΠ·Π΄Π°ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. β€’ DELETE /users/123 - Π£Π΄Π°Π»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. βœ… ΠŸΠ»ΡŽΡΡ‹: β€’ ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π°: ΠŸΠΎΠ½ΡΡ‚Π΅Π½ всСм, Π»Π΅Π³ΠΊΠΎ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Postman ΠΈΠ»ΠΈ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€. β€’ ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅: ИдСально Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с CDN (ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ стандартныС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ HTTP. ❌ ΠœΠΈΠ½ΡƒΡΡ‹: β€’ Over-fetching (Π˜Π·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ): ΠœΠΎΠ±ΠΈΠ»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π½ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ GET /users/1 Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ JSON Π½Π° 50 ΠΏΠΎΠ»Π΅ΠΉ (с адрСсами, Π΄Π°Ρ‚Π°ΠΌΠΈ ΠΈ Ρ‚.Π΄.). Π’Ρ‹ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π²ΠΏΡƒΡΡ‚ΡƒΡŽ. β€’ Under-fetching (ΠΠ΅Π΄ΠΎΡΡ‚Π°Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ) ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° N+1: Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ Π΅Π³ΠΎ 10 послСдних постов, Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Ρƒ придСтся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ 1 запрос ΠΊ /users/1 ΠΈ Π΅Ρ‰Π΅ 10 запросов ΠΊ /posts?userId=1. Π­Ρ‚ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. πŸ•ΈοΈ 2. GraphQL (ΠœΠ΅Ρ‡Ρ‚Π° Π€Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π΅Ρ€Π°) Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π² Facebook для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ REST ΠΏΡ€ΠΈ слабом мобильном ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅. Π‘ΡƒΡ‚ΡŒ: Π£ вас Π΅ΡΡ‚ΡŒ всСго ΠΎΠ΄ΠΈΠ½ Endpoint (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ POST /graphql). ΠšΠ»ΠΈΠ΅Π½Ρ‚ сам ΠΏΠΈΡˆΠ΅Ρ‚ запрос-схСму, Π³Π΄Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ поля Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½Ρ‹. Запрос ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°:

query {
  user(id: "123") {
    name
    email
    posts(last: 10) {
      title
    }
  }
}
ΠžΡ‚Π²Π΅Ρ‚ сСрвСра: ВСрнСтся JSON строго с ΠΈΠΌΠ΅Π½Π΅ΠΌ, email ΠΈ 10 Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ постов. Ни ΠΎΠ΄Π½ΠΈΠΌ Π±Π°ΠΉΡ‚ΠΎΠΌ большС! βœ… ΠŸΠ»ΡŽΡΡ‹: β€’ Π Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Over-fetching ΠΈ Under-fetching. Один запрос = Ρ€ΠΎΠ²Π½ΠΎ Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½Ρ‹ для отрисовки экрана. β€’ Быстрая итСрация Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π°: UI-ΠΊΠΎΠΌΠ°Π½Π΄Π΅ большС Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ бэкСндСров Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ endpoint /users-with-posts-and-comments. ❌ ΠœΠΈΠ½ΡƒΡΡ‹: β€’ Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ: Π’Π°ΠΊ ΠΊΠ°ΠΊ всё ΠΈΠ΄Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ΄ΠΈΠ½ URL POST /graphql, Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто Π·Π°ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ CDN (Cloudflare). β€’ Π£Π³Ρ€ΠΎΠ·Π° для Π‘Π°Π·Ρ‹ Π”Π°Π½Π½Ρ‹Ρ…: Если ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚ слишком Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠΉ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ запрос (ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ -> ΠŸΠΎΡΡ‚Ρ‹ -> ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ -> Авторы ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² -> Π˜Ρ… посты), ваша Π‘Π” просто "ляТСт". πŸš€ 3. gRPC (Π‘ΠΏΠΈΠ΄Ρ€Π°Π½Π½Π΅Ρ€ для ΠœΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡΠΎΠ²) Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π² Google. Если REST ΠΈ GraphQL ΠΎΠ±Ρ‰Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠ³ΠΎ тСкста (JSON) ΠΏΠΎΠ²Π΅Ρ€Ρ… старого HTTP/1.1, Ρ‚ΠΎ gRPC Π»ΠΎΠΌΠ°Π΅Ρ‚ эти ΠΏΡ€Π°Π²ΠΈΠ»Π°. Π‘ΡƒΡ‚ΡŒ: Π’Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ сСрвСрС Ρ‚Π°ΠΊ, Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½Π° Π»Π΅ΠΆΠΈΡ‚ Π² вашСм собствСнном ΠΊΠΎΠ΄Π΅. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ HTTP/2 (ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ стриминг) ΠΈ Protobuf (Protocol Buffers). Protobuf - это Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚. ВмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ "name": "Alex", ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ просто Π±Π°ΠΉΡ‚Ρ‹ ΠΏΠΎ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠ³ΠΎΠ²ΠΎΡ€Π΅Π½Π½ΠΎΠΉ ТСсткой схСмС (.proto Ρ„Π°ΠΉΠ»). βœ… ΠŸΠ»ΡŽΡΡ‹: β€’ НСвСроятная ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ: Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ вСсит Π² Ρ€Π°Π·Ρ‹ мСньшС JSON ΠΈ парсится процСссором ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ. gRPC Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΄ΠΎ 10 Ρ€Π°Π· быстрСС REST. β€’ Бтрогая типизация: Π’Ρ‹ описываСтС ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρ‹ Π² .proto Ρ„Π°ΠΉΠ»Π΅, ΠΈ ΠΈΠ· Π½Π΅Π³ΠΎ автоматичСски гСнСрируСтся ΠΊΠΎΠ΄ ΠΈ для Java-бэкСнда, ΠΈ для Python-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Никаких ошибок "ΠΎΠΆΠΈΠ΄Π°Π» строку, ΠΏΡ€ΠΈΡˆΠ»ΠΎ число". β€’ Π‘Ρ‚Ρ€ΠΈΠΌΠΈΠ½Π³: МоТно ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ соСдинСниС ΠΈ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ Π»ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΎΠ±Π΅ стороны. ❌ ΠœΠΈΠ½ΡƒΡΡ‹: β€’ НС читаСтся Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ: Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ консоль Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ payload, Ρ‚Π°ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ нСпонятныС Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ символы. β€’ ΠŸΠ»ΠΎΡ…Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°ΠΌΠΈ: ΠΠ°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ· JavaScript Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ gRPC Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ слоТно (Π½ΡƒΠΆΠ΅Π½ прокси grpc-web), поэтому для ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π° Π΅Π³ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚. Π’ идСальной соврСмСнной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅: Мобилка общаСтся с API Gateway ΠΏΠΎ GraphQL β€”> Gateway общаСтся с Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ микросСрвисами ΠΏΠΎ gRPC. #SystemDesign #API #REST #GraphQL #gRPC #Java πŸ“² ΠœΡ‹ Π² MAX πŸ‘‰@BookJava

πŸš€ ΠŸΠΎΠ΄Π±ΠΎΡ€ΠΊΠ° ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… IT ΠΊΠ°Π½Π°Π»ΠΎΠ² Π² Max БистСмноС администрированиС, DevOps πŸ“Œ https://max.ru/i_odmin ВсС для систСмного администратора https://max.ru/bash_srv Bash Π‘ΠΎΠ²Π΅Ρ‚Ρ‹ https://max.ru/sysadminof Книги для Π°Π΄ΠΌΠΈΠ½ΠΎΠ², ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ https://max.ru/i_odmin_book Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° БистСмного Администратора https://max.ru/i_devops DevOps: ПишСм ΠΎ Docker, Kubernetes ΠΈ Π΄Ρ€. 1C Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° πŸ“Œ https://max.ru/odin1c_rus CΡ‚Π°Ρ‚ΡŒΠΈ, курсы, совСты, ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΊΠΎΠ΄Π° 1Π‘ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ C++πŸ“Œ https://max.ru/cpp_lib Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° C/C++ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Python πŸ“Œ https://max.ru/python_of Python акадСмия. https://max.ru/BookPython Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Python Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° πŸ“Œ https://max.ru/bookjava Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° GitHub БообщСство πŸ“Œ https://max.ru/githublib Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎΠ΅ ΠΈΠ· GitHub Π‘Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… (Data Base) πŸ“Œ https://max.ru/database_info ВсС ΠΏΡ€ΠΎ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π€Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° πŸ“Œ https://max.ru/frontend_1 ΠŸΠΎΠ΄Π±ΠΎΡ€ΠΊΠΈ для frontend Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ πŸ“Œ https://max.ru/programmist_of Книги ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ https://max.ru/proglb Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста https://max.ru/bfbook Книги для программистов ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ πŸ“Œ https://max.ru/bookflow Π›Π΅ΠΊΡ†ΠΈΠΈ, Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊΠΈ, Π΄ΠΎΠΊΠ»Π°Π΄Ρ‹ с IT ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΉ https://max.ru/itmozg ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹, Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€Ρ‹, новости ΠΈΠ· ΠΌΠΈΡ€Π° IT https://max.ru/php_lib Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° PHP программиста πŸ‘¨πŸΌβ€πŸ’»πŸ‘©β€πŸ’» Π¨ΡƒΡ‚ΠΊΠΈ программистов πŸ“Œ https://max.ru/itumor Π¨ΡƒΡ‚ΠΊΠΈ программистов Π—Π°Ρ‰ΠΈΡ‚Π°, Π²Π·Π»ΠΎΠΌ, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ πŸ“Œ https://max.ru/thehaking Канал ΠΎ кибСрбСзопасности https://max.ru/xakkep_1 Π₯Π°ΠΊΠ΅Ρ€ Free Книги, ΡΡ‚Π°Ρ‚ΡŒΠΈ для Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€ΠΎΠ² πŸ“Œ https://max.ru/odesigners Π‘Ρ‚Π°Ρ‚ΡŒΠΈ, ΠΊΠ½ΠΈΠ³ΠΈ для Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° πŸ“Œ https://max.ru/Pomatematike Канал ΠΏΠΎ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ https://max.ru/phismat_1 ΠžΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎ, ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΠΎ Π€ΠΈΠ·ΠΈΠΊΠ΅ ΠΈ ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ Вакансии πŸ“Œ https://max.ru/progjob Вакансии Π² IT ΠœΠΈΡ€ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ πŸ“Œ https://max.ru/mir_teh Канал для Π»ΡŽΠ±ΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Бонус πŸ“Œ https://max.ru/piterspb_78 Π‘Π²Π΅ΠΆΠΈΠ΅ новости Π‘Π°Π½ΠΊΡ‚-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³Π° https://max.ru/mockva_life Π‘Π²Π΅ΠΆΠΈΠ΅ новости ΠœΠΎΡΠΊΠ²Ρ‹

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° - Statistics & analytics of Telegram channel @bookjava