11 февраля(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
📂 Сергей Чамкин, старший разработчик из Uzum, ex-WildBerries, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Cергей будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Сергею
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚2❤1
Совет: в REST-сервисах ты часто получаешь только ID сущностей. И не всегда нужно тащить их из БД.
Чтобы проставить связь (по сути, foreign key в базе), можно “создать” ссылку на сущность через
👉 Java Portal
Чтобы проставить связь (по сути, foreign key в базе), можно “создать” ссылку на сущность через
getReferenceById(id) без SELECT и использовать её, чтобы задать relation.@Service
public SomeService {
@Autowired
private ProductRepository productRepository;
@Autowired
private CategoryRepository featureRepository;
public void setCategory(long productId, long categoryId) {
Product product = productRepository.findById(productId).orElseThrow(); // executes SELECT
Category category = categoryRepository.getReferenceById(categoryId); // does not execute a SELECT
product.setCategory(category);
productRepository.save(product);
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍4
Spring Boot: можно реализовать оптимистическую блокировку через аннотацию
✅ Идеально подходит, когда:
- чтения происходят часто
- записи сравнительно редкие
- конфликты случаются нечасто
❌ Не лучший вариант, когда:
- конфликты происходят часто
- нужна строгая сериализация
Когда читаем, Entity загружается с текущей версией. Допустим, version = 2.
Когда делаем update, учитывается запись с version = 2.
Если за это время другая транзакция уже успела её обновить, version уже не 2, апдейт не затронет ни одной строки, и Hibernate кинет OptimisticLockException.
То есть конфликт ловится без блокировки строки.
👉 Java Portal
@Version.- чтения происходят часто
- записи сравнительно редкие
- конфликты случаются нечасто
- конфликты происходят часто
- нужна строгая сериализация
public class Account {
@Id
private Long id;
private BigDecimal balance;
@Version
private Long version;
}Когда читаем, Entity загружается с текущей версией. Допустим, version = 2.
Когда делаем update, учитывается запись с version = 2.
Если за это время другая транзакция уже успела её обновить, version уже не 2, апдейт не затронет ни одной строки, и Hibernate кинет OptimisticLockException.
То есть конфликт ловится без блокировки строки.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Реальный event-driven проект на Core Java 21, Apache Kafka (KRaft mode) и PostgreSQL (в Docker).
Проект показывает, как современные распределенные системы обрабатывают заказы асинхронно через Kafka, без блокировок и ожидания между сервисами.
https://github.com/FlexiDriod/kafka-order-processing-system
👉 Java Portal
Проект показывает, как современные распределенные системы обрабатывают заказы асинхронно через Kafka, без блокировок и ожидания между сервисами.
https://github.com/FlexiDriod/kafka-order-processing-system
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - FlexiDriod/kafka-order-processing-system
Contribute to FlexiDriod/kafka-order-processing-system development by creating an account on GitHub.
😁1