Latest posts

Java Guru
22 Sept, 17:34

Java Guru
22 Sept, 10:01
👩💻 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-разработчикам


Java Guru
22 Sept, 07:45

Java Guru
21 Sept, 09:14

Java Guru
21 Sept, 05:58
Чем анонимный внутренний класс отличается от лямбды?Лямбда-выражение имеет более легковесный синтаксис. Не нужно явно указывать тип функционального интерфейса, который лямбда реализует – он автоматически выведется из контекста. Лямбда-выражения добавлены в язык в первую очередь как синтаксический сахар.С другой стороны, у класса есть поля. Экземпляр анонимного класса сохраняет свое состояние между вызовами, и меняет его при необходимости. Для лямбды доступен лишь захват и effectively final использование внешних переменных.Лямбдой реализуется только функциональный интерфейс. Функциональный интерфейс – это тип с единственным абстрактным методом. Анонимным классом же можно расширить любой расширяемый класс или реализовать интерфейс с любым количеством абстрактных методов.Анонимный класс создает новый скоуп, лямбда работает в текущем. Это значит, что объявление переменной с именем,
Java Guru
19 Sept, 21:32
Как узнать, является ли A подтипом B?В Java доступны три способа проверки совместимости типов. Функционально они ничем не отличаются, применяются для разных наборов аргументов. В порядке убывания быстродействия:instanceof – бинарный оператор, самый быстрый и самый используемый. Если есть экземпляр A и можно указать B явно, выбирать надо его. Если A (точнее тип хранящей экземпляр A переменной) и B не из одной цепочки наследования – экземпляр точно не может быть подтипом B и компиляция упадет с ошибкой inconvertible types.Class::isInstance – метод принимает параметром объект типа A. Его стоит выбрать, когда экземпляр A в наличии, но B – неизвестный на этапе компиляции тип. То есть, для переменных A a и Class bClass, можем проверить bClass.isInstance(a).Class::isAssignableFrom – принимает Class<A>. Единственное, что остается, если экземпляра A нет. bClass.isAssignableFrom(aClass).


Java Guru
19 Sept, 20:16
forwarded from @java_newss
Нововведения Java 27Java 27 вышла в релиз. В него вошли четыре узконаправленные правки и пять превью/инкубаторов. Разбираем изменения в сборщике мусора, улучшения JFR, постквантовый TLS 1.3 и компактные заголовки объектов, экономящие треть памяти.Читать статьюПолезные ресурсы по Java 👩💻| Наш канал в MAX 🟪VKНововведения Java 27Java 27 вышла в релиз. В него вошли четыре узконаправленные правки и пять превью/инкубаторов. Разбираем изменения в сборщике мусора, улуч..
Java Guru
19 Sept, 15:26
Чем отличается interface от @interface?Среди интерфейсов выделяется особая группа, которая не объявляет никаких методов. Пример такого интерфейса – Serializable. Такие интерфейсы добавляют классу некую семантику, которая позже используется либо с помощью рефлексии (и instanceof), либо вообще не программно, а как информация для разработчиков и инструментов разработки. Это маркерные интерфейсы. Маркерный интерфейс представляет метаинформацию класса.Начиная с Java 1.5 в языке появился новый вид типов – аннотации. Они берут на себя и расширяют возможности маркерного интерфейса: 1. Можно применять аннотацию не только к классу или интерфейсу, но почти к чему угодно: к пакетам, к методам, их параметрам, переменным. Полный список представлен в перечислении ElementType; 2. Аннотация может нести данные в своих элементах 3. Аннотация может не присутствовать в рантайме, или даже остаться
Java Guru
18 Sept, 20:47
forwarded from @javalib
Знаете, что в Java можно безопасно создать файл и не перезаписать старый?Обычно при записи легко случайно затереть существующий файл: Files.writeString(path, json);Если файл уже есть, его содержимое будет заменено.Для логов, экспортов, отчётов, временных файлов и сохранения пользовательских данных это может быть опасно.В таких случаях можно использовать StandardOpenOption.CREATE_NEW:Files.writeString(path, json, StandardOpenOption.CREATE_NEW);Теперь Java создаст файл только если его ещё нет.Если файл уже существует, будет выброшено исключение: FileAlreadyExistsExceptionЭто удобно, когда нужно защититься от случайной перезаписи важных данных.


Java Guru
17 Sept, 20:06
В чём разница между интерпретатором, AOT и JIT-компилятором?Интерпретация – простое последовательное воспроизведение кода программы, команда за командой.AOT-компиляция (ahead-of-time, статическая) – процесс превращения текста на языке программирования в нативный код на машинном языке. Так работают языки вроде C++. В современных JDK можно получить настоящий ahead-of-time скомпилированный машинный код с помощью утилиты jaotc.JIT-компиляция (just-in-time, динамическая) – «умная» интерпретация. Среда выполнения анализирует исполняемый код, оптимизируя часто вызываемые участки. Таким способом программа работает значительно быстрее, и сохраняет при этом преимущества платформо-независимости оригинального кода. Именно с JIT-компиляцией связана необходимость «прогрева» программ перед тестированием производительности.Эти термины относятся не только к JVM, но и ко множеству других языков
Java Guru
17 Sept, 12:44
От чего может случиться NoSuchMethodError?Как очевидно из названия, программа пытается вызвать метод, которого не существует. В большинстве случаев это приводит к ошибке еще на этапе компиляции. Но в некоторых ситуациях о проблеме становится известно только во время выполнения, и тогда выбрасывается это исключение.Вариантов таких ситуаций два. Либо проект был изменен и частично перекомпилирован; либо программа несовместима с внешней зависимостью: например неправильная версия jar-библиотеки в classpath.Исключение NoSuchMethodError наследуется от LinkageError. Все такие ошибки – признаки несовместимых изменений после компиляции класса.Не следует путать эту ошибку с NoSuchMethodException – исключением, которое случается при попытке вызвать несуществующий метод с помощью Reflection API. Важное отличие в том, что это не Error, его можно ловить и обрабатывать.Полезные ресурсы по
Java Guru
17 Sept, 08:53
forwarded from @javalib
N+1 в Spring Boot выглядит безобидно, пока прод не начинает молиться на базу данных.Классический сценарий:Вы грузите список заказов:orderRepository.findAll()А потом в цикле обращаетесь к order.getItems().Hibernate сначала делает один запрос за заказами, а потом ещё по одному запросу на каждый заказ, чтобы достать items.100 заказов = 101 SQL-запрос.И вот здесь спасает @EntityGraph.Он позволяет явно сказать репозиторию, какие связи нужно подтянуть сразу:@EntityGraph(attributePaths = {"items"})


Java Guru
16 Sept, 05:38
forwarded from @javalib
Шпаргалка по аннотациям Spring Boot!Например, @RestController используется для создания REST API, @Autowired — для внедрения зависимостей, а @Transactional помогает управлять транзакциями.На картинке — основные аннотации Spring Boot, Spring MVC, JPA, Security, Validation и тестирования, которые чаще всего используются в реальных проектах.Сохрани, чтобы не потерять!Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪


Java Guru
15 Sept, 20:29
forwarded from @javalib
Микросервисы — плохой выбор по умолчанию для 94% команд.Зачем разбивать приложение на набор сервисов, которым нужно общаться через сеть.На бумаге это выглядит как «правильный» подход. Масштабирование звучит привлекательно.Но на практике я видел, как это ломается, шесть раз.Команды из 5 инженеров поднимали 11 сервисов с несколькими очередями сообщений. Всё становилось медленнее.Деплой, который занимал минуты, растягивался до 35 минут из-за зависимостей.Отладка превращалась в кошмар: один баг — и приходится трейсить запрос через несколько сервисов и кодовых баз.Сложность не уменьшилась. Она просто распределилась.Микросервисы — это решение под масштабирование, но большинство команд внедряют их слишком рано, когда проблемы масштаба ещё нет.Если ты всё ещё работаешь на localhost, основная проблема — не масштаб. Это стабильный релиз.


Java Guru
15 Sept, 15:05
🔴 Тестовый собес с Java-разработчиком уже завтра! [+ разбор 50 сложных вопросов в подарок ]16 сентября (уже завтра!) в 19:00 по мск приходи онлайн, чтобы посмотреть на настоящее интервью на Middle Java-разработчика!Собеседование проведёт Виктор Анохин — Senior из Wildberries, ех-БилайнКак это будет:📂 Виктор задаст разработчику вопросы и задачи, которые могут спросить на реальном собесе📂 После каждого ответа респондента ты услышишь подробный комментарий от ментора и поймёшь, чего на самом деле ожидает собеседующий на интервью📂 В конце сможешь задать любой вопрос Виктору и получить на него развёрнутый ответЭфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллыИ ты можешь посмотреть его бесплатно 🔥 Только завтра, в прямом эфире!


Java Guru
15 Sept, 13:15

Java Guru
15 Sept, 09:05
Создание кроссплатформенного приложения с GUI на Rust: От идеи до реальностиElectron-приложения тяжелые, потребляют много памяти, а на Rust можно собрать легкое, быстрое и безопасное десктоп-приложение, которое будет работать на Windows, macOS и Linux. Tauri — это фреймворк, который позволяет использовать веб-технологии (HTML/CSS/JS) для интерфейса и мощь Rust для бэкенда. Но чтобы собрать работающий продукт, а не просто «посмотреть пример», нужно понимать, как связать фронтенд с бэкендом, работать с файловой системой, делать асинхронные вызовы и правильно собирать билды.На открытом вебинаре 23 сентября в 20:00 разберём полный цикл создания кроссплатформенного GUI-приложения на Rust с использованием Tauri. Посмотрим, как организовать проект, как писать логику на Rust и подключать её к интерфейсу, как сохранять и загружать данные,безопасно работать с файловой системой и системными


Java Guru
15 Sept, 07:35

Java Guru
14 Sept, 21:35
Как прочитать байткод?Байткод – аналог машинного кода для JVM. Он получается в результате компиляции исходного .java файла и хранится в .class файле. Анализ байткода иногда может помочь в исследовании бага, или лучше настроить производительность. Он необходим для отладки с инструментами динамической манипуляции байткодом, вроде ASM или BCEL.Это бинарный код, и открыть его простым текстовым редактором не выйдет. В пакете утилит JDK доступен инструмент javap. Это утилита командной строки для чтения .class файлов.Аргументами передается полное имя класса, и classpath в котором этот класс искать. По умолчанию отображаются только объявления публичных членов. Ключ -p добавит приватные методы и поля; -v выведет дополнительные метаданные; -c отобразит сам байткод – скомпилированную реализацию методов.Java Guru🤓 #java
Java Guru
14 Sept, 16:05
Что такое classpath?Classpath – это параметр, который указывает приложениям где искать пользовательские классы. По этому адресу должны быть найдены все классы, для которых не применяются специальные загрузчики. На место поиска стандартных классов JRE этот параметр не влияет.Кроме непосредственно Java-приложений (команда java), этот параметр применим и для других утилит JDK, таких как javac, javadoc и другие.Есть два основных способа установки classpath: в переменной окружения ОС CLASSPATH, и в аргументе командной строки -cp (синоним -classpath). Второй способ предпочтительнее, потому что позволяет устанавливать разные значения для разных приложений. Значение по умолчанию – текущая директория.В параметре передаются пути к jar-файлам и корневым директориям с пакетами. Пути разделяют символом : в параметре командной строки, или же ; в переменной окружения. Чтобы включить все файлы
Related Channels
Other channels in the same section of the catalogue.
