Java библиотека – Telegram
Java библиотека
31.5K subscribers
2.37K photos
91 videos
10 files
2.19K links
Книги, статьи, мемы и многое другое для Java программиста!

По сотрудничеству и рекламе: @NadikaKir

Канал в перечне РКН: https://vk.cc/cJrT4A

Мы на бирже: https://telega.in/c/javalib/

Сообщество VK https://vk.com/javatutorial
Download Telegram
Docker и docker-compose и их использование в автотестировании

Многие инженеры по автоматизации тестирования со временем задумываются о том, чтобы версионировать тесты и поставлять их как часть продукта. Так же сталкиваются с проблемой ручного определения контекста, необходимого для запуска автотестов, которые очень часто написаны на разных стеках. На занятии поговорим как можно решить данные проблемы при помощи Docker и docker-compose и почему Docker сегодня так востребован и популярен среди инженеров по автоматизации тестирования.

Что будет рассмотрено:
Рассмотрим Docker как инструмент для управления жизненным циклом контейнеров
поговорим о тонкостях его использования
немного затронем docker-compose для описания стека и управления им.

Какие результаты на выходе:
После занятия слушатели смогут:
- заворачивать автотесты в контейнеры
- управлять ими
- использовать docker-compose для разворачивания стека тестирования.

Регистрация и подробности о курсе: https://vk.cc/cSatOP

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
2👍2🔥2
🖥 Совет по Java

Начиная с Java 11 можно легко повторить строку нужное количество раз.

Для этого у класса String есть метод repeat который принимает число повторений.

Пример

"Hi ".repeat(3)
Вернет строку Hi Hi Hi


Хороший способ сделать код короче и понятнее

Подписывайся на наш канал в Max 🟪
Please open Telegram to view this post
VIEW IN TELEGRAM
👍118🔥3
Forwarded from Amplicode
🤖 Мечтают ли ИИ-агенты об удобных IDE?

О программировании с помощью AI-агентов трубят из-за каждого угла. Последнее время появилось достаточно много инструментов, которые буквально пишут код за разработчика.

Наша команда следит за индустрией ИИ в разработке достаточно давно. Помимо внедрения ИИ в сам процесс разработки наших продуктов, мы активно занимаемся интеграцией Amplicode с современными AI-агентами и не только.

И у нас есть свои мысли на этот счет)

Реклама. ООО "ХОУЛМОНТ". ИНН 6316134393. erid: 2W5zFJj4KpU

📚 Читать на Хабр: https://habr.com/ru/companies/haulmont/articles/925088/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3😁21🔥1
Forwarded from Java Guru 🤓
Что будет результатом кода?
Media is too big
VIEW IN TELEGRAM
Тестовое собеседование Java разработчика #33 - Максим Солодков

Кандидат - опытный Java Tech Lead - Максим Солодков.

🌐🗣СМОТРЕТЬ VKVIDEO

🎞🗣СМОТРЕТЬ YOUTUBE

Подписывайся на наш канал в Max 🟪
Please open Telegram to view this post
VIEW IN TELEGRAM
👍94🔥4
⚡️ Потоковые приложения с Apache Kafka: от событий к реальному времени

📅 16 декабря | 20:00 мск | бесплатно

🎓 На вебинаре разберём:
– Что такое потоковая обработка и чем она отличается от пакетной
– Как устроена Apache Kafka и почему она стала основой real-time архитектур
– Ключевые паттерны: Event Sourcing, Pub/Sub, CQRS
– Как проектировать и развернуть потоковый конвейер событий
– Как интегрировать Kafka с микросервисами и внешними системами

💡 Кому будет полезно:
Backend-разработчикам, работающим с событийными системами
DevOps-инженерам, отвечающим за масштабирование и мониторинг Kafka
Архитекторам ПО, проектирующим real-time решения
Системным аналитикам, изучающим потоки данных и событийные модели

После вебинара вы сможете:
– Проектировать потоковые приложения и пайплайны в Kafka
– Встраивать Kafka в микросервисную архитектуру
– Использовать проверенные паттерны для построения систем реального времени

💥 Регистрируйтесь и прокачайте навык проектирования real-time систем: https://vk.cc/cSfGmM

Занятие приурочено к старту курса «Архитектура и шаблоны проектирования», где вы освоите DDD, CQRS, Event Storming, Event Sourcing и научитесь создавать архитектуры, готовые к миллионам событий в секунду. 🚀

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
2👍2🔥2
👩‍💻 В Spring Boot можно точечно отключать ненужную автоконфигурацию через аннотацию
**
@SpringBootApplication(exclude = …)**.

Это удобно, когда в проекте есть своя кастомная конфигурация, которая конфликтует с дефолтной, или когда вы хотите убрать лишние автоматические настройки и контролировать поведение вручную.

Так вы оставляете только нужные части автоконфигурации и избегаете скрытых конфликтов.

Подписывайся на наш канал в Max 🟪
Please open Telegram to view this post
VIEW IN TELEGRAM
👍64🔥2
Т-Банк ищет стажеров

Хотите начать карьеру в бигтехе без опыта? В 2024 году это сделали больше тысячи студентов. 75% из них остались в команде и сегодня работают над продуктами, которыми пользуются миллионы.

Стажеры здесь не остаются один на один с трудностями. С первого дня рядом менторы и команда, которая помогает разобраться в новых задачах, поддерживает и делится опытом.

Вас ждет оплачиваемая стажировка с официальным оформлением и гибким графиком, чтобы совмещать работу с учебой.

Что ждет новых участников стажировки:
— восемь направлений на выбор: разработка, аналитика, QA, SRE и другие;
— погружение в бизнес-задачи с первого дня;
— работа над продуктами, которыми пользуются миллионы;
— возможность работать удаленно или в офисе;
— комьюнити, где вы быстро почувствуете себя своим.

Подайте заявку на оплачиваемую стажировку уже сейчас
👍83😁3🔥2
👩‍💻 Магия IntelliJ IDEA

Ctrl + Shift + F7 → Подсветка всех использований в файле

🟢Когда это спасает

— Рефакторите метод и хотите быстро увидеть все места вызова? Один клик — и все использования подсвечены жёлтым.
— Не нужно открывать Find Usages и искать глазами.
— Ставите курсор на переменную → хоткей → мгновенно видите весь её жизненный цикл в файле.
— F3 и Shift + F3 для быстрого прыжка между подсвеченными местами.
— Esc убирает подсветку.

🟢Почему это удобнее Alt + F7

— Не открывается отдельная панель.
— Работает молниеносно даже на огромных проектах.
— Идеально для локального анализа: видите использования только в текущем файле, без шума из других классов.

🟢Бонус

— Работает для переменных, методов, классов, полей.
— Комбинируйте с Ctrl + W (расширить выделение), чтобы быстро выделить нужный участок кода.

Подписывайся на наш канал в Max 🟪
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥85🤩2
23 шаблона проектирования для 99% разработчиков на Java

В этом исчерпывающем руководстве мы изучим все важные шаблоны ООП для написания кода.

Шаблоны проектирования  —  это испытанный способ решения проблемы в заданном контексте. Они скорее открыты, нежели придуманы, что очевидно и из применения слова «шаблон». Используя шаблон проектирования, вы получаете знания всех сообществ для безопасного решения этой проблемы.


Читать статью
🔥6
Как работает ConcurrentSkipListMap под капотом?

ConcurrentSkipListMap — это потокобезопасная и отсортированная реализация интерфейса NavigableMap, которая работает на основе skip list (списка с пропусками). Skip list — это многослойная структура данных, состоящая из нескольких уровней связных списков: нижний уровень содержит все элементы в порядке сортировки, а верхние уровни — лишь часть элементов для ускорения поиска. При добавлении элемента случайно выбирается его "высота" (количество уровней, на которых он присутствует), что позволяет "перепрыгивать" через блоки данных на верхних уровнях и выполнять операции со сложностью O(log n).

Пример структуры:
lvl 3: 1 ------ 8
lvl 2: 1 --- 7 -- 8
lvl 1: 1 - 3 - 7 - 8 - 10


💡 Основные механизмы:

🟡Skip List: Многослойный список с пропусками, где верхние уровни помогают быстро достигать нужного диапазона элементов, снижая количество переходов по связям.
🟡Потокобезопасность обеспечивается за счёт использования CAS (Compare-And-Swap) операций и минимального блокирования. Модификации происходят безопасно без полной блокировки структуры.
🟡Элементы всегда хранятся в отсортированном порядке по их ключам, что позволяет выполнять операции вроде поиска диапазонов или итераций по упорядоченным ключам очень эффективно.
🟡Высокая доступность: чтение не блокируется, даже если выполняются параллельные операции вставки или удаления.

⚠️ Особенности:

🔘Операции чтения (например, get или containsKey) выполняются быстро и без блокировок благодаря структуре skip list.
🔘Операции записи (например, put и remove) синхронизированы, но производительность сохраняется за счёт оптимизации с использованием CAS.
🔘Поддерживает натуральный порядок ключей или порядок, определённый переданным компаратором.
🔘Эффективен для сценариев, где важны отсортированные данные и параллельный доступ, но количество обновлений не слишком велико.

🚀 Когда использовать ConcurrentSkipListMap?

- Если нужен параллельный доступ к отсортированной мапе.
- Для обработки диапазонов данных или частых операций чтения в упорядоченном виде.

🔗 Документация

Подписывайся на наш канал в Max 🟪
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤‍🔥53🔥3
🔥 Финал набора в группу курса «Архитектура и шаблоны проектирования» от OTUS — успейте пройти тест! 🚀

До закрытия регистрации остаются считаные дни.
Чтобы попасть в поток и зафиксировать спеццену, пройдите вступительное тестирование, которое подтвердит ваш уровень.

Что прокачаете на курсе:
- Паттерны в реальной разработке: Proxy, Factory, Adapter, Observer, Singleton, DDD, CQRS
- Проектирование устойчивых, масштабируемых систем и модульных компонентов
- Осознанный выбор архитектурных решений вместо «заплаток»
- Практику на кейсах с разбором ошибок и сильных решений

Мест немного, старт на подходе.
Пройдите тест — подтвердите готовность и получите спецусловия на обучение. Подробности уточняйте у менеджера

👉 Перейти к вступительному тестированию: https://vk.cc/cSqaZ7

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
2👍2🔥2
👩‍💻 Java tip: если вы делаете кеш, где ключи должны автоматически удаляться, когда на них больше нет ссылок в программе, используйте WeakHashMap.

Это удобный способ создавать "самоочищающийся" кеш: как только ключ становится недостижимым, GC выбрасывает его, и запись исчезает из карты.

Подписывайся на наш канал в Max 🟪
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥53❤‍🔥1👍1
🔍 Завтра тестовое собеседование с Java-разработчиком

17 декабря(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.

Как это будет:
📂 Сергей Чамкин, старший разработчик из Uzum, ex-WildBerries, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Cергей будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Сергею

Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.

Переходи в нашего бота, чтобы получить ссылку на эфир →
@shortcut_sh_bot

Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍2🔥2
👩‍💻 Просто о сложном: Virtual Threads

В Java 21 появились Virtual Threads — легковесные потоки, которые позволяют писать синхронный код с производительностью асинхронного.

По сути, это JVM-управляемые потоки (а не OS-потоки), которых можно создавать миллионы без значительных затрат памяти. Они решают главную проблему масштабирования традиционных потоков.

🟢Зачем они нужны

Классические Platform Threads имеют проблемы:

— дорогие в создании (~1MB стека на поток);
— ограничены числом (~тысячи потоков максимум);
— при блокировке (IO, sleep) поток простаивает, занимая ресурсы.

Virtual Threads весят ~1KB, создаются мгновенно, и при блокировке платформенного потока освобождается для других задач. Это позволяет обрабатывать миллионы конкурентных запросов.

🟢Ключевые моменты

🔘Thread.ofVirtual() — создание билдера для virtual thread.
🔘Thread.startVirtualThread() — быстрый старт задачи.
🔘Executors.newVirtualThreadPerTaskExecutor() — пул для каждой задачи создаёт новый VT.
🔘Автоматическое отсоединение от платформенного потока при блокировке (IO, sleep, wait, park).
🔘Присоединение к платформенным потокам из ForkJoinPool.

🟢Под капотом

Когда виртуальный поток блокируется (например, на IO), он "отцепляется" от платформенного потока. Освободившийся платформенный поток берёт другой готовый виртуальный поток. Когда операция завершается, виртуальный поток "подцепляется" обратно к доступному платформенному потоку.

🟢Подводные камни

— Pinning (закрепление)

Virtual thread может "застрять" на платформенном потоке при:
• Synchronized блоках
• Нативных методах (JNI)

В таких случаях carrier thread блокируется вместе с virtual thread. Решение: использовать ReentrantLock вместо synchronized.

— ThreadLocal может быть опасен

Миллионы virtual threads с ThreadLocal приведут к огромному потреблению памяти. Используйте ScopedValue (preview feature в Java 21+).

— Не подходит для CPU-bound задач

Virtual threads оптимизированы для IO-bound операций. Для вычислений лучше параллельные стримы или ForkJoinPool.

— Мониторинг
Стандартные инструменты мониторинга потоков могут показывать некорректные данные — они заточены под platform threads.

✔️ Когда использовать

— Высоконагруженные web-серверы с множеством конкурентных запросов.
— Микросервисы с большим количеством внешних вызовов (HTTP, БД).
— Когда нужна простота синхронного кода без сложности реактивного.
— Замена больших thread pools для IO-операций.

Не подходит:

— CPU-intensive вычисления (сортировки, криптография).
— Код с большим количеством synchronized блоков (pinning).
— Легаси-код с активным использованием ThreadLocal.

Подписывайся на наш канал в Max 🟪
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥31
Please open Telegram to view this post
VIEW IN TELEGRAM