🎉🎉🎉 Релиз Java 21 🎉🎉🎉
Новые функций:
• виртуальные потоки
• record Patterns
• pattern Matching для switch
• новые методы в коллекциях
• интерполяция строк и другие интересные нововведения.
• Релиз
• Трансляция
👍 лайк, если ждал новую версию
@javatg
Новые функций:
• виртуальные потоки
• record Patterns
• pattern Matching для switch
• новые методы в коллекциях
• интерполяция строк и другие интересные нововведения.
• Релиз
• Трансляция
👍 лайк, если ждал новую версию
@javatg
👍56🔥5❤4
🖇 Создание глубокой и поверхностной копии объекта.
Java Stream API: когда использовать map() и FlatMap()
При работе с объектами в Java бывают случаи, когда вам необходимо создать копию объекта. Однако не все копии одинаковы. Существует два основных способа копирования объектов: глубокое копирование (Deep Copy) и поверхностное копирование (Shallow Copy).
Глубокое копирование: что это такое?
Представьте, что у вас есть коллекция фигур, каждая из которых имеет свой перечень свойств. Глубокая копия объекта означает создание совершенно новой копии исходного объекта вместе со всеми вложенными объектами, которые он содержит. Иными словами, это похоже на точную копию каждой формы, включая все детали.
Поверхностное копирование: в чем разница?
С другой стороны, поверхностное копирование создает копию объекта, не зная о структуре класса, который он копирует. То есть, объект копируется без содержащихся в нем вложенных объектов. По умолчанию в Java применяется поверхностное копирование. Для этого используется метод clone().
Давайте применим копирование на практике: пример фигур
Представьте, что у вас есть класс с именем Circle, в котором есть вложенный объект класса Point, представляющий его центр. Сейчас мы увидим, как глубокое и поверхностное копирование работают с этими объектами.
Создание поверхностной копии
Для поверхностного копирования мы просто копируем ссылки на вложенные объекты:
Создание глубокой копии
ля глубокой копии Circle нам нужно создать новые экземпляры объектов Point и Circle.
Создание простого класса CopyUtil
Вот класс утилиты с кодом копирования объектов:
Модульные тесты
Давайте напишем несколько простых тестов для проверки наших методов глубокого и поверхностного копирования.
📌 Продолжение
@javatg
Java Stream API: когда использовать map() и FlatMap()
При работе с объектами в Java бывают случаи, когда вам необходимо создать копию объекта. Однако не все копии одинаковы. Существует два основных способа копирования объектов: глубокое копирование (Deep Copy) и поверхностное копирование (Shallow Copy).
Глубокое копирование: что это такое?
Представьте, что у вас есть коллекция фигур, каждая из которых имеет свой перечень свойств. Глубокая копия объекта означает создание совершенно новой копии исходного объекта вместе со всеми вложенными объектами, которые он содержит. Иными словами, это похоже на точную копию каждой формы, включая все детали.
Поверхностное копирование: в чем разница?
С другой стороны, поверхностное копирование создает копию объекта, не зная о структуре класса, который он копирует. То есть, объект копируется без содержащихся в нем вложенных объектов. По умолчанию в Java применяется поверхностное копирование. Для этого используется метод clone().
Давайте применим копирование на практике: пример фигур
Представьте, что у вас есть класс с именем Circle, в котором есть вложенный объект класса Point, представляющий его центр. Сейчас мы увидим, как глубокое и поверхностное копирование работают с этими объектами.
public class Circle {
public Point center;
public int radius;
public Circle(Point center, int radius) {
this.center = center;
this.radius = radius;
}
}
public class Point {
public int x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
Создание поверхностной копии
Для поверхностного копирования мы просто копируем ссылки на вложенные объекты:
public Circle shallowCopyCircle(Circle original) {
return new Circle(original.center, original.radius);
}
Создание глубокой копии
ля глубокой копии Circle нам нужно создать новые экземпляры объектов Point и Circle.
public Circle deepCopyCircle(Circle original) {
Point copiedPoint = new Point(original.center.x, original.center.y);
return new Circle(copiedPoint, original.radius);
}
Создание простого класса CopyUtil
Вот класс утилиты с кодом копирования объектов:
public class CopyUtil {
public Circle deepCopyCircle(Circle original) {
Point copiedPoint = new Point(original.center.x, original.center.y);
return new Circle(copiedPoint, original.radius);
}
public Circle shallowCopyCircle(Circle original) {
return new Circle(original.center, original.radius);
}
}
Модульные тесты
Давайте напишем несколько простых тестов для проверки наших методов глубокого и поверхностного копирования.
📌 Продолжение
@javatg
👍13❤4🥰1
Динамическое программирование - это метод, позволяющий разбивать задачи на более мелкие подзадачи.
Это полезный навык для решения задач
min change, max path sum
и других вопросов на собеседовании по кодированию.В этом курсе вы изучите методы динамического программирования на языке Java.
📌Курс
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤3🔥2
🔥 Дайджест полезных материалов из мира Java за неделю
Почитать:
— В Java 21 собираются реализовать сопоставление с образцом – так, глядишь, я снова на этот язык перейду
— Добавление отзывов с фотографиями в S3 с помощью AWS SDK Java
— Microsoft предлагает БЕСПЛАТНЫЕ онлайн курсы с сертификацией
— Сделали по красоте: победители «Конкурса красоты кода»
— OOM: direct memory при работе с сетью TCP/IP через NIO в Java
— Построение гибкой и распределенной архитектуры с использованием Kafka и Kafka Connect: Часть 2 — Получатель и Helm Chart
— Решаем задачу о секретном рукопожатии на Java
— Продвинутый телеграмм бот на Java (Spring, postgres и free deploy)
— Принцип Универсалий: или локальный подход к Dependency Injection
— Вышла Java 21
— Hello World in Java
— Cracking the Code: Leet Code 1048 - Longest String Chain (Medium) - NileshDev
— Cracking the LeetCode:392 Is Subsequence?
— Semaphores, is that so easy!! The Clothing Store Analogy as a Guide for Beginners
— Scanner em Java
— #11 Example of Views & View Groups in android | Android Studio Tutorial | SoftwareTechIT
— The Big Debate: Should We Explain Code or Not?
— Using JLink to create smaller Docker images for your Spring Boot Java application
— Salesforce Integration Services
— How to prevent NullPointerExceptions in Java
Посмотреть:
🌐 Java21 Brings Full Pattern Matching #RoadTo21 (⏱ 23:28)
🌐 Java 21 in Two Minutes... more or less (⏱ 02:50)
🌐 How can you model a concurrent task in Java? - Cracking the Java Coding Interview (⏱ 00:53)
🌐 Comparing Doubles with a comparator of Numbers? - Cracking the Java Coding Interview (⏱ 00:56)
🌐 JDK 21 Release Notes - Inside Java Newscast #55 (⏱ 34:18)
🌐 All About Java 21 - Launch Event (⏱ 08:01:35)
🌐 Как становились программистами 20 лет назад и что изменилось сейчас — Леша Корепанов (⏱ 01:02:28)
Хорошего дня!
@javatg
Почитать:
— В Java 21 собираются реализовать сопоставление с образцом – так, глядишь, я снова на этот язык перейду
— Добавление отзывов с фотографиями в S3 с помощью AWS SDK Java
— Microsoft предлагает БЕСПЛАТНЫЕ онлайн курсы с сертификацией
— Сделали по красоте: победители «Конкурса красоты кода»
— OOM: direct memory при работе с сетью TCP/IP через NIO в Java
— Построение гибкой и распределенной архитектуры с использованием Kafka и Kafka Connect: Часть 2 — Получатель и Helm Chart
— Решаем задачу о секретном рукопожатии на Java
— Продвинутый телеграмм бот на Java (Spring, postgres и free deploy)
— Принцип Универсалий: или локальный подход к Dependency Injection
— Вышла Java 21
— Hello World in Java
— Cracking the Code: Leet Code 1048 - Longest String Chain (Medium) - NileshDev
— Cracking the LeetCode:392 Is Subsequence?
— Semaphores, is that so easy!! The Clothing Store Analogy as a Guide for Beginners
— Scanner em Java
— #11 Example of Views & View Groups in android | Android Studio Tutorial | SoftwareTechIT
— The Big Debate: Should We Explain Code or Not?
— Using JLink to create smaller Docker images for your Spring Boot Java application
— Salesforce Integration Services
— How to prevent NullPointerExceptions in Java
Посмотреть:
🌐 Java21 Brings Full Pattern Matching #RoadTo21 (⏱ 23:28)
🌐 Java 21 in Two Minutes... more or less (⏱ 02:50)
🌐 How can you model a concurrent task in Java? - Cracking the Java Coding Interview (⏱ 00:53)
🌐 Comparing Doubles with a comparator of Numbers? - Cracking the Java Coding Interview (⏱ 00:56)
🌐 JDK 21 Release Notes - Inside Java Newscast #55 (⏱ 34:18)
🌐 All About Java 21 - Launch Event (⏱ 08:01:35)
🌐 Как становились программистами 20 лет назад и что изменилось сейчас — Леша Корепанов (⏱ 01:02:28)
Хорошего дня!
@javatg
👍12❤2🔥1
Подробный гайд по созданию микросервисов с использованием Spring Boot.
В этом учебном пособии показано -как создавать микросервис с использованием Spring Boot 3, Spring Cloud и базы данных PostgreSQL.
В этом микросервисном проекте вы изучите такие важные понятия, как
API Gateway, Config Server, Discovery Server,
и практически реализуете два реальных микросервиса - Student и School.📌 Статья
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥7❤2
Оператор +
Известно, что использование оператора + считается плохой практикой. Дело в том, что строки неизменяемы, и в соответствии с внутренним механизмом новая строка создается для каждой объединяемой части. Однако “meten is weten”, что в переводе с голландского означает “хочешь знать — измерь”. Посмотрим, что на самом деле происходит внутри:
// Пример #1:
String example1 = "some String " + 42;
// Пример #2:
int someInt = 42;
String example2 = "some String " + someInt + " other String " + someInt;
// Пример #3:
String example3 = "";
for (int i = 0; i < 10; i++) {
example3 += someInt;
}
В байт-коде примера #1 осуществляется одно выделение строки. Компилятор Java понимает, что магическое число является константой, поэтому оно загружается как часть строки String в стек операндов:
0: ldc #7 // Строка some String42
Но мы не намерены применять магические значения, поэтому посмотрим, что происходит с переменными.
В примере #2 при использовании переменной компилятор Java не может выполнить такую же оптимизацию, но зато совершает какую-то сложную операцию с помощью invokedynamic:
0: bipush 42
2: istore_1
3: iload_1
4: iload_1
5: invokedynamic #7, 0 // InvokeDynamic #0:makeConcatWithConstants:
(II)Ljava/lang/String;
...
BootstrapMethods:
0: #22 REF_invokeStatic
java/lang/invoke/StringConcatFactory.makeConcatWithConstants:
(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke
/MethodType;Ljava/lang/String;
[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;
Method arguments:
#23 одна String \u0001 другая String \u0001
Эта инструкция позволяет во время выполнения вызвать метод bootstrap для конкатенации. Мы даем ему “рецепт”: some String \u0001 other String \u0001, который в данном случае содержит 2 плейсхолдера. При конкатенации большего числа переменных увеличивается и число плейсхолдеров, но это все равно одна строка String в пуле констант.
Фишка подхода invokedynamic состоит в том, что при появлении обновленных версий JDK с техниками конкатенации JDK, байт-код может оставаться прежним, тогда как действия метода bootstrap усложняются (чуть позже о деталях текущей реализации).
В примере #3 в цикле выполняется следующая инструкция:
16: invokedynamic #9, 0 // InvokeDynamic #0:makeConcatWithConstants:
(Ljava/lang/String;I)Ljava/lang/String;
Она приводит к выделению ненужного количества экземпляров String.
String::format
На мой взгляд, String::format — более эффективная альтернатива оператору +. Данный метод предлагает действительно улучшенную читаемость в ряде случаев и поддерживает локализацию. Основные тесты показывают, что его производительность немного превосходит конкатенацию. Однако реализация метода format создает новую строку String для каждого параметра.
Проведем небольшой эксперимент:
📌 Читать дальше
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥3❤2
🔥 Дайджест полезных материалов из мира Java за неделю
Почитать:
— Подтверждение электронной почты с помощью Spring Boot & Angular
— jenv — удобный инструмент для управления версиями Java
— 15 лучших бесплатных курсов по Linux
— Spring Cloud Config и Git. Хранение и распространение конфигураций приложений
— Аннотации и рефлексия в Java
— Объектно-ориентированный подход к созданию REST-клиентов, или возможна ли жизнь без Open API
— Как я делал солнечную зарядку для своего моноколеса и вот что получилось
— Обыкновенное чудо: итоги сезона Java
— Кэширование контекста Spring между запусками тестов: как ускорить процесс локального тестирования
— 100 days of Code
— Encapsulamento: O básico que todo jr. precisa saber
— What is Low code app development?
— Seeking Guidance on Gaining Real-Time Java Experience as a Beginner
— 【Video】896. Monotonic Array - Python, JavaScript, Java and C++
— How to Create Time Picker Dialogue Android Tutorial | Best Android Developer Series #softwaretechit
— 10 Tips to Optimize Memory Usage and Avoid Common Exceptions in Java
— SOLID! Um post "aprofundado"
— JSON Schema applied to InterSystems IRIS
— Turning an array clockwise or counterclockwise
Посмотреть:
🌐 Java Basics – Crash Course (⏱ 3:36)
🌐 What is an annotation? - Cracking the Java Coding Interview (⏱ 00:59)
🌐 When should you use ? extends T? - Cracking the Java Coding Interview (⏱ 00:59)
🌐 JFR View Command (⏱ 01:26)
Хорошего дня!
@javatg
Почитать:
— Подтверждение электронной почты с помощью Spring Boot & Angular
— jenv — удобный инструмент для управления версиями Java
— 15 лучших бесплатных курсов по Linux
— Spring Cloud Config и Git. Хранение и распространение конфигураций приложений
— Аннотации и рефлексия в Java
— Объектно-ориентированный подход к созданию REST-клиентов, или возможна ли жизнь без Open API
— Как я делал солнечную зарядку для своего моноколеса и вот что получилось
— Обыкновенное чудо: итоги сезона Java
— Кэширование контекста Spring между запусками тестов: как ускорить процесс локального тестирования
— 100 days of Code
— Encapsulamento: O básico que todo jr. precisa saber
— What is Low code app development?
— Seeking Guidance on Gaining Real-Time Java Experience as a Beginner
— 【Video】896. Monotonic Array - Python, JavaScript, Java and C++
— How to Create Time Picker Dialogue Android Tutorial | Best Android Developer Series #softwaretechit
— 10 Tips to Optimize Memory Usage and Avoid Common Exceptions in Java
— SOLID! Um post "aprofundado"
— JSON Schema applied to InterSystems IRIS
— Turning an array clockwise or counterclockwise
Посмотреть:
🌐 Java Basics – Crash Course (⏱ 3:36)
🌐 What is an annotation? - Cracking the Java Coding Interview (⏱ 00:59)
🌐 When should you use ? extends T? - Cracking the Java Coding Interview (⏱ 00:59)
🌐 JFR View Command (⏱ 01:26)
Хорошего дня!
@javatg
👍11🔥5❤1
Java
для сравнения бинарных файлов с открытым исходным кодом, позволяющий быстро находить различия и сходства в дизассемблированном коде.BinDiff содержит следующие компоненты:
• cmake - файлы сборки CMake с объявлением внешних зависимостей
fixtures - Коллекция тестовых файлов для проверки работы ядра BinDiff
• ida - Интеграция с дизассемблером IDA Pro
• java - Исходный код Java. Он содержит пользовательский интерфейс визуального диффа BinDiff и соответствующую библиотеку утилит.
• match - Алгоритмы сопоставления для ядра BinDiff
• packaging - Исходники инсталляционных пакетов
• tools - Исполняемые файлы-помощники, поставляемые вместе с продуктом
• Github
• Docs
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍5🔥1
JUnit — это открытый фреймворк для написания и запуска тестов на языке программирования Java. Он разработан с целью поддержки автоматизированных тестов, особенно модульных тестов (unit tests), и обеспечивает удобные аннотации, утверждения и утилиты, которые позволяют легко писать и запускать тесты для Java-кода.
Настройка тестовой среды JUnit
Для начала вам необходимо установить JUnit в ваш проект. Если вы используете Maven или Gradle, добавьте зависимость JUnit в ваш файл настроек. В изображениипример для Maven.
Основы и примеры написания тестов с JUnit
Структура теста
Тестовый класс создается отдельно от основного кода. Он содержит один или несколько тестовых методов, каждый из которых проверяет отдельный аспект работы кода. Тестовые методы помечаются аннотацией @Test.
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class CalculatorTest {
@Test
public void testAddition() {
Calculator calculator = new Calculator();
int result = calculator.add(2, 3);
assertEquals(5, result, "2 + 3 should equal 5");
}
}
Использование утверждений📌 Читать
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥4❤3🤯1😱1
Основной тренд в мире IT сейчас - экономия ресурсов и легковесные решения. В облаке мы платим только за те ресурсы, которые действительно используем. И чем эффективнее мы их используем, тем меньше денег тратится впустую: уменьшая издержки, увеличиваем маржинальность.
Java долгое время была и остается фаворитом в enterprise решениях, но все чаще в высоконагруженных проектах предпочтение отдается более "производительным" языкам, таким как Go, а порой даже C++. Но вдруг Java тоже может быть быстрой?
📌 Читать дальше
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10👎6❤3🔥2
🔥 Дайджест полезных материалов из мира Java за неделю
Почитать:
— Java Digest #5
— Упрощаем работу с Excel с помошью Apache POI: готовый шаблонный код
— Автоматизация разработки с помощью подхода DB-first
— Откройте свое будущее: Изучите 15 бесплатных курсов IBM прямо сейчас
— Может ли Java быть быстрой? Сравнение производительности Helidon Níma и Spring
— Exploring Database Options for Java Applications
— Essential Tools for Java Developers
— solve-calculate
— Collaborating with Git Remotes: Adding Config File Support
— Can Sealed Interfaces in Java Improve Code Security?
— Memory management in JAVA
— Agora você vai entender como o java funciona
— javadoc-cleanup 1.3.7 Released (minor bug fixes)
— Article 1: Exploring Java 21: A Look at the Exciting API Changes
— Understanding Java OutOfMemory Issues
Посмотреть:
🌐 Sequenced Collections in Java 21 (⏱ 01:39)
🌐 New Class-File API will make Java Updates easier - Inside Java Newscast #56 (⏱ 09:14)
🌐 What is a Constructor? - Cracking the Java Coding Interview (⏱ 00:53)
🌐 What is a short-circuit method ? - Cracking the Java Coding Interview (⏱ 01:00)
Хорошего дня!
@javatg
Почитать:
— Java Digest #5
— Упрощаем работу с Excel с помошью Apache POI: готовый шаблонный код
— Автоматизация разработки с помощью подхода DB-first
— Откройте свое будущее: Изучите 15 бесплатных курсов IBM прямо сейчас
— Может ли Java быть быстрой? Сравнение производительности Helidon Níma и Spring
— Exploring Database Options for Java Applications
— Essential Tools for Java Developers
— solve-calculate
— Collaborating with Git Remotes: Adding Config File Support
— Can Sealed Interfaces in Java Improve Code Security?
— Memory management in JAVA
— Agora você vai entender como o java funciona
— javadoc-cleanup 1.3.7 Released (minor bug fixes)
— Article 1: Exploring Java 21: A Look at the Exciting API Changes
— Understanding Java OutOfMemory Issues
Посмотреть:
🌐 Sequenced Collections in Java 21 (⏱ 01:39)
🌐 New Class-File API will make Java Updates easier - Inside Java Newscast #56 (⏱ 09:14)
🌐 What is a Constructor? - Cracking the Java Coding Interview (⏱ 00:53)
🌐 What is a short-circuit method ? - Cracking the Java Coding Interview (⏱ 01:00)
Хорошего дня!
@javatg
👍10🔥3❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21❤1🥰1
SOLID — это аббревиатура, обозначающая пять принципов дизайна, которые позволяют создавать сопровождаемое, масштабируемое и надежное ПО. Роберт К. Мартин ввел эти принципы, чтобы помочь программистам писать высококачественный код. Изначально предназначенные для объектно-ориентированного программирования, принципы
SOLID
применимы и к другим языкам, например Kotlin
. Они направлены на обеспечение чистоты кода и улучшение дизайна программного обеспечения.Вот 5 принципов SOLID:
Single Responsibility Principle (SRP) — принцип единственной ответственности.
Open-Closed Principle (OCP) — принцип открытости/закрытости.
Liskov Substitution Principle (LSP) — принцип подстановки Лисков.
Interface Segregation Principle (ISP) — принцип разделения интерфейса.
Dependency Inversion Principle (DIP) — принцип инверсии зависимостей.
Теперь рассмотрим подробнее каждый из этих принципов с примерами выполнения и нарушения.
Принцип единственной ответственности
Принцип единственной ответственности является одним из принципов SOLID в объектно-ориентированном программировании. Смысл его заключается в том, что для каждого конкретного класса должно быть определено только одно назначение. Другими словами, каждый класс должен иметь только одну обязанность или одно задание.
SRP полезен для поддержания классов и функций, поскольку позволяет сохранить их организованность и легкость их восприятия. Определяя классу несколько обязанностей, вы непреднамеренно можете повлиять на решение этим классом других задач, что приведет к неожиданному поведению, ошибкам и увеличению затрат на сопровождение.
Теперь рассмотрим ситуации нарушения и выполнения этого принципа.
Нарушение:
// Нарушение принципа единственной ответственности
// В данном примере класс System пытается одновременно обрабатывать множество различных ситуаций.
// Такой подход может привести к серьезным проблемам в будущем.
class SystemManager {
fun addUser(user: User) { }
fun deleteUser(user: User) { }
fun sendNotification(notification:String) {}
fun sendEmail(user: User, email: String) {}
}
В данном примере класс
System
пытается обработать множество различных ситуаций в одном и том же месте. Такой подход может привести к серьезным проблемам в будущем.Выполнение:
// Выполнение принципа единственной отвественности.
// Как видно из этого примера, мы разделили класс System на определенные части
// и поместили функции в соответствующие классы.
class MailManager() {
fun sendEmail(user: User, email: String) {}
}
class NotificationManager() {
fun sendNotification(notification: String) {}
}
class UserManager {
fun addUser(user: User) {}
fun deleteUser(user: User) {}
}
Как видно из этого примера, класс System разделен на определенные части и функции помещены в соответствующие классы.
Принцип открытости/закрытости
Принцип “открытости/закрытости” — это правило объектно-ориентированного программирования, согласно которому классы, модули, функции и другие программные объекты должны быть открыты для расширения, но закрыты для изменений. Это означает, что вы можете добавлять новые элементы в класс, не модифицируя его исходный код. Таким образом, вместо изменения самого класса для добавления новых возможностей можно написать новый код, использующий существующий класс. Вследствие этого, код становится более удобным для сопровождения и повторного использования.
Теперь рассмотрим ситуации нарушения и корректного выполнения этого принципа.
📌 Читать дальше
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22❤5🔥1
🔥 Дайджест полезных материалов из мира Java за неделю
Почитать:
— Создание и тестирование gRPC сервиса (Spring Boot приложение)
— Вкатываемся в Java Backend, сравниваем Concurrency и Parallelism, учимся работать с Git в среде разработки и знакомимся с классом RandomAccessFile
— Я хотел сломать Java и я это сделал
— Как не стоит работать с HashSet в Java?
— Борьба с временем ответа сервиса
— Используем Elasticsearch вместе со Spring Boot
— Пишем простую интеграцию с GitHub используя feign и jsonschema2pojo maven plugin
— Книга «Грокаем функциональное программирование»
— Учимся бесплатно деплоить Java (и не только) приложения (Docker, CircleCI, Google Cloud)
— Inversion of Control(IoC) ve Dependency Injection(DI)
— What are the benefits of using Java enterprise solutions?
— Refactoring my code
— Integrating a Vaadin Web Application into External Webpages
— Hintergrundfarbe oder Hintergrundbild direkt in PDF-Dokument mit Java einstellen
— Java-Fähigkeiten: Einfügen von Text- oder Bild-Wasserzeichen in Word-Dokumente mit Java-Programmierung
— Organizing custom metrics for effective application monitoring
— PDF-Verwaltung: Vergleich von PDF-Dokumenten mit Java, um Unterschiede im Inhalt zu finden
— Streaming Queries for Real-Time Analytics in Spring Boot
— Java Design Patterns in Easy Way Series
Посмотреть:
🌐 What is an atomic variable? - Cracking the Java Coding Interview (⏱ 01:00)
🌐 What is a Record? - Cracking the Java Coding Interview (⏱ 01:00)
🌐 Generational ZGC (⏱ 01:20)
🌐 Choosing between ArrayList and LinkedList - JEP Cafe #20 (⏱ 30:50)
🌐 Как стать тестировщиком — QA лид в Европе Оксана Мельникова — Как мы попали в айти (⏱ 49:52)
Хорошего дня!
@javatg
Почитать:
— Создание и тестирование gRPC сервиса (Spring Boot приложение)
— Вкатываемся в Java Backend, сравниваем Concurrency и Parallelism, учимся работать с Git в среде разработки и знакомимся с классом RandomAccessFile
— Я хотел сломать Java и я это сделал
— Как не стоит работать с HashSet в Java?
— Борьба с временем ответа сервиса
— Используем Elasticsearch вместе со Spring Boot
— Пишем простую интеграцию с GitHub используя feign и jsonschema2pojo maven plugin
— Книга «Грокаем функциональное программирование»
— Учимся бесплатно деплоить Java (и не только) приложения (Docker, CircleCI, Google Cloud)
— Inversion of Control(IoC) ve Dependency Injection(DI)
— What are the benefits of using Java enterprise solutions?
— Refactoring my code
— Integrating a Vaadin Web Application into External Webpages
— Hintergrundfarbe oder Hintergrundbild direkt in PDF-Dokument mit Java einstellen
— Java-Fähigkeiten: Einfügen von Text- oder Bild-Wasserzeichen in Word-Dokumente mit Java-Programmierung
— Organizing custom metrics for effective application monitoring
— PDF-Verwaltung: Vergleich von PDF-Dokumenten mit Java, um Unterschiede im Inhalt zu finden
— Streaming Queries for Real-Time Analytics in Spring Boot
— Java Design Patterns in Easy Way Series
Посмотреть:
🌐 What is an atomic variable? - Cracking the Java Coding Interview (⏱ 01:00)
🌐 What is a Record? - Cracking the Java Coding Interview (⏱ 01:00)
🌐 Generational ZGC (⏱ 01:20)
🌐 Choosing between ArrayList and LinkedList - JEP Cafe #20 (⏱ 30:50)
🌐 Как стать тестировщиком — QA лид в Европе Оксана Мельникова — Как мы попали в айти (⏱ 49:52)
Хорошего дня!
@javatg
👍11🔥2❤1
This media is not supported in your browser
VIEW IN TELEGRAM
🚀 Event-Driven Declarative Orchestrator
Бесконечно масштабируемая, событийно-ориентированная, не зависящая от языка платформ, написаная на Java, для оркестровки и планирования, позволяющая управлять миллионами рабочих процессов декларативно в коде.
Kestra - это универсальный оркестровщик с открытым исходным кодом, который позволяет легко выполнять как запланированные, так и управляемые событиями рабочие процессы. Благодаря использованию лучших практик Infrastructure as Code для оркестровки данных, процессов и микросервисов, вы можете создавать надежные рабочие процессы и уверенно управлять ими.
Всего за несколько строк кода можно создать поток прямо из пользовательского интерфейса. Благодаря декларативному интерфейсу
• Github
• Проект
@javatg
Бесконечно масштабируемая, событийно-ориентированная, не зависящая от языка платформ, написаная на Java, для оркестровки и планирования, позволяющая управлять миллионами рабочих процессов декларативно в коде.
Kestra - это универсальный оркестровщик с открытым исходным кодом, который позволяет легко выполнять как запланированные, так и управляемые событиями рабочие процессы. Благодаря использованию лучших практик Infrastructure as Code для оркестровки данных, процессов и микросервисов, вы можете создавать надежные рабочие процессы и уверенно управлять ими.
Всего за несколько строк кода можно создать поток прямо из пользовательского интерфейса. Благодаря декларативному интерфейсу
YAML
для определения логики оркестровки заинтересованные стороны бизнеса могут участвовать в процессе создания рабочего процесса.• Github
• Проект
@javatg
👍12❤1🔥1