Canary deployment - это стратегия развертывания, при которой новая версия приложения сначала запускается для небольшой части пользователей. Если тестирование проходит успешно, она постепенно заменяет старую версию.
Дан массив целых чисел nums, верните количество самых длинных строго возрастающих подпоследовательностей.
Пример:
Input: n = 1, presses = 1 Output: 2 Explanation: Status can be: - [off] by pressing button 1 - [on] by pressing button 2
Алгоритм:
1⃣Объявите два массива динамического программирования length и count, и инициализируйте их значениями length[i]=1 и count[i]=1. Итерируйте i от 0 до n−1. Для каждого i итерируйте j от 0 до i−1 и, если nums[j] < nums[i], обновите length[i] и count[i] в зависимости от значений length[j] и count[j].
2⃣Найдите максимальное значение в массиве length и сохраните его в переменной maxLength. Инициализируйте переменную result = 0.
3⃣Итерируйте i от 0 до n−1 и, если length[i] = maxLength, добавьте count[i] к result. Верните result.
Решение:
class Solution { public int findNumberOfLIS(int[] nums) { int n = nums.length; int[] length = new int[n]; int[] count = new int[n]; Arrays.fill(length, 1); Arrays.fill(count, 1);
for (int i = 0; i < n; i++) { for (int j = 0; j < i; j++) { if (nums[j] < nums[i]) { if (length[j] + 1 > length[i]) { length[i] = length[j] + 1; count[i] = 0; } if (length[j] + 1 == length[i]) { count[i] += count[j]; } } } }
int maxLength = Arrays.stream(length).max().getAsInt(); int result = 0;
for (int i = 0; i < n; i++) { if (length[i] == maxLength) { result += count[i]; } }
Blue-green deployment - это стратегия развертывания, при которой две среды (синяя и зелёная) работают параллельно. Новая версия приложения разворачивается в зелёной среде, тестируется, а затем весь трафик переключается на неё, превращая её в новую продакшн-среду.
jaz — новый инструмент запуска JVM, оптимизированный под Azure. Он предлагает более подходящие настройки по умолчанию для Java-приложений в контейнерах и на виртуалках.
И это ещё не всё — впереди больше обновлений. подробнее
#статьи 😅Нашёл годную статью — подробный гайд по ООП в Java: принципы, концепты и реальные примеры. Если ты новичок или хочешь освежить базу — заходи смело. Всё объяснено доступно и с кодом. источник
Thread.getState() позволяет получить текущее состояние потока. Это полезно при отладке многопоточных программ, чтобы отслеживать, выполняется ли поток, заблокирован или завершён. 👉Новости👉База вопросов
Контейнер - это легковесный, изолированный пакет, содержащий код приложения, зависимости и настройки. Он позволяет запускать приложения независимо от среды, упрощая их развертывание и масштабирование.
#полезное 😇Java Lombok: Аннотация @Data — всё в одном
Аннотация @Data объединяет в себе несколько часто используемых аннотаций Lombok:
🟠@ToString — генерирует метод toString() 🟠@Getter — создаёт геттеры для всех нестатических полей 🟠@Setter — создаёт сеттеры для всех нестатических полей 🟠@EqualsAndHashCode — генерирует equals() и hashCode() 🟠@RequiredArgsConstructor — создаёт конструктор для всех final и @NonNull полей
Charset.forName() позволяет получить кодировку по её названию и использовать её для преобразования строк. Это полезно при работе с различными кодировками, например, UTF-8, ISO-8859-1 и Windows-1251. 👉Новости👉База вопросов
Jenkinsfile - это текстовый файл, в котором описаны этапы CI/CD-пайплайна: сборка, тестирование, развертывание. Он позволяет управлять процессами Jenkins с помощью кода, обеспечивая прозрачность и повторяемость.
В новой версии JDK 25 улучшили производительность класса String: теперь метод String::hashCode в большинстве случаев сворачивается на этапе компиляции (constant folding).
Это значит: – Меньше затрат в рантайме – Быстрее работа с ключами в HashMap – Эффективнее часто используемые строки Подробнее
Используйте @FunctionalInterface как защиту на уровне компиляции
Она помогает не допустить случайного добавления второго абстрактного метода в интерфейс, который должен быть функциональным. Если вы попытаетесь добавить ещё один абстрактный метод в такой интерфейс, компилятор выдаст ошибку
ScopedValue.where() позволяет безопасно передавать контекстные данные внутри потока, избегая утечек памяти и сложностей ThreadLocal. Данные доступны только внутри заданного блока кода.
#полезное 🫡В этом гайде автор показывает, как парсить структурированные строки в Java
Большинство разработчиков используют регулярные выражения, split() или ручную нарезку строк. Но эти техники подвержены ошибкам, плохо читаются и, что важнее всего — небезопасны на этапе компиляции. Класс StringFormat делает парсинг настолько простым, что даже новичок может реализовать его в одну строку.