Курс по конкурентному программированию от Ильи Сергеева
Если хочешь разобраться в параллельности, потоках, акторной модели и распределёнке — лови топовый курс от препода Yale-NUS
— Scala для конкурентного кода
— Мьютексы, блокировки, атомики
— Futures и async
— Акторы и обмен сообщениями
— Распределённый консенсус (в т.ч. BFT)
Можешь поблагодарить лукасом😍
👉 Java Portal
Если хочешь разобраться в параллельности, потоках, акторной модели и распределёнке — лови топовый курс от препода Yale-NUS
— Scala для конкурентного кода
— Мьютексы, блокировки, атомики
— Futures и async
— Акторы и обмен сообщениями
— Распределённый консенсус (в т.ч. BFT)
Можешь поблагодарить лукасом
Please open Telegram to view this post
VIEW IN TELEGRAM
Начиная с JDK 12, появилась новая фича —
Пример:
Вывод:
Также доступен стиль LONG:
Результат:
Идеально для UI, отчетов и всего, где важна краткость💖
👉 Java Portal
java.text.CompactNumberFormat
. Она позволяет компактно отображать большие числаПример:
Locale.setDefault(Locale.US);
NumberFormat compact = NumberFormat.getCompactNumberInstance();
System.out.println(compact.format(1));
System.out.println(compact.format(999));
System.out.println(compact.format(2_000));
System.out.println(compact.format(55_555));
System.out.println(compact.format(3_777_999));
System.out.println(compact.format(Integer.MAX_VALUE));
Вывод:
1
999
2K
56K
4M
2B
Также доступен стиль LONG:
NumberFormat compact;
compact = NumberFormat.getCompactNumberInstance(Locale.US, Style.LONG);
Результат:
1
999
2 thousand
56 thousand
4 million
2 billion
Идеально для UI, отчетов и всего, где важна краткость
Please open Telegram to view this post
VIEW IN TELEGRAM
Разработчики, вот вам шпаргалка по техникам синхронизации потоков в Java 🧑💻
synchronized блок/метод -> использует встроенную блокировку объекта для обеспечения взаимного исключения.
ReentrantLock -> явная блокировка с более гибкими возможностями по сравнению с synchronized.
volatile- > гарантирует видимость изменений переменной между потоками.
Атомарные переменные (AtomicInteger и др.) -> обеспечивают атомарные операции без блокировок.
Semaphore -> управляет доступом к ресурсу с ограниченным числом разрешений.
CountDownLatch -> позволяет одному или нескольким потокам ожидать завершения операций в других потоках.
CyclicBarrier -> позволяет группе потоков дождаться друг друга до продолжения выполнения.
ReadWriteLock -> разрешает множественные параллельные чтения, но только одну запись.
👉 Java Portal
synchronized блок/метод -> использует встроенную блокировку объекта для обеспечения взаимного исключения.
ReentrantLock -> явная блокировка с более гибкими возможностями по сравнению с synchronized.
volatile- > гарантирует видимость изменений переменной между потоками.
Атомарные переменные (AtomicInteger и др.) -> обеспечивают атомарные операции без блокировок.
Semaphore -> управляет доступом к ресурсу с ограниченным числом разрешений.
CountDownLatch -> позволяет одному или нескольким потокам ожидать завершения операций в других потоках.
CyclicBarrier -> позволяет группе потоков дождаться друг друга до продолжения выполнения.
ReadWriteLock -> разрешает множественные параллельные чтения, но только одну запись.
Please open Telegram to view this post
VIEW IN TELEGRAM
Вот хороший пример очень плохого использования метки в Java:
Компилируется без ошибок. При выполнении выводит:
Это приводит к бесконечному циклу🙂
👉 Java Portal
void main() {
do onlyOnce: {
IO.println("Один раз?");
break onlyOnce;
} while (true);
}
Компилируется без ошибок. При выполнении выводит:
Один раз?
Один раз?
Один раз?
Один раз?
Один раз?
...
Это приводит к бесконечному циклу
Please open Telegram to view this post
VIEW IN TELEGRAM
Используйте DTO для запросов и ответов
Никогда не передавайте сущности напрямую — всегда преобразовывайте их в DTO и обратно
🤍 — база
👉 Java Portal
Никогда не передавайте сущности напрямую — всегда преобразовывайте их в DTO и обратно
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
JDK 22 представил класс
Вывод:
Также можно использовать ListFormat для разбора отформатированной строки обратно в список
Ставь лайк если полезно🪑
👉 Java Portal
java.text.ListFormat
. Используйте его, когда нужно отформатировать список строк в удобочитаемый вид. Например, вот такая программа:final List<String> days = List.of("Mon", "Wed", "Fri");
void main() {
print(Type.STANDARD);
print(Type.OR);
print(Type.UNIT);
}
private void print(Type type) {
print(type, Style.FULL);
print(type, Style.SHORT);
print(type, Style.NARROW);
}
private void print(Type type, Style style) {
var format = ListFormat.getInstance(Locale.US, type, style);
var result = format.format(days);
System.out.printf("%-8s + %-7s: %s%n", type, style, result);
}
Вывод:
STANDARD + FULL : Mon, Wed, and Fri
STANDARD + SHORT : Mon, Wed, & Fri
STANDARD + NARROW : Mon, Wed, Fri
OR + FULL : Mon, Wed, or Fri
OR + SHORT : Mon, Wed, or Fri
OR + NARROW : Mon, Wed, or Fri
UNIT + FULL : Mon, Wed, Fri
UNIT + SHORT : Mon, Wed, Fri
UNIT + NARROW : Mon Wed Fri
Также можно использовать ListFormat для разбора отформатированной строки обратно в список
Ставь лайк если полезно
Please open Telegram to view this post
VIEW IN TELEGRAM
Способы сравнения строк в Java
1.
2.
3.
4.
> Подробнее тут😊
👉 Java Portal
1.
==
→ Сравнивает адреса в памяти2.
.equals()
→ Сравнивает содержимое строк3.
.compareTo()
→ Лексикографическое сравнение4.
.equalsIgnoreCase()
→ Сравнивает без учёта регистра> Подробнее тут
Please open Telegram to view this post
VIEW IN TELEGRAM
В Java можно ставить метку на выражение, которое уже промечено другой меткой. И так хоть до бесконечности.
Полезно? Вряд ли.
Стоит ли использовать? Точно нет.
Но как факт — это работает
Пример:
> Код компилируется
> Метки (
Вывод:
Иногда Java действительно говорит с нами стихами🫢
👉 Java Portal
Полезно? Вряд ли.
Стоит ли использовать? Точно нет.
Но как факт — это работает
Пример:
String question;
to: be: or: not: that: is: the: question = "What?";
out.println(question);
> Код компилируется
> Метки (
to:, be:, or:
и т.д.) игнорируются, если не используются в break
или continue
Вывод:
What?
Иногда Java действительно говорит с нами стихами
Please open Telegram to view this post
VIEW IN TELEGRAM
14 мая(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqvXmgo6
Please open Telegram to view this post
VIEW IN TELEGRAM
В чём разница между throw и throws в Java?
throw
> Используется для явного выбрасывания исключения.
> Синтаксис: throw new ExceptionType("сообщение");
> Применяется внутри метода или блока.
throws
> Объявляет возможные исключения, которые может выбросить метод.
> Указывается в сигнатуре метода.
> В основном используется для проверяемых исключений
👉 Java Portal
throw
> Используется для явного выбрасывания исключения.
> Синтаксис: throw new ExceptionType("сообщение");
> Применяется внутри метода или блока.
throws
> Объявляет возможные исключения, которые может выбросить метод.
> Указывается в сигнатуре метода.
> В основном используется для проверяемых исключений
Please open Telegram to view this post
VIEW IN TELEGRAM
Этот Dockerfile для Spring Boot создаёт образ, который потребляет на 33% меньше памяти по сравнению с образом, собранным с помощью Buildpacks (рекомендуемый Spring способ сборки Docker-образов) 💪
👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM