Улучшаем работу с Optional
Все используют Optional, но не все знают, как сделать это лучше. Нередко можно встретить такой код:
Такой код не только избыточен, но и может привести к NoSuchElementException, если забыть проверить isPresent(). Поэтому лучше использовать ifPresent(), чтобы оптимизировать код:
📌 Какие ещё варианты
— Для выполнения действия, если значение есть (ifPresent()).
— Для подстановки дефолтного значения (orElse() / orElseGet()).
— Для обработки исключений (orElseThrow()).
⚠️ Плохие практики
🔘 Использовать Optional в качестве аргументов методов — это ломает читаемость API.
🔘 Использовать Optional.get() без проверки — это сводит всю пользу Optional на нет.
✅ Java библиотека #java
Все используют Optional, но не все знают, как сделать это лучше. Нередко можно встретить такой код:
Optional<User> userOpt = findUserById(id);
if (userOpt.isPresent()) {
User user = userOpt.get();
processUser(user);
}
Такой код не только избыточен, но и может привести к NoSuchElementException, если забыть проверить isPresent(). Поэтому лучше использовать ifPresent(), чтобы оптимизировать код:
findUserById(id).ifPresent(this::processUser);
— Для выполнения действия, если значение есть (ifPresent()).
— Для подстановки дефолтного значения (orElse() / orElseGet()).
— Для обработки исключений (orElseThrow()).
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25❤5🔥3
Техника «10 тестов в день» – одна из самых эффективных в изучении Java.
Канал Java Guru выложил в открытый доступ тесты, которые дают на собеседованиях в топовые компании, вроде Яндекс и MailRu.
➤ Открываете задачку – выбираете вариант – видите правильный ответ и детальное объяснение к нему. Так вы усвоите на 50% больше знаний в сжатые сроки.
Подписывайтесь и качайте свои скиллы: @javatasks
Канал Java Guru выложил в открытый доступ тесты, которые дают на собеседованиях в топовые компании, вроде Яндекс и MailRu.
➤ Открываете задачку – выбираете вариант – видите правильный ответ и детальное объяснение к нему. Так вы усвоите на 50% больше знаний в сжатые сроки.
Подписывайтесь и качайте свои скиллы: @javatasks
👍7❤2🔥2
Forwarded from Java News
Cтатья про собеседования в Яшу (Yandex Weekend Offer)
Может кому-то это будет интересно, даст возможность лучше подготовиться; или наоборот кто-то примет решение не участвовать.
Коротко о себе: 41 год, senior software developer, стаж > 20 лет. Однако, как я понял, эти собесы все равно для всех одинаковые, так чтоб все написанное актуально и для молодежи.
Итак, угораздило меня согласиться на т. н. «Weekend Offer на позицию разработчика на Kotlin». Вообще‑то мне больше нравится Scala, и опыта по ней гораздо больше, но рекрутерша была сильно настойчива, и я решил обновить экспиренс, а возможно, и прибавку в деньгах. И вот что было дальше.
Читать статью
Может кому-то это будет интересно, даст возможность лучше подготовиться; или наоборот кто-то примет решение не участвовать.
Коротко о себе: 41 год, senior software developer, стаж > 20 лет. Однако, как я понял, эти собесы все равно для всех одинаковые, так чтоб все написанное актуально и для молодежи.
Итак, угораздило меня согласиться на т. н. «Weekend Offer на позицию разработчика на Kotlin». Вообще‑то мне больше нравится Scala, и опыта по ней гораздо больше, но рекрутерша была сильно настойчива, и я решил обновить экспиренс, а возможно, и прибавку в деньгах. И вот что было дальше.
Читать статью
VK
Cтатья про собеседования в Яшу (Yandex Weekend Offer)
Может кому‑то это будет интересно, даст возможность лучше подготовиться; или наоборот кто‑то примет решение не участвовать.
🔥21👍7❤3
Столкнулись с падением производительности базы данных?
Не делайте резких движений: вы можете ухудшить ситуацию.
Сначала нужно верно диагностировать причину проблемы.
Возможно вы неправильно выбрали индексы, а быть может дело вообще в самой архитектуре БД – вариантов масса!
На открытом вебинаре «Как ускорить работу и повысить надёжность PostgreSQL»
вы узнаете:
🎯как обеспечить высокую производительность и отказоустойчивость базы данных
🎯как вовремя выявить деградацию производительности с помощью диагностики
Вебинар проведёт Дмитрий Золотов, Kotlin-разработчик в «Яндексе».
Приглашаем технических руководителей, админов БД, девопсов и разработчиков.
Все участники получат в подарок видеоурок «Безопасность в PostgreSQL: защита данных, управление доступом и аудит» и скидку 7% на любой курс OTUS.
6 мая, 19:00 МСК
Бесплатно
Записаться - https://otus.pw/gWI8/
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: 2W5zFHmzGnC
Не делайте резких движений: вы можете ухудшить ситуацию.
Сначала нужно верно диагностировать причину проблемы.
Возможно вы неправильно выбрали индексы, а быть может дело вообще в самой архитектуре БД – вариантов масса!
На открытом вебинаре «Как ускорить работу и повысить надёжность PostgreSQL»
вы узнаете:
🎯как обеспечить высокую производительность и отказоустойчивость базы данных
🎯как вовремя выявить деградацию производительности с помощью диагностики
Вебинар проведёт Дмитрий Золотов, Kotlin-разработчик в «Яндексе».
Приглашаем технических руководителей, админов БД, девопсов и разработчиков.
Все участники получат в подарок видеоурок «Безопасность в PostgreSQL: защита данных, управление доступом и аудит» и скидку 7% на любой курс OTUS.
6 мая, 19:00 МСК
Бесплатно
Записаться - https://otus.pw/gWI8/
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: 2W5zFHmzGnC
❤3👍3🔥2
Media is too big
VIEW IN TELEGRAM
Изучаешь Java - создай проект. Перезагрузка.
Выпуск 3. Архитектура ГРН.
В этом выпуске мы поговорим об архитектуре, требованиях, доступности и получим интересный результат.
🌐 🗣 СМОТРЕТЬ VKVIDEO
✅ Java библиотека #java
Выпуск 3. Архитектура ГРН.
В этом выпуске мы поговорим об архитектуре, требованиях, доступности и получим интересный результат.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥9❤3
Мне НЕ нужно разбираться с управлением памятью в Java, так как за меня всё делает GC
Garbage Collector (GC) действительно очищает неиспользуемые объекты, которые больше не имеют активных ссылок. Благодаря этому в Java не нужно вручную освобождать память, как в C++.
Несколько предпосылок к исходному тезису:
GC удаляет только те объекты, которые больше не имеют активных ссылок. Если же объект остаётся доступным, но фактически не используется, он будет занимать память до завершения работы приложения.
Если создать static List и постоянно добавлять в него объекты, они никогда не будут удалены GC, потому что статические поля живут весь срок жизни приложения.
public class MemoryLeak {
private static final List<byte[]> cache = new ArrayList<>();
public static void main(String[] args) {
while (true) {
cache.add(new byte[10 * 1024 * 1024]);
System.out.println("Добавили 10MB в кеш. Используемая память: " +
(Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / (1024 * 1024) + "MB");
}
}
}
Через пару минут — OutOfMemoryError
Объекты, хранящиеся в ThreadLocal, привязываются к потоку, а в пуле потоков они могут жить дольше, чем нужно.
public class ThreadLocalLeak {
private static final ThreadLocal<byte[]> threadLocalData = new ThreadLocal<>();
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(5);
for (int i = 0; i < 10; i++) {
executor.execute(() -> {
threadLocalData.set(new byte[10 * 1024 * 1024]); // 10MB на поток
System.out.println("Память занята потоком!");
});
}
executor.shutdown();
}
}
Поток завершится, а память останется занята, потому что ThreadLocal не очищается автоматически.
Если анонимный класс или лямбда-ссылка ссылается на внешний объект, она может мешать GC очистить его.
public class InnerClassLeak {
private String data = "Очень важные данные";
public void createAnonymousClass() {
Runnable task = new Runnable() {
@Override
public void run() {
System.out.println("Используем: " + data);
}
};
new Thread(task).start();
}
}
task ссылается на data, даже если InnerClassLeak больше не используется → GC не очистит объект.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥8❤3
Spring Boot Tutorial for Beginners | Full Course 2025
Learn how to build real-world backend applications with Spring Boot in this hands-on crash course. Whether you're new to Spring Boot or want a solid refresher, this tutorial covers everything you need to start building Java-based REST APIs with Spiring Boot, Spring Data JPA, PostgreSQL, and Docker.
🌐 🗣 СМОТРЕТЬ VKVIDEO
✅ Java библиотека #java
Learn how to build real-world backend applications with Spring Boot in this hands-on crash course. Whether you're new to Spring Boot or want a solid refresher, this tutorial covers everything you need to start building Java-based REST APIs with Spiring Boot, Spring Data JPA, PostgreSQL, and Docker.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2🔥2
📊 MQCloud — корпоративный центр управления RocketMQ.
Это единая платформа, которая объединяет управление очередями, мониторинг и алертинг в одном интерфейсе.
Сервис уже обслуживает десятки серверов, сотни топиков и миллиарды сообщений ежедневно. Он умеет показывать топологию кластеров, детализацию по производителям и потребителям, а также предупреждать о проблемах вроде скопления сообщений или сбоев.
Особенно удобно, что MQCloud разграничивает права: обычные пользователи видят только свои очереди, а администраторы получают полный контроль с возможностью согласования изменений.
🖥 GitHub
✅ Java библиотека #java
Это единая платформа, которая объединяет управление очередями, мониторинг и алертинг в одном интерфейсе.
Сервис уже обслуживает десятки серверов, сотни топиков и миллиарды сообщений ежедневно. Он умеет показывать топологию кластеров, детализацию по производителям и потребителям, а также предупреждать о проблемах вроде скопления сообщений или сбоев.
Особенно удобно, что MQCloud разграничивает права: обычные пользователи видят только свои очереди, а администраторы получают полный контроль с возможностью согласования изменений.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3🔥3
На открытом уроке «Kotlin Multiplatform: лайфхак для Java-разработчиков» от OTUS мы покажем, как с помощью Kotlin Multiplatform (KMP) использовать один и тот же код для различных проектов — от Android и iOS до backend-систем.
Что вас ждёт:
Открытый урок проходит в преддверии старта курса «Kotlin Backend Developer. Professional».
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤2🔥2
Как устроен кеш в Spring Boot?
Spring Boot упрощает кеширование благодаря аннотациям и встроенной интеграции с разными кеш-провайдерами (EhCache, Caffeine, Redis и др.). Spring использует Spring Cache Abstraction, которая оборачивает кеширующую логику в аннотации:
🔘 @Cacheable — кладёт результат в кеш
🔘 @CachePut — обновляет кеш
🔘 @CacheEvict — удаляет из кеша
За кулисами используется прокси (через Spring AOP или CGLIB), который перехватывает вызовы методов, проверяет кеш и возвращает либо сохранённое значение, либо выполняет метод и кеширует результат.
🔍 Что под капотом
Если вызвать метод с @Cacheable, Spring выполняет несколько шагов:
1. Определяет ключ кеша
🔘 По умолчанию ключ формируется из параметров метода
🔘 Можно задать кастомный ключ через key = "#id"
2. Проверяет кеш-провайдер
🔘 Дефолтный провайдер — ConcurrentHashMap
🔘 Можно подключить Redis, Caffeine, EhCache и т. д.
3. Возвращает данные
🔘 Если значение есть в кеше — сразу отдаётся
🔘 Если нет – вызывается метод и результат сохраняется в кеше
⚠️ Нюансы
— Кеш работает только для Spring-управляемых бинов (если метод вызван внутри того же класса — кеш не сработает)
— Не кешируйте изменяемые объекты, иначе возможны неожиданные побочные эффекты
— Очищайте кеш, если данные меняются (@CacheEvict)
✅ Java библиотека #java
Spring Boot упрощает кеширование благодаря аннотациям и встроенной интеграции с разными кеш-провайдерами (EhCache, Caffeine, Redis и др.). Spring использует Spring Cache Abstraction, которая оборачивает кеширующую логику в аннотации:
За кулисами используется прокси (через Spring AOP или CGLIB), который перехватывает вызовы методов, проверяет кеш и возвращает либо сохранённое значение, либо выполняет метод и кеширует результат.
Если вызвать метод с @Cacheable, Spring выполняет несколько шагов:
1. Определяет ключ кеша
2. Проверяет кеш-провайдер
3. Возвращает данные
— Кеш работает только для Spring-управляемых бинов (если метод вызван внутри того же класса — кеш не сработает)
— Не кешируйте изменяемые объекты, иначе возможны неожиданные побочные эффекты
— Очищайте кеш, если данные меняются (@CacheEvict)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20❤2🔥2
📊 Данные — это топливо цифрового бизнеса. Однако передача данных между системами по-прежнему требует времени, ресурсов и нервов. Kafka Connect меняет правила игры: минимум кода, максимум автоматизации. 🔄
📅 12 мая в 18:00 МСК на открытом вебинаре от OTUS:
— Разберём архитектуру Kafka Connect;
— Запустим коннекторы для БД и файловых систем;
— Научим масштабировать и отлаживать интеграции;
— Покажем, как избежать типовых ошибок.
👤 Спикер: Валентин Шилин — старший программист/аналитик данных в зарубежной компании.
Этот вебинар будет полезен разработчикам, инженерам данных, архитекторам и всем, кто работает с интеграциями. 🌐
Открытый урок проходит в преддверии старта курса «Apache Kafka». Все участники получат скидку на обучение.
🔗 Регистрируйтесь прямо сейчас: https://vk.cc/cLEcPE
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
📅 12 мая в 18:00 МСК на открытом вебинаре от OTUS:
— Разберём архитектуру Kafka Connect;
— Запустим коннекторы для БД и файловых систем;
— Научим масштабировать и отлаживать интеграции;
— Покажем, как избежать типовых ошибок.
👤 Спикер: Валентин Шилин — старший программист/аналитик данных в зарубежной компании.
Этот вебинар будет полезен разработчикам, инженерам данных, архитекторам и всем, кто работает с интеграциями. 🌐
Открытый урок проходит в преддверии старта курса «Apache Kafka». Все участники получат скидку на обучение.
🔗 Регистрируйтесь прямо сейчас: https://vk.cc/cLEcPE
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👍4❤2🔥2
public class Mystery {
public static void main(String[] args) {
System.out.println(method(true) + method(false));
}
static String method(boolean flag) {
return flag ? "Yes" : "No";
}
static String method(String val) {
return val.toUpperCase();
}
}
Что выведет программа, пишите в комментариях?
A) YesNo
B) YESNO
C) Ошибка компиляции
D) null
✅ Правильный ответ:
➡️ Вызов
method(true)
method(false)
method(boolean)
Результат:
"YesNo"
method(String)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20❤6🔥4
Оптимизация работы с JDBC в высоконагруженных приложениях
Неэффективное использование JDBC может легко стать узким местом и убить производительность. Вот пошаговый разбор, как сделать работу с JDBC быстрее и стабильнее.
1️⃣ Настраиваем connection pool
Используйте HikariCP, Apache DBCP или C3P0 вместо стандартного DriverManager. Это позволит переиспользовать соединения, а не открывать новое на каждый запрос.
2️⃣ Используем подготовленные запросы (PreparedStatement)
Во-первых, это снижает нагрузку на базу за счёт кеширования плана запроса. Во-вторых, убирает SQL-инъекции на уровне JDBC.
3️⃣ Выбираем правильный тип курсора ResultSet
— TYPE_FORWARD_ONLY, если нужно просто пробежать по данным.
— TYPE_SCROLL_INSENSITIVE позволяет скроллить данные, но требует больше памяти.
— TYPE_SCROLL_SENSITIVE редко нужен, но обновляет данные в реальном времени.
4️⃣ Ограничиваем выборку данных (LIMIT / FETCH FIRST)
Не забирайте сразу всю таблицу – старайтесь выбирать только нужные поля и ограничивать количество строк.
5️⃣ Выключаем автокоммиты
По умолчанию, каждый запрос в JDBC – это отдельная транзакция. Включите setAutoCommit(false) и коммитите изменения пачками, чтобы уменьшить нагрузку.
6️⃣ Логируем медленные запросы
Если какие-то SQL-запросы выполняются слишком долго – используйте SLF4J + P6Spy или встроенные средства логирования в пуле соединений, чтобы их отлавливать.
❓ Какие техники считаете самыми полезными?
✅ Java библиотека #java
Неэффективное использование JDBC может легко стать узким местом и убить производительность. Вот пошаговый разбор, как сделать работу с JDBC быстрее и стабильнее.
Используйте HikariCP, Apache DBCP или C3P0 вместо стандартного DriverManager. Это позволит переиспользовать соединения, а не открывать новое на каждый запрос.
Во-первых, это снижает нагрузку на базу за счёт кеширования плана запроса. Во-вторых, убирает SQL-инъекции на уровне JDBC.
— TYPE_FORWARD_ONLY, если нужно просто пробежать по данным.
— TYPE_SCROLL_INSENSITIVE позволяет скроллить данные, но требует больше памяти.
— TYPE_SCROLL_SENSITIVE редко нужен, но обновляет данные в реальном времени.
Не забирайте сразу всю таблицу – старайтесь выбирать только нужные поля и ограничивать количество строк.
По умолчанию, каждый запрос в JDBC – это отдельная транзакция. Включите setAutoCommit(false) и коммитите изменения пачками, чтобы уменьшить нагрузку.
Если какие-то SQL-запросы выполняются слишком долго – используйте SLF4J + P6Spy или встроенные средства логирования в пуле соединений, чтобы их отлавливать.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24❤8🔥4
Kotlin в действии, 2-е изд. (2025) PDF. ePUB
Kotlin — простой и высокопроизводительный язык программирования, достаточно гибкий для работы с любыми веб-, мобильными, облачными и корпоративными приложениями. Разработчики приложений на Java по достоинству оценят простой синтаксис, интуитивно понятную систему типов, набор превосходных инструментов и поддержку функционального программирования. Кроме того, поскольку Kotlin работает на JVM, он легко интегрируется с существующим Java-кодом, библиотеками и фреймворками, включая Spring и Android.
Во второе издание бестселлера «Kotlin в действии» добавлено описание корутин, структурированного параллелизма и других новых возможностей языка. Это авторитетное руководство, написанное основными членами команды разработки языка Kotlin, представляет полезные методы использования стандартной библиотеки Kotlin, функционального программирования и расширенных возможностей, таких как обобщенное программирование и рефлексия.
Kotlin — простой и высокопроизводительный язык программирования, достаточно гибкий для работы с любыми веб-, мобильными, облачными и корпоративными приложениями. Разработчики приложений на Java по достоинству оценят простой синтаксис, интуитивно понятную систему типов, набор превосходных инструментов и поддержку функционального программирования. Кроме того, поскольку Kotlin работает на JVM, он легко интегрируется с существующим Java-кодом, библиотеками и фреймворками, включая Spring и Android.
Во второе издание бестселлера «Kotlin в действии» добавлено описание корутин, структурированного параллелизма и других новых возможностей языка. Это авторитетное руководство, написанное основными членами команды разработки языка Kotlin, представляет полезные методы использования стандартной библиотеки Kotlin, функционального программирования и расширенных возможностей, таких как обобщенное программирование и рефлексия.
👍13❤4🔥3
🔐 Bouncy Castle — криптографическая библиотека для Java с открытым кодом. Это решение поддерживает широкий спектр алгоритмов — от базовых шифровальных схем до сложных протоколов вроде S/MIME и OpenPGP.
Проект имеет модульную структуру с разделением на core, JCE-провайдер и специализированные модули для работы с сертификатами X.509 и TLS. Библиотека совместима даже с устаревшими версиями Java, включая J2ME, а сборка теперь поддерживает JDK 21.
🖥 GitHub
✅ Java библиотека #java
Проект имеет модульную структуру с разделением на core, JCE-провайдер и специализированные модули для работы с сертификатами X.509 и TLS. Библиотека совместима даже с устаревшими версиями Java, включая J2ME, а сборка теперь поддерживает JDK 21.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥5❤2
Фишка дебага в IntelliJ IDEA: Reset Frame
Если вам приходилось перезапускать весь дебаг из-за ошибки в анализе кода, есть лучший способ – Reset Frame. Он позволяет откатить выполнение метода и повторить его выполнение с начала, без полной перезагрузки приложения.
🟢 Как использовать
1. Запускаем дебаг и доходим до брейкпоинта.
2. Открываем окно Debug.
3. Во вкладке Frames (стек вызовов) выбираем нужный метод.
4. Нажимаем ПКМ → Reset Frame.
5. Код откатится на вход в метод, как будто вы только что в него зашли.
🟢 Когда это полезно
— Ошиблись при анализе и хотите пересмотреть состояние переменных
— Нужно повторно выполнить метод, не перезапуская весь процесс
— Дебажите рекурсию или сложные цепочки вызовов
⚠️ Важно
— Reset Frame не откатывает глобальные изменения (например, изменения в базе или внешних файлах).
— Он работает только в пределах одного метода – не выйдет вернуть выполнение назад на несколько вызовов.
▪️ Как использовать Reset Frame эффективнее
Можно комбинировать его с Evaluate Expression, чтобы перед повторным вызовом метода изменять переменные вручную.
❓ Пользовались Reset Frame раньше или только узнали?
✅ Java библиотека #java
Если вам приходилось перезапускать весь дебаг из-за ошибки в анализе кода, есть лучший способ – Reset Frame. Он позволяет откатить выполнение метода и повторить его выполнение с начала, без полной перезагрузки приложения.
1. Запускаем дебаг и доходим до брейкпоинта.
2. Открываем окно Debug.
3. Во вкладке Frames (стек вызовов) выбираем нужный метод.
4. Нажимаем ПКМ → Reset Frame.
5. Код откатится на вход в метод, как будто вы только что в него зашли.
— Ошиблись при анализе и хотите пересмотреть состояние переменных
— Нужно повторно выполнить метод, не перезапуская весь процесс
— Дебажите рекурсию или сложные цепочки вызовов
— Reset Frame не откатывает глобальные изменения (например, изменения в базе или внешних файлах).
— Он работает только в пределах одного метода – не выйдет вернуть выполнение назад на несколько вызовов.
▪️ Как использовать Reset Frame эффективнее
Можно комбинировать его с Evaluate Expression, чтобы перед повторным вызовом метода изменять переменные вручную.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍39🔥16❤6
🗓 12 мая в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Разработчик на Spring Framework»
Погружаемся в мир облачных технологий и учимся разворачивать кластер MongoDB бесплатно.
Программа вебинара:
Вебинар будет полезен:
Разработчикам, начинающим backend-программистам, студентам IT-курсов и всем, кто хочет разобраться в облачных сервисах.
В результате вебинара вы:
Научитесь создавать кластеры MongoDB в облаке.
🔗 Ссылка на регистрацию: https://vk.cc/cLJvvT
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2🔥2
Зачем Java-разработчику тестировать логику в SQL?
Привет! Сегодня покажу вам полезный трюк для тех, кто пишет сложные запросы в PostgreSQL (или любом другом SQL-движке) и хочет их тестировать ещё до интеграции в Java-приложение.
Если у тебя в проекте сложная логика в
🟢 Создаём функцию в PostgreSQL:
🔹 Проверяем прямо в базе:
✅ Это удобно, когда:
- Ты хочешь протестировать ветки логики без запуска всего приложения;
- У тебя CI/CD запускает SQL-тесты отдельно (через
- Ты хочешь быстро показать запрос аналитику или тимлиду без Java-контекста.
💡 Лайфхак: если ты используешь Liquibase/Flyway — можно держать такие функции прямо в changelog'ах как test-only objects, не влияя на runtime-приложение.
Попробуй — экономит массу времени на ревью и отладке запросов!
✅ Java библиотека #java
Привет! Сегодня покажу вам полезный трюк для тех, кто пишет сложные запросы в PostgreSQL (или любом другом SQL-движке) и хочет их тестировать ещё до интеграции в Java-приложение.
Если у тебя в проекте сложная логика в
JOIN
, CASE
, оконных функциях или CTE
— протестируй это на стороне базы, как обычную функцию.
CREATE OR REPLACE FUNCTION test_discount(user_id INT)
RETURNS NUMERIC AS $$
BEGIN
RETURN (
SELECT
CASE
WHEN u.vip = true THEN 0.2
ELSE 0.05
END
FROM users u WHERE u.id = user_id
);
END;
$$ LANGUAGE plpgsql;
🔹 Проверяем прямо в базе:
SELECT test_discount(101); -- вернёт 0.2 или 0.05
✅ Это удобно, когда:
- Ты хочешь протестировать ветки логики без запуска всего приложения;
- У тебя CI/CD запускает SQL-тесты отдельно (через
pgTAP
, например);- Ты хочешь быстро показать запрос аналитику или тимлиду без Java-контекста.
💡 Лайфхак: если ты используешь Liquibase/Flyway — можно держать такие функции прямо в changelog'ах как test-only objects, не влияя на runtime-приложение.
Попробуй — экономит массу времени на ревью и отладке запросов!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤6🔥5
В отличие от GWT, TeaVM не требует исходников и работает прямо с .class-файлами, предлагая свою реализацию стандартной библиотеки Java. Инструмент также позволяет переносить бизнес-логику с бэкенда на фронтенд без полного переписывания. Поддерживает даже многопоточность через Web Workers.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍4❤2
Что такое Serial Garbage Collector?
Serial GC — этооднопоточный сборщик мусора, работающий по принципу "Stop-the-World" . Он останавливает выполнение всех потоков во время сборки мусора и использует копирующий алгоритм для молодых поколений (Young Gen) и компактирующий алгоритм для старших (Old Gen).
🟢 Как работает
1️⃣ В молодом поколении (Minor GC) используется копирующая стратегия: выжившие объекты перемещаются из Eden в Survivor, а из Survivor в Old Gen.
2️⃣ В старом поколении (Major GC / Full GC) выполняется уплотнение памяти для уменьшения фрагментации.
3️⃣ Так как GC работает в одном потоке, во время сборки остановка приложения неизбежна.
🟢 Когда использовать
—В одноядерных системах или при ограниченных ресурсах , где многопоточный GC создаст больше нагрузки.
—В маленьких JVM (до 1-2 ГБ памяти) , где G1 или Parallel GC будут избыточны.
—В приложениях без жестких требований к паузам, например , в небольших утилитах или CLI-инструментах.
✅ Java библиотека #java
Serial GC — это
—
—
—
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤4🔥3