Библиотека 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
Совет по SpringFramework 💡

В SpringFramework есть класс DataSize, который может помочь вам с преобразованием между единицами размера от байтов до терабайтов. Сумма должна быть типа long. Дробные числа не поддерживаются.

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/unit/DataSize.html

👉@BookJava
👍6
Когда используют Aware интерфейсы в Spring?

В Spring Framework существует большое количество «глобальных» (в рамках какого-либо скоупа) сущностей-синглтонов, которые не являются бинами. Естественно, все сразу они не нужны ни одному бину, обычный механизм внедрения для них не работает. Но тем не менее, должен существовать способ воспользоваться их функциональностью.

Маркерный интерфейс Aware служит родителем большому количеству интерфейсов с именами *Aware. Каждый из них, при реализации, доставляет бину какую-то специфичную для себя сущность. Так, например, компонент, которому нужно обратиться к контексту приложения, должен реализовывать ApplicationContextAware.

Технически, сами интерфейсы ничего не делают. Интерфейс FooAware обычно объявляет единственный метод void setFoo(Foo value). Через этот метод связанный с интерфейсом BeanPostProcessor передаст в бин нужную сущность.

Если бин реализует ServletContextAware, то в процессе инициализации бина к нему придет ServletContextAwareProcessor, и вызовет setServletContext с контекстом сервлета в качестве параметра.

👉@BookJava
👍5👎1
Media is too big
VIEW IN TELEGRAM
Моментальная аналитика с помощью Spring + Redis. Это возможно?
Артем Артемьев

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

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

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

Презентация к докладу

источник

👉@BookJava
👍3
Media is too big
VIEW IN TELEGRAM
Хранилище файлов. Java + WebDav

Java + WebDav - загружаем файл на webdav через Rest запрос.

00:00 Приветствие
00:34 Spring Init
00:55 Docker Hub
01:54 docker-compose
04:25 webdav.conf
06:00 application.yaml
06:50 Sardine
07:36 WebDavConfig
09:15 WebConfig
11:40 FileService
14:09 Controller
17:22 Docker Fix
17:47 Postman
18:16 что не так?
20:46 Подписывайтесь

источник

👉@BookJava
👍5
В чем разница между Iterator и ListIterator?

— Iterator может итерироваться только вперед, а ListIterator может и вперед и назад.

— ListIterator имеет дополнительные методы previous(), hasPrevious(), add(), set().

— ListIterator позволяет получить индекс текущего элемента.

— ListIterator может начать итерацию с произвольного индекса списка, а Iterator только с начала.

— ListIterator можно получить только из объектов, реализующих List, а Iterator из любой коллекции.

— ListIterator является более функциональным и позволяет вносить изменения в список во время итерации, Iterator — только читать.

— Итераторы безопасны для использования в многопоточных приложениях, а ListIterator — нет.

👉@BookJava
👍12
Реализации Microkernel архитектуры с помощью Java OSGI

Я хотел бы поделиться опытом реализации микроядерной архитектуры (microkernel) на Java с помощью OSGI (Open Service Gateway Initiative). Этот подход является промежуточным вариантом между микро-сервисной и монолитной архитектурой. С одной стороны присутствует разделение между компонентами на уровне VM с другой - межкомпонентное взаимодействие происходит без участия сети, что ускоряет запросы.

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

👉@BookJava
👍3
Когда использовать WEB-INF, а когда META-INF?

В корне архива java-приложения часто встречаются директории WEB-INF и META-INF. Обе директории хранят в себе различные файлы с метаинформацией о программе, обычно в текстовом виде: yaml, xml, json, обычный текст.

META-INF используется в архивах всех типов. Главный файл этой директории – MANIFEST.MF. Там же хранятся
• Объявления провайдеров SPI;
• Подпись архива: файлы .SF, .DSA, .RSA;
• INDEX.LIST с подсказками о местонахождении пакетов для загрузчика.
Иногда (не часто) приложения добавляют туда свои статические ресурсы, так как эта директория попадает в classpath и доступна в рантайме.

WEB-INF используется только в web-архивах (.war). Она не заменяет, но дополняет META-INF. В ней хранится:
• Главный файл web-приложения web.xml;
• Дескрипторы тегов .TLD;
• Поддиректория classes/ с классами web-приложения;
• Поддиректория lib/ с .jar-библиотеками зависимостей;
• Поддиректория tag/ с файлами тегов.

👉@BookJava
👍7
Quarkus — горячий тренд Java-разработки

Quarks ускоряет загрузку Java-приложений в CloudEra
Если вы занимаетесь разработкой Java-приложений, наверняка слышали о революционном фреймворке Quarkus. Если же еще не слышали, вот его краткое описание: Quarkus  —  это Kubernetes-нативный Java-стек, созданный для разработчиков, ставящих во главу угла производительность, гибкость и облачную нативную архитектуру.

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

https://medium.com/javarevisited/exciting-news-in-the-world-of-java-development-4e07766d5a1f

👉@BookJava
👍93👎2
Совет по Spring Boot 🚀

Создание собственного FailureAnalyzer

Перехват исключений при запуске и преобразование их в человекочитаемые сообщения эффективно достигается с помощью анализатора отказов в Spring Boot 🔥.

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto.application.failure-analyzer

👉@BookJava
🎉4👍3
Распределённые транзакции

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

Каждый из рассмотренных вариантов имеет свои достоинства и недостатки, и может быть применен в промышленной разработке.

https://developers.redhat.com/articles/2021/09/21/distributed-transaction-patterns-microservices-compared

👉@BookJava
👍4
Mastering the Main Thread in Java

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

https://www.developer.com/java/java-main-thread/

👉@BookJava
👍5
Перед вами — книга-метод, книга-наставник, способная перевернуть мышление и помочь выработать осознанный подход к работе и жизни в целом путём высокоуровневого планирования.

В своей второй книге IT-архитектор, методолог, педагог Александр Бындю раскрывает наиболее эффективный на сегодняшний день метод стратегического планирования, получивший название «Карта гипотез». Карта учит, как достигать намеченной цели через гипотезы, и служит навигатором на этом пути. В основу книги легли годы практики, и с уверенностью можно сказать, что Карта гипотез позволяет создать стратегию достижения для самых амбициозных целей.

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

Ознакомиться с книгой
Для чего нужно ключевое слово super?

Как и многие другие ключевые слова, super имеет несколько разных значений в зависимости от контекста:

1. Задать нижнюю границу generic-типа: Consumer<? super Number>
2. Обратиться к члену класса-родителя, который перекрыт (shadowed) членами наследника или локальными переменными: int foo = super.foo
3. Вызвать в конструкторе конструктор родителя: SubClass() { super("subclass param"); }
4. В случае неопределенности, уточнить родительский тип

interface A {
default int foo() { return 1; }
}

interface B {
default int foo() { return 2; }
}

class C implements A, B {
@Override
public int foo() {
return B.super.foo() ;
}
}


👉@BookJava
👍7
Подборка 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
🔥2