Forwarded from Java News
Основные паттерны микросервисной архитектуры: Strangler Fig, API Gateway, Service Mesh и другие
В данной статье мы разберем несколько ключевых паттернов, связанных с микросервисами. Речь пойдет о паттернах миграции и интеграции (таких как Strangler Fig – «удушающее дерево» и API Gateway), о сетевых и структурных паттернах (Service Mesh, Sidecar), о шаблонах работы с данными (Database per Service, CQRS) и об особом подходе к хранению состояния (Event Sourcing). Для каждого паттерна мы рассмотрим его суть, назначение, примеры использования, а также плюсы и возможные сложности. К некоторым паттернам приведены упрощенные диаграммы и фрагменты кода, чтобы иллюстративно показать, как они работают на практике.
Читать статью
В данной статье мы разберем несколько ключевых паттернов, связанных с микросервисами. Речь пойдет о паттернах миграции и интеграции (таких как Strangler Fig – «удушающее дерево» и API Gateway), о сетевых и структурных паттернах (Service Mesh, Sidecar), о шаблонах работы с данными (Database per Service, CQRS) и об особом подходе к хранению состояния (Event Sourcing). Для каждого паттерна мы рассмотрим его суть, назначение, примеры использования, а также плюсы и возможные сложности. К некоторым паттернам приведены упрощенные диаграммы и фрагменты кода, чтобы иллюстративно показать, как они работают на практике.
Читать статью
VK
Основные паттерны микросервисной архитектуры: Strangler Fig, API Gateway, Service Mesh и другие
Микросервисная архитектура стала де-факто стандартом для построения современных масштабируемых приложений. Вместо единого монолитного при..
👍15❤3🔥3
🐈 BallCat — инструмент для быстрой разработки Java-проектов с акцентом на минимализм и расширяемость.
Проект примечателен своей модульностью: вместо монолитного фреймворка он предлагает набор независимых инструментов, которые можно подключать по мере необходимости. Особый интерес вызывает встроенная поддержка китайских технологических стандартов, что делает его привлекательным для локального рынка.
🖥 GitHub
✅ Java библиотека #java
Проект примечателен своей модульностью: вместо монолитного фреймворка он предлагает набор независимых инструментов, которые можно подключать по мере необходимости. Особый интерес вызывает встроенная поддержка китайских технологических стандартов, что делает его привлекательным для локального рынка.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤4🔥3
В чем разница между map() и flatMap()?
Оба метода используются для трансформации данных в Stream, но с ключевыми отличиями:
▪️ map(Function<T, R>) применяет функцию к каждому элементу потока и возвращает поток с преобразованными элементами (Stream<R>).
▪️ flatMap(Function<T, Stream<R>>) делает то же самое, но ожидает, что функция вернет Stream<R>, а затем "выпрямляет" вложенные потоки в один Stream<R>.
📌 Пример:
✅ Java библиотека #java
Оба метода используются для трансформации данных в Stream, но с ключевыми отличиями:
▪️ map(Function<T, R>) применяет функцию к каждому элементу потока и возвращает поток с преобразованными элементами (Stream<R>).
▪️ flatMap(Function<T, Stream<R>>) делает то же самое, но ожидает, что функция вернет Stream<R>, а затем "выпрямляет" вложенные потоки в один Stream<R>.
List<String> words = List.of("Hello", "World");
// map(): превращает каждое слово в список символов
List<List<Character>> mapped = words.stream()
.map(word -> word.chars()
.mapToObj(c -> (char) c)
.toList())
.toList();
// flatMap(): превращает каждое слово в поток символов и "сплющивает" их в один поток
List<Character> flatMapped = words.stream()
.flatMap(word -> word.chars()
.mapToObj(c -> (char) c))
.toList();
System.out.println(mapped); // [[H, e, l, l, o], [W, o, r, l, d]]
System.out.println(flatMapped); // [H, e, l, l, o, W, o, r, l, d]
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍12❤7
Forwarded from Java News
OpenIDE: первая российская среда разработки с поддержкой Java 24
Наконец-то состоялся официальный релиз OpenIDE – независимой российской среды разработки, которую совместно создают «Группа Астра», Axiom JDK и Haulmont.
Проект стартовал как open source-инициатива в конце прошлого года и всего за полгода прошёл путь от идеи до стабильной версии. В числе ключевых фич — поддержка Java 24 уже "из коробки", собственный маркетплейс плагинов и "многоязычность".
В статье — ключевые достижения, проблемы, а также планы по развитию OpenIDE и её экосистемы.
Читать статью
Наконец-то состоялся официальный релиз OpenIDE – независимой российской среды разработки, которую совместно создают «Группа Астра», Axiom JDK и Haulmont.
Проект стартовал как open source-инициатива в конце прошлого года и всего за полгода прошёл путь от идеи до стабильной версии. В числе ключевых фич — поддержка Java 24 уже "из коробки", собственный маркетплейс плагинов и "многоязычность".
В статье — ключевые достижения, проблемы, а также планы по развитию OpenIDE и её экосистемы.
Читать статью
VK
OpenIDE: первая российская среда разработки с поддержкой Java 24
Наконец-то состоялся официальный релиз OpenIDE – независимой российской среды разработки, которую совместно создают «Группа Астра», Axiom..
👍33😁8🔥5❤4
This media is not supported in your browser
VIEW IN TELEGRAM
Ctrl + C
и Ctrl + V
, тебе точно понравится и Ctrl + W
. Это как выделение текста с помощью AI 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
💯12🔥4❤2👍2🎄1
Улучшаем работу с 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