Oracle выпустила Java 23. Вот несколько из самых интересных нововведений:
🔹 Модульные импорты (JEP 476): Теперь можно легко импортировать все пакеты модуля, не погружаясь в детали модульной системы.
🔹 Паттерны для примитивов (JEP 455): Теперь примитивные типы можно использовать в pattern matching, instanceof и switch, что делает Java ещё более гибкой и выразительной.
🔹 Структурированная конкуренция (JEP 480): Этот API упрощает многопоточное программирование, объединяя связанные задачи в один блок работы, что повышает надежность и упрощает сопровождение кода.
🔹 Документация на Markdown (JEP 467): Теперь документацию Javadoc можно писать на Markdown, что делает её более удобной для чтения и создания.
🔹 Поколенческий режим для ZGC (JEP 474): Улучшен сборщик мусора ZGC, который теперь по умолчанию работает в поколенческом режиме, что увеличивает производительность и снижает затраты ресурсов.
Подробнее об обновлениях - ссылка.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🏆1
class Cache {
private static int sum = 0;
static {
initializeIfNecessary();
}
public static int getSum() {
initializeIfNecessary();
return sum;
}
private static boolean initialized = false;
private static synchronized void initializeIfNecessary() {
if (!initialized) {
for (int i = 0; i < 5; i++)
sum += i;
initialized = true;
}
}
}
class Client {
public static void main(String[] args) {
System.out.println(Cache.getSum());
}
}❤4
👎2
MVC (Model-View-Controller) — это популярный архитектурный паттерн, который разделяет приложение на три компонента:
Model — отвечает за бизнес-логику и управление данными. Это сердце приложения, где происходит взаимодействие с базой данных, выполнение бизнес-правил и другие операции.
View — представляет собой интерфейс пользователя. Он отвечает за отображение данных и взаимодействие с пользователем, но не содержит бизнес-логики.
Controller — посредник между Model и View. Он получает запросы от пользователя, передает их Model и возвращает результаты во View.
💡 MVC позволяет четко разделить обязанности между компонентами, облегчая поддержку и масштабирование кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤4🔥3
Fixture Monkey — инструмент на Java для автоматической генерации объектов для тестов
Позволяет упростить написание тестов, облегчая генерацию необходимых тестовых объектов.
При этом можно повторно использовать одни и те же конфигурации объектов в нескольких тестах.
👉 Java Rocks | #java
Позволяет упростить написание тестов, облегчая генерацию необходимых тестовых объектов.
При этом можно повторно использовать одни и те же конфигурации объектов в нескольких тестах.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3🔥3
Когда требуется конкатенировать строки с использованием
Stream, можно выбрать один из двух методов: Stream.reduce() или Stream.collect(Collectors.joining()).Пример с
Stream.reduce(): List<String> list = List.of("Str1", "Str2", "Str3");
String result = list.stream().reduce("", (a, b) -> a + b);
System.out.println(result); // Str1Str2Str3Пример с
Collectors.joining(): List<String> list = List.of("Str1", "Str2", "Str3");
String result = list.stream().collect(Collectors.joining());
System.out.println(result); // Str1Str2Str3Использование
reduce() для конкатенации строк не является оптимальным с точки зрения производительности. При каждом вызове операции +, создается новая строка, так как строки в Java неизменяемы. Это приводит к увеличению нагрузки на память из-за создания множества промежуточных объектов.В свою очередь, метод
Collectors.joining() использует StringBuilder для сборки строк, что значительно эффективнее. Он избегает создания лишних объектов и снижает потребление памяти.Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👌3
This media is not supported in your browser
VIEW IN TELEGRAM
Каждое серверное приложение (включая внутренние приложения, приложения для стриминга и производства фильмов) в Netflix написаны на Java и используют экосистему языка.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2🎃2❤1
Observer — это поведенческий паттерн, который создаёт механизм подписки, позволяющий одним объектам следить и реагировать на изменения состояния других объектов. Наблюдатель предоставляет гибкую систему взаимодействия между объектами, исключая жесткую связанность.
Использование:
🔹 Когда нужно оповещать несколько объектов об изменениях состояния другого объекта.
🔹 Когда важно обеспечить слабую связанность между компонентами системы.
🔹 При разработке систем, где одни объекты должны реагировать на изменения в других, без жёсткой привязки.
Преимущества:
Недостатки:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤3👌3
This media is not supported in your browser
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤5🔥4
public class Quest {
public static void main(String[] args) {
int j = 0;
for (int i = 0; i < 10; i++) {
j = j++;
}
System.out.println(j);
}
}👍7❤4👌4
Логирование, трассировка и метрики — это три столпа наблюдаемости системы
🔹 Логирование
Логирование фиксирует дискретные события в системе. Например, мы можем записывать входящие запросы или обращения к базам данных как события. Это самый объемный тип данных. Для построения платформы анализа логов часто используют стек ELK (Elastic-Logstash-Kibana). Мы часто определяем стандартизированный формат логов для разных команд, чтобы использовать ключевые слова при поиске среди большого объема логов.
🔹 Трассировка
Трассировка обычно привязана к запросам. Например, пользовательский запрос проходит через API-шлюз, балансировщик нагрузки, сервис A, сервис B и базу данных — это можно визуализировать в системах трассировки. Это полезно для выявления узких мест в системе. OpenTelemetry используется для демонстрации типичной архитектуры, которая объединяет три столпа в одной платформе.
🔹 Метрики
Метрики — это обычно агрегируемая информация из системы. Например, QPS сервиса, отзывчивость API, задержка сервиса и т.д. Сырые данные записываются в базы данных временных рядов, такие как InfluxDB. Prometheus извлекает данные и преобразует их на основе предопределенных правил оповещений. Затем данные отправляются в Grafana для отображения или в менеджер оповещений, который затем рассылает уведомления по email, SMS или в Slack.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥5🎃5
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤2🔥1