Библиотека джависта | Java, Spring, Maven, Hibernate
24.9K subscribers
1.86K photos
38 videos
42 files
2.64K links
Все самое полезное для Java-разработчика в одном канале.

Список наших каналов: https://yangx.top/proglibrary/9197

Обратная связь: @proglibrary_feedback_bot

По рекламе: @proglib_adv

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
🤔 Очередной #дайджест по Java

🟢 Книга Security in Computing, 6th Edition — искусство компьютерной и информационной безопасности: от приложений и сетей до облаков и криптовалют

🟢 Вещественные числа с плавающей двоичной точкой в .NET и .NET Framework — коллекция ситуаций с этими числами, которые возникают на платформах .NET и .NET Framework в Windows на процессорах семейства x86

🟢 Подкаст c Тимуром Мухитдиновым — разговор о стартапе на Джаве и архитектуре в Букинге

🟢 Насколько быстра Java 21 — автор сравнивает производительность 21 версии по сравнению с 17

🟢 JVM Language Summit 2023 — доклад про виртуальные потоки, про историю, челленджи и про то как ими пользоваться
This media is not supported in your browser
VIEW IN TELEGRAM
#memes

Тот самый разработчик на удаленке в час дня, когда ему говорят, что пора бы работать уже
✍️🦾 Компилирование «железного» бинарника Java-программы Google Closure Stylesheets с GraalVM

Closure Stylesheets — это компилятор CSS, написанный Гугл на Java в рамках набора инструментов Closure Tools для веб-разработки, который в свое время обладал внушительными функциями такими как экспансия браузерных префиксов (например, для трансформации display: flex; в display: -webkit-flex; display: -ms-flexbox), переменными и др. Прошло уже более 10 лет с момента зачатия этого проекта, многие инновации уже укоренились, и в прошлом году его архивировали, т.к. все, включая сотрудников Гугл, используют мейнстрим утилиты типа SASS / autoprefixer.

В статье речь пойдет про то, как автор обновил свой форк с Java 1.8 на JDK 11 и использовал утилиту Oracle native-image из пакета GraalVM для того, чтобы собрать native binary, то есть бинарник с машинным кодом, который позволяет запускать программу вообще без Java. Он расскажет о том, какие проблемы встретил во время апгрейда, в том числе связанных с рефлексией, и сравнит скорость запуска / работы / потребления памяти стандартного JAR и собранного bin.

Читать статью

#гайд
Вебинар на тему: Конкурентность при работе с базами данных — обработка тысяч одновременных записей и обеспечение согласованности данных

Данное событие состоится 6 ноября и продлится несколько часов.

Будут рассмотрены потенциальные проблемы при работе со связкой java->database. Покажут выполнение тысячи апдейтов над одними и теми же строками и наиболее распространенные подходы, для достижения согласованности и производительности.

Регистрация тут
📚✏️ Категоризированный список всех функций Java и JVM начиная с JDK 8 по 21

С момента выпуска версии 8 и вплоть до версии 21 Java формировалась с помощью 232 JDK Enhancement Proposals (JEPs) и множества других небольших обновлений, каждое из которых привносит некоторые улучшения в платформу.

Полный список JEP можно найти на веб-сайте OpenJDK в рамках проектов jdk и jdk9.

Новые языковые возможности

🔹 Pattern Matching для switch type и guarded patterns

String formatted = switch (o) {
case Integer i when i > 10 -> String.format(«a large Integer %d», i);
case Integer i -> String.format(«a small Integer %d», i);
case Long l -> String.format(«a Long %d», l);
default -> o.toString();
};


🔹 Record Patterns для switch и instanceof для деконструкции сложных вложенных структур

if (r instanceof ColoredPoint(Point2D(int x, int y), Color c)) {
// work with x, y, and c
}


🔹 Безымянные переменные

var _ = mySet.add(x); // ignore the return value

try {
// ...
} catch (Exception _) { // ignore the exception object
// ...
}

list.stream()
.map((_) -> /* ... */) // ignore the parameter
.toList();


В статье вас ждет больше примеров нововведений

#гайд
Книги The Garbage Collection Handbook: The Art of Automatic Memory Management

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

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

Отложенная инициализация — это паттерн проектирования, который позволяет отложить создание объекта до момента его реального использования. Он полезен, когда создание объекта требует значительных ресурсов или происходит в условиях, когда объект может не понадобиться.

В Java есть несколько способов реализации отложенной инициализации. Два наиболее распространенных подхода — это использование двойной проверки и использование внутреннего класса. На картинке мы рассмотрели использование двойной проверки (Double-Checked Locking).
Очередной #дайджест по Java

Книга, Java: The Complete Reference — много примеров кода, комментариев к нему и заданий для закрепления материала.

Пишем минимальный ActivityPub-сервер с нуля — основы протокола ActivityPub и минимально возможная реализация сервера

Cloud Native + Spring Cloud: Руководство для начинающих — современный подход к созданию, развертыванию и управлению приложениями с помощью облачных вычислений

hydra-java — проект-инкубатор, который упрощает работу с Hydra из java-приложений

Docker Compose: MongoDB и Spring Boot с примерами — как докеризовать Spring Boot и MongoDB с помощью Docker Compose
#вопросы_с_собеседования

Зачем нужны и какие бывают блоки инициализации?

Блоки инициализации представляют собой код, заключенный в фигурные скобки и размещаемый внутри класса вне объявления методов или конструкторов.

🔹 Существуют статические и нестатические блоки инициализации.
🔹 Блок инициализации выполняется перед инициализацией класса загрузчиком классов или созданием объекта класса с помощью конструктора.
🔹 Несколько блоков инициализации выполняются в порядке следования в коде класса.
🔹Блок инициализации способен генерировать исключения, если их объявления перечислены в throws всех конструкторов класса.
🔹 Блок инициализации возможно создать и в анонимном классе.
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

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

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

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

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Книга Pro Spring 6: An In-Depth Guide to the Spring Framework

Эта книга выходит далеко за рамки основ: вы узнаете, как использовать новейший Spring Framework 6 для создания различных уровней и частей современных сложных корпоративных Java-прикладных систем, сверху донизу, включая доступ к данным, генерацию SQL с помощью jOOQ, персистентность с помощью Hibernate, транзакции, настройку безопасности, классические уровни web и презентаций и добавление некоторой реактивности.

#книги

Заполучить ее

В нашем книжном канале есть еще масса обучающей литературы, которая ждет вас 😉
🎯🤔 Абстрактные классы и методы в Java

Абстракция — это процесс сокрытия деталей реализации и представления пользователю только существенных функций. Это позволяет нам сосредоточиться на том, что делает объект, а не на том, как он это делает.

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

Читать статью

#обучалка
The Java Playground — Java в браузере

Java Playground — это простой онлайн-инструмент от команды Java, который поможет вам изучить возможности языка Java и позволяющий писать код в браузере. Настройка не требуется, введите свой фрагмент кода Java и запустите его Это реализация jshell, только в браузере, работающая на Oracle JDK Java 21. С ее помощью вы можете быстро попробовать запустить какие-то строки кода, какой-то алгоритм без установки на свой компьютер JDK.

Изучить

#туториад
#вопросы_с_собеседования

Каков порядок вызова конструкторов и блоков инициализации с учётом иерархии классов?

Сначала вызываются все статические блоки в очередности от первого статического блока корневого предка и выше по цепочке иерархии до статических блоков самого класса.

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

🔹 Parent static block(s) →
🔹 Child static block(s) →
🔹 Grandchild static block(s) →
🔹 Parent non-static block(s) →
🔹 Parent constructor →
🔹 Child non-static block(s) →
🔹 Child constructor →
🔹 Grandchild non-static block(s) →
🔹 Grandchild constructor

public class MainClass {
public static void main(String args[]) {
System.out.println(TestClass.v);
new TestClass().a();
}
}

public class TestClass {
public static String v = "Some val"; {
System.out.println("!!! Non-static initializer");
}
static {
System.out.println("!!! Static initializer");
}
public void a() {
System.out.println("!!! a() called");
}
}


Результат выполнения:

!!! Static initializer
Some val
!!! Non-static initializer
!!! a() called
🤔 Очередной #дайджест инструментов, материалов и новостей

Nes4j — Nintendo симулятор

Не используйте Singleton в своих проектах — принципы SOLID на страже порядка

Микросервисы Java — в руководстве показано, как создать архитектуру микросервисов с помощью Spring Boot и Spring Cloud

Байт-код — это просто — как сделать DI по-настоящему быстрым

Введение в Apache Flink — осваиваем фреймворк на реальных примерах
🧠⚙️ Как научиться критически мыслить: 6 эффективных способов

Критическое мышление позволяет принимать решения в условиях неопределённости, доносить свои идеи до команды, видеть ошибки в логике, замечать манипуляции. В статье рассказываем, откуда пошло это понятие и как можно развить критическое мышление.

💬Считаете ли вы, что у вас развито критическое мышление?

👍 — да, и это очень помогает мне в жизни и работе
🤔 — да, но оно ничем не помогает
🥱 — нет
💥🗣️ Моментальная аналитика с помощью Spring + Redis

В каждой крупной компании есть аналитические сервисы, и компания спикера — не исключение.

Он вкратце расскажет об одном из аналитических сервисов своего проекта и о некоторых сложностях, с которыми его команда столкнулась в процессе разработки. Сломает стереотип о том, что Redis — это просто база для кэша. Поговорит о возможностях Redis в качестве БД для аналитики, а также о том, как с ним работать на стеке Java + Spring. Покажет схему работы с двумя БД, примеры кода и демо проекта.

В заключении спикер расскажет о том, что в команде получили на выходе (производительность), и о подводных камнях, с которыми столкнулись.

Смотреть

#видео