Forwarded from Java News
Prostore — простой Event sourcing + CQRS фреймворк
На данный момент на рынке мало Event sourcing + CQRS фреймворков. А те, что есть, непопулярны и имеют слабую поддержку, поэтому многие создают свои in-house решения. В этой статье расскажу о выполненном командой «Programming Store» проекте Prostore, который может послужить примером при создании вашего собственного решения.
Читать статью
На данный момент на рынке мало Event sourcing + CQRS фреймворков. А те, что есть, непопулярны и имеют слабую поддержку, поэтому многие создают свои in-house решения. В этой статье расскажу о выполненном командой «Programming Store» проекте Prostore, который может послужить примером при создании вашего собственного решения.
Читать статью
Teletype
Prostore — простой Event sourcing + CQRS фреймворк
На данный момент на рынке мало Event sourcing + CQRS фреймворков. А те, что есть, непопулярны и имеют слабую поддержку, поэтому многие...
👍11🔥3
Будет ли работать HashMap, если все добавляемые ключи будут иметь одинаковый hashCode()?
Да, будет, но в этом случае
Да, будет, но в этом случае
HashMap
вырождается в связный список и теряет свои преимущества.👍30
Forwarded from Java News
Руководство по обработке исключений в Java Stream
Друзья, вашему вниманию предлагается небольшое руководство по обработке исключений в Java Stream, из которого вы узнаете: 😃
✔️ Как обрабатывать проверяемые исключения, выбрасываемые методами из промежуточных операций в стримах
✔️ Как использовать блок try-catch в лямбда-выражениях
✔️ Как безопасно извлекать метод.
Также, даны рекомендации использовать Optional вместо выбрасывания значения null из извлекаемой функции.
Хорошей практики!
Читать статью
Друзья, вашему вниманию предлагается небольшое руководство по обработке исключений в Java Stream, из которого вы узнаете: 😃
✔️ Как обрабатывать проверяемые исключения, выбрасываемые методами из промежуточных операций в стримах
✔️ Как использовать блок try-catch в лямбда-выражениях
✔️ Как безопасно извлекать метод.
Также, даны рекомендации использовать Optional вместо выбрасывания значения null из извлекаемой функции.
Хорошей практики!
Читать статью
👍15🔥2☃1
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Мониторинг Spring Boot, Prometheus и Grafana(Docker compose)
Экспортируем метрики в Prometheus, пишем кастомные метрики с помощью Micrometr, строим дашборды в Grafana. Поднимаем это все с помощью Docker compose.
Repo GitHub - https://github.com/kegisa/YandexTaxiScheduler
Api Yandex Taxi - https://yandex.ru/dev/taxi/taxiapi/…
Repo GitHub - https://github.com/kegisa/YandexTaxiScheduler
Api Yandex Taxi - https://yandex.ru/dev/taxi/taxiapi/…
👍21🔥7
Spring Framework 6 и Spring Boot 3 появились несколько месяцев назад и уже используются в коммерческих проектах.
При этом Spring Framework в основе использует Java 17 и Jakarta EE, предлагая поддержку для конструирования нативных образов GraalVM и компонентных моделей времени компиляции в новом AOT-движке Spring, а также поддерживая проект Loom.
Про это и многое другое вам расскажет Джош Лонг. 😃
Приятного просмотра!
При этом Spring Framework в основе использует Java 17 и Jakarta EE, предлагая поддержку для конструирования нативных образов GraalVM и компонентных моделей времени компиляции в новом AOT-движке Spring, а также поддерживая проект Loom.
Про это и многое другое вам расскажет Джош Лонг. 😃
Приятного просмотра!
YouTube
Bootiful Spring Boot 3
Spring Framework 6 and Spring Boot 3 are here, which means new baselines and possibilities. Spring Framework implies a Java 17 and Jakarta EE baseline and offers new support for building GraalVM-native images and a compile-time component model in the new…
👍11
В чём заключается разница между IO и NIO?
• Java IO (input-output) является потокоориентированным, а
• Потоки ввода/вывода в
• В
• Java IO (input-output) является потокоориентированным, а
Java NIO (new/non-blocking io)
– буфер-ориентированным. Потокоориентированный ввод/вывод подразумевает чтение/запись из потока/в поток одного или нескольких байт в единицу времени поочередно. Данная информация нигде не кэшируются. Таким образом, невозможно произвольно двигаться по потоку данных вперед или назад. В Java NIO
данные сначала считываются в буфер, что дает больше гибкости при обработке данных.• Потоки ввода/вывода в
Java IO
являются блокирующими. Это значит, что когда в потоке выполнения вызывается read()
или write()
метод любого класса из пакета java.io.*
, происходит блокировка до тех пор, пока данные не будут считаны или записаны. Поток выполнения в данный момент не может делать ничего другого. Неблокирующий режим Java NIO
позволяет запрашивать считанные данные из канала (channel) и получать только то, что доступно на данный момент, или вообще ничего, если доступных данных пока нет. Вместо того, чтобы оставаться заблокированным пока данные не станут доступными для считывания, поток выполнения может заняться чем-то другим. Тоже самое справедливо и для неблокирующего вывода. Поток выполнения может запросить запись в канал некоторых данных, но не дожидаться при этом пока они не будут полностью записаны.• В
Java NIO
имеются селекторы, которые позволяют одному потоку выполнения мониторить несколько каналов ввода. Т.е. существует возможность зарегистрировать несколько каналов с селектором, а потом использовать один поток выполнения для обслуживания каналов, имеющих доступные для обработки данные, или для выбора каналов, готовых для записи.👍47❤1❤🔥1
Forwarded from Java News
Красивый код с Java Optional и Either
Многие из Java разработчиков, особенно начинающие, упускают из вида возможности функционального программирования. 😒
Предложенная сегодня статья научит вас последовательному соединению экземпляров Optional и Either для написания лаконичного и красивого кода.
Хорошей практики!
Читать статью
Многие из Java разработчиков, особенно начинающие, упускают из вида возможности функционального программирования. 😒
Предложенная сегодня статья научит вас последовательному соединению экземпляров Optional и Either для написания лаконичного и красивого кода.
Хорошей практики!
Читать статью
👍20☃4
Что такое «каналы»?
Каналы (channels) – это логические (не физические) порталы, абстракции объектов более низкого уровня файловой системы (например, отображенные в памяти файлы и блокировки файлов), через которые осуществляется ввод/вывод данных, а буферы являются источниками или приёмниками этих переданных данных. При организации вывода, данные, которые необходимо отправить, помещаются в буфер, который затем передается в канал. При вводе, данные из канала помещаются в заранее предоставленный буфер.
Каналы напоминают трубопроводы, по которым эффективно транспортируются данные между буферами байтов и сущностями по ту сторону каналов. Каналы – это шлюзы, которые позволяют получить доступ к сервисам ввода/вывода операционной системы с минимальными накладными расходами, а буферы – внутренние конечные точки этих шлюзов, используемые для передачи и приема данных.
Каналы (channels) – это логические (не физические) порталы, абстракции объектов более низкого уровня файловой системы (например, отображенные в памяти файлы и блокировки файлов), через которые осуществляется ввод/вывод данных, а буферы являются источниками или приёмниками этих переданных данных. При организации вывода, данные, которые необходимо отправить, помещаются в буфер, который затем передается в канал. При вводе, данные из канала помещаются в заранее предоставленный буфер.
Каналы напоминают трубопроводы, по которым эффективно транспортируются данные между буферами байтов и сущностями по ту сторону каналов. Каналы – это шлюзы, которые позволяют получить доступ к сервисам ввода/вывода операционной системы с минимальными накладными расходами, а буферы – внутренние конечные точки этих шлюзов, используемые для передачи и приема данных.
👍23
Автор показывает как генерировать FeignClient по swagger openapi. Часто используется в реализации микросервисов на Spring Boot.
Please open Telegram to view this post
VIEW IN TELEGRAM
VK Видео
Генерация Spring FeignClient по Swagger openapi
Показываю как генерировать FeignClient по swagger openapi. Часто используется в реализации микросервисов на Spring Boot. Сервис валют - https://github.com/kegisa/CurrencyCbrService Готовый образ докер - https://vk.cc/ciN4PI Канал автора: https://youtu.be/O2CrSdhS7pM
👍12🔥2
Java Programming for beginners: Master Java Fundamentals and Build Your Own Applications (2023 Crash Course) PDF, ePUB, mobi
This book is designed for those who are new to programming and want to learn how to write Java code.
Java is a popular programming language on the Internet and in computer applications. It's a free download solution that lets users access the most recent versions and apply updates. This programming language can be found in the vast majority of today's web applications and computing technologies. Java's scalability makes it suitable for use in a wide variety of applications, including apps for small electronic devices such as cell phones and software solutions for large-scale operations such as data centers. Java's growing popularity can be attributed to its robust functional features and solid security credentials.
This book is designed for those who are new to programming and want to learn how to write Java code.
Java is a popular programming language on the Internet and in computer applications. It's a free download solution that lets users access the most recent versions and apply updates. This programming language can be found in the vast majority of today's web applications and computing technologies. Java's scalability makes it suitable for use in a wide variety of applications, including apps for small electronic devices such as cell phones and software solutions for large-scale operations such as data centers. Java's growing popularity can be attributed to its robust functional features and solid security credentials.
👍11🔥1
Что будет, если очередь пула потоков уже заполнена, но подаётся новая задача?
Если очередь пула потоков заполнилась, то поданная задача будет «отклонена». Например - метод
Если очередь пула потоков заполнилась, то поданная задача будет «отклонена». Например - метод
submit()
у ThreadPoolExecutor
выкидывает RejectedExecutionException
, после которого вызывается RejectedExecutionHandler
.👍23
Forwarded from Java News
Spring: новости за прошедшую неделю / 28-е февраля
Вашему вниманию предлагается информационная подборка материалов "Spring: новости за прошедшую неделю" от Джоша Лонга (Josh Long).
Приятного чтения! 😃
Читать статью
Вашему вниманию предлагается информационная подборка материалов "Spring: новости за прошедшую неделю" от Джоша Лонга (Josh Long).
Приятного чтения! 😃
Читать статью
👍7
От Java к Kotlin (2023) PDF
Книга описывает практические приемы рефакторинга и переноса кода написанных на Java мобильных приложений для Android на язык Kotlin с сохранением совместимости. Приведено подробное сравнение этих двух языков, даны примеры перевода проектов с Java на Kotlin, добавления поддержки Kotlin в сборку Java. Показан переход от классов Java к классам Kotlin, от коллекций Java к коллекциям Kotlin, от объектов JavaBeans к значениям, от статических методов к функциям верхнего уровня. Подробно рассматривается обработка ошибок, приведены практические приемы управления проектами со смешанной кодовой базой. Даны советы по рефакторингу кода и функциональному программированию на Kotlin.
Книга описывает практические приемы рефакторинга и переноса кода написанных на Java мобильных приложений для Android на язык Kotlin с сохранением совместимости. Приведено подробное сравнение этих двух языков, даны примеры перевода проектов с Java на Kotlin, добавления поддержки Kotlin в сборку Java. Показан переход от классов Java к классам Kotlin, от коллекций Java к коллекциям Kotlin, от объектов JavaBeans к значениям, от статических методов к функциям верхнего уровня. Подробно рассматривается обработка ошибок, приведены практические приемы управления проектами со смешанной кодовой базой. Даны советы по рефакторингу кода и функциональному программированию на Kotlin.
👍18🔥5
В чём заключается различие между методами submit() и execute() у пула потоков?
Оба метода являются способами подачи задачи в пул потоков, но между ними есть небольшая разница.
Оба метода являются способами подачи задачи в пул потоков, но между ними есть небольшая разница.
execute(Runnable command)
определён в интерфейсе Executor
и выполняет поданную задачу и ничего не возвращает.submit()
– перегруженный метод, определённый в интерфейсе ExecutorService
. Способен принимать задачи типов Runnable
и Callable
и возвращать объект Future
, который можно использовать для контроля и управления процессом выполнения, получения его результата.👍21❤1
Java для всех (2020) PDF
Java — один из самых популярных и востребованных языков в мире. Алексей Васильев — автор многочисленных компьютерных бестселлеров — познакомит вас со всем необходимым для эффективной работы с этим языком. Вы изучите базовые типы, управляющие инструкции, особенности описания классов и объектов в Java, создание интерфейсов, лямбда-выражения, обобщенные классы. Каждая глава содержит примеры кода, которые в свою очередь снабжены как построчными пояснениями, так и подробным разбором примера программы. Примеры, используемые в этой книге, пригодятся вам в дальнейшей работе с языком Java. Программирование — это нестрашно! Даже если у вас нет никакого опыта, вы с легкостью освоите Java, воспользовавшись уникальной методикой Алексея Васильева, и перейдете на профессиональный уровень.
Java — один из самых популярных и востребованных языков в мире. Алексей Васильев — автор многочисленных компьютерных бестселлеров — познакомит вас со всем необходимым для эффективной работы с этим языком. Вы изучите базовые типы, управляющие инструкции, особенности описания классов и объектов в Java, создание интерфейсов, лямбда-выражения, обобщенные классы. Каждая глава содержит примеры кода, которые в свою очередь снабжены как построчными пояснениями, так и подробным разбором примера программы. Примеры, используемые в этой книге, пригодятся вам в дальнейшей работе с языком Java. Программирование — это нестрашно! Даже если у вас нет никакого опыта, вы с легкостью освоите Java, воспользовавшись уникальной методикой Алексея Васильева, и перейдете на профессиональный уровень.
👍21❤1
Руководитель проекта Марк Рейнхольд недавно предложил расширить программную модель Java функциями для выборочного сдвига и ограничения вычислений с помощью "конденсоров" (condensor).
В предложенном сегодня видео Николай Парлог расскажет о будущем этого проекта.
Приятного просмотра!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3
В чем заключаются различия между cтеком (stack) и кучей (heap) с точки зрения многопоточности?
Cтек
– участок памяти, тесно связанный с потоками. У каждого потока есть свой стек, которые хранит локальные переменные, параметры методов и стек вызовов. Переменная, хранящаяся в стеке одного потока, не видна для другого.Куча
– общий участок памяти, который делится между всеми потоками. Объекты, неважно локальные или любого другого уровня, создаются в куче. Для улучшения производительности, поток обычно кэширует значения из кучи в свой стек, в этом случае для того, чтобы указать потоку, что переменную следует читать из кучи используется ключевое слово volatile.👍40🔥2😁1
Java: быстрый старт (2021) PDF
Всегда хотели научиться программировать на Java, но не знаете, с чего начать? Или хотите быстро перейти с другого языка на Java? Уже перепробовали множество книг и курсов, но ничего не подходит? Серия «Быстрый старт» — отличное решение, и вот почему: сложные понятия разбиты на простые шаги — вы сможете освоить язык Java, даже если никогда раньше не занимались программированием; все фундаментальные концепции подкреплены реальными примерами; вы получите полное представление о Java: концепции объектно-ориентированного программирования, средства обработки ошибок, работа с файлами, лямбда-выражения и т. д.; в конце книги вас ждет интересный проект, который поможет усвоить полученные знания.
Всегда хотели научиться программировать на Java, но не знаете, с чего начать? Или хотите быстро перейти с другого языка на Java? Уже перепробовали множество книг и курсов, но ничего не подходит? Серия «Быстрый старт» — отличное решение, и вот почему: сложные понятия разбиты на простые шаги — вы сможете освоить язык Java, даже если никогда раньше не занимались программированием; все фундаментальные концепции подкреплены реальными примерами; вы получите полное представление о Java: концепции объектно-ориентированного программирования, средства обработки ошибок, работа с файлами, лямбда-выражения и т. д.; в конце книги вас ждет интересный проект, который поможет усвоить полученные знания.
👍17🔥2
Java. Решение практических задач (2021) PDF, DJVU
Рассмотрены задачи, встречающиеся в повседневной работе любого разработчика в среде Java. Приведено более 300 приложений, содержащих свыше 1000 примеров. Продемонстрированы эффективные практические приемы и технические решения с учетом сложности кода, производительности, удобочитаемости и многого другого.
Рассмотрены строки, числа, объекты, массивы, коллекции и структуры данных, работа с датой и временем. Приведены задачи на логический вывод типов, а также файловый ввод/вывод. Представлены задачи, связанные с API рефлексии Java. Особое внимание уделено программированию в функциональном стиле, задачам с привлечением конкурентности, правилам работы с классом Optional, а также API HTTP-клиента и API протокола WebSocket.
Рассмотрены задачи, встречающиеся в повседневной работе любого разработчика в среде Java. Приведено более 300 приложений, содержащих свыше 1000 примеров. Продемонстрированы эффективные практические приемы и технические решения с учетом сложности кода, производительности, удобочитаемости и многого другого.
Рассмотрены строки, числа, объекты, массивы, коллекции и структуры данных, работа с датой и временем. Приведены задачи на логический вывод типов, а также файловый ввод/вывод. Представлены задачи, связанные с API рефлексии Java. Особое внимание уделено программированию в функциональном стиле, задачам с привлечением конкурентности, правилам работы с классом Optional, а также API HTTP-клиента и API протокола WebSocket.
👍18❤1