Почему твой бэкенд начинает тупить на 10k юзеров, хотя на 100 всё летало
Обычно причина одна из этих:
1️⃣ N+1 запросы
→ один запрос незаметно триггерит сотню походов в БД
2️⃣ Нет индексов
→ на каждом поиске полный проход по таблице
3️⃣ Тяжелая работа синхронно
→ письма, обработка картинок прямо внутри request cycle
4️⃣ Нет стратегии кеширования
→ один и тот же запрос в БД выполняется 1000 раз
5️⃣ Единая точка отказа
→ один инстанс БД тащит на себе вообще всё
Приложение не стало внезапно медленным.
Оно просто доросло до момента, когда плохие решения стали заметны.
👉 Java Portal
Обычно причина одна из этих:
→ один запрос незаметно триггерит сотню походов в БД
→ на каждом поиске полный проход по таблице
→ письма, обработка картинок прямо внутри request cycle
→ один и тот же запрос в БД выполняется 1000 раз
→ один инстанс БД тащит на себе вообще всё
Приложение не стало внезапно медленным.
Оно просто доросло до момента, когда плохие решения стали заметны.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9❤2
Совет по Java:
Избавляет от
👉 Java Portal
Stream.toArray(Type[]::new) это аккуратный и типобезопасный способ получить массив из стрима.Избавляет от
Object[] и ручных кастов.Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2
Вопрос для интервью по Java Spring Boot:
С тех пор как AI начал активно залезать в мир разработки, паттерны на собеседованиях меняются.
Тренд, который я недавно наблюдал: дают сниппет кода, и ты должен его проревьюить и отрефакторить логику под прод.
[Дано]:
Команда написала логику отправки письма после регистрации пользователя. На проде иногда бывает ситуация: письма приходят, а пользователя в базе нет. Найди проблему и почини:
[Задачи]:
- Объясни, в каком сценарии письмо будет отправлено, но пользователь не сохранится
- Исправь код так, чтобы событие обрабатывалось только после того, как пользователь сохранён
Код:
👉 Java Portal
@Transactional + @EventListenerС тех пор как AI начал активно залезать в мир разработки, паттерны на собеседованиях меняются.
Тренд, который я недавно наблюдал: дают сниппет кода, и ты должен его проревьюить и отрефакторить логику под прод.
[Дано]:
Команда написала логику отправки письма после регистрации пользователя. На проде иногда бывает ситуация: письма приходят, а пользователя в базе нет. Найди проблему и почини:
[Задачи]:
- Объясни, в каком сценарии письмо будет отправлено, но пользователь не сохранится
- Исправь код так, чтобы событие обрабатывалось только после того, как пользователь сохранён
Код:
@Service
@RequiredArgsConstructor
public class UserService {
private final UserRepository userRepository;
private final ApplicationEventPublisher eventPublisher;
@Transactional
public void register(UserDto dto) {
User user = new User(https://dto.email());
https://userRepository.save(user);
eventPublisher.publishEvent(new UserRegisteredEvent(user));
}
}
@Component
@RequiredArgsConstructor
public class EmailListener {
private final EmailSender emailSender;
private final SomeOtherService someOtherService;
@EventListener
public void onUserRegistered(UserRegisteredEvent event) {
emailSender.sendWelcome(event.user().getEmail());
someOtherService.doSomething();
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3