Начиная с Java 11 можно легко повторить строку нужное количество раз.
Для этого у класса String есть метод repeat который принимает число повторений.
Пример
"Hi ".repeat(3)
Вернет строку Hi Hi Hi Хороший способ сделать код короче и понятнее
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤8🔥3
Forwarded from Amplicode
О программировании с помощью 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😁2❤1🔥1
Forwarded from Java Guru 🤓
Что будет результатом кода?
Anonymous Quiz
52%
Hello, world! Hello, world!
32%
Hello, world! Hello, world! *Сотступом слева
13%
Ошибка компиляции
3%
RuntimeException
Media is too big
VIEW IN TELEGRAM
Тестовое собеседование Java разработчика #33 - Максим Солодков
Кандидат - опытный Java Tech Lead - Максим Солодков.
🌐 🗣 СМОТРЕТЬ VKVIDEO
🎞 🗣 СМОТРЕТЬ YOUTUBE
Подписывайся на наш канал в Max🟪
Кандидат - опытный Java Tech Lead - Максим Солодков.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤4🔥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
📅 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
**@SpringBootApplication(exclude = …)**.
Это удобно, когда в проекте есть своя кастомная конфигурация, которая конфликтует с дефолтной, или когда вы хотите убрать лишние автоматические настройки и контролировать поведение вручную.
Так вы оставляете только нужные части автоконфигурации и избегаете скрытых конфликтов.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤4🔥2
Т-Банк ищет стажеров
Хотите начать карьеру в бигтехе без опыта? В 2024 году это сделали больше тысячи студентов. 75% из них остались в команде и сегодня работают над продуктами, которыми пользуются миллионы.
Стажеры здесь не остаются один на один с трудностями. С первого дня рядом менторы и команда, которая помогает разобраться в новых задачах, поддерживает и делится опытом.
Вас ждет оплачиваемая стажировка с официальным оформлением и гибким графиком, чтобы совмещать работу с учебой.
Что ждет новых участников стажировки:
— восемь направлений на выбор: разработка, аналитика, QA, SRE и другие;
— погружение в бизнес-задачи с первого дня;
— работа над продуктами, которыми пользуются миллионы;
— возможность работать удаленно или в офисе;
— комьюнити, где вы быстро почувствуете себя своим.
Подайте заявку на оплачиваемую стажировку уже сейчас
Хотите начать карьеру в бигтехе без опыта? В 2024 году это сделали больше тысячи студентов. 75% из них остались в команде и сегодня работают над продуктами, которыми пользуются миллионы.
Стажеры здесь не остаются один на один с трудностями. С первого дня рядом менторы и команда, которая помогает разобраться в новых задачах, поддерживает и делится опытом.
Вас ждет оплачиваемая стажировка с официальным оформлением и гибким графиком, чтобы совмещать работу с учебой.
Что ждет новых участников стажировки:
— восемь направлений на выбор: разработка, аналитика, QA, SRE и другие;
— погружение в бизнес-задачи с первого дня;
— работа над продуктами, которыми пользуются миллионы;
— возможность работать удаленно или в офисе;
— комьюнити, где вы быстро почувствуете себя своим.
Подайте заявку на оплачиваемую стажировку уже сейчас
👍8❤3😁3🔥2
Ctrl + Shift + F7 → Подсветка всех использований в файле
— Рефакторите метод и хотите быстро увидеть все места вызова? Один клик — и все использования подсвечены жёлтым.
— Не нужно открывать Find Usages и искать глазами.
— Ставите курсор на переменную → хоткей → мгновенно видите весь её жизненный цикл в файле.
— F3 и Shift + F3 для быстрого прыжка между подсвеченными местами.
— Esc убирает подсветку.
— Не открывается отдельная панель.
— Работает молниеносно даже на огромных проектах.
— Идеально для локального анализа: видите использования только в текущем файле, без шума из других классов.
— Работает для переменных, методов, классов, полей.
— Комбинируйте с Ctrl + W (расширить выделение), чтобы быстро выделить нужный участок кода.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥8❤5🤩2
23 шаблона проектирования для 99% разработчиков на Java
В этом исчерпывающем руководстве мы изучим все важные шаблоны ООП для написания кода.
Шаблоны проектирования — это испытанный способ решения проблемы в заданном контексте. Они скорее открыты, нежели придуманы, что очевидно и из применения слова «шаблон». Используя шаблон проектирования, вы получаете знания всех сообществ для безопасного решения этой проблемы.
Читать статью
В этом исчерпывающем руководстве мы изучим все важные шаблоны ООП для написания кода.
Шаблоны проектирования — это испытанный способ решения проблемы в заданном контексте. Они скорее открыты, нежели придуманы, что очевидно и из применения слова «шаблон». Используя шаблон проектирования, вы получаете знания всех сообществ для безопасного решения этой проблемы.
Читать статью
VK
23 шаблона проектирования для 99% разработчиков на Java
В этом исчерпывающем руководстве мы изучим все важные шаблоны ООП для написания кода.
🔥6
Как работает ConcurrentSkipListMap под капотом?
ConcurrentSkipListMap — это потокобезопасная и отсортированная реализация интерфейса NavigableMap, которая работает на основе skip list (списка с пропусками). Skip list — это многослойная структура данных, состоящая из нескольких уровней связных списков: нижний уровень содержит все элементы в порядке сортировки, а верхние уровни — лишь часть элементов для ускорения поиска. При добавлении элемента случайно выбирается его "высота" (количество уровней, на которых он присутствует), что позволяет "перепрыгивать" через блоки данных на верхних уровнях и выполнять операции со сложностью O(log n).
Пример структуры:
💡 Основные механизмы:
🟡 Skip List: Многослойный список с пропусками, где верхние уровни помогают быстро достигать нужного диапазона элементов, снижая количество переходов по связям.
🟡 Потокобезопасность обеспечивается за счёт использования CAS (Compare-And-Swap) операций и минимального блокирования. Модификации происходят безопасно без полной блокировки структуры.
🟡 Элементы всегда хранятся в отсортированном порядке по их ключам, что позволяет выполнять операции вроде поиска диапазонов или итераций по упорядоченным ключам очень эффективно.
🟡 Высокая доступность: чтение не блокируется, даже если выполняются параллельные операции вставки или удаления.
⚠️ Особенности:
🔘 Операции чтения (например, get или containsKey) выполняются быстро и без блокировок благодаря структуре skip list.
🔘 Операции записи (например, put и remove) синхронизированы, но производительность сохраняется за счёт оптимизации с использованием CAS.
🔘 Поддерживает натуральный порядок ключей или порядок, определённый переданным компаратором.
🔘 Эффективен для сценариев, где важны отсортированные данные и параллельный доступ, но количество обновлений не слишком велико.
🚀 Когда использовать ConcurrentSkipListMap?
- Если нужен параллельный доступ к отсортированной мапе.
- Для обработки диапазонов данных или частых операций чтения в упорядоченном виде.
🔗 Документация
Подписывайся на наш канал в Max🟪
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
🚀 Когда использовать ConcurrentSkipListMap?
- Если нужен параллельный доступ к отсортированной мапе.
- Для обработки диапазонов данных или частых операций чтения в упорядоченном виде.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤🔥5❤3🔥3
🔥 Финал набора в группу курса «Архитектура и шаблоны проектирования» от OTUS — успейте пройти тест! 🚀
До закрытия регистрации остаются считаные дни.
Чтобы попасть в поток и зафиксировать спеццену, пройдите вступительное тестирование, которое подтвердит ваш уровень.
Что прокачаете на курсе:
- Паттерны в реальной разработке: Proxy, Factory, Adapter, Observer, Singleton, DDD, CQRS
- Проектирование устойчивых, масштабируемых систем и модульных компонентов
- Осознанный выбор архитектурных решений вместо «заплаток»
- Практику на кейсах с разбором ошибок и сильных решений
⏳ Мест немного, старт на подходе.
Пройдите тест — подтвердите готовность и получите спецусловия на обучение. Подробности уточняйте у менеджера
👉 Перейти к вступительному тестированию: https://vk.cc/cSqaZ7
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
До закрытия регистрации остаются считаные дни.
Чтобы попасть в поток и зафиксировать спеццену, пройдите вступительное тестирование, которое подтвердит ваш уровень.
Что прокачаете на курсе:
- Паттерны в реальной разработке: Proxy, Factory, Adapter, Observer, Singleton, DDD, CQRS
- Проектирование устойчивых, масштабируемых систем и модульных компонентов
- Осознанный выбор архитектурных решений вместо «заплаток»
- Практику на кейсах с разбором ошибок и сильных решений
⏳ Мест немного, старт на подходе.
Пройдите тест — подтвердите готовность и получите спецусловия на обучение. Подробности уточняйте у менеджера
👉 Перейти к вступительному тестированию: https://vk.cc/cSqaZ7
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
❤2👍2🔥2
Это удобный способ создавать "самоочищающийся" кеш: как только ключ становится недостижимым, GC выбрасывает его, и запись исчезает из карты.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤3❤🔥1👍1
17 декабря(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2🔥2
В Java 21 появились Virtual Threads — легковесные потоки, которые позволяют писать синхронный код с производительностью асинхронного.
По сути, это JVM-управляемые потоки (а не OS-потоки), которых можно создавать миллионы без значительных затрат памяти. Они решают главную проблему масштабирования традиционных потоков.
Классические Platform Threads имеют проблемы:
— дорогие в создании (~1MB стека на поток);
— ограничены числом (~тысячи потоков максимум);
— при блокировке (IO, sleep) поток простаивает, занимая ресурсы.
Virtual Threads весят ~1KB, создаются мгновенно, и при блокировке платформенного потока освобождается для других задач. Это позволяет обрабатывать миллионы конкурентных запросов.
Когда виртуальный поток блокируется (например, на 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
👍3🔥3