Библиотека Java разработчика
Відкрити в Telegram
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP
Показати більше9 992
Підписники
-424 години
-177 днів
-6030 днів
Архів дописів
Совет по Spring 💡
EnvironmentCapable
Интерфейс, предоставляющий доступ к среде Spring, позволяющий получать свойства, профили и другую информацию, связанную со средой. 🔥
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/env/EnvironmentCapable.html
👉@BookJavaКак создать пару публичный/приватный ключ?
Не следует путать генерацию ключей с задачей их чтения, о которой здесь писали ранее.
Для генерации ключей используется
KeyPairGenerator. Архитектурно он похож на читающую ключи KeyFactory: реализации для разных алгоритмов также поставляются через SPI, доступ к ним также осуществляется через getInstance.
Перед использованием, генератор нужно инициализировать. Для этого методом initialize устанавливаются три опциональных параметра:
• Желаемый размер ключа;
• Источник случайных значений типа SecureRandom;
• Специфичные для алгоритма настройки в объекте подкласса AlgorithmParameterSpec.
Если к моменту создания ключей генератор не инициализирован, или при инициализации часть параметров не указана, эти параметры примут дефолтные значения. Каждый провайдер устанавливает свои собственные дефолты.
Сам метод генерации generateKeyPair не требует параметров. Его можно вызывать повторно для генерации нескольких разных пар. Результат его вызова – объект KeyPair, который просто хранит под уже знакомыми нам интерфейсами PrivateKey и PublicKey пару инстансов специфичных для алгоритма подклассов.
👉@BookJava🔥 Освойте один из важнейших инструментов Java-разработчика
На бесплатном практическом уроке «Основы работы с Spring Data JDBC» от OTUS и Александра Фисунова — Senior Kotlin Developer в SSP Software на проекте ВТБ.
На вебинаре:
- разберемся, как работать с реляционными базами данных из Spring Boot приложения с использованием Spring Data JDBC;
- проведем небольшое сравнение с модулем Spring Data JPA;
- ответим на все возникающие вопросы.
📢📢 Встречаемся 30 января в 20:00 мск. Открытый урок проходит в преддверии обновленного запуска курса «Java Developer. Professional».
➡️ Пройдите короткий тест прямо сейчас, чтобы посетить бесплатный урок и получить запись: https://vk.cc/cu6v3u
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576Подборка из 10 репозиториев GitHub для изучения Java
1. Awesome Java: https://github.com/akullpp/awesome-java
2. Modern Java - A Guide to Java 8: https://github.com/winterbe/java8-tutorial
3. Java Design Patterns: https://github.com/iluwatar/java-design-patterns
4. Spring Framework: https://github.com/spring-projects/spring-framework
5. Algorithms: https://github.com/TheAlgorithms/Java
6. Spring Boot Tutorial: https://github.com/RameshMF/spring-boot-tutorial
7. Baeldung Java and Spring Tutorials: https://github.com/eugenp/tutorials
8. Google Style Guides: https://github.com/google/styleguide
9. Netflix - Open Source Java Projects: https://github.com/Netflix
10. Ultimate Java Resources: https://github.com/dubesar/Ultimate-Java-Resources
👉@BookJava
Как архитекторам и разработчикам попасть в крупный инновационный проект?
Изучить микросервисную архитектуру под руководством топовых специалистов крупнейших компаний всего за 5 месяцев на онлайн-курсе от OTUS.
Программа идеально подходит архитекторам, разработчикам, системным аналитикам, администраторам и DevOps, которые хотят выйти на новый карьерный уровень. Доступна рассрочка на обучение.
Курс нацелен на глубокое изучение темы и получение практических навыков, в рамках обучения вы рассмотрите работу с очень популярными сейчас инструментами – Kubernetes и Docker.
Переходите на сайт, чтобы записаться на 2 пробных бесплатныx открытых урока:
✅ «CAP-теорема и управление ожиданиями пользователей» (регистрация на урок без тестирования)
✅ «Паттерны RESTful API» (регистрация на урок через тестирование)
Совет по Java 💡
Чтобы сделать большие и сложные цепочки компараторов более читаемыми, мне нравится присваивать компараторы переменным, имена которых начинаются с "by". Таким образом, вызов
sorted() становится меньше и читается почти как естественный язык. Кроме того, вы можете использовать статический импорт.
👉@BookJavaОпишите жизненный цикл Spring Bean
Beans – центральный объект заботы Spring Framework. За кулисами фреймворка с ними происходит множество процессов. Во многие из них можно вмешаться, добавив собственную логику в разные этапы жизненного цикла. Через следующие этапы проходит каждый отдельно взятый бин:
1. Инстанцирование объекта. Техническое начало жизни бина, работа конструктора его класса;
2. Установка свойств из конфигурации бина, внедрение зависимостей;
3. Нотификация aware-интерфейсов.
BeanNameAware, BeanFactoryAware и другие. Мы уже писали о таких интерфейсах ранее. Технически, выполняется системными подтипами BeanPostProcessor, и совпадает с шагом 4;
4. Пре-инициализация – метод postProcessBeforeInitialization() интерфейса BeanPostProcessor;
5. Инициализация. Разные способы применяются в таком порядке:
• Метод бина с аннотацией @PostConstruct из стандарта JSR-250 (рекомендуемый способ);
• Метод afterPropertiesSet() бина под интерфейсом InitializingBean;
• Init-метод. Для отдельного бина его имя устанавливается в параметре определения initMethod. В xml-конфигурации можно установить для всех бинов сразу, с помощью default-init-method;
6. Пост-инициализация – метод postProcessAfterInitialization() интерфейса BeanPostProcessor.
Когда IoC-контейнер завершает свою работу, мы можем кастомизировать этап штатного уничтожения бина. Как со всеми способами финализации в Java, при жестком выключении (kill -9) гарантии вызова этого этапа нет. Три альтернативных способа «деинициализации» вызываются в том же порядке, что симметричные им методы инициализации:
1. Метод с аннотацией @PreDestroy;
2. Метод с именем, которое указано в свойстве destroyMethod определния бина (или в глобальном default-destroy-method);
3. Метод destroy() интерфейса DisposableBean.
Не следует путать жизненный цикл отдельного бина с жизненным циклом контекста и этапами подготовки фабрик бинов. О них мы поговорим в будущих публикациях.
👉@BookJavaПодборка 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
🚀 Расширенные советы по Spring Boot🚀
Создание собственного FailureAnalyzer
Перехват исключений при запуске и преобразование их в человекочитаемые сообщения эффективно достигается с помощью FailureAnalyzer в Spring Boot 🔥.
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto.application.failure-analyzer
👉@BookJava
Как мы начали использовать виртуальные потоки Java 21 и на раз-два получили дедлок в TPC-C для PostgreSQL
В этом посте мы расскажем о примере дедлока в TPC-C для PostgreSQL, причиной которого является исключительно переход на виртуальные потоки Java 21 - и никаких проблем обедающих философов.
https://habr.com/ru/companies/ydb/articles/786550/
original https://blog.ydb.tech/how-we-switched-to-java-21-virtual-threads-and-got-deadlock-in-tpc-c-for-postgresql-cca2fe08d70b
👉@BookJava
Какими инструментами нужно владеть для работы с высоконагруженной архитектурой?
Расскажем на бесплатном практическом уроке «Роль Tarantool в высоконагруженной архитектуре» от OTUS.
На вебинаре разберём:
- особенности, функционал и преимущества Tarantool;
- архитектурные шаблоны и примеры его применения;
- итоги и вопросы.
Урок будет полезен для разработчиков, сисадминов и архитекторов, интересующихся высоконагруженными системами.
Занятие пройдёт 31 января в 20:00 мск и будет приурочено к старту курса «Highload Architect». Доступна рассрочка на обучение!
Пройдите короткое тестирование прямо сейчас, чтобы занять место на открытом уроке: https://vk.cc/ctY5LI
Когда ломается магия фреймворков...
Более чем за десять лет работы со Spring Framework и Enterprise Java я успел полюбить Spring Framework, возненавидеть и в итоге пересмотреть свои подходы к работе с ним. То же самое касается работы с рефлексией в целом и работы с АОП в частности.
источник
👉@BookJava
Ловушка тестирования простой оркестровки
Код оркестровки организует вызовы других компонентов (зависимостей) в определенный процесс. Такие части кода иногда называют координаторами или контроллерами. Оркестровочный код обычно прост. В нем нет (или почти нет) условной логики или алгоритмической сложности. Его основная задача - делегировать работу соответствующим зависимостям в определенном порядке. Давайте рассмотрим пример, чтобы лучше проиллюстрировать это.
class Orchestrator {
// ...
// (injected) dependencies
private final Service service; // business logic
private final Mapper mapper; // field-to-field mapping
private final Repository repository; // glue code
public ImportantObject orchestrate(ImportantDto dto) {
ImportantObject important = mapper.toImportantObject(dto);
ImportantObject processed = service.process(important);
return repository.save(processed);
}
}
https://mikemybytes.com/2024/01/17/the-trap-of-testing-simple-orchestration/
👉@BookJava⚡️ Тест по Java от OTUS
Проверь насколько хорошо ты знаешь Java и готов освоить Spring!
Ответишь — пройдешь на продвинутый курс "Разработчик на Spring Framework" от OTUS по специальной цене.
👉 ПРОЙТИ ТЕСТ: https://vk.cc/ctXWpa
🎫 Курс можно приобрести в рассрочку
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ruСовет Spring Framework💡
Вы можете автосопрягать несколько бинов, реализующих определенный интерфейс, в список, содержащий все реализации. Определите список с общим типом, который вы хотите использовать. Вы можете использовать инъекцию конструктора, как показано на картинке, или инъекцию поля.
👉@BookJava
Совет 💡
Вы можете инжектировать (autowire) бины, которые могут отсутствовать, обернув их в
java.util.Optional. Таким образом вы сообщаете, что этот бин является необязательным, избегаете исключения, если он не существует, и можете аккуратно обработать его отсутствие с помощью Optional API.
👉@BookJava❓ Как Java-разработчику сделать прорыв в карьере в 2024?
➡️ Прийти на обновленную программу онлайн-курса «Java Developer. Professional» от OTUS!
- Обучение также подходит опытным разработчикам на других языках.
Что ждёт вас в новой расширенной программе:
✔️ еще больше вебинаров по наиболее актуальным и сложным темам;
✔️ возможность выбирать домашние задания под свой уровень подготовки;
✔️ нацеленность на понимание — разбор инструментов изнутри;
✔️ фокус на самом часто используемом стеке технологий.
⚡️ Не пропустите первый набор группы с расширенной программой и пройдите вступительный тест прямо сейчас: https://vk.cc/ctWViy
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576🚀 Spring Retry 🚀
org.springframework.retry.support.RetryTemplate
Реализуйте устойчивые операции в приложениях Spring. Определите поведение повторных попыток для надежной обработки ошибок. 🔥
https://docs.spring.io/spring-retry/docs/api/current/org/springframework/retry/support/RetryTemplate.html
👉@BookJava
Spring Cloud Config и Git. Хранение и распространение конфигураций приложений
Меня зовут Дмитрий Демченко. Я Java разработчик. На проектах я активно применяю новые технологии и подходы при разработке приложений, в том числе Spring Cloud и компоненты, входящие в общую экосистему этой технологии.
В данной статье я хочу поделиться с вами своим подходом к конфигурации Spring Boot приложений в облаке, где файлы конфигураций приложений находятся в Git репозитории, и который я применяю в работе и считаю одним из самых простых, удобных и легко поддерживаемых.
https://habr.com/ru/articles/764402/
👉@BookJava
Ожидания пользователей > реальное приложение – почему так?
Расскажет опытный эксперт на бесплатном практическом уроке «CAP-теорема и управление ожиданиями пользователей» от OTUS.
На вебинаре разберём:
1. Введение в CAP-теорему
2. Технические ограничения и ожидания пользователей
3. Реальные кейсы и способы решения
Урок будет полезен для разработчиков, сисадминов, аналитиков, DevOps и архитекторов.
Занятие пройдёт 23 января в 20:00 мск и будет приурочено к старту курса «Microservice Architecture». Доступна рассрочка на обучение.
Для бесплатного участия регистрируйтесь прямо сейчас: https://vk.cc/ctWwBU
