JOL — это инструмент от тех же разработчиков, что и JMH, и он помогает понять, как Java хранит объекты в памяти. Особенно полезен при оптимизации производительности и снижении потребления памяти.
📌 Что умеет JOL:
— Показывает внутреннюю структуру объектов Java (поля, пэддинг, смещения)
— Помогает исследовать выравнивание, заполнение и особенности layout'а объектов в разных JVM
— Учитывает влияние флагов типа -XX:ObjectAlignmentInBytes
— Есть аннотации и API для анализа объектов прямо из кода
— Поддерживает анализ "на месте" без запуска внешнего инструмента
🧠 Особенно актуально, если вы работаете с большим количеством данных, кастомными структурами или high-load системами. Понимание того, что реально занимает память, помогает сократить её расход без магии.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤3🔥3
Please open Telegram to view this post
VIEW IN TELEGRAM
😁17💯6❤1👍1
Наш подписчик спрашивает:
Я только начинаю работать с обработкой исключений. В учебниках часто приводят примеры с try-catch, но в реальных проектах я не встречал их так часто. Насколько часто в реальных проектах используется обработка исключений? И в каких случаях она действительно необходима?
🔹 Как вы используете обработку исключений в своих проектах?
— В каких ситуациях вы предпочитаете использовать try-catch?
— Какие ошибки чаще всего приходится обрабатывать?
— Какие подходы к обработке исключений сработали для вас лучше всего?
P.S. Если хотите задать вопрос, заполните нашу гугл-форму. Это займет 5 минут.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍2🔥1👾1
Когда проект обрастает модулями, библиотеками и зависимостями, легко потерять нить. Dependency Analyzer помогает навести порядок в зависимостях и избавить проект от хлама.
🔹 Что делает
— Показывает все зависимости (включая транзитивные) в виде дерева
— Помогает обнаружить дублирующиеся зависимости, неиспользуемые библиотеки и конфликты версий
— Даёт рекомендации по удалению или замене
🔹 Зачем это нужно
— Упрощает анализ pom.xml или build.gradle — не нужно гадать, откуда взялась та или иная версия
— Помогает оптимизировать сборку и ускорить CI
— Снижает риски уязвимостей за счёт удаления неиспользуемых библиотек
🔹 Как использовать
— Откройте окно Maven/Gradle
— Нажмите кнопку Analyze Dependencies.
— IDEA покажет дерево с путями, версиями и проблемами
— Можно быстро перейти к конфигурации и исправить
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍3🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁35💯5❤4🥱4🔥1
В каком году была выпущена первая версия языка Java?
Anonymous Quiz
27%
1990
69%
1995
3%
2000
1%
2005
👍9❤3🔥3
Forwarded from Библиотека задач по Java | тесты, код, задания
Как найти длину самой длинной строки в списке?
Anonymous Quiz
11%
list.stream().filter(s -> s.length() > max).count();
3%
list.stream().mapToInt(String::length).sum();
17%
list.stream().map(String::length).max((a, b) -> b - a).orElse(0);
61%
list.stream().mapToInt(String::length).max().orElse(0);
7%
Посмотреть ответ
🔥10👍3❤2👏2
Senior Java-разработчик (Трайб Digital) — 350 000 — 400 000 ₽ — удалёнка
Java Разработчик (Senior) — от 250 000 до 350 000 ₽ — удалёнка
Java разработчик — от 200 000 до 300 000 ₽ — удалёнка
Java разработчик (Senior) — от 450 000 ₽ — удалёнка
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1👏1
Если вы когда-либо писали плагины, делали автоконфигурацию или искали классы с аннотациями — вам пригодится ClassGraph. Это быстрый и гибкий инструмент для сканирования classpath'а, аналог Reflections, но с куда лучшей производительностью и расширенной функциональностью.
📌 Что умеет ClassGraph:
— Находит классы по аннотациям, интерфейсам, суперклассам
— Позволяет искать ресурсы, inner-классы, модули, методы и поля
— Работает с JAR-файлами, модулями JPMS, Android, OSGi и даже нестандартной загрузкой классов
— Позволяет делать глубокий анализ зависимостей и иерархий
— Поддерживает черный/белый список пакетов (include/exclude)
⚡️ Почему лучше, чем Reflections:
— Существенно быстрее при сканировании большого classpath
— Умнее — может обрабатывать class-loader’ы, не теряя контекста
— Поддерживает более новые фичи JVM, включая модули (Java 9+)
— Активно поддерживается и обновляется
🧠 Полезно для:
— Фреймворков с динамической загрузкой
— Плагинных систем
— Анализа и визуализации зависимостей
— Разработки DI-контейнеров, автосканеров и DSL'ов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3❤1
🤔 Зачем вообще понимать, как работает ML?
Сейчас многие просто запускают модельку в sklearn — и радуются точности 0.92.
Машинное обучение — это система, которую можно понять.
Если знаешь, что делает градиентный спуск, зачем нужен бустинг и как дерево принимает решения — ты не просто «запускаешь», ты управляешь моделью.
👉 Мы сделали курс, чтобы в это было реально въехать:
— без сложных формул;
— с интуитивными объяснениями;
— от простого к сложному.
Если хочешь перейти от «гуглю код» к «понимаю, как это работает» — ты по адресу!
❗Стартуем в сентябре — бронируй место на курсе уже сейчас
Сейчас многие просто запускают модельку в sklearn — и радуются точности 0.92.
Вроде всё работает… но почему?
А когда сломается — что делать?
Машинное обучение — это система, которую можно понять.
Если знаешь, что делает градиентный спуск, зачем нужен бустинг и как дерево принимает решения — ты не просто «запускаешь», ты управляешь моделью.
👉 Мы сделали курс, чтобы в это было реально въехать:
— без сложных формул;
— с интуитивными объяснениями;
— от простого к сложному.
Если хочешь перейти от «гуглю код» к «понимаю, как это работает» — ты по адресу!
❗Стартуем в сентябре — бронируй место на курсе уже сейчас
❤4
Please open Telegram to view this post
VIEW IN TELEGRAM
😁25👍5🔥3❤1
Нужна быстрая интеграция с платежной системой? Используйте AI, чтобы автоматизировать подключение Stripe для безопасной обработки транзакций.
📝 Промпт:
Generate a Stripe payment integration for a Spring Boot 3 application.
— Set up Stripe API keys and configure them in application.properties.
— Implement StripePaymentService to handle payment requests using Stripe.create() for charges.
— Set up webhook endpoints to listen for payment status updates (e.g., success, failure).
— Integrate secure tokenization of credit card data using Stripe’s Java SDK.
— Handle errors gracefully and provide transaction feedback to users.
— Implement recurring payments using Stripe Subscriptions API for subscription-based models.
— Добавьте
Set up customer data storage with Stripe’s Customer objects to manage users’ payment methods
для управления способами оплаты пользователей.— Добавьте
Enable refund processing via Stripe API for failed or canceled transactions
для неудачных или отменённых транзакций.Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2❤1
🧠 Интеграция платежных систем
Банковская инфраструктура всё чаще становится ядром инноваций: интеграция с национальными системами быстрых платежей (как SEPA Instant) уже не просто конкурентное преимущество — это жизненная необходимость.
🔍 Почему это важно?
— Техническая сложность
Нужна событийно-управляемая (event‑driven) архитектура, очередь сообщений, надёжный асинхронный обмен между микросервисами.
— Надёжность и безопасность
Минимизация простоев, обеспечение отказоустойчивости и защита от сбоев — требования жёсткие, особенно при обработке тысяч транзакций в секунду.
— Перспективы
Интеграция с SEPA Instant и другими инфраструктурными провайдами меняет требования к архитектуре backend-систем — это скилл будущего для Java-инженеров.
🎯 Что внутри:
— Как строится архитектура интеграции банковской платформы с системами мгновенных платежей
— Почему event‑driven подход критически важен
— Какие проблемы решаются: масштабирование, отказоустойчивость, скорость
— Реальный опыт backend-разработчика, работавшего с SEPA Instant и банковскими сервисами
🔗 Подробнее в статье
🐸 Библиотека джависта #буст
Банковская инфраструктура всё чаще становится ядром инноваций: интеграция с национальными системами быстрых платежей (как SEPA Instant) уже не просто конкурентное преимущество — это жизненная необходимость.
🔍 Почему это важно?
— Техническая сложность
Нужна событийно-управляемая (event‑driven) архитектура, очередь сообщений, надёжный асинхронный обмен между микросервисами.
— Надёжность и безопасность
Минимизация простоев, обеспечение отказоустойчивости и защита от сбоев — требования жёсткие, особенно при обработке тысяч транзакций в секунду.
— Перспективы
Интеграция с SEPA Instant и другими инфраструктурными провайдами меняет требования к архитектуре backend-систем — это скилл будущего для Java-инженеров.
🎯 Что внутри:
— Как строится архитектура интеграции банковской платформы с системами мгновенных платежей
— Почему event‑driven подход критически важен
— Какие проблемы решаются: масштабирование, отказоустойчивость, скорость
— Реальный опыт backend-разработчика, работавшего с SEPA Instant и банковскими сервисами
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3❤1👍1
Работаете с классом на 500 строк? Теряетесь в методах и полях? Structure Tool Window помогает быстро сориентироваться в любом файле.
🔹 Что делает
— Показывает структуру текущего файла: методы, поля, вложенные классы
— Подсвечивает override-методы, конструкторы, аннотации
— Поддерживает навигацию и поиск по элементам
— Работает для Java, Kotlin, XML, и даже .properties
🔹 Зачем это нужно
— Быстро находите нужный метод без скроллинга
— Помогает понять, как устроен чужой код
— Ускоряет навигацию по большим классам и конфигурациям
🔹 Как использовать
— Alt+7 (или Cmd+7 на macOS) — откроет Structure
— Можно настроить сортировку, группировку и фильтры
— Клик — и вы уже в нужном месте кода
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤3🔥2
Proglib Academy — это место, где вы превращаете теорию в практику. Здесь ваши знания становятся проектами для портфолио, а вы — более уверенным специалистом.
Выберите курс, который поможет сделать следующий шаг ⬇️
🚀 Для тех, кто начинает путь в IT:
— Основы IT для непрограммистов
— Программирование на Python (обновлённый)
— Frontend-разработчик с нуля: HTML, CSS, JavaScript
🧠 Для будущих и настоящих Data Scientist'ов:
— ML для старта в Data Science (начинается в сентябре)
— Базовые модели ML и приложения
— Математика для Data Science
— AI-агенты для DS-специалистов (скоро второй поток)
🛠️ Для опытных разработчиков, готовых к росту:
— Алгоритмы и структуры данных
— Архитектуры и шаблоны проектирования
Независимо от вашей цели, у нас есть курс, который поможет её достичь. Переходите в Proglib Academy, выбирайте свой путь и инвестируйте в навыки, которые всегда будут в цене!
Выберите курс, который поможет сделать следующий шаг ⬇️
🚀 Для тех, кто начинает путь в IT:
— Основы IT для непрограммистов
— Программирование на Python (обновлённый)
— Frontend-разработчик с нуля: HTML, CSS, JavaScript
🧠 Для будущих и настоящих Data Scientist'ов:
— ML для старта в Data Science (начинается в сентябре)
— Базовые модели ML и приложения
— Математика для Data Science
— AI-агенты для DS-специалистов (скоро второй поток)
🛠️ Для опытных разработчиков, готовых к росту:
— Алгоритмы и структуры данных
— Архитектуры и шаблоны проектирования
Независимо от вашей цели, у нас есть курс, который поможет её достичь. Переходите в Proglib Academy, выбирайте свой путь и инвестируйте в навыки, которые всегда будут в цене!
S3-совместимое хранилище (AWS S3, MinIO, Yandex Object Storage и т.п.) — удобный способ хранить файлы вне приложения. Подключим его к Spring Boot и реализуем минимальный upload/download.
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>2.25.60</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
ИЛИ
implementation 'software.amazon.awssdk:s3:2.25.60'
implementation 'org.springframework.boot:spring-boot-starter-web'
s3:
region: eu-central-1
accessKey: minioadmin
secretKey: minioadmin
bucket: demo-bucket
spring:
servlet:
multipart:
max-file-size: 20MB
max-request-size: 20MB
@Configuration
public class S3Config {
@Bean
public S3Client s3Client(S3Props props) {
var builder = S3Client.builder()
.credentialsProvider(StaticCredentialsProvider.create(
AwsBasicCredentials.create(props.accessKey(), props.secretKey())))
.region(Region.of(props.region()))
.httpClientBuilder(UrlConnectionHttpClient.builder());
if (props.endpoint() != null && !props.endpoint().isBlank()) {
builder = builder
.endpointOverride(java.net.URI.create(props.endpoint()))
.serviceConfiguration(S3Configuration.builder()
.pathStyleAccessEnabled(props.pathStyleAccess())
.build());
}
return builder.build();
}
@Bean
public S3Props s3Props(org.springframework.core.env.Environment env) {
return new S3Props(
env.getProperty("s3.endpoint"),
env.getProperty("s3.region", "eu-central-1"),
env.getProperty("s3.accessKey"),
env.getProperty("s3.secretKey"),
env.getProperty("s3.bucket", "demo-bucket"),
Boolean.parseBoolean(env.getProperty("s3.pathStyleAccess", "true"))
);
}
public record S3Props(String endpoint, String region, String accessKey,
String secretKey, String bucket, boolean pathStyleAccess) {}
}
@Service
@RequiredArgsConstructor
public class S3StorageService {
private final S3Client s3;
private final S3Config.S3Props props;
public String upload(String originalName, String contentType, byte[] bytes) {
String key = UUID.randomUUID() + "_" + originalName;
s3.putObject(PutObjectRequest.builder()
.bucket(props.bucket())
.key(key)
.contentType(contentType)
.build(),
RequestBody.fromBytes(bytes));
return key;
}
public byte[] download(String key) {
GetObjectResponse[] meta = new GetObjectResponse[1];
try (var resp = s3.getObject(GetObjectRequest.builder()
.bucket(props.bucket()).key(key).build())) {
meta[0] = resp.response();
return resp.readAllBytes();
} catch (Exception e) {
throw NoSuchKeyException.builder().message("Object not found: " + key).build();
}
}
public void createBucketIfMissing() {
var bucket = props.bucket();
var exists = s3.listBuckets().buckets().stream().anyMatch(b -> b.name().equals(bucket));
if (!exists) s3.createBucket(CreateBucketRequest.builder().bucket(bucket).build());
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍5🔥3
Please open Telegram to view this post
VIEW IN TELEGRAM
😁13👍4🔥3🌚1
❤5👍1🔥1
🧐 Зоопарк моделей в ML: с чего начать?
Открываешь статью по машинному обучению — и в тебя летят слова: трансформеры, бустинги, SVM, регрессии.
Кажется, придётся учить всё это, иначе в ML не пустят.
Хорошая новость: 90% задач можно закрыть 2–3 классическими методами. Разберёшь их — уже сможешь собирать работающие проекты. А хайповые названия подождут.
Важно: не распыляйся на всё подряд. Начни с базового — это фундамент, на котором держится остальное.
👉 Успей попасть на курс «ML для старта в Data Science»
Открываешь статью по машинному обучению — и в тебя летят слова: трансформеры, бустинги, SVM, регрессии.
Кажется, придётся учить всё это, иначе в ML не пустят.
Хорошая новость: 90% задач можно закрыть 2–3 классическими методами. Разберёшь их — уже сможешь собирать работающие проекты. А хайповые названия подождут.
Важно: не распыляйся на всё подряд. Начни с базового — это фундамент, на котором держится остальное.
👉 Успей попасть на курс «ML для старта в Data Science»