В Java строки после создания не меняются.
Вообще. Совсем.
Пишешь:
Кажется, что ты просто дописал кусочек. Но на деле появился новый объект, а старый остался как был.
Зачем так заморачиваться?
Строки одна из самых используемых штук в JVM: названия классов, SQL-запросы, адреса, токены безопасности, всё подряд. И этими строками спокойно шарятся между потоками.
Если бы любой поток мог внезапно изменить текст, который использует другой поток, то был полный бардак: баги из разряда «иногда, где-то, когда-то» и куча дыр в безопасности.
Поэтому неизменяемость даёт:
• Потоки не мешают друг другу. Никаких локов и синхронизации.
• Можно безопасно кешировать строки. Тот же String Pool — из этой оперы.
• JVM может оптимизировать работу с ними как ей вздумается, без риска сломать логику программы.
Если же нужно много править текст во время выполнения (например, большая сборка строки в цикле) то бери StringBuilder или, если сильно нужна потокобезопасность, StringBuffer.
Иммутабельность строки это не чудачество создателей языка. Это фундамент стабильности и безопасности Java.
👉   Java Portal
Вообще. Совсем.
Пишешь:
String saludo = "Hola";
saludo += " mundo";
Кажется, что ты просто дописал кусочек. Но на деле появился новый объект, а старый остался как был.
Зачем так заморачиваться?
Строки одна из самых используемых штук в JVM: названия классов, SQL-запросы, адреса, токены безопасности, всё подряд. И этими строками спокойно шарятся между потоками.
Если бы любой поток мог внезапно изменить текст, который использует другой поток, то был полный бардак: баги из разряда «иногда, где-то, когда-то» и куча дыр в безопасности.
Поэтому неизменяемость даёт:
• Потоки не мешают друг другу. Никаких локов и синхронизации.
• Можно безопасно кешировать строки. Тот же String Pool — из этой оперы.
• JVM может оптимизировать работу с ними как ей вздумается, без риска сломать логику программы.
Если же нужно много править текст во время выполнения (например, большая сборка строки в цикле) то бери StringBuilder или, если сильно нужна потокобезопасность, StringBuffer.
Иммутабельность строки это не чудачество создателей языка. Это фундамент стабильности и безопасности Java.
Please open Telegram to view this post
    VIEW IN TELEGRAM
  ❤11👍2
  Spring Boot 4 показывает нормальную работу null-safety в деле 
Главная беда в том, что в Java null всегда был вещью по умолчанию и нигде явно не указан. Видишь метод типа:
User findUserByEmail(String email)
Вернет null? Кто его знает
Spring Boot 4 меняет правила игры с NullMarked (на базе JSpecify + NullAway). Одна аннотация на уровне пакета делает работу с null явной. IDE сразу подсвечивает потенциальные NPE еще на этапе компиляции. Больше никаких угадай-ок и сюрпризов на проде.
Инструменты подталкивают обрабатывать null там, где это действительно важно. Типы наконец начинают говорить правду.
Вот такая developer experience, которой давно ждали.
👉   Java Portal
Главная беда в том, что в Java null всегда был вещью по умолчанию и нигде явно не указан. Видишь метод типа:
User findUserByEmail(String email)
Вернет null? Кто его знает
Spring Boot 4 меняет правила игры с NullMarked (на базе JSpecify + NullAway). Одна аннотация на уровне пакета делает работу с null явной. IDE сразу подсвечивает потенциальные NPE еще на этапе компиляции. Больше никаких угадай-ок и сюрпризов на проде.
Инструменты подталкивают обрабатывать null там, где это действительно важно. Типы наконец начинают говорить правду.
Вот такая developer experience, которой давно ждали.
Please open Telegram to view this post
    VIEW IN TELEGRAM
  🔥10❤5👍3
  Spring Boot совет: если хочешь, чтобы DTO спокойно переживали лишние поля в JSON от клиента и не роняли API, добавляй аннотацию 
Jackson тогда просто проигнорит поля, которых нет в твоем классе, вместо того чтобы кидать
Допустим, есть DTO:
Клиент шлёт такой JSON:
Jackson скажет что-то вроде:
Исправить просто: добавляем
И всё. Лишние поля тихонько проигнорятся, API не падает.
👉   Java Portal
@JsonIgnoreProperties(ignoreUnknown = true)Jackson тогда просто проигнорит поля, которых нет в твоем классе, вместо того чтобы кидать
UnrecognizedPropertyException. Удобно, когда фронты любят прислать что-нибудь от себя.Допустим, есть DTO:
public class UserDTO {
    private String name;
    private int age;
    // getters/setters
}Клиент шлёт такой JSON:
{
  "name": "Alice",
  "age": 25,
  "extraField": "not expected"
}Jackson скажет что-то вроде:
UnrecognizedPropertyException: Unrecognized field "extraField"
Исправить просто: добавляем
@JsonIgnoreProperties@JsonIgnoreProperties(ignoreUnknown = true)
public class UserDTO {
private String name;
private int age;
// getters/setters
}
И всё. Лишние поля тихонько проигнорятся, API не падает.
Please open Telegram to view this post
    VIEW IN TELEGRAM
  🔥7👍5❤2
  Айтишники не рассказывают где учатся бесплатно и эффективно
Никому не говори об этом канале!!! В сфере онлайн образования появился новый гигант «TERMINAL» — который разрушит индустрию платных IT-курсов
Бесплатный доступ:
Обучение по всем направлениям: SQL, Python, Frontend, PHP, C++, Golang, GIT, Linux, Java, кибербезопасность и др.
Если ценишь знания — подпишись: @Terminal_tg
Никому не говори об этом канале!!! В сфере онлайн образования появился новый гигант «TERMINAL» — который разрушит индустрию платных IT-курсов
Бесплатный доступ:
🔄 Практические курсы и задания🔄 Книги и статьи от профи🔄 Полезные инструменты и ресурсы🔄 IT-новости и инсайды
Обучение по всем направлениям: SQL, Python, Frontend, PHP, C++, Golang, GIT, Linux, Java, кибербезопасность и др.
Если ценишь знания — подпишись: @Terminal_tg
Please open Telegram to view this post
    VIEW IN TELEGRAM
  🤣6💊3👍2❤1🔥1
  Исправляем ту самую ошибку на миллиарды долларов? 👀 
Улучшения поддержки null-безопасности в Spring Boot 4 могут оказаться самым недооцененным нововведением предстоящего релиза.
Аннотации NonNull и Nullable теперь полноценные граждане во всем фреймворке. Spring постепенно переводит весь код на единый и последовательный подход.
Хватит гадать, вернет ли сервис null. IDE поймает потенциальный NPE уже на этапе компиляции, а не в рантайме.
То ли поправка, о которой мечтал Тони Хоар? Не полностью. Но это важный шаг к более безопасному Java-коду.
Самое приятное? Не нужно мигрировать за один заход. Можно двигаться постепенно, делая код надежнее и уверенно продвигаясь вперед.
Null-безопасность в Spring Boot 4 даст нам ту же уверенность в кодовой базе, что и тесты.👍 
👉   Java Portal
Улучшения поддержки null-безопасности в Spring Boot 4 могут оказаться самым недооцененным нововведением предстоящего релиза.
Аннотации NonNull и Nullable теперь полноценные граждане во всем фреймворке. Spring постепенно переводит весь код на единый и последовательный подход.
Хватит гадать, вернет ли сервис null. IDE поймает потенциальный NPE уже на этапе компиляции, а не в рантайме.
То ли поправка, о которой мечтал Тони Хоар? Не полностью. Но это важный шаг к более безопасному Java-коду.
Самое приятное? Не нужно мигрировать за один заход. Можно двигаться постепенно, делая код надежнее и уверенно продвигаясь вперед.
Null-безопасность в Spring Boot 4 даст нам ту же уверенность в кодовой базе, что и тесты.
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍7
  Подсказка по Spring Boot 4: коллекции с nullable-элементами (List<Nullable String>) помогают ловить NullPointerException на этапе компиляции вместо рантайма. Больше никаких сюрпризов при обработке API-ответов, где могут прилетать null.
👉   Java Portal
Please open Telegram to view this post
    VIEW IN TELEGRAM
  ❤6
  Недавно в регионе US-EAST-1 у AWS были сбои.
Как бы ты спроектировал деплой микросервиса и инфраструктуру вокруг, чтобы пережить падение одной инстансы, сбой базы данных или даже отказ целого дата-центра ?
Когда делаем систему с высокой доступностью, нужно сразу исходить из того, что все рано или поздно ломается. Поэтому закладываем автоматическое восстановление на каждом уровне.
Держим несколько одинаковых инстансов сервиса за нагрузочным балансировщиком. Деплоим их в разные зоны. Если одна инстанса упала, балансировщик просто перестает слать ей трафик и направляет запросы на оставшиеся живые экземпляры.
Для базы данных используем репликацию. Есть primary и хотя бы одна hot-standby реплика в другой физической зоне. Все записи в primary сразу копируются на standby.
Практикуем Chaos Engineering: намеренно ломаем часть продовой инфраструктуры, например, убиваем сервисы или добавляем сетевые задержки. Смотрим, что автоматический failover реально срабатывает как задумано, а не только на бумаге.
Please open Telegram to view this post
    VIEW IN TELEGRAM
  Видишь разницу между этими двумя кусками кода? 👀 
На первый взгляд делают одно и то же, но…
В первом варианте все классы вынуждены реализовывать методы, которые им вообще не нужны.
Во втором интерфейсы разделены: каждый класс берет только то, что реально использует.
Принцип разделения интерфейсов (ISP)
👉   Java Portal
На первый взгляд делают одно и то же, но…
В первом варианте все классы вынуждены реализовывать методы, которые им вообще не нужны.
Во втором интерфейсы разделены: каждый класс берет только то, что реально использует.
Принцип разделения интерфейсов (ISP)
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍11❤1