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


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

РКН clck.ru/3KoGeP
Download Telegram
Forwarded from Kotlin
This media is not supported in your browser
VIEW IN TELEGRAM
Курс по корутинам

#1 Что такое корутина. Важные особенности
#2 CoroutineContext. Настраиваем корутины
#3 Жизненный цикл корутины. CoroutineScope. Structured Concurrency
#4 Обработка ошибок в корутинах
#5 Каналы. Зачем если есть Flow?
#6 Синхронизация между корутинами
#7 Kotlin Coroutines Flow. StateFlow. SharedFlow
#8 Корутины в Android. Специальные API

https://www.youtube.com/playlist?list=PL0SwNXKJbuNmsKQW9mtTSxNn00oJlYOLA

✍️ @kotlin_lib
👍5
Media is too big
VIEW IN TELEGRAM
Maven - краткий курс

В этом видео вы узнаете, как использовать Maven как профессионал: установка, использование обертки mvn, использование Maven вместе с IDE и, конечно же, основы Maven.

00:00 Intro
00:30 Cloning The Sample Project
01:09 Installing Maven - Package Manager
01:34 Installing Maven - Manual
02:57 Maven Wrapper
04:31 mvn validate
05:21 IntelliJ - Importing Maven Projects
06:12 Pom.xml - Basics
07:07 Pom.xml - Properties
07:38 Pom.xml - Build Section
08:06 Pom.xml - Dependencies
09:40 Pom.xml - Dependency Scopes
11:41 search.maven.org - Dependency Search
12:27 IntelliJ - Maven Reload Trick
13:11 IntelliJ - Dependency Search
15:04 Maven Directory Structure
15:25 mvn clean
15:37 mvn compile
16:00 mvn test
17:45 mvn package
18:36 mvn install
19:18 Local Maven Repository
20:25 Central Maven Repository
22:28 Multi Module Projects

источник

👉@BookJava
👍6🔥3👎1
Java from EPAM. Учебно-методическое пособие
Блинов, Романчик (2020)

Пособие предназначено для программистов, начинающих и продолжающих изучение технологий Java SE. В книге рассматриваются основы языка Java и концепции объектно-ориентированного и функционального программирования. Также изложены аспекты применения библиотек классов языка Java, включая файлы, коллекции, Stream API, сетевые и многопоточные приложения, а также взаимодействие с СУБД и ХМL. В конце каждой главы даются теоретические вопросы по изученной главе, тестовые вопросы по материалу главы и задания для выполнения. В приложениях приведены дополнительные материалы с кратким описанием технологий Log4J2 и TestNG.

Скачать

👉 @java_360
👍14👎1🔥1🤔1
Создание пользовательских аннотаций в Java

В этой статье объясняется, как создавать мета- и пользовательские аннотации и украшать ими объекты.

👉@BookJava
👍2
Генерация PDF-документов на основе шаблонов в Java

https://dzone.com/articles/template-based-pdf-document-generation-in-java

👉@BookJava
👍4👎1
В каком случае может быть потерян элемент в HashMap?

Допустим, в качестве ключа используется не примитив, а объект с несколькими полями. После добавления элемента в HashMap у объекта, который выступает в качестве ключа, изменяют одно поле, которое участвует в вычислении хэш-кода. В результате при попытке найти данный элемент по исходному ключу, будет происходить обращение к правильной корзине, а вот equals уже не найдет указанный ключ в списке элементов. Тем не менее, даже если equals реализован таким образом, что изменение данного поля объекта не влияет на результат, то после увеличения размера корзин и пересчета хэш-кодов элементов, указанный элемент, с измененным значением поля, с большой долей вероятности попадет в совершенно другую корзину и тогда уже потеряется совсем.

👉@BookJava
👍6🤡3
Настраиваем память JVM-приложения в Kubernetes


Друзья, всем привет! Как известно, в Kubernetes у каждого pod’а есть ограничение на использование памяти (limits.memory), и, как показывает опыт, далеко не всегда очевидно, как JVM-приложение интерпретирует эту настройку, что порой может приводить к OOMKill.

Я хотел бы поделиться одним из способов настройки памяти для Java-приложений в Kubernetes. Сразу скажу, что итоговые настройки, к которым мы придём, будут приведены лишь в качестве примера и должны настраиваться индивидуально под каждое приложение. Рассматривать будем настройки и метрики обычного микросервиса на Spring boot, интегрированного со Spring Boot Admin (далее просто SBA).

👉@BookJava
👍3
Media is too big
VIEW IN TELEGRAM
🎥 JEP Café

Java Asynchronous Programming Full Tutorial with Loom and Structured Concurrency #13
Launching 10 millions virtual threads with Loom #12
Java 19 Virtual Threads #11
Leverage Java 17 New Features to Create Your Wordle Checker #10
Refactoring Java 8 code with Java 17 new features #9
Records Patterns, Performance and Serialization #8
String Concatenation #7
Factory Methods for Collections #6
Text Blocks #5
The Packaging Tool aka jpackage #4
Switch Expressions #3
Sealed Classes #2
What is a JEP? #1

Все видео доступны на youtube

👉@BookJava
👍3
Forwarded from Java Geek
Какая проблема возникнет с этим кодом?

Ответ: Данный код не с компилируется.

Этот вопрос на знание иерархии исключений, в данном случае FileNotFoundException унаследован от IOException, первый catch будет перехватывать все исключения и в следующий блок catch управление не будет передано.

@java_geek
👍1
Можно ли подружить Stream API и JPA?

В этой статье я хотел бы познакомить сообщество с библиотекой JPAstreamer. Идея этой библиотеки очень проста, но в то же время гениальна - получать нужные нам сущности из бд так, как если бы мы просто обрабатывали поток сущностей в стриме.

👉@BookJava
👍5
Какие классы вовлечены в соединение с базой данных?

DriverManager управляет всеми JDBC-драйверами в приложении. Представляет набор статических методов. Лениво загружает системным класслоадером доступные предсконфигурированные драйверы:
• По списку полных имен классов из проперти jdbc.drivers;
• Через Service Provider Interface (SPI).

Менеджер занимается созданием экземпляра Connection – ключевого класса при работе с базой данных. Альтернативный менеджеру (и даже рекомендуемый) способ соединения с источником данных – ConnectionBuilder. Билдер получают из javax.sql.DataSource – формально это часть Java EE, так что здесь не будем подробно на нем останавливаться.

Driver – главный класс реализации JDBC-драйвера. Когда загружается класслоадером, сам регистрирует себя в DriverManager. Так что кроме предсконфигурированных драйверов, дополнительные можно загрузить просто вызвав Class.forName.

Можно явно создавать Connection через драйвер, минуя менеджера и билдер. Драйвер предоставляет информацию о возможных/требуемых для своей работы свойствах в виде массива DriverPropertyInfo.

DriverAction – дополнительный интерфейс, который должен реализовывать Driver, если хочет получать уведомления о разрегистрации DriverManager-ом.

👉@BookJava
👍4
Программирование JavaFX: разработка элементов интерфейса

Иногда даже программистам на Java необходимо создавать интерфейсы, и для этого им приходится изучать дополнительные инструменты. В этом случае им на помощь приходит инструментарий создания GUI, который избавляет от необходимости подключения дополнительных технологий — JavaFX. Далее

👉@BookJava
👍3👎1
Какие данные есть в исключении?

Разработчик может добавлять в исключение, как и в любой другой класс, произвольные поля и методы. Но у всех исключений есть общая часть, унаследованная от Throwable. В базовых Exception, RuntimeException и Error нет ничего кроме неё.

Cause – другое исключение, которым было вызвано это. Опционально. Можно задать через сеттер или аргумент конструктора, но задается не больше одного раза.

Message – сообщение ошибки. Устанавливается в конструкторе. Кроме обычного геттера есть getLocalizedMessage, который в наследниках может возвращать локализованный вариант сообщения.

Stack Trace – стек вызовов методов потока до того места, где сообщение было сконструировано (не выброшено!). JVM позволено терять часть, или даже все фреймы стека. Есть сеттер для фреймворков удаленного вызова (RPC). Сеттер можно отключить параметром конструктора writableStackTrace.

Suppressed – список исключений, которые были выброшены и подавлены, пока это исключение шло к обработчику. Сюда попадают подавленные исключения финализации ресурсов при использовании try-with-resource. Сеттер доступен и для пользовательского кода. Подавление можно отключить параметром конструктора enableSuppression.

👉@BookJava
👍6👎1
Программирование JavaFX: использование SceneBuilder

В прошлой статье мы начали разговор о фреймворке JavaFX, который позволяет создавать интерфейсы, оставаясь в рамках знакомой вам среды разработки (не нужно изучать веб-технологии). В этот раз мы поговорим о средстве упрощения и ускорения разработки интерфейсов — SceneBuilder.

Несмотря на то что интерфейсы возможно создавать только в коде, и в прошлый раз мы ознакомились с целым семейством классов, которые позволяют это делать, вряд ли кто-то будет спорить с тем фактом, что графическое создание по принципу Drag&Drop является более удобным и быстрым. К тому же (со временем) я всё чаще прихожу к пониманию того, что глубокое знание того, что происходит под капотом тех или иных технологий, должно дополняться ещё и средствами ускорения разработки. Так как время — это наше всё. Итак.

👉@BookJava
👍5
​Разрешение конфликтов слияния Git в IntelliJ IDEA

https://foojay.io/today/resolving-git-merge-conflicts-in-intellij-idea/

👉@BookJava
👍1🔥1
Управление временем в Java приложениях

Сегодня я хочу поговорить об управлении временем в Java приложениях: зачем это нужно, и как это можно делать.

В реальном коде часто требуется сохранять дату и время в базу данных. Это может быть фиксация времени создания\последней модификации какого-либо объекта или указание срока действия документа, билета и т.п. Думаю, многие из вас решали эту задачу в своих проектах: сама по себе она несложная. Трудности возникают, когда мы хотим подобную систему протестировать и оценить, как она будет вести себя, скажем, через полгода или год. В будущем.

Конечно, можно накручивать системные часы на вашей машине, build-агенте, тестовом сервере, но это неудобно, а иногда физически невозможно (банальное отсутствие доступа или автоматическая синхронизация времени). А ещё это абсолютно не инженерный подход. Ниже я покажу несколько простых и изящных приёмов, которые позволят вам почувствовать себя доктором Стрэнджем…


https://habr.com/ru/post/681608/

👉@BookJava
👍3
Forwarded from Java Geek
Fields initialization

Старайтесь не инициализировать поля класса преждевременно, кроме случаев когда вы в этом очень сильно уверены. Всё-таки для этих целей у Вас есть конструктор. В случае явного указания значений для полей класса — они будут проинициализированы до вызова конструктора, что влечет дополнительные расходы в тех случаях, когда у Вас нет необходимости пользоваться проинициализированными значениями, например, когда сразу после создания обьекта Вы устанавливаете другие значения для проинициализированных полей. Ну и не забывайте, что поля класса всегда инициализируются значениями по умолчанию.

@java_geek
👍7👎5🔥1😁1
Forwarded from Java Geek
Object[] vs custom Class

Код с Object абсолютно не читабельный, когда приходится работать с возвращаемым значением в другом месте.То есть, чтобы понять что же хранит в себе возвращаемое значение — нужно вернуться в класс вызова и читать комментарии к методу, если же, конечно, они есть, а если нет, вникать в код, что не очень эффективно. Собственно, я сам этим иногда грешу, когда очень спешу. С этим можно смириться, если это очень редко, но, все же, в таких ситуациях лучше создавать новый класс. Облегчите жизнь тем, кто придет после вас.

@java_geek
👍4
Считаем уникальные IPv4 адреса

Эта задача была предложена мне на одном из курсов по Java. В статье излагаю своё решение, а также анализ его эффективности. Обработка IP адресов необходима для многих проектов, и я надеюсь, что алгоритмы, описанные в этой статье, могут быть полезны.

Задача
В текстовом файле содержится список IPv4 адресов в десятичной записи.

https://habr.com/ru/post/679008/



👉@BookJava
👍7