
Получите клиентов в любой нише!
Делегируйте запуск рекламы нам — бесплатно
Подробнее

РегистрацияВойтиВойти
Скидка 3,5% на первые три заказа
Получите скидку на первые три заказа!
Зарегистрируйтесь и получите скидку 3,5% на первые рекламные кампании — промокод активен 7 дней.
Купить рекламу в этом канале
Формат:
keyboard_arrow_down
- 1/24
- 2/48
- 3/72
- Нативный
- 7 дней
- Репост
1 час в топе / 24 часа в ленте
Количество:
keyboard_arrow_down
- 1
- 2
- 3
- 4
- 5
- 8
- 10
- 15
Стоимость публикации:
local_activity
9 650.34₽9 650.34₽local_mall
0.0%
Осталось по этой цене:0
Последние посты канала
imageИзображение не доступно для предпросмотра
💫 Geb — Groovy-фреймворк для автоматизации браузеров. Этот фреймворк сочетает мощь WebDriver с jQuery-подобным синтаксисом выборки элементов на Groovy, делая код для скрапинга или UI-тестов неожиданно лаконичным.
Особенность инструмента в встроенной поддержке асинхронных операций. Конструкции вроде
waitFor { $("p.status").text() == "Done" }
избавляют от ручного ожидания AJAX-запросов. А интеграция со Spock и JUnit позволяет использовать его как для адхок-скриптов, так и для полноценных acceptance-тестов.
🤖 GitHub
@javatg1046
14:00
13.06.2025
🔥 Успех в IT = скорость + знания + окружение
Здесь ты найдёшь всё это — коротко, по делу и без воды.
Пока другие ищут, где “подглядеть решение”, ты уже используешь самые свежие инструменты!
AI: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Собеседования DS: t.me/machinelearning_interview
C++ t.me/cpluspluc
Docker: t.me/DevopsDocker
Хакинг: t.me/linuxkalii
Devops: t.me/DevOPSitsec
Data Science: t.me/data_analysis_ml
Javascript: t.me/javascriptv
C#: t.me/csharp_ci
Java: t.me/java_library
Базы данных: t.me/sqlhub
Python собеседования: t.me/python_job_interview
Мобильная разработка: t.me/mobdevelop
Golang: t.me/Golang_google
React: t.me/react_tg
Rust: t.me/rust_code
ИИ: t.me/vistehno
PHP: t.me/phpshka
Android: t.me/android_its
Frontend: t.me/front
Big Data: t.me/bigdatai
МАТЕМАТИКА: t.me/data_math
Kubernets: t.me/kubernetc
Разработка игр: https://t.me/gamedev
Haskell: t.me/haskell_tg
Физика: t.me/fizmat
💼 Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.me/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://t.me/addlist/mzMMG3RPZhY2M2Iy
😆ИТ-Мемы: t.me/memes_prog
🇬🇧Английский: t.me/english_forprogrammers
🧠ИИ: t.me/vistehno
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
📕Ит-книги бесплатно: https://t.me/addlist/BkskQciUW_FhNjEy
Подпишись, если хочешь быть в числе тех, кого зовут в топовые проекты!
1349
08:30
13.06.2025
imageИзображение не доступно для предпросмотра
🌉 Apache Beam — единый мост между batch- и stream-обработкой данных. Этот проект позволяет описывать pipelines всего один раз, а запускать их где угодно: от локальной машины до кластеров Spark или Flink, не переписывая код.
Проект использует один API для всех сценариев — будь то анализ исторических данных или обработка бесконечных потоков событий в реальном времени. При этом инструмент не навязывает конкретную инфраструктуру, оставляя свободу выбора движка исполнения.
🤖 GitHub
@javatg
1751
11:01
12.06.2025
💥 Задача: Почему эта структура «ломается» в многопоточной среде?
import java.util.*;
public class BrokenImmutable {
private final Map<String, List<String>> data;
public BrokenImmutable(Map<String, List<String>> input) {
this.data = Collections.unmodifiableMap(input);
}
public Map<String, List<String>> getData() {
return data;
}
public static void main(String[] args) {
Map<String, List<String>> base = new HashMap<>();
base.put("key", new ArrayList<>(List.of("a")));
BrokenImmutable bi = new BrokenImmutable(base);
Map<String, List<String>> d = bi.getData();
d.get("key").add("🚨");
System.out.println(bi.getData());
}
}
{}
🔍 Разбор:
С первого взгляда кажется, что BrokenImmutable — иммутабельный класс. Мы оборачиваем Map через Collections.unmodifiableMap, и поле data — final.
Но проблема в глубине структуры.
unmodifiableMap запрещает перезапись ключей, но не делает элементы внутри truly immutable. В данном случае, значение по ключу "key" — это ArrayList, которую легко модифицировать.
💣 В main() мы получили доступ к внутреннему списку и… тихо сломали инвариант класса, добавив "🚨".
✅ Решение:
Чтобы сделать структуру действительно иммутабельной, нужно:
Копировать и оборачивать значения внутри Map.
Сделать глубокую защиту:
public BrokenImmutable(Map<String, List<String>> input) {
Map<String, List<String>> copy = new HashMap<>();
for (Map.Entry<String, List<String>> e : input.entrySet()) {
copy.put(e.getKey(), List.copyOf(e.getValue())); // immutable list
}
this.data = Map.copyOf(copy); // immutable map
}
Теперь никто не сможет мутировать data, даже если получит на него ссылку.
🧠 Вопрос на подумать:
А что если вместо ArrayList внутри Map был бы CopyOnWriteArrayList или ImmutableList от Guava? Почему CopyOnWriteArrayList — тоже плохой выбор для truly immutable структур?
@javatg2329
11:02
10.06.2025
imageИзображение не доступно для предпросмотра
Приглашаем Java-разработчиков на открытые занятия курса Java Микросервисы, Kafka, Docker, Spring Cloud, Spring WebFlux по всем основным темам микросервисной архитектуры.
🔥Курс фокусируется на применении всего технологического стека Spring Cloud (более 30-ти технологий) на реальном, "живом" проекте, с выполнением и разбором домашних заданий.
🔥Для участников есть персонализированная поддержка и живое общение в телеграм-группе с темами на каждое занятие. В том числе после завершения обучения.
ВЫ ПОЛУЧИТЕ:
⚡️ Полное понимание компонентов микросервисов и их взаимодействия
⚡️ Повышенная ценность, как Java-разработчика и новый уровень дохода
⚡️ Электронный сертификат об окончании курса
Ждем на нашем курсе!
https://t.me/JavaOPsBot?start=c-cloud=s-javatg
2239
09:00
10.06.2025
🚀 Java API Tip — Integer.valueOf() и кеширование 🚀
Знаешь ли ты, что
Integer.valueOf(int)
не всегда создаёт новый объект?
📦 Значения в диапазоне от -128 до 127 кэшируются!
Это значит, что:
Integer a = Integer.valueOf(100);
Integer b = Integer.valueOf(100);
System.out.println(a == b); // 👉 true (один и тот же объект)
{}
Но:
Integer x = Integer.valueOf(200);
Integer y = Integer.valueOf(200);
System.out.println(x == y); // 👉 false (два разных объекта)
{}
🔍 Почему так?
Чтобы повысить производительность и сэкономить память, Java автоматически кеширует часто используемые значения.
🛠 Кстати, ты можешь изменить границу кеша через JVM-опцию:
-XX:AutoBoxCacheMax=512
{}
📌 Полезно, если у тебя в системе часто используются числа вне стандартного диапазона.
#Java #Performance #JVM #DevTips
@javatg2344
09:01
09.06.2025
imageИзображение не доступно для предпросмотра
erid: 2W5zFH6MTbv
Канал про собеседования, алгоритмы, System Design, процессы, культуру и инженерию в FAANG/BigTech
Автор канала — разработчик с 18-летним опытом, из которых 8 лет он провёл в FAANG (3,5 года — в Amazon). Работал и жил в России, Германии, Люксембурге и Великобритании, провёл более 100 технических интервью в FAANG-компании.
На канале разбираю реальные задачи с собеседований в FAANG по алгоритмам и System Design. Рассматриваю задачи из не-FAANG компаний на Java, делая акцент на многопоточность. Делюсь опытом работы в FAANG, рассказываю о процессах, технологиях и инженерной культуре, обсуждаю особенности релокации и жизни разработчика в разных странах.
Если вам интересны эти темы, подписывайтесь: t.me/faangmaster
Канал про собеседования, алгоритмы, System Design, процессы, культуру и инженерию в FAANG/BigTech
Автор канала — разработчик с 18-летним опытом, из которых 8 лет он провёл в FAANG (3,5 года — в Amazon). Работал и жил в России, Германии, Люксембурге и Великобритании, провёл более 100 технических интервью в FAANG-компании.
На канале разбираю реальные задачи с собеседований в FAANG по алгоритмам и System Design. Рассматриваю задачи из не-FAANG компаний на Java, делая акцент на многопоточность. Делюсь опытом работы в FAANG, рассказываю о процессах, технологиях и инженерной культуре, обсуждаю особенности релокации и жизни разработчика в разных странах.
Если вам интересны эти темы, подписывайтесь: t.me/faangmaster
2100
07:59
09.06.2025
imageИзображение не доступно для предпросмотра
💡 Подключение к Minio из Java
Если вы ищете способ работать с объектным хранилищем Minio из Java, то эта статья от BlackSlate — именно то, что вам нужно! Рассмотрим ключевые моменты:
Что такое Minio?
Minio — это высокопроизводительный, S3-совместимый объектный сервер с открытым исходным кодом, который позволяет легко хранить, управлять и извлекать данные. Он отлично подходит для облачных и серверных приложений.
Основные темы статьи:
- Установка и настройка Minio:
Статья описывает, как запустить Minio сервер в локальной или облачной среде. Вы узнаете, как создать пользователя и настроить доступные ключи для подключения.
- Использование Minio Java SDK:
Для работы с Minio из Java необходимо добавить соответствующую зависимость в ваш проект. В статье приведены примеры настройки Maven/Gradle:
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.3</version>
</dependency>
{}
- Базовые операции с хранилищем:
Вы научитесь:
- Подключаться к Minio серверу с помощью MinioClient.
- Создавать бакеты.
- Загрузить и скачать объекты.
- Удалять объекты и бакеты.
- Пример кода:
Статья содержит подробный пример кода, демонстрирующий подключение и выполнение базовых операций:
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import io.minio.GetObjectArgs;
// Другие необходимые импорты
public class MinioExample {
public static void main(String[] args) throws Exception {
// Инициализируем клиента с URL, access key и secret key
MinioClient minioClient = MinioClient.builder()
.endpoint("http://127.0.0.1:9000")
.credentials("YOUR_ACCESS_KEY", "YOUR_SECRET_KEY")
.build();
// Создание бакета (если ещё не создан)
boolean bucketExists = minioClient.bucketExists("my-bucket");
if (!bucketExists) {
minioClient.makeBucket("my-bucket");
}
// Загрузка файла в бакет
minioClient.putObject(
PutObjectArgs.builder()
.bucket("my-bucket")
.object("example.txt")
.stream(new FileInputStream("example.txt"), -1, 10485760)
.build()
);
// Скачивание файла из бакета
InputStream stream = minioClient.getObject(
GetObjectArgs.builder()
.bucket("my-bucket")
.object("example.txt")
.build()
);
// Далее можно считать данные из stream...
stream.close();
}
}
{}
Почему это важно?
Подключение к Minio позволяет разработчикам создавать масштабируемые, гибкие и отказоустойчивые приложения с использованием объектного хранилища. Используя Java SDK, вы получаете простой и понятный API для интеграции с вашим сервисом.
Если вы работаете над проектом, где важны быстрые операции с данными и совместимость с AWS S3 API, то этот подход — отличное решение!
✍️ Читайте полную статью: https://https://www.blackslate.io/articles/connect-to-minio-from-java
@javatg2683
08:16
06.06.2025
☕ Задача для опытных Java-разработчиков: «Призрачная утечка памяти в продакшене»
🧠 Уровень: Senior Java / JVM Internals
🎯 Цель: Найти источник утечки памяти в долгоживущем Java-сервисе и объяснить поведение GC
📍 Ситуация:
У вас есть Java-сервис (Spring Boot), который стабильно работает 5–6 часов, а потом начинает резко тормозить.
Мониторинг показывает рост heap usage почти до лимита, несмотря на регулярные GC-сборки.
Интересные факты:
- GC срабатывает часто, но не очищает больше 20–30% хипа
- Не происходит
OutOfMemoryError
, но приложение начинает "фризить"
- Подозрения падают на кэш, но размер кэша — ограничен (Caffeine, maxSize=5000)
- Все коллекции под контролем, слабые ссылки используются
- Нет утечек в логах, нет Thread`-leak по `jstack
🧩 Задача:
1. Где искать утечку, если GC работает, но память не освобождается?
2. Почему слабые ссылки не помогают?
3. Как поведение ClassLoader
может влиять на утечку?
4. Какой инструмент использовать для анализа "живых" объектов в памяти?
5. Как бы вы реализовали периодический аудит памяти в проде без перезапуска?
6. Покажи, как сработает jmap
, jcmd
, MAT
или VisualVM
для выявления источника
💡 Подсказка:
Некоторые библиотеки (особенно с рефлексией, динамической загрузкой классов и кэшем) создают утечки через неудаляемые ссылки на ClassLoader, особенно в сочетании с ThreadLocal
, ScheduledExecutorService
, Class.forName
, URLClassLoader
.
🛠 Решение:
1. Снимаем дамп памяти:
jmap -dump:format=b,file=heap.bin <PID>
{}
или
jcmd <PID> GC.heap_dump heap.bin
{}
2. Анализируем в Eclipse MAT:
- Сортируем объекты по retained size
- Видим ThreadLocalMap
, ClassLoader
, Class
→ strong references остаются даже после GC
- Причина — статические поля/синглтоны держат ссылки на классы, которые не выгружаются
3. Проверяем код:
- Использовался Class.forName(...)
в плагин-системе
- Загруженные классы не выгружались, т.к. на них ссылается пул потоков
4. Решения:
- Использовать WeakReference
к загруженным классам
- Вызывать shutdownNow()
и вручную очищать ThreadLocal.remove()
- Избегать глобальных синглтонов со ссылками на классы, загружаемые динамически
5. Профилактика:
- Включить периодический jcmd GC.class_histogram
- Встроить /heapdump
endpoint для отладки в проде (под защищённым доступом)
📌 Вывод:
Даже при работающем GC утечка возможна, если в памяти удерживаются ссылки через ThreadLocal
, ClassLoader
, или пула потоков. Это не очевидно и не вызывает OOM, но "раздувает" хип и убивает производительность.
💬 Идеальный вопрос для собеседования на позицию Java-сеньора с уклоном в JVM-интерны.
@javatg2808
11:01
04.06.2025
imageИзображение не доступно для предпросмотра
🚀 Spring WebFlux with Server-Sent Events 🚀
Повышайте интерактивность своих приложений с помощью Spring WebFlux и Server-Sent Events (SSE)! 🔥
• Что такое Server-Sent Events?
SSE — механизм, позволяющий серверу «толкать» данные клиенту по одному направлению (сервер → браузер) через постоянное HTTP-соединение. Идеально подходит для оповещений, обновлений статуса, live-лент и любых реальных данных, где не требуется двунаправленный сокет.
• Почему WebFlux + SSE?
• 🌀 *Реактивная модель*
WebFlux построен на реактивных потоках (`Flux`/`Mono`), что позволяет обрабатывать тысячи параллельных соединений с минимальным использованием ресурсов.
• ⏱️ *Низкая задержка*
Вместо опроса (polling) клиент сразу получает новые события, как только сервер их публикует.
• ⚙️ *Простота интеграции*
Spring WebFlux предоставляет готовые абстракции для SSE, достаточно вернуть
Flux<ServerSentEvent<...>>
из контроллера.
• Пример простого контроллера SSE в Spring WebFlux
@RestController
public class SseController {
@GetMapping(value = "/sse-stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ServerSentEvent<String>> streamEvents() {
return Flux.interval(Duration.ofSeconds(1))
.map(seq -> ServerSentEvent.<String>builder()
.id(String.valueOf(seq))
.event("tick")
.data("Тик №" + seq)
.build()
);
}
}
{}
• Здесь Flux.interval() генерирует последовательность чисел каждую секунду.
• Мы формируем ServerSentEvent<String> с идентификатором id, именем события event и полезными данными data.
• Браузер или любой клиент, подписанный на /sse-stream, будет получать сообщение каждую секунду без повторного HTTP-запроса.
Как использовать на клиенте?
<script>
const evtSource = new EventSource("/sse-stream");
evtSource.addEventListener("tick", e => {
console.log("Новое событие:", e.data);
// Можно обновлять UI: например, timestamp или счётчик
});
evtSource.onerror = err => console.error("SSE ошибка:", err);
</script> {}
• EventSource автоматически подключается к указанному URL и слушает серверные события.
• Метод addEventListener("tick", ...) обрабатывает только события с именем tick.
• Советы и подводные камни
• ⚠️ Обработка отмены (cancel)
Когда клиент закрывает страницу или отключается, WebFlux автоматически отменит подписку на Flux. При необходимости можно добавить .doOnCancel(...) для логирования или очистки ресурсов.
• 🛠️ Ошибка и повторная попытка (retry)
При сетевых сбоях браузер сам попытается переподключиться к тому же URL. Если вы хотите контролировать логику на сервере, используйте .retry() или .onErrorResume() в потоке Flux.
• 🔒 Безопасность
При необходимости защищайте URL SSE с помощью авторизации (JWT, OAuth2) или rate-limit’а, чтобы злоумышленники не «залили» ресурс.
• 📈 Масштабирование
Благодаря реактивной модели WebFlux вы можете легко масштабировать приложение на Kubernetes, не опасаясь, что сотни SSE-потоков «съедят» память и потоки.
• Где применить?
• Живые обновления статуса задач и билдов (CI/CD, DevOps)
• Чат-сообщения или лента комментариев в режиме «реального времени»
• Мониторинг метрик и дашборды (оперативные алерты)
• Финансовые или спортивные котировки (ticker, live scores)
• Оповещения об изменениях в БД (CDC), когда нужен асинхронный пуш
@javatg2306
09:03
03.06.2025
close
С этим каналом часто покупают
Отзывы канала
keyboard_arrow_down
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
5.0
2 отзыва за 6 мес.
Превосходно (100%) За последние 6 мес
m
**xim98sorokin@*****.com
на сервисе с ноября 2024
18.02.202501:04
5
Оперативное размещение
Показать еще
Лучшие в тематике
Новинки в тематике
Статистика канала
Рейтинг
39.2
Оценка отзывов
5.0
Выполнено заявок
109
Подписчики:
17.4K
Просмотры на пост:
lock_outline
ER:
7.8%
Публикаций в день:
1.0
CPV
lock_outlineВыбрано
0
каналов на сумму:0.00₽
Подписчики:
0
Просмотры:
lock_outline
Перейти в корзинуКупить за:0.00₽
Комментарий