Java Guru


Гео и язык канала: Россия, Русский
Категория: Технологии


Канал с вопросами и задачами с собеседований!
По сотрудничеству и рекламе: https://t.me/NadikaKir или в ЛС сообщества ВК https://vk.com/javatutorial
Канал в перечне РКН: https://vk.cc/cJrSQZ
Мы на бирже: telega.in/channels/javatasks/card?r=lcDuijdm

Связанные каналы

Гео и язык канала
Россия, Русский
Категория
Технологии
Статистика















Репост из: Java библиотека
Java: используйте Deque вместо Stack для работы по принципу LIFO («последним пришёл — первым вышел»).

Stack — устаревший класс, который наследуется от Vector и синхронизирует каждый вызов.

Deque предоставляет те же методы push, pop и peek.
Используйте ArrayDeque: он быстрее и рекомендуется начиная с Java 6.

Java Библиотека | Мы в Телеграм


Репост из: Java библиотека
⌨️ void и Void

В языке программирования Java ключевое слово void используется для указания, что метод не возвращает никакого значения. Метод с возвращаемым типом void выполняет определенные действия, но не производит результат, который можно было бы использовать в вызывающей части программы.

Для void еще есть класс обёртка Void. Класс Void — это класс-заполнитель который нельзя создать и который хранит ссылку на объект Class, представляющий ключевое слово Java void.

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

interface I<T> {
T doStuff();
}

class A implements I<Void> {
@Override
public Void doStuff() {
// ничего другого вернуть нельзя
return null;
}
}

Или если в проекте регулярно используется Callable<T> для выполнения каких-то асинхронных задач и в тех ситуациях, когда результат работы задачи ничего не должен возвращать, можно реализовать Callable<Void>.

Java Библиотека | Мы в Телеграм


👩‍💻 Spring AI 2.0 на практике: добавляем AI в Spring Boot и доводим до production

Приглашаем на открытый урок.

🗓 30 сентября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Разработчик на Spring Framework».

На занятии мы разберем:
✔️От обычного Spring Boot-сервиса к AI-функции. Подключим Spring AI 2.0 и разберём основные компоненты без долгой теории.
✔️Соберём рабочий кейс с live coding. Используем ChatClient, structured output и @Tool, чтобы модель могла обращаться к Java-сервисам и использовать реальные данные приложения.
✔️Попробуем сломать наше приложение. Посмотрим, что произойдёт при долгом ответе модели, ошибке провайдера, некорректном tool call или утечке чувствительных данных.
✔️Доведём решение до production. Разберём таймауты, retries, контроль выполнения tools, observability и возможность смены LLM-провайдера.

Кому будет интересно:
Java backend-разработчикам уровня Junior+/Middle и выше, которые уже работают со Spring и хотят разобраться, как AI-функции встраиваются в Java-приложения без перехода в Python/ML-разработку.

🔗 Ссылка на регистрацию: https://vk.cc/d1YxD2

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576


Репост из: Java библиотека
Spring Boot магия, которая на самом деле просто проверка classpath.

@ConditionalOnClass - одна из тех аннотаций, из-за которых Spring Boot кажется умным.

Она говорит фреймворку:

«Включи этот bean или конфигурацию только если нужный класс реально есть в проекте».

Простой пример:


@Configuration
@ConditionalOnClass(DataSource.class)
public class DataSourceAutoConfiguration
{
// загружается только если доступен javax.sql.DataSource
}


То есть Spring Boot не пытается настраивать всё подряд.

Он смотрит:

• есть ли нужная библиотека в зависимостях
• доступен ли конкретный класс
• можно ли безопасно включить автоконфигурацию

Именно поэтому ты добавляешь starter - и внезапно появляется конфигурация для базы, Redis, Kafka, Web MVC или Security.

Не потому что Spring «угадал».

А потому что нужные классы появились в classpath, и условия автоконфигурации стали true.

В этом и есть главный принцип Spring Boot:

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

Java Библиотека | Мы в Телеграм


👩‍💻 HTTP-сервер на чистой Java за 30 минут

Приглашаем на открытый урок.

🗓 21 сентября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Java разработчик. Продвинутый уровень».

Разберем, как браузер общается с сервером, и создадим работающий HTTP-сервис без Spring и сторонних библиотек.

О чем поговорим:
✔️ Как устроен HTTP-запрос
✔️ Создадим сервер на Java
✔️ Добавим несколько адресов
✔️ Откроем результат в браузере
✔️ Разберём, что скрывает Spring

🔗 Ссылка на регистрацию: https://vk.cc/d1N7Al

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576


Репост из: Java библиотека
Микросервисы — плохой выбор по умолчанию для 94% команд.

Зачем разбивать приложение на набор сервисов, которым нужно общаться через сеть.

На бумаге это выглядит как «правильный» подход. Масштабирование звучит привлекательно.

Но на практике я видел, как это ломается, шесть раз.

Команды из 5 инженеров поднимали 11 сервисов с несколькими очередями сообщений. Всё становилось медленнее.

Деплой, который занимал минуты, растягивался до 35 минут из-за зависимостей.

Отладка превращалась в кошмар: один баг — и приходится трейсить запрос через несколько сервисов и кодовых баз.

Сложность не уменьшилась. Она просто распределилась.

Микросервисы — это решение под масштабирование, но большинство команд внедряют их слишком рано, когда проблемы масштаба ещё нет.

Если ты всё ещё работаешь на localhost, основная проблема — не масштаб. Это стабильный релиз.

Когда микросервисы имеют смысл:

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

Если этого нет — платишь налог распределённых систем без реальной выгоды.

Начинай с монолита и держи модульность. Делить стоит только тогда, когда связность начинает тормозить разработку.

Большинство обсуждений «нам нужны микросервисы» на деле не про архитектуру.

Они про грязную кодовую базу или болезненные деплои.

Сначала решаются эти проблемы.

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

Java Библиотека | Мы в Телеграм



🎸 Приглашаем на Java Rock Star Meetup



Самая ламповая встреча Java-коммьюнити состоится уже в ближайшую пятницу. Вместе с крутыми спикерами будем копаться под капотом JVM, холиварить и общаться в неформальной атмосфере.

🗓 18 сентября, 18:00, Москва, Лофт Casa Picassa на Бауманской.

**Что в программе? **

⚙️ Иван Углянский, эксперт по JVM и компиляторам, расскажет о Project Valhalla: зачем нужны Java value-типы и почему новый подход наконец даёт надежду довести многострадальный проект до финиша.

🤖 Максим Козлов, сооснователь и CTO GitFlic, разберет, как в агентном SDLC сохранить связь между требованиями, кодом и реальным результатом.


Участие бесплатное, нужна только регистрация. Присоединяйся к рок-звёздам Java!

Реклама. АО "АКСИОМ". ИНН 7838124039.


Spring Boot может тормозить сам себя из-за одного неаккуратного @ComponentScan

В Spring Boot не стоит бездумно писать что-то вроде:

@ComponentScan("com.mycompany")

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

Это увеличивает время classpath scanning, замедляет старт приложения и иногда подтягивает классы, которые вообще не должны были становиться Spring-компонентами.

Лучший вариант - полагаться на дефолтное поведение:

@SpringBootApplication
public class MyApplication { }

По умолчанию Spring Boot сканирует только подпакеты того пакета, где лежит MyApplication.

Если нужно явно ограничить область сканирования, указывай конкретные подпакеты:

@ComponentScan({
"com.mycompany.myapp.product",
"com.mycompany.myapp.order"
})

Главная мысль простая: @ComponentScan должен быть точным. Чем шире границы сканирования, тем больше лишней работы делает приложение на старте.

Java Guru | Мы в Телеграм


ХОЧЕШЬ ПОВЫСИТЬ ГРЕЙД В 2026 ГОДУ? 🚀

Чтобы стать Senior Java разработчиком сегодня, нужно не только знать язык программирования и фреймворки. Нужно уметь строить гибкую архитектуру приложения, которую легко тестировать и менять под задачи бизнеса. Стань экспертом в построении гибкой архитектуры приложения!

👉 Стартуем 8 сентября.

Курс ведет действующий архитектор и Principal Engineer Кирилл Ветчинкин.

Ты научишься:
✅ Разбивать приложение на слои в соответствии с Clean Architecture
✅ Формировать Domain Model и применять тактические паттерны DDD
✅ Реализовывать Use Case как Command/Query
✅ Делать синхронные и асинхронные интеграции, не загрязняя ядро приложения
✅ Писать 3 вида тестов для разных слоев приложения

Полная программа ТУТ 👉 https://microarch.ru/courses/ddd/languages/java?utm_source=posev&utm_medium=erid:2Vtzqw26yVM&utm_campaign=7

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

А еще:
✅ Проверим все домашки
✅ Поддержим в чате
✅ Проведем живые разборы
✅ Ответим на все вопросы

📕 Сертификат об участии по итогам прохождения курса.

🔥 Не откладывай свой рост на потом: https://microarch.ru/courses/ddd/languages/java?utm_source=posev&utm_medium=erid:2Vtzqw26yVM&utm_campaign=7

Реклама. ИП Ветчинкин К.Е. ИНН: 773376451099 Erid: 2Vtzqw26yVM


Репост из: Java библиотека
Знаете, что в Java лучше проверять строки через isBlank(), а не только через isEmpty()?

isEmpty() проверяет только длину строки:
"".isEmpty()

Но строка из пробелов для него уже не пустая:
" ".isEmpty()

А вот isBlank() учитывает пробелы, табы и переносы строк:
" ".isBlank()

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

Так код становится надёжнее, потому что строка из пробелов больше не проходит как нормальное значение.

isBlank() это простой способ аккуратнее проверять текст в Java.

Java Библиотека | Мы в Телеграм

335 1 11

Java - regex без боли

Нашли интересную библиотеку - Sift. Она заменяет весь этот ад с регулярками на нормальный fluent API.

Теперь вместо нечитаемых строк вида:

^[0-9a-fA-F]{6}$

Пишешь код, который реально понимаешь:

.char('#')
.then()
.exactly(6)
.hexDigits()

📌 Что это дает:
- Читаемый и понятный код
- Меньше ошибок в regex
- Быстрее разработка и поддержка

По сути — это как “переводчик” с языка регулярных выражений на человеческий Java-код.

Если когда-нибудь ломал голову над regex -это прям must-have.

Java Guru | Мы в Телеграм


Работа с Kafka через библиотеку Kafka Clients

Приглашаем на открытый урок.

🗓 26 августа в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Java разработчик. Продвинутый уровень».

Kafka Clients это нижний уровень для работы с Kafka из Java. Все более высокоуровневые библиотеки основаны на нем.
Данный открытый урок проходит в рамках курса Java разработчик. Продвинутый уровень.


О чем поговорим:
✔️ Чтение и отправка сообщений в Kafka
✔️ Управление топиками
✔️ Разные форматы: текст, JSON, Avro
✔️ Использование транзакций

🔗 Ссылка на регистрацию: https://vk.cc/d0EqSq

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576


Вопрос с собеседования

Где хранятся объекты?

Ответ: Все объекты, создаваемые через new, размещаются в куче (heap) — области памяти, управляемой сборщиком мусора. Ссылки на эти объекты могут храниться в стеке, если они являются локальными переменными внутри метода. Таким образом, объект — в куче, ссылка на него — в стеке.

Java Guru | Мы в Телеграм

Показано 20 последних публикаций.