Telegram Web Link
🖥 Реализация бесконечности в Java: все числовые типы данных

Для обозначения бесконечности в Java используйте константы Double.POSITIVE_INFINITY для положительной бесконечности и Double.NEGATIVE_INFINITY для отрицательной:
double posInf = Double.POSITIVE_INFINITY; // +∞
double negInf = Double.NEGATIVE_INFINITY; // -∞


Еще один подход – получить бесконечность путем деления на ноль:
double posInfCalc = 1.0 / 0.0; // +∞
double negInfCalc = -1.0 / 0.0; // -∞

Внимание: в случае целочисленного деления на ноль возникает исключение ArithmeticException, поэтому для операций с бесконечностями используйте типы float или double.


Обработка бесконечностей в Java основывается на стандарте IEEE 754 и следует правилам:
🔘Сложение: Double.POSITIVE_INFINITY + anyPositiveDouble всегда будет равно Double.POSITIVE_INFINITY.
🔘Вычитание: Разность между двумя одинаковыми бесконечностями будет NaN (не число).
🔘Умножение: Умножение Double.POSITIVE_INFINITY на отрицательное число приводит к Double.NEGATIVE_INFINITY и наоборот.
🔘Деление: Деление любого числа на Double.POSITIVE_INFINITY даст ноль.

В зависимости от специфики задачи и требуемой точности можно использовать типы Double или Float.

При проведении операций сравнения с бесконечностями учтите:
🔘Double.POSITIVE_INFINITY всегда больше любого конечного значения, в то время как Double.NEGATIVE_INFINITY всегда меньше.
🔘Проверку на равенство с NaN лучше производить с помощью Double.isNaN(), так как любое равенство с NaN возвращает false.
🔘Double.POSITIVE_INFINITY равно Double.POSITIVE_INFINITY, что также верно и для отрицательной бесконечности.

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

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
💻 Немного о конструкции when в Kotlin

Конструкция when проверяет значение некоторого объекта и в зависимости от его значения выполняет тот или иной код. Конструкция when аналогична конструкции switch в других языках. Формальное определение:

значение1 -> действия1
значение2 -> действия2
...
значениеN -> действияN
}


Если значение объекта равно одному из значений в блоке кода when, то выполняются соответствующие действия, которые идут после оператора -> после соответствующего значения:

fun main() {
val isEnabled = true
when(isEnabled){
false -> println("isEnabled off")
true -> println("isEnabled on")
}
}

Здесь в качестве объекта в конструкцию when передается переменная isEnabled. Далее ее значение по порядку сравнивается со значениями в false и true. В данном случае переменная isEnabled равна true, поэтому будет выполняться код:
println("isEnabled on")



Выражение else

В примере выше isEnabled имела только 2 возможных варианта: true и false. Однако чаще бывают случаи, когда значения в блоке when не покрывают все возможные значения объекта. Дополнительное выражение else позволяет задать действия, которые выполняются, если объект не соответствует ни одному из значений:

val a = 30
when(a){
10 -> println("a = 10")
20 -> println("a = 20")
else -> println("неопределенное значение")
}

То есть в данном случае если переменная a равна 30, поэтому она не соответствует ни одному из значений в блоке when. И соответственно будут выполняться инструкции из выражения else.

Если надо, чтобы при совпадении значений выполнялось несколько инструкций, то для каждого значения можно определить блок кода:

var a = 10
when(a){
10 -> {
println("a = 10")
a *= 2
}
20 -> {
println("a = 20")
a *= 5
}
else -> { println("неопределенное значение")}
}
println(a)


📎 Читать подробнее

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
💻 Отличная статья-презентация о работе с шаблонизаторами Kotlin

В статье рассматривается использование шаблонизатора Pebble для формирования HTML-документов и его особенности, включая поддержку фильтров, тегов и наследования шаблонов.

Описаны условные конструкции, проверки и наследование шаблонов в рамках использования шаблонизатора Pebble.

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

Параллельно рассматриваются различные аспекты разработки приложений на Kotlin, включая императивный, объектно-ориентированный и функциональный синтаксис; рассматривается работа с функциями в Kotlin и их объектная природа.

Кроме этого обсуждается вопрос null-безопасности в Kotlin и удобные средства для обработки этой ситуации.

📎 Онлайн-презентация

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
📌Мастер-класс: рекомендательная система музыки на Java

При помощи открытого датасета в этом видео с нуля создаётся рекомендательная система музыки; разбирается, какие из наивных решений могут не сработать в реальных системах.
На примере технологий Одноклассников спикер рассказывает, как решаются ML-задачи в гетерогенных продакшенах, где необходимо использовать вместе Java и Python.

Мастер-класс будет интересен разработчикам, которым интересна тема машинного обучения, но они либо еще не погружались в нее, либо сделали самые первые шаги.

📎 Кликабельный план видео
📎 YouTube
📎 Презентация PDF из видео

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 О безопасности веб-проекта на Spring

Встречайте годный контент 🌟
В этом ролике речь пойдёт об обеспечении безопасности веб-приложения при помощи Spring Security и будет продемонстрирована настройка цепочки фильтров безопасности.
Здесь показывается использование формы входа, Basic-аутентификации и применение OAuth 2.0/OpenID Connect.

Нереально полезно и информативно

▶️ Youtube

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 SQL-инъекции JDBC, JPA, Spring Data

В данной статье речь пойдёт о таком типе уязвимости приложений как внедрение SQL кода.
Вообще, в мире Java разработки существует несколько простых правил, позволяющих практически полностью исключить возможности внедрения SQL:
— Не использовать конкатенацию строк в запросах к базам данных.

— Использовать PreparedStatement/CallableStatement вместо Statement. Библиотеки spring-jdbc, Hibernate, MyBatis, JOOQ и прочие также внутри используют PreparedStatement.

— Передавать параметры запросов с помощью методов setParameter, а не в самом запросе.

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

📎 Код примеров на GitHub

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
#Java #Spring @SpringSecurity

Совет: Если вы хотите получить доступ к текущему аутентифицированному пользователю в любом месте кода, вы можете использовать класс SecurityContextHolder.

С ним, вам не нужно передавать объект аутентификации из вашего RestController через несколько служб.

@javatg
🖥 Расширение PVS-Studio для Visual Studio Code: поиск ошибок в Java-коде

Если пишешь на Java в VS Code, то можешь затестить полезный плагин PVS-Studio (он существует ещё и для IntelliJ IDEA)
Плагин позволяет находить ошибки, проблемные места в коде и уязвимости.

Все предупреждения делятся на 3 уровня, отражающих вероятность того, что они окажутся истинными:

1 уровень (красный) — эти предупреждения не обязательно могут быть самыми критичными, однако они наиболее точные;

2 уровень (оранжевый) — часто предупреждения этого уровня указывают на не самые простые и интересные ошибки, однако и обеспечить точность их нахождения сложнее;

3 уровень (жёлтый) — предупреждения этого уровня чаще всего бывают спорными или незначительными. Рекомендуется обращать на них внимание в последнюю очередь, но и полностью игнорировать не стоит. Среди них также могут оказаться несколько предупреждений, указывающих на ошибки в вашем коде.

В целом, довольно полезная штука, можно затестить

📎 Читать подробнее

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
2024/10/03 23:24:12
Back to Top
HTML Embed Code: