Локально всё ок, на проде — IllegalArgumentException: Comparison method violates its general contract! 👇
📦 Задание — code review
Сортируем товары: сначала в наличии, потом по убыванию рейтинга.
products.sort((a, b) -> {
if (a.isInStock() && !b.isInStock()) return -1;
if (!a.isInStock() && b.isInStock()) return 1;
return (int) (b.getRating() - a.getRating()); // rating: double
});▪️ Объясни
— Почему этот компаратор нарушает контракт (нетранзитивность / нарушение антисимметрии) и почему падает только на достаточно больших списках.
— Как переписать, чтобы было корректно и читаемо.
Ставьте → 🔥, если нравится формат. Если нет → 🌚
#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1👏1
В Kafka существует три уровня гарантий доставки сообщений:
Выбор зависит от задачи: для логов подойдет
#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥2👏1
🔹 StackOverflowError
Возникает когда переполняется
🔹 OutOfMemoryError
Возникает когда J
#jvm
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2❤🔥1
И лямбды, и анонимные классы позволяют создавать "
Ключевые отличия:
→ Синтаксис:
→ Производительность:
→ this: в
→ Назначение:
#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2👏1
Forwarded from Proglib.academy | IT-курсы
Для человека это естественная часть работы. У Claude Code этого контекста по умолчанию нет — только задача и инструкции, которые ему дали.
Поэтому в большой команде недостаточно просто выбрать хорошую модель.❗️ Нужно ещё объяснить ей, как у вас устроена разработка: какие подходы приняты, что обязательно проверять и по каким правилам принимать решения.
GenAI Data Platform, и с этой проблемой сталкивался не раз
Покажет живое демо, разберём, как встроить AI в процесс разработки так, чтобы он реально помогал, а не добавлял ещё один повод для споров на ревью.
Please open Telegram to view this post
VIEW IN TELEGRAM
volatile — это модификатор переменной, который гарантирует:
▪️
▪️
Использовать стоит, когда:
▪️
▪️
volatile не обеспечивает атомарности, поэтому для операций «чтение-модификация-запись» нужны синхронизация или атомарные типы (AtomicInteger, AtomicReference и т.п.).
#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤🔥1❤1
Класс Object — это базовый класс для всех классов в Java. Он содержит следующие методы:
🔹 public final Class<?> getClass() –
🔹
🔹 public boolean equals(Object obj) –
🔹
🔹 public String toString() –
🔹
🔹 public final void notifyAll() –
🔹
🔹 public final void wait(long timeout) –
🔹
🔹 protected void finalize() –
#core
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2🔥1
PhantomReference —
Используется для
В отличие от finalize(), это надёжный способ отследить
#jvm
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1👏1💯1
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Proglib.academy | IT-курсы
Это просто станет частью профессии. А вот умение встроить AI в процесс разработки так, чтобы он действительно ускорял работу команды, останется конкурентным преимуществом
До конца июля действует специальная цена — 59 990 ₽ вместо 79 990 ₽
Please open Telegram to view this post
VIEW IN TELEGRAM
😁1🤔1
Напишите production-ready ретраер 👇
📦 Задание
Реализуйте утилиту, которая повторяет операцию при временном сбое:
public <T> T executeWithRetry(Supplier<T> operation) {
// Ваша реализация
}📋 Требования
— Максимум N попыток.
— Экспоненциальная задержка: 100ms → 200ms → 400ms… с верхней границей (cap).
— Добавить jitter (случайный разброс), чтобы избежать «thundering herd» при массовых ретраях.
— Ретраить только временные ошибки, бизнес-ошибки пробрасывать сразу.
— Корректно обработать прерывание (InterruptedException + восстановление флага interrupt).
— После исчерпания попыток пробросить последнее исключение (с сохранением причины).
Ставьте → 🔥, если нравится формат. Если нет → 🌚
#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍1👏1
HashMap —
Что происходит при put(key, value):
🔹 Коллизия:
До Java 8 →
С Java 8 →
// Упрощённо: Node в списке или TreeNode в дереве
static class Node<K,V> {
final int hash;
final K key;
V value;
Node<K,V> next;
}
🔹 Load factor и resize:
По умолчанию capacity =
Как только элементов стало больше
Поэтому если заранее знаете размер — задавайте начальную ёмкость:
// Хотим 1000 элементов без resize:
// 1000 / 0.75 ≈ 1334, берём следующую степень двойки
Map<String, Integer> map = new HashMap<>(2048);
#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2🔥1
Когда название файла уже само по себе считается техническим долгом 👇
Forwarded from Proglib.academy | IT-курсы
У вас в проекте есть файл вроде utils_v2_final_FIX.py, который все боятся трогать ❓
Что делаете с таким легаси?
❤️ Не трогаю: работает — и ладно
👍 Переписываю с нуля и надеюсь на лучшее
🔥 Сначала покрываю тестами, потом рефакторю по частям
👾 У нас такого нет — честно-честно
На курсе «ИИ для разработчиков» разберём третий подход: как с помощью агента зафиксировать текущее поведение легаси-кода тестами, а затем менять его небольшими безопасными шагами — без одного огромного PR на тысячу файлов.
До 31 июля действует скидка и бессрочный доступ к материалам.
🔗 Занять место со скидкой
🏃♀️ Proglib Academy
Что делаете с таким легаси?
❤️ Не трогаю: работает — и ладно
👍 Переписываю с нуля и надеюсь на лучшее
🔥 Сначала покрываю тестами, потом рефакторю по частям
👾 У нас такого нет — честно-честно
На курсе «ИИ для разработчиков» разберём третий подход: как с помощью агента зафиксировать текущее поведение легаси-кода тестами, а затем менять его небольшими безопасными шагами — без одного огромного PR на тысячу файлов.
До 31 июля действует скидка и бессрочный доступ к материалам.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
— Statement используется для
— PreparedStatement
Поэтому в реальных проектах почти всегда используют PreparedStatement.
#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤🔥1🔥1
this — это
—
—
—
—
#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2🔥1
@Qualifier используется для
Без @Qualifier Spring не знает,
@Bean
@Qualifier("primary")
public DataSource primaryDB() { ... }
@Bean
@Qualifier("secondary")
public DataSource secondaryDB() { ... }
@Autowired
@Qualifier("primary")
private DataSource dataSource;
Альтернатива — использовать
#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2🔥1
Разработчику нужен стабильный результат, DevOps — контроль инфраструктуры, техлиду — правила для всей команды. Собрали это в одном посте 👇
Forwarded from Proglib.academy | IT-курсы
Но цель одна: перейти от случайных удачных запусков к управляемому процессу на реальном проекте — с понятными правилами, ревью, контролем расходов и безопасности
На курсе «ИИ для разработчиков» участники выстраивают такой процесс на практике: подключают инструменты, задают границы для агента и учатся понимать, где ему можно доверять работу, а где требуется проверка.
Please open Telegram to view this post
VIEW IN TELEGRAM
Нагрузочное тестирование — это проверка поведения системы
Обычно проверяем:
—
—
—
—
Используем инструменты типа
#tests
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤2🔥1
ConcurrentHashMap использует
В отличие от Collections.synchronizedMap(...), который
#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥4❤2🥰1