Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
Совет по Java : не полагайся полностью на сборщик мусора — утечки памяти всё ещё возможны.
👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🔥1
Типы классов в Java:
1. Concrete Class (конкретный класс) — обычный класс с полной реализацией методов.
2. Abstract Class (абстрактный класс) — не может быть создан через
3. Final Class (финальный класс) — не может быть унаследован.
4. Static Class (вложенный статический класс) — статический внутренний класс внутри другого класса.
5. Inner Class (внутренний класс) — нестатический класс, объявленный внутри другого класса.
6. Local Class (локальный класс) — класс, определённый внутри метода.
7. Anonymous Class (анонимный класс) — класс без имени, обычно используется для кратковременных реализаций.
8. Singleton Class (синглтон-класс) — гарантирует существование только одного экземпляра класса.
9. POJO (Plain Old Java Object) — простой Java-класс без специальных ограничений или требований.
10. Record Class (Java 14+) — компактный класс для представления неизменяемых данных.
11. Enum Class (класс-перечисление) — определяет фиксированный набор констант.
👉 Java Portal
1. Concrete Class (конкретный класс) — обычный класс с полной реализацией методов.
2. Abstract Class (абстрактный класс) — не может быть создан через
new; может содержать абстрактные методы.3. Final Class (финальный класс) — не может быть унаследован.
4. Static Class (вложенный статический класс) — статический внутренний класс внутри другого класса.
5. Inner Class (внутренний класс) — нестатический класс, объявленный внутри другого класса.
6. Local Class (локальный класс) — класс, определённый внутри метода.
7. Anonymous Class (анонимный класс) — класс без имени, обычно используется для кратковременных реализаций.
8. Singleton Class (синглтон-класс) — гарантирует существование только одного экземпляра класса.
9. POJO (Plain Old Java Object) — простой Java-класс без специальных ограничений или требований.
10. Record Class (Java 14+) — компактный класс для представления неизменяемых данных.
11. Enum Class (класс-перечисление) — определяет фиксированный набор констант.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🤔1
// Old way:
String season;
switch (month) {
case 12:
case 1:
case 2:
season = "Winter";
break;
case 3:
case 4:
case 5:
season = "Spring";
break;
default:
season = "Invalid";
}
// New switch expression:
String season = switch (month) {
case 12, 1, 2 -> "Winter";
case 3, 4, 5 -> "Spring";
default -> "Invalid";
};
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤5👍3👀1
Совет по Spring AI
Запускаете локальные AI-модели через LM Studio и сталкиваетесь с зависанием соединения, когда ваше приложение Spring AI вызывает API, совместимый с OpenAI?
LM Studio не поддерживает HTTP/2, из-за чего запрос может зависать.
Решение: отключить HTTP/2 для`RestClient`.
👉 Java Portal
Запускаете локальные AI-модели через LM Studio и сталкиваетесь с зависанием соединения, когда ваше приложение Spring AI вызывает API, совместимый с OpenAI?
LM Studio не поддерживает HTTP/2, из-за чего запрос может зависать.
Решение: отключить HTTP/2 для`RestClient`.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Spring Boot: Используйте
В production логирование деталей запроса может привести к раскрытию чувствительной информации.
Когда вы настраиваете свойства Spring-приложения в dev со следующими параметрами:
и конфигурацию фильтра примерно такую:
вы включаете логирование:
1. заголовков запроса (Request headers)
2. query-параметров (Query parameters)
3. данных формы (Form data)
Без этого Spring маскирует или опускает многие из этих деталей, чтобы избежать утечки информации.
Не используйте это в production, иначе вы раскроете чувствительную информацию, например пароли:
👉 Java Portal
spring.mvc.publish-request-params=true только в dev-среде. Это опасно в production.В production логирование деталей запроса может привести к раскрытию чувствительной информации.
Когда вы настраиваете свойства Spring-приложения в dev со следующими параметрами:
# Включить публикацию параметров
spring.mvc.publish-request-params=true
# Установить уровни логирования, чтобы видеть вывод
logging.level.org.springframework.web=DEBUG
logging.level.org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor=DEBUG
и конфигурацию фильтра примерно такую:
@Bean
public CommonsRequestLoggingFilter logFilter() {
CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter();
filter.setIncludeQueryString(true); // 2) Query-параметры
filter.setIncludeHeaders(true); // 1) Заголовки запроса
filter.setIncludePayload(true); // 3) Данные формы
filter.setMaxPayloadLength(1000);
filter.setAfterMessagePrefix("COMPLETE REQUEST: ");
return filter;
}
вы включаете логирование:
1. заголовков запроса (Request headers)
2. query-параметров (Query parameters)
3. данных формы (Form data)
Без этого Spring маскирует или опускает многие из этих деталей, чтобы избежать утечки информации.
Не используйте это в production, иначе вы раскроете чувствительную информацию, например пароли:
POST /login
Body: {"username":"john","password":"mypassword"}
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4❤2
Вопрос на собеседовании по Git:
Ваша основная ветка (main) опережает вашу локальную ветку.
Как обновить свою ветку, не затронув ваши коммиты?
git fetch
Скачивает последние изменения из удалённого репозитория, не изменяя ваши локальные коммиты.
git rebase origin/main
Перенакладывает (reapply) ваши коммиты поверх обновлённой ветки main, сохраняя чистую историю коммитов.
До rebase:
После rebase:
👉 Java Portal
Ваша основная ветка (main) опережает вашу локальную ветку.
Как обновить свою ветку, не затронув ваши коммиты?
git fetch
Скачивает последние изменения из удалённого репозитория, не изменяя ваши локальные коммиты.
git rebase origin/main
Перенакладывает (reapply) ваши коммиты поверх обновлённой ветки main, сохраняя чистую историю коммитов.
До rebase:
A --- B --- C (origin/main)
\
D --- E (ваша ветка)
После rebase:
A --- B --- C --- D --- E
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Java Portal | Программирование
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика
Связь: @devmangx
РКН: https://clck.ru/3H4WUg
Связь: @devmangx
РКН: https://clck.ru/3H4WUg
👍12❤3
Совет по Java 💡 : используйте
👉 Java Portal
Files.walk() для рекурсивной обработки файлов в директории.Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥9👍4❤2
Обход правила WAF в CloudFront, которое блокирует доступ к Spring Boot.
Все обходы возвращают реальные данные Actuator:
👉 Java Portal
Все обходы возвращают реальные данные Actuator:
GET /%61ctuator/health → HTTP 200 (5122B) ← 'a' закодирована
GET /a%63tuator/health → HTTP 200 (5123B) ← 'c' закодирована
GET /ac%74uator/health → HTTP 200 (5122B) ← 't' закодирована
GET /act%75ator/health → HTTP 200 (5123B) ← 'u' закодирована
GET /actu%61tor/health → HTTP 200 (5123B) ← 'a' закодирована
GET /actua%74or/health → HTTP 200 (5123B) ← 't' закодирована
GET /actuat%6For/health → HTTP 200 (5123B) ← 'o' закодирована
GET /actuato%72/health → HTTP 200 (5123B) ← 'r' закодирована
GET /a%63%74uator/health → HTTP 200 (5123B) ← двойное кодирование
GET /%61ctua%74or/health → HTTP 200 (5123B) ← двойное кодирование
GET /%61%63%74%75%61%74%6F%72/health → HTTP 200 (5122B) ← полностью закодировано
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Java 26 скоро выходит😁
JDK 26 обновляет
Подробнее: https://social.ora.cl/6019B6HWIN
👉 Java Portal
JDK 26 обновляет
HttpClient — добавляет опциональную поддержку HTTP/3 (QUIC), более умную работу с тайм-аутами, загрузку файлов через file-channel, усиленный контроль TLS, а также заголовки и cookies, приведённые в соответствие с RFC.Подробнее: https://social.ora.cl/6019B6HWIN
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Самый чистый современный паттерн Java для обработки ошибок (без выбрасывания исключений для ожидаемых случаев):
Использовать sealed interface + records + исчерпывающий pattern matching в switch = типобезопасно и контролируется компилятором.
Больше никаких
Преимущества в реальном коде:
- Ноль неожиданных исключений во время выполнения
- Понятно, что может произойти, просто посмотрев на сигнатуру метода
- Значительно проще тестировать и рефакторить
- Читается почти как
👉 Java Portal
Использовать sealed interface + records + исчерпывающий pattern matching в switch = типобезопасно и контролируется компилятором.
Больше никаких
RuntimeException для случаев вроде "not found" / "invalid input" / "unauthorized" — компилятор заставляет обработать каждый возможный результат.Преимущества в реальном коде:
- Ноль неожиданных исключений во время выполнения
- Понятно, что может произойти, просто посмотрев на сигнатуру метода
- Значительно проще тестировать и рефакторить
- Читается почти как
Result в Rust или Result в KotlinPlease open Telegram to view this post
VIEW IN TELEGRAM
🔥6🤔3❤2🤣1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Это начало конца проблемы N+1: представили Single Query Loading
Кратко (TL;DR):
Начиная с версии Spring Data JDBC 3.2.0-M2, фреймворк поддерживает Single Query Loading. Single Query Loading позволяет загружать произвольные агрегаты одним SELECT-запросом.
Чтобы включить Single Query Loading, нужно вызвать
В версии 3.2.0-M2 это работает только для простых агрегатов, состоящих из корневой сущности (aggregate root) и одной коллекции других сущностей. Также это ограничено методами
Ещё одно ограничение: используемая база данных должна поддерживать аналитические функции (также известные как window functions). Все официально поддерживаемые базы данных, кроме in-memory решений (H2 и HSQLDB), это поддерживают.
Single Query Loading можно сокращать как SQL, но, пожалуйста, не делайте этого.
Если хотите понять, как это работает и как мы к этому пришли — читайте дальше.
👉 Java Portal
Кратко (TL;DR):
Начиная с версии Spring Data JDBC 3.2.0-M2, фреймворк поддерживает Single Query Loading. Single Query Loading позволяет загружать произвольные агрегаты одним SELECT-запросом.
Чтобы включить Single Query Loading, нужно вызвать
setSingleQueryLoadingEnabled(true) у вашего RelationalMappingContext.В версии 3.2.0-M2 это работает только для простых агрегатов, состоящих из корневой сущности (aggregate root) и одной коллекции других сущностей. Также это ограничено методами
findAll, findById и findAllByIds в CrudRepository. В будущих версиях эти ограничения будут сняты.Ещё одно ограничение: используемая база данных должна поддерживать аналитические функции (также известные как window functions). Все официально поддерживаемые базы данных, кроме in-memory решений (H2 и HSQLDB), это поддерживают.
Single Query Loading можно сокращать как SQL, но, пожалуйста, не делайте этого.
Если хотите понять, как это работает и как мы к этому пришли — читайте дальше.
Please open Telegram to view this post
VIEW IN TELEGRAM
This is the Beginning of the End of the N+1 Problem: Introducing Single Query Loading.
Level up your Java code and explore what Spring can do for you.
🔥6
Scala создан на базе Java, но при этом остаётся более лаконичным языком. Вы можете использовать Java-код внутри Scala. На Scala разрабатывают микросервисы, системы аналитики, обработки данных и тд. Приглашаем на открытые уроки перед стартом курса «Scala-разработчик»:
📆1 апреля в 20:00
Разберём функциональную валидацию данных с помощью Cats Validated. Поговорим, почему Either неудобен для таких задач, научимся собирать все ошибки сразу и реализуем валидацию формы регистрации.
📆14 апреля в 20:00
Изучим возможности через case classes и pattern matching. Покажем, как создавать безопасные модели данных, работать с событиями и писать чистый, понятный код, который используется в production
📆20 апреля в 20:00
Разберём эффекты и как они помогают писать предсказуемый и масштабируемый код. Option, Either, Future, а также Cats Effect и ZIO, и покажем, как применять их в реальных задачах
💥 Регистрация: https://otus.pw/lcXA/?erid=2W5zFGFZYwj
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
📆1 апреля в 20:00
Разберём функциональную валидацию данных с помощью Cats Validated. Поговорим, почему Either неудобен для таких задач, научимся собирать все ошибки сразу и реализуем валидацию формы регистрации.
📆14 апреля в 20:00
Изучим возможности через case classes и pattern matching. Покажем, как создавать безопасные модели данных, работать с событиями и писать чистый, понятный код, который используется в production
📆20 апреля в 20:00
Разберём эффекты и как они помогают писать предсказуемый и масштабируемый код. Option, Either, Future, а также Cats Effect и ZIO, и покажем, как применять их в реальных задачах
💥 Регистрация: https://otus.pw/lcXA/?erid=2W5zFGFZYwj
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
Spring Boot: избегайте
Помечая связь как
👉 Java Portal
FetchType.EAGER, если в этом нет реальной необходимости.Помечая связь как
EAGER, вы говорите ORM загружать её каждый раз при загрузке сущности — независимо от того, вызываете ли вы вообще методы этой связи.Please open Telegram to view this post
VIEW IN TELEGRAM
👍1