Java
17.7K subscribers
991 photos
64 videos
2 files
1.03K links
Самая актуальная информация из мира Java

По всем вопросам- @haarrp

@itchannels_telegram - 🔥лучшие ит-каналы

@pythonl - 🐍

@ai_machinelearning_big_data- ml

@ArtificialIntelligencedl - AI

@datascienceiot - ds

@pythonlbooks 📚

РКН: clck.ru/3FmwKr
Download Telegram
🧱 Maven vs. ⚡️Gradle — что выбрать разработчику?

Когда речь заходит о сборке Java-проектов, чаще всего выбор стоит между двумя фреймворками: Maven и Gradle. Оба стали стандартом в индустрии, но у каждого — свои сильные и слабые стороны. Разбираем, кому что подойдёт 👇

🔹 Maven — стабильная классика:

Строгая структура: легко читать и сопровождать
Надёжность и предсказуемость сборки
Много плагинов и готовых решений
⚠️ XML-конфигурация громоздкая
⚠️ Медленнее по сравнению с Gradle

🔸 Gradle — гибкость и скорость:

Поддержка Kotlin и Groovy DSL
Инкрементальные сборки и кэширование
Гибкий подход к конфигурации
⚠️ Порог входа выше
⚠️ Сложности с отладкой настроек

📌 Вывод:

🔷 Выбирай Maven, если важны стабильность, читаемость и простота
🔶 Выбирай Gradle, если хочешь максимум производительности и гибкости

💬 В крупных проектах Gradle становится всё популярнее, особенно с Kotlin.
Но в enterprise-среде Maven по-прежнему остаётся стандартом.

А ты чем пользуешься? Делись в комментариях ⬇️

@javatg
👍83🥰1
🧩 Java‑задача для тех, кто не боится `Concurrency` и `Immutable`

Представьте, что вы пишете in-memory кеш конфигураций. У вас есть ConfigService, который должен:

🔹 Загружать конфигурации из базы (эмулируется `loadConfigFromDB()`)
🔹 Раздавать *текущую* версию конфигурации многопоточным клиентам
🔹 Давать 100% thread‑safety и 0 блокировок
🔹 Позволять hot‑reload без блокировки клиентов
🔹 Гарантировать, что ни один поток никогда не увидит "смешанную" конфигурацию

🔧 Что нужно сделать:
Реализуйте ConfigService, который использует AtomicReference<Config> и `Immutable`-объекты, чтобы:

1. Конфигурация всегда была консистентной
2. Потоки не блокировали друг друга
3. Обновления конфигурации были моментальными и безопасными

📦 Пример API:

class ConfigService {
public Config getCurrentConfig(); // read-only, вызывается часто
public void reload(); // обновить конфиг, редко
}


🧠 Хитрость: нельзя использовать synchronized, volatile массивы, CopyOnWrite, ReentrantLock, и т.п. — только атомарность и неизменяемость.

🚀 Challenge accepted?

@javatg
7👍4🤔2🎉1
🔥19😁75👍4🤔1
Java Совет 💡
Как понять, что Java‑код мог быть сгенерирован ИИ?

Если вы видите в коде Collectors.toList(), а не Stream.toList() — это явный намёк 😉

Stream.toList() появился только в Java 16.
А Collectors.toList() — с нами ещё с Java 8, поэтому его до сих пор полно в туториалах, на Stack Overflow и во всех датасетах, на которых обучают ИИ.

📌 Документация:
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/stream/Stream.html#toList()

@javatg

#java #tip
👍14🤯63🔥2😁2🤔1
🔥 БЕСПЛАТНЫЙ КУРС ПО СОЗДАНИЮ НЕЙРО-СОТРУДНИКОВ НА GPT И ДРУГИХ LLM 🔥

Ищете практический и углубленный курс, чтобы освоить создание нейро-сотрудников? Мы создали курс из 5 объемных занятий. Это именно то, что нужно, чтобы прокачать свои навыки абсолютно бесплатно!

📌 Темы занятий:
1. Введение в мир нейро-сотрудников
2. Как работают LLM и их аналоги
3. Создание базы знаний для нейро-сотрудника (RAG)
4. Тестирование и отладка нейро-сотрудников
5. Интеграция нейро-сотрудников в Production

Вот 5 тем курса - он максимально простой и доступный, общеобразовательный, без какого-либо сложного программирования 📚Прохождение этого курса, скорее всего, займет у вас от 1 до 3 часов

🤖 Присоединяйтесь к нашему бесплатному курсу и разберитесь в этой увлекательной теме с нами!
😁3
Сроки разработки — это социальная конструкция 


@javatg
😁30🥰1
🧠 Продвинутая задача Java — Невидимая утечка памяти в лямбдах

Задача:

Предположим, вы пишете сервис, в котором создаются задачи (например, отложенные действия):


public class TaskScheduler {
private final List<Runnable> tasks = new ArrayList<>();

public void scheduleTask(String name) {
String largeData = name.repeat(10_000); // имитируем большой объект

tasks.add(() -> {
System.out.println("Running task: " + name);
});
}

public void runAll() {
tasks.forEach(Runnable::run);
}
}


Теперь создайте 1_000_000 таких задач:


TaskScheduler scheduler = new TaskScheduler();
for (int i = 0; i < 1_000_000; i++) {
scheduler.scheduleTask("Task" + i);
}


Вопрос:
Почему String largeData не освобождается сборщиком мусора, хотя он нигде явно не используется?

Разбор:

На первый взгляд, largeData нигде не используется — его можно было бы освободить.
Но на самом деле лямбда-захват переменной name удерживает весь стек метода scheduleTask, включая largeData.

Это называется неявная утечка памяти через замыкания.

---

Как исправить?

Чтобы избежать утечки, выносите только нужные значения в лямбду:


public void scheduleTask(String name) {
String taskName = name; // только то, что действительно нужно
tasks.add(() -> {
System.out.println("Running task: " + taskName);
});
}


Или даже:


tasks.add(() -> System.out.println("Running task: " + name));


НО! Убедитесь, что переменные вне лямбды не держат в памяти тяжёлые объекты, которые не нужны после исполнения.

💡 Вывод:
- Java лямбды могут неявно захватывать контекст, включая большие объекты
- Это может привести к утечкам памяти, особенно в long-lived объектах (пулы задач, слушатели и т.п.)
- Профилируйте и проверяйте, что захватывает ваша лямбда

#java #memoryleak #lambda #gc #profiling


@javatg
👍15🤔54🔥2
🧩 Java‑задача для тех, кто не боится `Concurrency` и `Immutable`

Представьте, что вы пишете in-memory кеш конфигураций. У вас есть ConfigService, который должен:

🔹 Загружать конфигурации из базы (эмулируется `loadConfigFromDB()`)
🔹 Раздавать *текущую* версию конфигурации многопоточным клиентам
🔹 Давать 100% thread‑safety и 0 блокировок
🔹 Позволять hot‑reload без блокировки клиентов
🔹 Гарантировать, что ни один поток никогда не увидит "смешанную" конфигурацию

🔧 Что нужно сделать:
Реализуйте ConfigService, который использует AtomicReference<Config> и `Immutable`-объекты, чтобы:

1. Конфигурация всегда была консистентной
2. Потоки не блокировали друг друга
3. Обновления конфигурации были моментальными и безопасными

📦 Пример API:

class ConfigService {
public Config getCurrentConfig(); // read-only, вызывается часто
public void reload(); // обновить конфиг, редко
}


🧠 Хитрость: нельзя использовать synchronized, volatile массивы, CopyOnWrite, ReentrantLock, и т.п. — только атомарность и неизменяемость.

@javatg
👍4🔥21
📱 Inure — необычный файловый менеджер для Android с открытым исходным кодом. Этот проект выделяется полностью кастомным интерфейсом, поддержкой Material You и встроенным терминалом.

Приложение разрабатывается одним человеком, но уже попало в подборки лучших open-source решений для Android. Оно работает как на рутированных устройствах, так и через Shizuku, предлагая продвинутый анализ установленных приложений.

🤖 GitHub

@javatg
👍5🔥2🥰21🤔1
📢 Выходцы из Jetbrains запилили годноту для Java/Kotlin-разработчиков.
 
Стартап называется ❇️ Explyt.
Они только что выкатили мощный релиз. 
Вкратце: это плагин в IDE, который сам генерирует тесты с интересными возможностями
✔️ Vibe debugging. За счет интеграции с IDE, плагин собирает данные по исполнению программы и генерирует тест по этим данным, что экономит время на тестировании и отлавливает ошибки на 80-90% (!) 
✔️ Агентский режим. Ассистент, который живёт в проекте и следит за покрытием, сам находит незакрытые места и предлагает тесты. Работает в фоне, как часть команды. 

👉 Кому интересно - вот ссылка на релиз и установку плагина
👍5
This media is not supported in your browser
VIEW IN TELEGRAM
💡 Хардкорный совет для Linux-админов:

Найди процессы, которые держат удалённые бинарники — те, что были уже удалены с диска, но всё ещё выполняются.

Это частая причина "почему не очищается диск", даже после rm — потому что процесс использует файл, которого уже "нет".
sudo lsof +L1 | grep -E 'DEL|deleted'
!!!🧟‍♂️ Процессы с удалёнными файлами (Zombie binaries detector)

Иногда вы обновили бинарник, перезапустили systemd-сервис — а старый процесс всё ещё в фоне и держит старую версию (в том числе уязвимую).

Чтобы освободить место и память: завершите процесс вручную.

#linux #debug #sysadmin #filesystem #devops

@javatg
👍63🔥2
🌐 dnsjava — DNS-клиент и сервер на Java. Эта библиотека предлагает полную реализацию DNS-протокола с поддержкой современных стандартов — от DNSSEC и EDNS0 до TSIG-аутентификации. Проект позволяет не только выполнять запросы, но и организовывать трансфер зон, динамические обновления и даже разворачивать авторитативный сервер.

Инструмент имеет встроенный механизм валидации DNSSEC через ValidatingResolver и гибкая система конфигурации через системные свойства. Поддерживает Java 8+ и может заменять стандартный DNS-резолвер JVM.

🤖 GitHub

@javatg
10👍4🔥4
Какие планы на 30 августа? Есть возможность попасть на JVM Day — профильную конференцию для разработчиков.

В планах:
— обсудить кейсы, нестандартные решения и инженерные практики;
— послушать доклады специалистов из Сбера, Т-Банка, Яндекса, 2ГИС, Squad, 01.⁢ tech;
— проводить сезон на афтепати в компании единомышленников.

Часть вырученных на мероприятии средств пойдет на поддержку региональных вузов.
Встреча пройдет в штаб-квартире Т-Банка, а узнать подробности и купить билеты можно тут.
2🔥1🤬1
🚀 Хочешь быстро разобраться, как использовать GraphQL с Spring Boot?

📦 Репозиторий содержит набор готовых микросервисов на Spring Boot, каждый из которых показывает разные аспекты интеграции с GraphQL: от простых запросов до работы с subscriptions и federated схемами.

Что внутри:
- 📌 Примеры с использованием Spring Boot 3 и GraphQL Java
- 🔗 Демонстрация схемы Federation с Apollo Gateway
- ☁️ Микросервисная архитектура + Docker Compose
- ⚙️ Использование Spring Data и JPA с GraphQL
- 🔄 Примеры запросов и мутаций через GraphiQL

Полезно как для новичков в GraphQL, так и для разработчиков, строящих продвинутые API на Spring Boot. Всё собрано и работает из коробки.

👉 Репозиторий: https://github.com/piomin/sample-spring-boot-graphql

@javatg
👍73🥰2
🚀 Kotlin-Result — функциональный подход к обработке ошибок. Библиотека предлагает монаду Result для Kotlin, вдохновлённую решениями из Rust и Haskell. Позволяет явно разделять успешный результат (Ok) и ошибку (Err), избегая исключений и null-значений.

Проект имеет zero-overhead реализацию через inline-классы и поддержку корутин. Подходит для проектов, где важна предсказуемость и читаемость кода обработки ошибок.

🤖 GitHub

@javatg
🔥62👍2
🔍 jclasslib — мощный инструмент для глубокого анализа и модификации Java-байткода. Это полноценный редактор, позволяющий напрямую изменять констант-пул и инструкции байткода через удобный графический интерфейс.

Проект сочетает desktop-приложение для визуальной работы и Kotlin Multiplatform библиотеку для программного взаимодействия с class-файлами. Поддерживает работу с JAR-архивами, предлагает темную тему и локализации на несколько языков.

🤖 GitHub

@javatg
👍32🔥1
⚡️ Почему лучшие разработчики всегда на шаг впереди?

Потому что они знают, где брать настоящие инсайд!
Оставь “программирование в вакууме” в прошлом, выбирай свой стек — подпишись и погружайся в поток идей, лайфхаков и знаний, которые не найдёшь в открытом доступе.

ИИ: t.iss.one/ai_machinelearning_big_data
Python: t.iss.one/pythonl
Linux: t.iss.one/linuxacademiya
Devops: t.iss.one/DevOPSitsec
Базы данных: t.iss.one/sqlhub
Мл собес t.iss.one/machinelearning_interview
C++ t.iss.one/cpluspluc
Docker: t.iss.one/DevopsDocker
Хакинг: t.iss.one/linuxkalii
МЛ: t.iss.one/machinelearning_ru
Data Science: t.iss.one/data_analysis_ml
Javascript: t.iss.one/javascriptv
C#: t.iss.one/csharp_ci
Java: t.iss.one/java_library
Python собеседования: t.iss.one/python_job_interview
Мобильная разработка: t.iss.one/mobdevelop
Golang: t.iss.one/Golang_google
React: t.iss.one/react_tg
Rust: t.iss.one/rust_code
ИИ: t.iss.one/vistehno
PHP: t.iss.one/phpshka
Android: t.iss.one/android_its
Frontend: t.iss.one/front
Big Data: t.iss.one/bigdatai
МАТЕМАТИКА: t.iss.one/data_math
Kubernets: t.iss.one/kubernetc
Разработка игр: https://t.iss.one/gamedev
Физика: t.iss.one/fizmat
SQL: t.iss.one/databases_tg

Папка Go разработчика: t.iss.one/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.iss.one/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.iss.one/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://t.iss.one/addlist/mzMMG3RPZhY2M2Iy

🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
😆ИТ-Мемы: t.iss.one/memes_prog
🇬🇧Английский: t.iss.one/english_forprogrammers
🧠ИИ: t.iss.one/vistehno

🖥 Chatgpt для кода в тг: @Chatgpturbobot -

📕Ит-книги: https://t.iss.one/addlist/BkskQciUW_FhNjEy
💼ИТ-вакансии t.iss.one/addlist/_zyy_jQ_QUsyM2Vi

Подпишись, чтобы всегда знать, куда двигаться дальше!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2
📖 Bootique — легковесный фреймворк для Java-приложений. Этот проект предлагает альтернативу традиционным JavaEE-контейнерам, позволяя создавать автономные приложения с минимальной конфигурацией. С Bootique можно разрабатывать REST-сервисы, веб-приложения и фоновые задачи, которые запускаются как обычные команды.

Основанный на принципе dependency injection, фреймворк особенно удобен для микросервисов. Достаточно добавить нужные модули через Maven и написать класс с main()-методом — приложение готово к работе без сложных настроек.

🤖 GitHub

@javatg
🔥63👍2
🖥 ОГРОМНАЯ обучающая база по Java на русском языке — настоящая золотая жила для тех, кто хочет освоить один из самых востребованных языков в IT.

Это не просто курс — это полноценный путь от абсолютного нуля до уровня, пригодного для поиска работы.

Вы пройдёте всё: от основ языка и ООП до современных фреймворков, паттернов проектирования и реальных практик разработки.

🔹 Что внутри:

🟡 Полный путь обучения языку: синтаксис, концепции, архитектура, best practices
🟡 Ключевые алгоритмы и паттерны решения задач — с примерами и объяснениями
🟡 Множество видеоразборов сложных тем и реальных кейсов
🟡 Практика на каждом шагу: упражнения разного уровня сложности после каждой лекции
🟡 Проект живёт с 2018 года и постоянно обновляется — вместе с новыми версиями Java, Spring, инструментами и подходами

Здесь вы не просто выучите Java — вы станете настоящим базированным разработчиком.

🚀 Становимся гуру Java здесь

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍3🔥2
👨‍💻 Sentry для Java/Android — мониторинг ошибок в реальном времени. Этот инструмент помогает разработчикам быстро находить и исправлять ошибки в Java и Android-приложениях.

Инструмент отслеживает не только краши, но и проблемы производительности, интегрируясь с популярными библиотеками вроде Spring Boot и OkHttp. Он будет особенно полезен для команд, которые хотят улучшить стабильность мобильных и серверных приложений без лишнего ручного тестирования. Поддерживает нативный код через NDK.

🤖 GitHub

@javatg
3👍2🔥2