Библиотека Java разработчика
10.8K subscribers
1.14K photos
563 videos
58 files
1.44K links
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate.


По всем вопросам @evgenycarter

РКН clck.ru/3KoGeP
Download Telegram
Приведите примеры использования 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
👍4
Что такое абстрактные классы и методы в Java

Абстрагирование – это процесс, в ходе которого от пользователя скрываются многие детали реализации, а предоставляются только те детали, которые действительно важны. Так удаётся сфокусироваться на том, что делает объект, а не как он это делает.

В Java абстрактные классы и методы – это основные инструменты для реализации абстракций. Абстрактные классы служат шаблонами для создания субклассов, а абстрактные методы можно сравнить с чертежами, описывающими поведение этих субклассов.

https://www.appsdeveloperblog.com/17-abstract-classes-and-methods-in-java/

👉@BookJava
👍4
Совет по Spring Boot 🍃💡

Если вы перешли на Java 21 и используете Spring Boot 3.1 или ниже, необходимо обновить билдер Paketo, чтобы избежать ошибки: "Builder lifecycle 'creator' failed with status code 51" при выполнении mvn spring-boot:build-image.

👉@BookJava
👍9
Как новичку подарить жизнь telegram-боту на java

Как все начиналось
Мне 43 года и я профессиональный юрист. Неуемная интеллектуальная энергия и неудовлетворенность основной профессией 2,5 года назад привели меня в IT. Да-да, вот так – взрослая тетя с гуманитарным образованием решила попробовать себя на ниве программирования и замахнулась аж на такой язык как… JAVA!

https://habr.com/ru/articles/723580/

👉@BookJava
👍5🔥1😢1
Media is too big
VIEW IN TELEGRAM
Бэкенд-тур — возможность попасть в Яндекс за неделю
С 13 по 17 ноября техногигант проведет масштабный бэкенд-тур по 5 городам России, где яндексоиды расскажут о своих текущих проектах, продуктах и технологиях:
📍 Москва — 13.11 (здесь можно будет посмотреть онлайн-трансляцию)
📍Нижний Новгород — 14.11
📍Екатеринбург — 15.11
📍Новосибирск — 16.11
📍Санкт-Петербург — 17.11

Участники с опытом коммерческой разработки могут получить оффер в компанию всего за неделю, с 20 по 26 ноября. Предварительно нужно подать заявку на участие до 19 ноября и выполнить контест с задачами для прохождения на следующий этап. Уже в течение недели отборов разработчики пройдут 2 технические фракции с кодингом в онлайн-редакторе, пообщаются с представителями команд разработчиков Яндекса и выберут подходящее направление. До 26 ноября лучшим участникам уже презентуют офер.
Более детально ознакомиться с подробностями тура и быстрого найма в компанию можно на сайте
💩6
Media is too big
VIEW IN TELEGRAM
Оптимизация методов 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
👍1
Подборка Telegram каналов для программистов

Системное администрирование 📌
https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.me/sysadminof Книги для админов, полезные материалы
https://t.me/i_odmin Все для системного администратора
https://t.me/i_odmin_book Библиотека Системного Администратора
https://t.me/i_odmin_chat Чат системных администраторов
https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://t.me/sysadminoff Новости Линукс Linux


https://t.me/tikon_1 Новости высоких технологий, науки и техники💡
https://t.me/mir_teh Мир технологий (Technology World)

https://t.me/rust_lib Полезный контент по программированию на Rust
https://t.me/golang_lib Библиотека Go (Golang) разработчика

https://t.me/itmozg Программисты, дизайнеры, новости из мира IT.
https://t.me/phis_mat Обучающие видео, книги по Физике и Математике

https://t.me/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻
https://t.me/nodejs_lib Подборки по Node js и все что с ним связано
https://t.me/ruby_lib Библиотека Ruby программиста

1C разработка 📌
https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С

Программирование C++📌
https://t.me/cpp_lib Библиотека C/C++ разработчика
https://t.me/cpp_knigi Книги для программистов C/C++
https://t.me/cpp_geek Учим C/C++ на примерах

Программирование Python 📌
https://t.me/pythonofff Python академия. Учи Python быстро и легко🐍
https://t.me/BookPython Библиотека Python разработчика
https://t.me/python_real Python подборки на русском и английском
https://t.me/python_360 Книги по Python Rus

Java разработка 📌
https://t.me/BookJava Библиотека Java разработчика
https://t.me/java_360 Книги по Java Rus
https://t.me/java_geek Учим Java на примерах

GitHub Сообщество 📌
https://t.me/Githublib Интересное из GitHub

Базы данных (Data Base) 📌
https://t.me/database_info Все про базы данных

Мобильная разработка: iOS, Android 📌
https://t.me/developer_mobila Мобильная разработка
https://t.me/kotlin_lib Подборки полезного материала по Kotlin

Фронтенд разработка 📌
https://t.me/frontend_1 Подборки для frontend разработчиков
https://t.me/frontend_sovet Frontend советы, примеры и практика!
https://t.me/React_lib Подборки по React js и все что с ним связано

Разработка игр 📌
https://t.me/game_devv Все о разработке игр

Вакансии 📌
https://t.me/sysadmin_rabota Системный Администратор
https://t.me/progjob Вакансии в IT

Чат программистов📌
https://t.me/developers_ru

Библиотеки 📌
https://t.me/book_for_dev Книги для программистов Rus
https://t.me/programmist_of Книги по программированию
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов
https://t.me/books_reserv Книги для программистов

БигДата, машинное обучение 📌
https://t.me/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning

Программирование 📌
https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.me/coddy_academy Полезные советы по программированию

QA, тестирование 📌
https://t.me/testlab_qa Библиотека тестировщика

Шутки программистов 📌
https://t.me/itumor Шутки программистов

Защита, взлом, безопасность 📌
https://t.me/thehaking Канал о кибербезопасности
https://t.me/xakep_1 Статьи из "Хакера"

Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров

Английский 📌
https://t.me/UchuEnglish Английский с нуля

Математика 📌
https://t.me/Pomatematike Канал по математике

Excel лайфхак📌
https://t.me/Excel_lifehack
👍1🤡1
Minum Web Framework

Minum - минималистичный экспериментальный Java-фреймворк, демонстрирующий принцип "меньше - значит больше".

Документация https://github.com/byronka/minum/blob/master/docs/development_handbook.md

https://github.com/byronka/minum

👉@BookJava
👍3👎2
Байки джависта

Я конечно не Джеймс Гослинг, но за долгое время работы с Java у меня накопилась масса мыслей. Уверен, что они будут многим полезны, поэтому принимаю решение поделиться ими. Эти мысли зарождались у меня в самые разные периоды:

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

https://habr.com/ru/articles/759102/

👉@BookJava
👍1
Как прочитать байткод?

Байткод – аналог машинного кода для JVM. Он получается в результате компиляции исходного .java файла и хранится в .class файле. Анализ байткода иногда может помочь в исследовании бага, или лучше настроить производительность. Он необходим для отладки с инструментами динамической манипуляции байткодом, вроде ASM или BCEL.

Это бинарный код, и открыть его простым текстовым редактором не выйдет. В пакете утилит JDK доступен инструмент javap. Это утилита командной строки для чтения .class файлов.

Аргументами передается полное имя класса, и classpath в котором этот класс искать. По умолчанию отображаются только объявления публичных членов. Ключ -p добавит приватные методы и поля; -v выведет дополнительные метаданные; -c отобразит сам байткод – скомпилированную реализацию методов.

👉@BookJava
👍5🔥1
Параллельность в Java на практике

Как следует из названия, здесь будет только про параллельное выполнение (не путать с конкурентностью). Так же я не буду затрагивать проект Loom, который «должен убить» все остальные подходы написания параллельного кода. Надеюсь изложенное ниже позволит начинающим java программистам разобраться с разными подходами и структурировать имеющиеся знания.

https://habr.com/ru/articles/759054/

👉@BookJava
👍2
Совет

По умолчанию при обновлении сущности Hibernate обновляет все ее поля. Вы можете использовать аннотацию @DynamicUpdate на объекте
@Entity и Hibernate будет обновлять только те столбцы, которые изменились.

👉@BookJava
👍23👏1
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
👍6
Динамическое создание слушателей в Kafka

План

Создадим шаблонный класс через реализацию интерфейса MessageListener.
Создадим KafkaListenerEndpoint с помощью шаблона.
Зарегестрируем эндпоинт в KafkaListenerEndpointRegistry.
Создадим окружение для тестирования.
Протестируем решение.
Заключение.

https://habr.com/ru/articles/758958/

👉@BookJava
👍4
Совет

В Hibernate 6 изменен способ чтения базового JDBC ResultSet с чтения по имени на чтение по позиции. Благодаря этому изменению после обновления вы получите более чистые SQL-запросы без псевдонимов столбцов 👍.

👉@BookJava
👍6
Управление памятью в Java: Введение

В языке Java управление памятью - это автоматический процесс, управляемый виртуальной машиной Java (JVM) и не требующий явного вмешательства. Java, будучи блочно-структурированным языком, использует модель, в которой память делится на два основных типа: стек и куча.

Локальные переменные и параметры методов используют память, основанную на "стеке". Эта область памяти автоматически увеличивается и уменьшается при входе и выходе из блока кода или метода соответственно. В ситуациях, когда системе запрашивается объем памяти, размер которого известен только во время выполнения программы или при создании объекта, эти запросы обычно удовлетворяются за счет области памяти процесса, называемой "динамической памятью" или "кучей". Строго говоря, бывает и так, что объект, предназначенный для кучи, записывается в стек, но мы оставим это обсуждение для более позднего документа.

https://foojay.io/today/java-memory-management/

👉@BookJava
Аудит пользователей Spring Data JPA

Задача: в БД необходимо фиксировать кто создал сущность, кто её обновил, и кто её удалил.

Все знают, как взять пользователя из контекста и сунуть его в сущность. Допустим, на уровне сервиса в методе извлечь информацию о нём и «засетать» его в нужные поля (придётся везде таскать этот кусок кода по сервису), а с аспектами как‑то выглядит не явно и накладывает ряд обязательств (например, развешивание аннотаций над методами всякий раз, когда мы что‑то пытаемся сделать с сущностью (новые участники команды могут не знать о такой неявной практике, а старые забыть о ней)).

https://habr.com/ru/companies/nlmk/articles/757866/

👉@BookJava
👍62
Изучаем Java EE. Современное программирование для больших предприятий
Себастьян Дашнер (2018)

Java EE 8 - современная версия популярной платформы для программирования корпоративных приложений на языке Java. Новая версия платформы оптимизирована с учетом многочисленных технологических нововведений, среди которых - работа с контейнерами, улучшенные API для обеспечения безопасности, возможности работы с облачными хранилищами и микросервисной архитектурой. Java EE обеспечивает широкие возможности предметно-ориентированного проектирования (DDD), непрерывную интеграцию, работу по принципу DevOps, взаимодействие с Docker и Kubernetes.

Скачать

👉 @java_360
👍4
Чем отличаются JRE, JVM И JDK?

JRE кратко - для работы. Java Runtime Environment (сокр. JRE) - минимальная реализация виртуальной машины, необходимая для исполнения Java-приложений, без компилятора и других средств разработки. Состоит из виртуальной машины - Java Virtual Machine и библиотеки Java-классов.

JDK кратко - для программирования. Java Development Kit (сокращенно JDK) - бесплатно распространяемый компанией Oracle Corporation (ранее Sun Microsystems) комплект разработчика приложений на языке Java, включающий в себя компилятор Java (javac), стандартные библиотеки классов Java, примеры, документацию, различные утилиты и исполнительную систему Java (JRE).

Java Virtual Machine (сокращенно Java VM, JVM) - виртуальная машина Java - основная часть исполняющей системы Java, так называемой Java Runtime Environment (JRE). Виртуальная машина Java интерпретирует Байт-код Java, предварительно созданный из исходного текста Java-программы компилятором Java (javac). JVM может также использоваться для выполнения программ, написанных на других языках программирования.

👉@BookJava
👍4
Какие бывают проблемы с арифметикой в Java?

Переполнения.
Числа примитивных типов в Java хранятся в дискретной оперативной памяти компьютера и занимают фиксированный объем. Из этого вытекает ограничение диапазона возможных значений. Когда результат арифметической операции выпадает из диапазона, значение идет по кругу – максимальное становится минимальным, либо наоборот. Такая ситуация называется переполнение (underflow/overflow).

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

Платформо-зависимые округления.
По умолчанию JVM производит арифметические вычисления насколько это возможно точно. Пределы точности могут зависеть от аппаратного обеспечения. Это неприемлемо для программ, к которым предъявляют строгие требования переносимости, когда результат вычислений должен быть одним и тем же на любом железе.

Решение: модификатор strictfp в объявлении класса или метода приводит точность вычислений к единой спецификации IEEE 754. За это может ухудшиться производительность и уменьшиться точность значений.

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

Решение: неожиданное исключение обычно указывает на логическую ошибку. Лучший способ предотвратить логические ошибки – покрыть код Unit-тестами.

👉@BookJava
👍5