10986
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP
Аудит пользователей Spring Data JPA
Задача: в БД необходимо фиксировать кто создал сущность, кто её обновил, и кто её удалил.
Все знают, как взять пользователя из контекста и сунуть его в сущность. Допустим, на уровне сервиса в методе извлечь информацию о нём и «засетать» его в нужные поля (придётся везде таскать этот кусок кода по сервису), а с аспектами как‑то выглядит не явно и накладывает ряд обязательств (например, развешивание аннотаций над методами всякий раз, когда мы что‑то пытаемся сделать с сущностью (новые участники команды могут не знать о такой неявной практике, а старые забыть о ней)).
https://habr.com/ru/companies/nlmk/articles/757866/
👉@BookJava
Управление памятью в Java: Введение
В языке Java управление памятью - это автоматический процесс, управляемый виртуальной машиной Java (JVM) и не требующий явного вмешательства. Java, будучи блочно-структурированным языком, использует модель, в которой память делится на два основных типа: стек и куча.
Локальные переменные и параметры методов используют память, основанную на "стеке". Эта область памяти автоматически увеличивается и уменьшается при входе и выходе из блока кода или метода соответственно. В ситуациях, когда системе запрашивается объем памяти, размер которого известен только во время выполнения программы или при создании объекта, эти запросы обычно удовлетворяются за счет области памяти процесса, называемой "динамической памятью" или "кучей". Строго говоря, бывает и так, что объект, предназначенный для кучи, записывается в стек, но мы оставим это обсуждение для более позднего документа.
https://foojay.io/today/java-memory-management/
👉@BookJava
Совет
В Hibernate 6 изменен способ чтения базового JDBC ResultSet с чтения по имени на чтение по позиции. Благодаря этому изменению после обновления вы получите более чистые SQL-запросы без псевдонимов столбцов 👍.
👉@BookJava
♨️ Хочешь выйти на новый профессиональный уровень джавист?
- Осваивай Spring!
Тест на знание языка Java
— Ответь на 21 вопрос и проверь, насколько хорошо nы знаешь язык Java и готовы освоить Spring. Сможешь сдать — пройдёшь на продвинутый онлайн-курс "Разработчик на Spring" Framework со скидкой!
👉 ПРОЙТИ ТЕСТ ОНЛАЙН-КУРСА "Разработчик на Spring Framework": https://vk.cc/csnR94
Курс доступен в рассрочку.
🎁 Черная пятница в OTUS! Успей применить промокод BLACK23 и получить скидку 15% на курс!Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Совет
По умолчанию при обновлении сущности Hibernate обновляет все ее поля. Вы можете использовать аннотацию @DynamicUpdate на объекте @Entity и Hibernate будет обновлять только те столбцы, которые изменились.
👉@BookJava
Параллельность в Java на практике
Как следует из названия, здесь будет только про параллельное выполнение (не путать с конкурентностью). Так же я не буду затрагивать проект Loom, который «должен убить» все остальные подходы написания параллельного кода. Надеюсь изложенное ниже позволит начинающим java программистам разобраться с разными подходами и структурировать имеющиеся знания.
https://habr.com/ru/articles/759054/
👉@BookJava
💻 Профессия «Java-разработчик»
Освойте язык крупного бизнеса и финансовых технологий и научитесь разрабатывать веб-приложения на фреймворке Spring.
Уже во время обучения вы вступите в программу «Карьерный трек», чтобы найти свою первую работу в IT.
Пройдите 5 бесплатных уроков и поймите, подходит ли вам профессия!
COSMO чёрная пятница: успейте получить скидку до 120 000р.
Расширяем горизонты Вселенной - добавим +6 месяцев сопровождения наставника и карьерного консультанта после завершения обучения.
Другого такого предложения в этой Вселенной вы не найдете!
Переходите по ссылке, выбирайте скидку и забирайте подарки🎁
Реклама. АНПОО "ХЕКСЛЕТ КОЛЛЕДЖ". ИНН 7839056670. erid: LjN8K8L3k
Minum Web Framework
Minum - минималистичный экспериментальный Java-фреймворк, демонстрирующий принцип "меньше - значит больше".
Документация https://github.com/byronka/minum/blob/master/docs/development_handbook.md
https://github.com/byronka/minum
👉@BookJava
Оптимизация методов equals() с помощью метода Pattern Matching
0:00 Intro: designing equals() methods
1:13 Generating equals() and hashCode() methods
1:56 What could go wrong with a bad hashCode() method
4:31 Taking a look at the generated equals() methods
7:11 Checking the record and pattern matching implementations
9:33 What is predictive branching, what is the cost of a failing prediction?
12:41 Evaluating the cost of two failing predictions.
14:53 Evaluating the performance of equals() methods on simple data sets
16:07 First data set: all the objects are the same instance
16:46 Second data set: different instances carrying the same state
18:43 Third data set: different objects of the same type
20:41 Fourth data set: objects of different types
22:00 First conclusions on what patterns are the best
22:39 Adding glitches to the data sets
24:41 Results for first data set (same instances) with glitches
25:20 Results for second data set (equal instances) with glitches
26:07 Results for third data set (different instances) with glitches
28:30 Results for fourth data set (different types) with glitches
30:05 What conclusions can you draw from all these benches?
32:33 That's it for today, talk to you soon!
источник
👉@BookJava
Как новичку подарить жизнь telegram-боту на java
Как все начиналось
Мне 43 года и я профессиональный юрист. Неуемная интеллектуальная энергия и неудовлетворенность основной профессией 2,5 года назад привели меня в IT. Да-да, вот так – взрослая тетя с гуманитарным образованием решила попробовать себя на ниве программирования и замахнулась аж на такой язык как… JAVA!
https://habr.com/ru/articles/723580/
👉@BookJava
Avoid Lombok. Use Records to write cleaner code in Java 17
https://medium.com/naukri-engineering/avoid-lombok-use-records-to-write-cleaner-code-in-java-17-b174548a6f5f
👉@BookJava
⚡️ Как написать REST-клиента на Spring?
Узнаете на бесплатном открытом уроке «Разработка REST-клиентов на Spring» от OTUS.
На эфире рассмотрим Rest Template и WebClient, SOAP-сервисы и SOAP-клиентов на Spring.
📢📢 Занятие пройдёт 14 ноября в 20:00 мск и будет приурочено к старту курса «Разработчик на Spring Framework».
🎫 После урока вы сможете приобрести полный курс в рассрочку.
Это отличная возможность совершенно бесплатно протестировать формат обучения и задать преподавателю любые вопросы в режиме реального времени.
➡️ Регистрируйтесь на мероприятия прямо сейчас: https://vk.cc/cscLcNРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Приведите примеры использования fork/join framework
Как следует из названий связанных классов, ForkJoinPool используется для рекурсивных задач. Это такие задачи, которые можно делить на порции, подзадачи. Отделение подзадачи – это операция fork, финальная агрегация результатов подзадач – join.
Реализация fork/join для самых популярных общих случаев уже есть в стандартной библиотеке, работать непосредственно с классом ForkJoinPool не потребуется. Метод parallelSetAll из класса Arrays применяет fork/join для генерации элементов массива; parallelPrefix для модификации; parallelSort для сортировки.
Фреймворк неявно работает и в параллельных стримах. В этом случае логику fork определяет его сплитератор, а join выполняют потоковые операции. Классический пример:Arrays.stream(new int[]{1, 2, 3, 4}).parallel().sum();
Существуют целые категории частных задач, решения которых хорошо параллелизуются: векторные операции, работа с графами, поиск данных. Для специфичных задач придется реализовывать собственные RecursiveTask, RecursiveAction, или Spliterator.
👉@BookJava
Категоризированный список всех возможностей Java и JVM с JDK 8 по 21
С момента выхода 8-й версии и до 21-й версии Java получила 232 предложения по улучшению JDK (JEP) и множество более мелких обновлений, каждое из которых вносит определенные улучшения в платформу. Эта статья представляет собой категоризированный и курируемый список наиболее важных улучшений.
https://advancedweb.hu/a-categorized-list-of-all-java-and-jvm-features-since-jdk-8-to-21/
👉@BookJava
⚡️ Узнайте о фреймворке QT то, чего не знают другие, и станьте более востребованным специалистом
Начните с бесплатного открытого урока «StateMachine в Qt» от OTUS.
На эфире мы познакомимся с концепцией машины состояний, а также узнаем о том, как она реализована в Qt и как можно эффективно ее использовать.
📢📢 Занятие пройдёт 2 ноября в 19:00 мск и будет приурочено к старту курса «Разработка прикладного ПО на Qt и ОС Аврора».
🎫 После урока вы сможете продолжить обучение в рассрочку на комфортных условиях.
➡️ Регистрируйтесь на мероприятие прямо сейчас: https://vk.cc/cs5lV8Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
💥 Бросьте вызов скучным рутинным задачам на Java!
🔥🔝 Изучите продвинутые навыки разработки с помощью онлайн-курса «Java Developer. Professional» в OTUS.
Тест по Java от OTUS
6️⃣ За 6 месяцев обучения:
- Научишься создавать современные java-приложения
- Поймешь основы функционирования JVM (сборка мусора, byteCode)
- Освоишь приемы применения многопоточности
- Напишите выпускной проект на любую тему под наставничеством преподавателя
Занятия в формате живых вебинаров проводят преподаватели-практики, а после дают развернутый фидбэк на домашние задания.
В конце обучения вы напишете выпускной проект на любую тему под контролем преподавателя и после обучения сможете претендовать на зарплату от 200 тыс. рублей.
➡️ Не упускайте свой шанс стать профессионалом в Java-разработке!
Проходите тест и записывайтесь в группу!
🎫 Курс можно приобрести в рассрочку
👉 ПРОЙТИ ТЕСТ КУРСА: https://vk.cc/cspWfl
🎁 Черная пятница в OTUS! Успей применить промокод BLACK23 и получить скидку 15% на курс!Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Избегаем техдолга, решаем проблемы с бинами в Spring и настраиваем JMX
На онлайн-митапе Сбера при поддержке JUG Ru Group.
🗓 22 ноября, 18:00 (МСК, GMT+3)
В программе:
✔ Михаил Сильванович, Максим Шестаков, Евгений Зубенко — «Да (не) инициализируйся ты уже!»
Что делать с ранней инициализацией bean'ов при инициализации контекста. Ищем bean'ы до их инициализации, работаем правильно с BeanFactory и BeanDefinition.
✔ Вячеслав Чернышов — «Приложение от проекта до релиза: этапы реализации»
Определяем верную последовательность этапов разработки на конкретных продуктовых примерах с использованием Java и Kotlin.
✔ Алексей Рагозин — «JMX (Java Management Extension) в 2023»
Архитектура JMX, его возможности. Профилирование, настройка в контейнерах и решение проблем.
Общайтесь с участниками митапа и задавайте вопросы спикерам в чате трансляции. Авторы лучших вопросов к каждому докладу получат сертификаты в магазин мерча SberShop.
➡️ Регистрация по ссылке.
Реклама. ПАО Сбербанк. ИНН 7707083893
Динамическое создание слушателей в Kafka
План
Создадим шаблонный класс через реализацию интерфейса MessageListener.
Создадим KafkaListenerEndpoint с помощью шаблона.
Зарегестрируем эндпоинт в KafkaListenerEndpointRegistry.
Создадим окружение для тестирования.
Протестируем решение.
Заключение.
https://habr.com/ru/articles/758958/
👉@BookJava
Spring Boot ChatGPT Starter
Features
Base on Spring Boot 3.0+
Async with Spring Webflux
Support ChatGPT Chat Stream
Support ChatGPT functions: @ GPTFunction annotation
Prompt Management: load prompt templates from prompt.properties with @ PropertyKey, and friendly with IntelliJ IDEA
Prompt as Lambda: convert prompt template to lambda expression and call it with FP style
ChatGPT interface: Declare ChatGPT service interface with @ ChatGPTExchange and @ ChatCompletion annotations.
No third-party library: base on Spring 6 HTTP interface
GraalVM native image support
Azure OpenAI support
https://github.com/linux-china/chatgpt-spring-boot-starter
👉@BookJava
💪Начал изучать Java?
⚡️ Приходи на бесплатный практический урок «Пишем веб-сервер на Java» от OTUS.
📌 На вебинаре изучим сетевые взаимодействия на Java с помощью сокетов на примере простейшего веб-сервера. Будет теория и практика, вы сможете задать преподавателю-эксперту все возникшие вопросы!
📢📢 Занятие пройдёт 23 ноября в 20:00 мск и будет приурочено к старту курса «Java-разработчик».
Программа обновлена и полностью отвечает современным требованиям рынка.
👉 Для бесплатного участия и получения записи регистрируйтесь прямо сейчас: https://vk.cc/csmTpDРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Как прочитать байткод?
Байткод – аналог машинного кода для JVM. Он получается в результате компиляции исходного .java файла и хранится в .class файле. Анализ байткода иногда может помочь в исследовании бага, или лучше настроить производительность. Он необходим для отладки с инструментами динамической манипуляции байткодом, вроде ASM или BCEL.
Это бинарный код, и открыть его простым текстовым редактором не выйдет. В пакете утилит JDK доступен инструмент javap. Это утилита командной строки для чтения .class файлов.
Аргументами передается полное имя класса, и classpath в котором этот класс искать. По умолчанию отображаются только объявления публичных членов. Ключ -p добавит приватные методы и поля; -v выведет дополнительные метаданные; -c отобразит сам байткод – скомпилированную реализацию методов.
👉@BookJava
Байки джависта
Я конечно не Джеймс Гослинг, но за долгое время работы с Java у меня накопилась масса мыслей. Уверен, что они будут многим полезны, поэтому принимаю решение поделиться ими. Эти мысли зарождались у меня в самые разные периоды:
когда я мучительно пытался понять, как работает только что написанный код
во время холиварных споров с коллегами
и особенно в моменты дебага
https://habr.com/ru/articles/759102/
👉@BookJava
Подборка Telegram каналов для программистов
Системное администрирование 📌
/channel/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
/channel/sysadminof Книги для админов, полезные материалы
/channel/i_odmin Все для системного администратора
/channel/i_odmin_book Библиотека Системного Администратора
/channel/i_odmin_chat Чат системных администраторов
/channel/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
/channel/sysadminoff Новости Линукс Linux
/channel/tikon_1 Новости высоких технологий, науки и техники💡
/channel/mir_teh Мир технологий (Technology World)
/channel/rust_lib Полезный контент по программированию на Rust
/channel/golang_lib Библиотека Go (Golang) разработчика
/channel/itmozg Программисты, дизайнеры, новости из мира IT.
/channel/phis_mat Обучающие видео, книги по Физике и Математике
/channel/php_lib Библиотека PHP программиста 👨🏼💻👩💻
/channel/nodejs_lib Подборки по Node js и все что с ним связано
/channel/ruby_lib Библиотека Ruby программиста
1C разработка 📌
/channel/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
/channel/cpp_lib Библиотека C/C++ разработчика
/channel/cpp_knigi Книги для программистов C/C++
/channel/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
/channel/pythonofff Python академия. Учи Python быстро и легко🐍
/channel/BookPython Библиотека Python разработчика
/channel/python_real Python подборки на русском и английском
/channel/python_360 Книги по Python Rus
Java разработка 📌
/channel/BookJava Библиотека Java разработчика
/channel/java_360 Книги по Java Rus
/channel/java_geek Учим Java на примерах
GitHub Сообщество 📌
/channel/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
/channel/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
/channel/developer_mobila Мобильная разработка
/channel/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
/channel/frontend_1 Подборки для frontend разработчиков
/channel/frontend_sovet Frontend советы, примеры и практика!
/channel/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
/channel/game_devv Все о разработке игр
Вакансии 📌
/channel/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT
Чат программистов📌
/channel/developers_ru
Библиотеки 📌
/channel/book_for_dev Книги для программистов Rus
/channel/programmist_of Книги по программированию
/channel/proglb Библиотека программиста
/channel/bfbook Книги для программистов
/channel/books_reserv Книги для программистов
БигДата, машинное обучение 📌
/channel/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
/channel/bookflow Лекции, видеоуроки, доклады с IT конференций
/channel/coddy_academy Полезные советы по программированию
QA, тестирование 📌
/channel/testlab_qa Библиотека тестировщика
Шутки программистов 📌
/channel/itumor Шутки программистов
Защита, взлом, безопасность 📌
/channel/thehaking Канал о кибербезопасности
/channel/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
/channel/ux_web Статьи, книги для дизайнеров
Английский 📌
/channel/UchuEnglish Английский с нуля
Математика 📌
/channel/Pomatematike Канал по математике
Excel лайфхак📌
/channel/Excel_lifehack
Бэкенд-тур — возможность попасть в Яндекс за неделю
С 13 по 17 ноября техногигант проведет масштабный бэкенд-тур по 5 городам России, где яндексоиды расскажут о своих текущих проектах, продуктах и технологиях:
📍 Москва — 13.11 (здесь можно будет посмотреть онлайн-трансляцию)
📍Нижний Новгород — 14.11
📍Екатеринбург — 15.11
📍Новосибирск — 16.11
📍Санкт-Петербург — 17.11
Участники с опытом коммерческой разработки могут получить оффер в компанию всего за неделю, с 20 по 26 ноября. Предварительно нужно подать заявку на участие до 19 ноября и выполнить контест с задачами для прохождения на следующий этап. Уже в течение недели отборов разработчики пройдут 2 технические фракции с кодингом в онлайн-редакторе, пообщаются с представителями команд разработчиков Яндекса и выберут подходящее направление. До 26 ноября лучшим участникам уже презентуют офер.
Более детально ознакомиться с подробностями тура и быстрого найма в компанию можно на сайте
🔥 Топ-5 способов создания ассоциативного массива
1. Односвязный список
2. Отсортированный массив
3. Двоичное дерево поиска
4. Хэш-таблица
5. Префиксное дерево
💪 Разберём каждый из них подробно на бесплатном открытом уроке «Создание ассоциативного массива различными способами» от OTUS.
На эфире мы:
✔️ реализуем структуру данных «ассоциативный массив» для хранения пар (ключ, значение)
✔️ рассмотрим несколько алгоритмов для решения этой задачи
✔️ сравним их эффективность
📢📢 Занятие состоится 15 ноября в 20:00 мск и будет приурочено к старту курса «Алгоритмы и структуры данных» в Otus.
🎫 После вебинара можно приобрести курс в рассрочку.
➡️ Регистрация на вебинар: https://vk.cc/csg4GPРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Совет по Spring Boot 🍃💡
Если вы перешли на Java 21 и используете Spring Boot 3.1 или ниже, необходимо обновить билдер Paketo, чтобы избежать ошибки: "Builder lifecycle 'creator' failed with status code 51" при выполнении mvn spring-boot:build-image.
👉@BookJava
Что такое абстрактные классы и методы в Java
Абстрагирование – это процесс, в ходе которого от пользователя скрываются многие детали реализации, а предоставляются только те детали, которые действительно важны. Так удаётся сфокусироваться на том, что делает объект, а не как он это делает.
В Java абстрактные классы и методы – это основные инструменты для реализации абстракций. Абстрактные классы служат шаблонами для создания субклассов, а абстрактные методы можно сравнить с чертежами, описывающими поведение этих субклассов.
https://www.appsdeveloperblog.com/17-abstract-classes-and-methods-in-java/
👉@BookJava
6 ноября в 15:00 по МСК пройдёт бесплатный вебинар «Обработка тысяч одновременных записей и обеспечение согласованности данных»
Мы рассмотрим потенциальные проблемы при работе со связкой java->database. Будут выполнены тысячи апдейтов над одними и теми же строками так что будут показаны наиболее распространенные подходы для достижения согласованности и производительности.
Ведущий: Роман Оборин, Software Engineer at Tesco
🚀 Бесплатная регистрация: https://clck.ru/36JGRk
Реклама. ООО "Платформа непрерывного обучения" education.dhabits.ru
erid:2Vtzqx6gpAj
RabbitMQ vs Kafka vs ActiveMQ
👉@BookJava
Байт-код — это просто! Как сделать DI по-настоящему быстрым
Привет! Меня зовут Григорий Юрков, и я уже несколько лет работаю в инфраструктурной команде Яндекс Маркета. Два года назад мы начали разрабатывать свой легковесный DI-фреймворк Scout, который предоставляет выразительный Kotlin DSL. Он не генерирует код, а делает всю работу в рантайме.
Недавний переход с compile-time-библиотеки Dagger 2 на нашу привёл к замедлению старта приложения. Подробнее об этом и о том пути, который мы прошли от идеи до публикации в опенсорс, можно прочитать в статье моего коллеги Александра Миронычева.
В этой статье мы будем подробно рассматривать то, как применение байт-кода помогло сохранить скорость на том же уровне и спасти проект по миграции на Scout.
https://habr.com/ru/companies/yandex/articles/770800/
👉@BookJava