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
В этом нам помогут наши любимые стримы.
Так:
List<Integer> iList = List.of(1,2,3,4,5);
Integer max = iList.stream().reduce(Integer::max).orElse(null);
System.out.println(max);
А еще лучше вот так:
List<Integer> iList = List.of(1,2,3,4,5);
iList.stream().reduce(Integer::max).ifPresent(System.out::println);
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤4🔥4
Java varargs
Java varargs (variable arguments) — это механизм, предоставляемый Java, который позволяет методу принимать переменное количество аргументов одного типа. Он позволяет передавать любое количество аргументов заданного типа в метод, без явного указания массива аргументов.
Для объявления переменного количества аргументов в Java используется троеточие (...) после типа данных аргумента в определении метода.
👉 Java Rocks | #java
Java varargs (variable arguments) — это механизм, предоставляемый Java, который позволяет методу принимать переменное количество аргументов одного типа. Он позволяет передавать любое количество аргументов заданного типа в метод, без явного указания массива аргументов.
Для объявления переменного количества аргументов в Java используется троеточие (...) после типа данных аргумента в определении метода.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9👌5❤3
public class Quest {
public static void main(String[] args) {
int i = 1;
inc(i);
System.out.println(i);
}
private static void inc(int num) {
num++;
}
}👍6🔥1
👍12🔥4❤1
Локальные переменные в лямбда-выражениях
Java позволяет использовать локальные переменные внутри лямбда-выражений, но с одним важным ограничением: переменные должны быть эффективно финальными (effectively final).
Это означает, что после их инициализации переменные не могут быть изменены.
Использование локальных переменных в лямбда-выражениях может быть очень полезным для передачи дополнительных данных в лямбда-выражения.
👉 Java Rocks | #java
Java позволяет использовать локальные переменные внутри лямбда-выражений, но с одним важным ограничением: переменные должны быть эффективно финальными (effectively final).
Это означает, что после их инициализации переменные не могут быть изменены.
Использование локальных переменных в лямбда-выражениях может быть очень полезным для передачи дополнительных данных в лямбда-выражения.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Метод
deepToString из класса Arrays используется для создания строкового представления многомерных массивов (например, массивов массивов). Он обходит каждый уровень вложенности массива и выводит его элементы в виде строки. Это удобно для работы с многомерными массивами, так как стандартный метод toString не раскрывает их структуру.Пример использования:
int[][] array = {{1, 2, 3}, {4, 5, 6}};
System.out.println(Arrays.deepToString(array));
// [[1, 2, 3], [4, 5, 6]]
Этот метод работает рекурсивно, обеспечивая полное отображение структуры массива любой вложенности.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
This media is not supported in your browser
VIEW IN TELEGRAM
Voqal — это Java инструмент для разработчиков, который помогает повысить продуктивность через голосовое программирование.
С его помощью можно управлять IDE JetBrains голосом: перемещаться по коду, писать, запускать и отлаживать программы.
⛓ Ссылка: тык
👉 Java Rocks | #ресурсы
С его помощью можно управлять IDE JetBrains голосом: перемещаться по коду, писать, запускать и отлаживать программы.
Please open Telegram to view this post
VIEW IN TELEGRAM
public class Quest {
public static void main(String[] args) {
String s = null;
if (s != null & s.length() > 0) {
System.out.println("YES!");
} else {
System.out.println("NO!");
}
}
}Decorator — это структурный паттерн, который позволяет динамически добавлять объектам новые обязанности, оборачивая их в "декораторы". Это полезно для расширения функциональности без изменения существующего кода.
Использование:
🔹 Для динамического добавления поведения объектам без изменения их кода.
🔹 Для разделения функциональности на отдельные классы, чтобы избежать создания монолитных классов с множеством обязанностей.
🔹 Когда нужно добавлять новые функции не только для одного объекта, но и для всех его потомков.
Преимущества:
Недостатки:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1
FileChannel
FileChannel используется для работы с файлами на низкоуровневом вводе-выводе.
Основные возможности класса FileChannel:
— Чтение данных из файла и запись данных в файл.
— Работа с файлом по смещениям. Можно получить текущее смещение в файле, переместить указатель чтения/записи в нужное смещение.
— Маппинг файлов в память. Файл можно отобразить в память и работать с его содержимым как с массивом байтов.
— Блокировка частей файла. Позволяет защитить критические участки файла от одновременной записи.
— Асинхронная работа с файлами.
FileChannel эффективнее потокового ввода-вывода, т. к. избавляет от накладных расходов на создание объектов и буферизацию.
Используется в приложениях, где нужна высокая производительность работы с файлами.
👉 Java Rocks | #java
FileChannel используется для работы с файлами на низкоуровневом вводе-выводе.
Основные возможности класса FileChannel:
— Чтение данных из файла и запись данных в файл.
— Работа с файлом по смещениям. Можно получить текущее смещение в файле, переместить указатель чтения/записи в нужное смещение.
— Маппинг файлов в память. Файл можно отобразить в память и работать с его содержимым как с массивом байтов.
— Блокировка частей файла. Позволяет защитить критические участки файла от одновременной записи.
— Асинхронная работа с файлами.
FileChannel эффективнее потокового ввода-вывода, т. к. избавляет от накладных расходов на создание объектов и буферизацию.
Используется в приложениях, где нужна высокая производительность работы с файлами.
Please open Telegram to view this post
VIEW IN TELEGRAM
Integer a = 128;
Integer b = 128;
System.out.println(a == b); // false
Integer x = 1;
Integer y = 1;
System.out.println(x == y); // true
Это не просто волшебство! Это связано с целочисленным кэшированием в Java.
Для значений в диапазоне от -128 до 127 объекты типа
Integer кэшируются, и ссылки на них одинаковы, а для значений за пределами этого диапазона создаются новые объекты, и ссылки на них будут разными. Так как используется оператор ==, то сравниваются ссылки на объекты.Please open Telegram to view this post
VIEW IN TELEGRAM
👍8