Найти в Дзене
Покупайте СтеллыИ дарите их за контент
1 день назад

Java Tip: не используйте `Stack` для LIFO-логики

В Java Stack до сих пор встречается в старом коде, но для новых проектов лучше брать Deque, чаще всего через ArrayDeque. Stack - legacy-класс. Он наследуется от Vector, а значит, тащит за собой старую модель и синхронизацию почти на каждом вызове. Для обычного стека это обычно лишнее. Вместо этого: Deque<String> undo = new ArrayDeque<>(); undo...

1 день назад

Ты не твой стек

Зачем учиться новому, когда по самое колено в практике? Не страшно, что всё больше джунов работают наравне с сеньёрами? Уже нельзя уметь только фреймворк, надо понимать что стоит за этим и в твоём опыте огромное преимущество, не хватает лишь малого - знаний об том как утроен мир и формула принятия решений. Метафизика? Нет - математика. Языки и фреймворки устаревают за 5–10 лет, стеки обновляются радикально. А способ мышления, которым ты пользуешься, чтобы разложить сложную задачу на части, остаётся с тобой навсегда...

1 день назад

Project Panama в Java 22+ — вызов C-кода без боли JNI

Java теперь может напрямую работать с нативными C/C++ библиотеками через Foreign Function & Memory API. Идея простая: * находишь функцию из C-библиотеки * описываешь её сигнатуру * вызываешь из Java через MethodHandle * работаешь с нативной памятью через MemorySegment и Arena Это сильно упрощает Java-native interop по сравнению с JNI...

3 дня назад

💡 Java VarHandle можно использовать как лёгкий механизм publish/subscribe между потоками без volatile

Идея простая: - Writer записывает данные в обычные поля. - Затем вызывает setRelease(...) на флаге. - Reader ждёт флаг через getAcquire(...). - После этого безопасно читает опубликованные данные. setRelease() гарантирует публикацию всех предыдущих записей...

5 дней назад

Java switch expression убирает старую боль со случайно забытым break

В старом switch легко получить тихий баг: пропустил break, и выполнение провалилось в следующий case. В новом варианте каждый case возвращает значение через ->, а break не нужен: String label = switch (status) { case NEW -> "queued"; case RUNNING -> "in progress"; case DONE -> "finished"; }; Плюс компилятор следит за полнотой...

1 неделя назад

Spring Boot: optimistic locking через `@Version

` В JPA/Hibernate можно ловить конфликт обновлений без блокировки строки в базе. Достаточно добавить поле версии: @Entity public class Account { @Id private Long id; private BigDecimal balance; @Version private Long version; } Как это работает: Когда Entity читается из базы, Hibernate забирает текущую версию записи. Например, version = 2. При обновлении он делает update с проверкой этой версии. Если за это время другая транзакция уже изменила запись, версия в базе стала другой. Тогда update не затронет ни одной строки, и Hibernate выбросит OptimisticLockException...

Покупайте СтеллыИ дарите их за контент