This media is not supported in your browser
VIEW IN TELEGRAM
Паттерны проектирования программ на языке Java
Фабричный метод (FactoryMethod)
Абстрактная фабрика (Abstract Factory)
Строитель (Builder)
Одиночка (Singleton)
Прототип (Prototype)
Адаптер (Adapter) Реализация на уровне объектов.
Адаптер (Adapter) Реализация на уровне классов.
Мост (Bridge)
Компоновщик (Composite)
Декоратор (Decorator)
Фасад (Facade)
Легковес (Flyweight)
Заместитель (Proxy)
Цепочка обязанностей (Chain of responsibility)
Команда (Command)
Итератор (Iterator)
Посредник (Mediator)
Снимок (Memento)
Наблюдатель (Observer)
Состояние (State)
Стратегия (Strategy)
Шаблонный метод (Template method)
Посетитель (Visitor)
Полный курс на youtube
👉@BookJava
Фабричный метод (FactoryMethod)
Абстрактная фабрика (Abstract Factory)
Строитель (Builder)
Одиночка (Singleton)
Прототип (Prototype)
Адаптер (Adapter) Реализация на уровне объектов.
Адаптер (Adapter) Реализация на уровне классов.
Мост (Bridge)
Компоновщик (Composite)
Декоратор (Decorator)
Фасад (Facade)
Легковес (Flyweight)
Заместитель (Proxy)
Цепочка обязанностей (Chain of responsibility)
Команда (Command)
Итератор (Iterator)
Посредник (Mediator)
Снимок (Memento)
Наблюдатель (Observer)
Состояние (State)
Стратегия (Strategy)
Шаблонный метод (Template method)
Посетитель (Visitor)
Полный курс на youtube
👉@BookJava
❤🔥6👍1
Совет 💡
Добавьте в JDBC URL свойство
👉@BookJava
Добавьте в JDBC URL свойство
ApplicationName (зависит от БД, не в каждой БД оно есть!). Таким образом, в списке сессий вместо имени JDBC-драйвера будет отображаться имя набора. Это поможет при поиске неисправностей, когда несколько приложений подключаются к одной и той же БД.👉@BookJava
👍10🔥1
Микросервисы на основе событий с Kafka Streams и Spring Boot
Всем привет! Это моя первая статья на Habr, так что не судите строго за стиль, а вот по содержанию буду рад любой конструктивной критике.
Статья основана на публикациях Confluent о том, как можно реализовать микросервисную архитектуру на основе событий с помощью Kafka Streams и KSQL.
https://habr.com/ru/articles/775900/
👉@BookJava
Всем привет! Это моя первая статья на Habr, так что не судите строго за стиль, а вот по содержанию буду рад любой конструктивной критике.
Статья основана на публикациях Confluent о том, как можно реализовать микросервисную архитектуру на основе событий с помощью Kafka Streams и KSQL.
https://habr.com/ru/articles/775900/
👉@BookJava
👍6❤1
Подборка Telegram каналов для программистов
Системное администрирование 📌
https://t.iss.one/sysadmin_girl Девочка Сисадмин
https://t.iss.one/srv_admin_linux Админские угодья
https://t.iss.one/linux_srv Типичный Сисадмин
https://t.iss.one/linux_odmin Linux: Системный администратор
https://t.iss.one/devops_star DevOps Star (Звезда Девопса)
https://t.iss.one/i_linux Системный администратор
https://t.iss.one/linuxchmod Linux
https://t.iss.one/sys_adminos Системный Администратор
https://t.iss.one/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.iss.one/sysadminof Книги для админов, полезные материалы
https://t.iss.one/i_odmin Все для системного администратора
https://t.iss.one/i_odmin_book Библиотека Системного Администратора
https://t.iss.one/i_odmin_chat Чат системных администраторов
https://t.iss.one/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://t.iss.one/sysadminoff Новости Линукс Linux
1C разработка 📌
https://t.iss.one/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
https://t.iss.one/cpp_lib Библиотека C/C++ разработчика
https://t.iss.one/cpp_knigi Книги для программистов C/C++
https://t.iss.one/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://t.iss.one/pythonofff Python академия. Учи Python быстро и легко🐍
https://t.iss.one/BookPython Библиотека Python разработчика
https://t.iss.one/python_real Python подборки на русском и английском
https://t.iss.one/python_360 Книги по Python Rus
Java разработка 📌
https://t.iss.one/BookJava Библиотека Java разработчика
https://t.iss.one/java_360 Книги по Java Rus
https://t.iss.one/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://t.iss.one/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://t.iss.one/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://t.iss.one/developer_mobila Мобильная разработка
https://t.iss.one/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://t.iss.one/frontend_1 Подборки для frontend разработчиков
https://t.iss.one/frontend_sovet Frontend советы, примеры и практика!
https://t.iss.one/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://t.iss.one/game_devv Все о разработке игр
Библиотеки 📌
https://t.iss.one/book_for_dev Книги для программистов Rus
https://t.iss.one/programmist_of Книги по программированию
https://t.iss.one/proglb Библиотека программиста
https://t.iss.one/bfbook Книги для программистов
https://t.iss.one/books_reserv Книги для программистов
БигДата, машинное обучение 📌
https://t.iss.one/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
https://t.iss.one/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.iss.one/coddy_academy Полезные советы по программированию
https://t.iss.one/rust_lib Полезный контент по программированию на Rust
https://t.iss.one/golang_lib Библиотека Go (Golang) разработчика
https://t.iss.one/itmozg Программисты, дизайнеры, новости из мира IT
https://t.iss.one/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://t.iss.one/nodejs_lib Подборки по Node js и все что с ним связано
https://t.iss.one/ruby_lib Библиотека Ruby программиста
QA, тестирование 📌
https://t.iss.one/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://t.iss.one/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://t.iss.one/thehaking Канал о кибербезопасности
https://t.iss.one/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
https://t.iss.one/ux_web Статьи, книги для дизайнеров
Английский 📌
https://t.iss.one/UchuEnglish Английский с нуля
Математика 📌
https://t.iss.one/Pomatematike Канал по математике
https://t.iss.one/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак📌
https://t.iss.one/Excel_lifehack
https://t.iss.one/tikon_1 Новости высоких технологий, науки и техники💡
https://t.iss.one/mir_teh Мир технологий (Technology World)
Вакансии 📌
https://t.iss.one/sysadmin_rabota Системный Администратор
https://t.iss.one/progjob Вакансии в IT
Системное администрирование 📌
https://t.iss.one/sysadmin_girl Девочка Сисадмин
https://t.iss.one/srv_admin_linux Админские угодья
https://t.iss.one/linux_srv Типичный Сисадмин
https://t.iss.one/linux_odmin Linux: Системный администратор
https://t.iss.one/devops_star DevOps Star (Звезда Девопса)
https://t.iss.one/i_linux Системный администратор
https://t.iss.one/linuxchmod Linux
https://t.iss.one/sys_adminos Системный Администратор
https://t.iss.one/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.iss.one/sysadminof Книги для админов, полезные материалы
https://t.iss.one/i_odmin Все для системного администратора
https://t.iss.one/i_odmin_book Библиотека Системного Администратора
https://t.iss.one/i_odmin_chat Чат системных администраторов
https://t.iss.one/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://t.iss.one/sysadminoff Новости Линукс Linux
1C разработка 📌
https://t.iss.one/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
https://t.iss.one/cpp_lib Библиотека C/C++ разработчика
https://t.iss.one/cpp_knigi Книги для программистов C/C++
https://t.iss.one/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://t.iss.one/pythonofff Python академия. Учи Python быстро и легко🐍
https://t.iss.one/BookPython Библиотека Python разработчика
https://t.iss.one/python_real Python подборки на русском и английском
https://t.iss.one/python_360 Книги по Python Rus
Java разработка 📌
https://t.iss.one/BookJava Библиотека Java разработчика
https://t.iss.one/java_360 Книги по Java Rus
https://t.iss.one/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://t.iss.one/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://t.iss.one/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://t.iss.one/developer_mobila Мобильная разработка
https://t.iss.one/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://t.iss.one/frontend_1 Подборки для frontend разработчиков
https://t.iss.one/frontend_sovet Frontend советы, примеры и практика!
https://t.iss.one/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://t.iss.one/game_devv Все о разработке игр
Библиотеки 📌
https://t.iss.one/book_for_dev Книги для программистов Rus
https://t.iss.one/programmist_of Книги по программированию
https://t.iss.one/proglb Библиотека программиста
https://t.iss.one/bfbook Книги для программистов
https://t.iss.one/books_reserv Книги для программистов
БигДата, машинное обучение 📌
https://t.iss.one/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
https://t.iss.one/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.iss.one/coddy_academy Полезные советы по программированию
https://t.iss.one/rust_lib Полезный контент по программированию на Rust
https://t.iss.one/golang_lib Библиотека Go (Golang) разработчика
https://t.iss.one/itmozg Программисты, дизайнеры, новости из мира IT
https://t.iss.one/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://t.iss.one/nodejs_lib Подборки по Node js и все что с ним связано
https://t.iss.one/ruby_lib Библиотека Ruby программиста
QA, тестирование 📌
https://t.iss.one/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://t.iss.one/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://t.iss.one/thehaking Канал о кибербезопасности
https://t.iss.one/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
https://t.iss.one/ux_web Статьи, книги для дизайнеров
Английский 📌
https://t.iss.one/UchuEnglish Английский с нуля
Математика 📌
https://t.iss.one/Pomatematike Канал по математике
https://t.iss.one/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак📌
https://t.iss.one/Excel_lifehack
https://t.iss.one/tikon_1 Новости высоких технологий, науки и техники💡
https://t.iss.one/mir_teh Мир технологий (Technology World)
Вакансии 📌
https://t.iss.one/sysadmin_rabota Системный Администратор
https://t.iss.one/progjob Вакансии в IT
🔥1
👍7
Совет по Java 💡
Использование try-with-resources для автоматического управления ресурсами
Оператор
👉@BookJava
Использование try-with-resources для автоматического управления ресурсами
Оператор
try-with-resources гарантирует, что каждый ресурс будет закрыт в конце оператора.
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
👉@BookJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8😁1🤯1
Что такое «ссылка на метод»?
Если существующий в классе метод уже делает все, что необходимо, то можно воспользоваться механизмом method reference (ссылка на метод) для непосредственной передачи этого метода. Такая ссылка передается в виде:
⚫️имя_класса::имя_статического_метода для статического метода;
⚫️объект_класса::имя_метода для метода экземпляра;
⚫️название_класса::new для конструктора.
Результат будет в точности таким же, как в случае определения лямбда-выражения, которое вызывает этот метод.
Ссылки на методы потенциально более эффективны, чем использование лямбда-выражений. Кроме того, они предоставляют компилятору более качественную информацию о типе и при возможности выбора между использованием ссылки на существующий метод и использованием лямбда-выражения, следует всегда предпочитать использование ссылки на метод.
👉@BookJava
Если существующий в классе метод уже делает все, что необходимо, то можно воспользоваться механизмом method reference (ссылка на метод) для непосредственной передачи этого метода. Такая ссылка передается в виде:
⚫️имя_класса::имя_статического_метода для статического метода;
⚫️объект_класса::имя_метода для метода экземпляра;
⚫️название_класса::new для конструктора.
Результат будет в точности таким же, как в случае определения лямбда-выражения, которое вызывает этот метод.
private interface Measurable {
public int length(String string);
}
public static void main(String[] args) {
Measurable a = String::length;
System.out.println(a.length("abc"));
}
Ссылки на методы потенциально более эффективны, чем использование лямбда-выражений. Кроме того, они предоставляют компилятору более качественную информацию о типе и при возможности выбора между использованием ссылки на существующий метод и использованием лямбда-выражения, следует всегда предпочитать использование ссылки на метод.
👉@BookJava
👍8❤1
Использование var для локального выведения типа переменной (Java 10+):
С помощью var можно сократить шаблонный код, если тип переменной может быть выведен компилятором.
👉@BookJava
С помощью var можно сократить шаблонный код, если тип переменной может быть выведен компилятором.
var list = new ArrayList<String>();
list.add("Hello");
list.add("World");
for (var item : list) {
System.out.println(item);
}
👉@BookJava
👍6👎3
Использование Optional для избежания NullPointerException:
Optional — это контейнер, который может содержать или не содержать ненулевое значение.
👉@BookJava
Optional — это контейнер, который может содержать или не содержать ненулевое значение.
Optional<String> optional = Optional.ofNullable(getValue());
optional.ifPresentOrElse(
value -> System.out.println("Value is present: " + value),
() -> System.out.println("Value is absent")
);
👉@BookJava
👍11
Извлечение структурированных данных из изображений с использованием AI в Java
По мере того, как модели ИИ становятся всё лучше в обработке мультимодального ввода, включая изображения, перед нами открываются новые возможности для создания бизнес-приложений. В этом посте я рассмотрю, как с помощью Open AI и Spring AI извлечь информацию из изображения, которую можно использовать в нашем приложении.
В посте будут представлены только ключевые фрагменты кода. Ссылка на полный исходный код в моём репозитории GitHub.
https://vaadin.com/blog/extracting-structured-data-from-images-using-ai-in-java
👉@BookJava
По мере того, как модели ИИ становятся всё лучше в обработке мультимодального ввода, включая изображения, перед нами открываются новые возможности для создания бизнес-приложений. В этом посте я рассмотрю, как с помощью Open AI и Spring AI извлечь информацию из изображения, которую можно использовать в нашем приложении.
В посте будут представлены только ключевые фрагменты кода. Ссылка на полный исходный код в моём репозитории GitHub.
https://vaadin.com/blog/extracting-structured-data-from-images-using-ai-in-java
👉@BookJava
👍6
Совет
По умолчанию при обновлении сущности Hibernate обновляет все ее поля. Вы можете использовать аннотацию
👉@BookJava
По умолчанию при обновлении сущности Hibernate обновляет все ее поля. Вы можете использовать аннотацию
@DynamicUpdate на объекте @Entity и Hibernate будет обновлять только те столбцы, которые изменились.👉@BookJava
👍28❤3👎1
Совет SpringBoot
Вы можете запустить метод в Spring
👉@BookJava
Вы можете запустить метод в Spring
@Service сразу после запуска приложения, аннотируя его с помощью@EventListener (ApplicationReadyEvent.class). Метод не может иметь параметров. Иногда я неправильно использую его, чтобы быстро протестировать определенный метод Spring Service.👉@BookJava
👍10
Использование лямбда-выражений и Streams:
Лямбда-выражения и streams делают код более лаконичным и читаемым.
👉@BookJava
Лямбда-выражения и streams делают код более лаконичным и читаемым.
List<String> names = Arrays.asList("John", "Jane", "Jack", "Doe");
names.stream()
.filter(name -> name.startsWith("J"))
.map(String::toUpperCase)
.forEach(System.out::println);
👉@BookJava
👍8❤3
Использование метода
Метод
👉@BookJava
String.join: Метод
String.join можно использовать для объединения строк с заданным разделителем.
List<String> items = Arrays.asList("Apple", "Banana", "Cherry");
String result = String.join(", ", items);
System.out.println(result); // Output: Apple, Banana, Cherry
👉@BookJava
👍9🤓4
Использование
👉@BookJava
StringBuilder для эффективной работы со строками: StringBuilder используется для операций с изменяемыми строками, что улучшает производительность.
StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" ");
sb.append("World");
System.out.println(sb.toString()); // Output: Hello World
👉@BookJava
👍4🎉1
Использование
Метод
👉@BookJava
Map.computeIfAbsent для упрощённой инициализации Map: Метод
computeIfAbsent помогает инициализировать и вычислять значения, если они отсутствуют.
Map<String, List<String>> map = new HashMap<>();
map.computeIfAbsent("fruits", k -> new ArrayList<>()).add("Apple");
map.computeIfAbsent("fruits", k -> new ArrayList<>()).add("Banana");
System.out.println(map); // Output: {fruits=[Apple, Banana]}
👉@BookJava
👍7🥱5🤝2
🚀 Spring Boot с DevTools для Live Reload🚀
Ускорьте разработку с помощью DevTools! 🔥
https://docs.spring.io/spring-boot/reference/using/devtools.html
👉@BookJava
Ускорьте разработку с помощью DevTools! 🔥
https://docs.spring.io/spring-boot/reference/using/devtools.html
👉@BookJava
👍4👎1
👩💻 «OpenAPI + Spring».
Приглашаем на открытый урок, где мы разберем:
✔️ Что такое OpenAPI и для чего она нужна.;
✔️ Генерация спецификаций;
✔️ Интеграция OpenAPI в Spring-приложения;
✔️ Советы по масштабируемости и поддержке.
🗓 23 января в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Разработчик на Spring Framework»
🔗 Ссылка на регистрацию : https://vk.cc/cHlYk4
Приглашаем на открытый урок, где мы разберем:
🗓 23 января в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Разработчик на Spring Framework»
🔗 Ссылка на регистрацию : https://vk.cc/cHlYk4
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ruPlease open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
Для чего нужно ключевое слово super?
Как и многие другие ключевые слова,
1. Задать нижнюю границу generic-типа:
2. Обратиться к члену класса-родителя, который перекрыт (shadowed) членами наследника или локальными переменными:
3. Вызвать в конструкторе конструктор родителя:
4. В случае неопределенности, уточнить родительский тип
👉@BookJava
Как и многие другие ключевые слова,
super имеет несколько разных значений в зависимости от контекста:1. Задать нижнюю границу generic-типа:
Consumer<? super Number>2. Обратиться к члену класса-родителя, который перекрыт (shadowed) членами наследника или локальными переменными:
int foo = super.foo3. Вызвать в конструкторе конструктор родителя:
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
👍4