Please open Telegram to view this post
VIEW IN TELEGRAM
Oblivion обеспечивает безопасный, оптимизированный доступ в интернет через приложение для Android, написанное на Java с использованием технологии cloudflare warp.
Используя
bepass-sdk
и WireGuard
, инструмент предназначен для быстрого и конфиденциального доступа в интернет.▪Github
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Совет по Java API🚀
Отслеживайте события файловой системы в режиме реального времени.
Инструмент для обнаружения изменений в файлах и каталогах независимым от платформы способом. 🔥
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/nio/file/WatchService.html
#Java #JavaAPI
@javatg
java.nio.file.WatchService
Отслеживайте события файловой системы в режиме реального времени.
Инструмент для обнаружения изменений в файлах и каталогах независимым от платформы способом. 🔥
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/nio/file/WatchService.html
#Java #JavaAPI
@javatg
Совет Spring Framework💡
Optional — это контейнер, который может содержать какое-то значение или не содержать ничего.
Он используется для обозначения отсутствия значения вместо null. Это позволяет избежать ошибок
Optional появился в Java 8. Он представлен классом java.util.Optional.
Чтобы создать экземпляр Optional, используются статические методы:
—
—
Для получения значения из Optional используются методы
Вы можете инжектировать (autowire) бины, которые могут отсутствовать, обернув их в
Таким образом вы сообщаете, что этот бин является необязательным, избегаете исключения, если он не существует, и можете аккуратно обработать его отсутствие с помощью Optional API.
@javatg
Optional — это контейнер, который может содержать какое-то значение или не содержать ничего.
Он используется для обозначения отсутствия значения вместо null. Это позволяет избежать ошибок
NullPointerException.
Optional появился в Java 8. Он представлен классом java.util.Optional.
Чтобы создать экземпляр Optional, используются статические методы:
—
empty()
для пустого Optional.—
of()
для Optional с заданным значением.Для получения значения из Optional используются методы
get()
, или orElse()
с указанием значения по умолчанию. Также есть методы фильтрации значений, например filter(), map() и flatMap().
Вы можете инжектировать (autowire) бины, которые могут отсутствовать, обернув их в
java.util.Optional
. Таким образом вы сообщаете, что этот бин является необязательным, избегаете исключения, если он не существует, и можете аккуратно обработать его отсутствие с помощью Optional API.
@javatg
💫 Встречайте #ApachePekko - фреймворк с открытым исходным кодом, предназначенный для упрощения разработки параллельных, распределенных, устойчивых и эластичных приложений.
Pekko позволяет разработчикам сосредоточиться на бизнес-логике, а не на низкоуровневых деталях реализации.
▪Подробнее
▪Github
@javatg
Pekko позволяет разработчикам сосредоточиться на бизнес-логике, а не на низкоуровневых деталях реализации.
▪Подробнее
▪Github
@javatg
☕ Machine Learning на Java
Если вы пишете на Java или осваиваете язык, то вам пригодится этот репозиторий с множеством полезных ссылок на фреймворки и библиотеки. Список обширный, в том числе есть инструменты для работы с большими данными и машинным обучением. Например:
▪️Deeplearning4J — набор инструментов для глубокого обучения
▪️Weka — коллекция алгоритмов машинного обучения
▪️MALLET — библиотека для обработки естественного языка
🔗 репозиторий
Если вы пишете на Java или осваиваете язык, то вам пригодится этот репозиторий с множеством полезных ссылок на фреймворки и библиотеки. Список обширный, в том числе есть инструменты для работы с большими данными и машинным обучением. Например:
▪️Deeplearning4J — набор инструментов для глубокого обучения
▪️Weka — коллекция алгоритмов машинного обучения
▪️MALLET — библиотека для обработки естественного языка
🔗 репозиторий
🚀 Spring Совет 🚀
Утилитный класс для сравнения объектов на основе
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/annotation/AnnotationAwareOrderComparator.html
@javatg
AnnotationAwareOrderComparator
Утилитный класс для сравнения объектов на основе
@Order
или аннотации Ordered
. Он используется там, где необходимо определить порядок выполнения компонентов. 🔥https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/annotation/AnnotationAwareOrderComparator.html
@javatg
Spring AI 0.8.0 уже доступен 🎉
Он предоставляет удобный API для моделей искусственного интеллекта, API для хранения векторов, вызов функций, ETL-фреймворк для инженерии данных с Spring Boot.
https://spring.io/blog/2024/02/23/spring-ai-0-8-0-released
Примеры работы: https://github.com/ThomasVitale/llm-apps-java-spring-ai
@javatg
Он предоставляет удобный API для моделей искусственного интеллекта, API для хранения векторов, вызов функций, ETL-фреймворк для инженерии данных с Spring Boot.
https://spring.io/blog/2024/02/23/spring-ai-0-8-0-released
Примеры работы: https://github.com/ThomasVitale/llm-apps-java-spring-ai
@javatg
При использовании
@SpringSecurity
вы можете получить доступ к текущим данным аутентификации, добавив объект Authentication в качестве параметра метода в классе @RestController.
@javatgPlease open Telegram to view this post
VIEW IN TELEGRAM
Quarkus — горячий тренд Java-разработки
Quarks ускоряет загрузку Java-приложений в CloudEra
Если вы занимаетесь разработкой Java-приложений, наверняка слышали о революционном фреймворке Quarkus. Если же еще не слышали, вот его краткое описание: Quarkus — это Kubernetes-нативный Java-стек, созданный для разработчиков, ставящих во главу угла производительность, гибкость и облачную нативную архитектуру.
В Quarkus реализован тот же подход, что и в Spring Boot, но с дополнительными преимуществами — меньшими артефактами с быстрой загрузкой, сокращением ресурсопотребления и повышением эффективности.
Ключевые особенности Quarkus, доказывающие его уникальность:
📌Читать
@javatg
Quarks ускоряет загрузку Java-приложений в CloudEra
Если вы занимаетесь разработкой Java-приложений, наверняка слышали о революционном фреймворке Quarkus. Если же еще не слышали, вот его краткое описание: Quarkus — это Kubernetes-нативный Java-стек, созданный для разработчиков, ставящих во главу угла производительность, гибкость и облачную нативную архитектуру.
В Quarkus реализован тот же подход, что и в Spring Boot, но с дополнительными преимуществами — меньшими артефактами с быстрой загрузкой, сокращением ресурсопотребления и повышением эффективности.
Ключевые особенности Quarkus, доказывающие его уникальность:
📌Читать
@javatg
Apache Kafka 3.7.0 только что вышел! 🔥
Что входит в этот новый релиз?
Вот основные функции, о которых вы должны знать: https://www.confluent.io/blog/introducing-apache-kafka-3-7/
@javatg
Что входит в этот новый релиз?
Вот основные функции, о которых вы должны знать: https://www.confluent.io/blog/introducing-apache-kafka-3-7/
@javatg
Дженерики могут показаться очень простой темой.
Например, вот так в Java выглядят классные и простые методы интерфейса
List
:interface List<E> extends Collection<E> {
boolean add(E e);
E set(int index, E element);
}
Но у обобщений много нюансов: вложенность, вариантность, границы и т.д. Это сильно усложняет их использование.
Вот не менее классный, но совсем непростой
flatMap
интерфейса Stream
🙈:interface Stream<T> extends BaseStream<T, Stream<T>> {
<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);
}
Реализация дженериков — всегда трейдоф. Мы либо получаем большой исполняемый файл, из-за того, что приходится генерировать код для разных типов. Либо получаем дополнительную нагрузку в рантайме, из-за различных проверок.
Такие вот дела ¯\_(ツ)_/¯
А вы что думаете по поводу дженериков в Java?
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Java 21 API 🚀
Новый метод string:
Разбивает строку на совпадения с заданным регулярным выражением и возвращает как строки, так и соответствующие разделители.
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/String.html#splitWithDelimiters(java.lang.String,int limit)
@javatg
Новый метод string:
split With Delimiters(String regex, int limit)
Разбивает строку на совпадения с заданным регулярным выражением и возвращает как строки, так и соответствующие разделители.
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/String.html#splitWithDelimiters(java.lang.String,int limit)
@javatg
Функция
MockedConstruction
из Mockito
позволяет моделировать конструкцию объектов во время тестирования. Традиционно, когда новый объект создается внутри тестируемого метода, сложно менять его поведение.
MockedConstruction
устраняет это ограничение, перехватывая процесс создания объекта, позволяя разработчикам указывать собственное поведение или возвращаемые значения для конструкторов.Вот некоторые базовые понятия:
MockedConstruction(Class<T>)
: создает макет для конструкций класса T, управляя макетами в пределах его области действияtry-with-resources
: инкапсулирует область имитации, обеспечивая автоматическую очистку ресурсов в конце блокаwhenever(mock.method(...)).thenReturn(...)
: настраивает макет поведения, динамически определяя ответы методаassertEquals(mock, times(n)).method(...)
: утверждает частоту взаимодействия с макетами.К примеру, вот так можно протестировать
Calculator.java
:public class Calculator {
public Calculator(){}
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
}
Теперь создадим тестовый класс
CalculatorTest
с использованием MockedConstruction
:public class CalculatorTest {
@Test
public void testAddition() {
try (MockedConstruction<Calculator> mocked = mockConstruction(Calculator.class)) {
// creating a mock instance
Calculator calculator = new Calculator();
// Mock behaviour
when(calculator.add(10, 20)).thenReturn(30);
when(calculator.subtract(30, 20)).thenReturn(10);
// Test the methods
assertEquals(30, calculator.add(10, 20));
assertEquals(10, calculator.subtract(30, 20));
// Get a list of all created mocks
List<Calculator> constructed = mocked.constructed();
assertEquals(1, constructed.size());
}
}
}
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Написать с нуля небольшой, но полноценный проект на Java — отличный способ прочувствовать особенности языка, потренировать полезные паттерны программирования. Вот 10 идей для пет-проектов, код к каждому прилагается
🔗 Код для этих пет-проектов здесь
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ Интересное видео и статья о том как Netflix использует Java
"Примерно за год или около того мы полностью стандартизировали Spring Boot". "Это довольно удивительно...что этот фреймворк был настолько стабильным и так хорошо развит". -
https://infoq.com/presentations/netflix-java
@javatg
"Примерно за год или около того мы полностью стандартизировали Spring Boot". "Это довольно удивительно...что этот фреймворк был настолько стабильным и так хорошо развит". -
https://infoq.com/presentations/netflix-java
@javatg