Telegram Web Link
🖥 OpenSearch — распределенный RESTful поисковой движок на Java с открытым исходным кодом

OpenSearch — это комьюнити-форк Elasticsearch и Kibana с открытым исходным кодом.
Движок активно поддерживается и развивается.

🖥 GitHub
🟡 Доки

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Portfolio Performance — open-source инструмент на Java для расчета общей эффективности инвестиционного портфеля

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

Обновляет исторические котировки по данным из различных источников: Yahoo Finance, Finnhub.io, Quandl или AlphaVantage.
При желании можно настроить получение котировок с нужных HTML-страниц или из JSON-документов.

Все данные хранятся в XML для дальнейшей обработки и могут быть экспортированы в CSV или JSON.

🖥 GitHub
🟡 Страничка Portfolio Performance

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 45 интересных фактов о Java

С момента своего создания в начале 90-х годов и до сегодняшнего дня, Java остается одним из самых популярных и востребованных языков программирования в мире.
Давайте предадимся ностальгии, поговорим о 45 известных и не очень фактов о Java
Уверен, будет интересно даже Java-гуру, поехали!

〰️ Основы и история
🟡Java была создана в 1995 году компанией Sun Microsystems.

🟡Изначально язык назывался «Oak», в честь дуба, росшего около офиса его создателей.

🟡Цель создания Java — возможность запуска программ на любом устройстве без изменений кода.

🟡Девиз Java: «Write Once, Run Anywhere» (WORA) — напиши один раз, запусти везде.

🟡Создатель Java — Джеймс Гослинг.

🟡В 2010 году Oracle Corporation приобрела Sun Microsystems, став владельцем Java.

🟡Java — объектно-ориентированный язык программирования.


〰️ Версии и обновления
🟡Java имеет 2 основные редакции: Standard Edition (SE) и Enterprise Edition (EE).

🟡С 2017 года Oracle перешла на регулярный 6-месячный цикл обновлений Java.

🟡Java 8 стала революционным обновлением благодаря введению лямбда-выражений и потоков.


〰️ Технические особенности
🟡JVM (Java Virtual Machine) — основа платформы Java, позволяющая Java-программам запускаться на любом устройстве.

🟡Garbage Collector в Java автоматически управляет памятью, освобождая программиста от необходимости явного освобождения памяти.

🟡Java Development Kit (JDK) содержит инструменты для разработки и тестирования программ на Java.

🟡Java Runtime Environment (JRE) включает в себя JVM и библиотеки классов Java, необходимые для запуска Java-приложений.

🟡Система управления пакетами в Java называется Maven и Gradle.

📎 Читать остальные факты о Java

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Вышла интегрированная среда разработки Apache NetBeans 22

29 мая 2024 года состоялся релиз интегрированной среды разработки Apache NetBeans 22. Проект имеет поддержку языков программирования Java SE, Java EE, PHP, C/C++, JavaScript, Rust и Groovy.

Готовые сборки NetBeans 22 в ближайшее время будут сформированы для скачивания под Linux (snapcraft.io, flathub), Windows и macOS.

🖥 GitHub

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Вызов Python-скрипта из кода на Java

Иногда чтобы не переделывать любимые костыли необходимо вызывать Python-скрипты из нашего Java-кода. Это можно сделать с помощью классов Process, ProcessBuilder и Jython. Давайте рассмотрим, как мы можем использовать каждый из них.

▶️ Поехали

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Charset: почему имена не константы? Решение проблемы

🔜 Итак, сразу к делу. В Java наименования кодировок реализованы таким образом, что могут обеспечить гибкость выполнения программы, позволяя легко адаптироваться к возникающим новым кодировкам без необходимости её перекомпиляции. Для надёжного получения экземпляра кодировки, используйте метод Charset.forName("название_кодировки"). Если искомая кодировка присутствует в системе, её можно будет успешно найти, иначе будет вызвано исключение UnsupportedCharsetException.

Пример использования:
// UTF-8 кодировка
Charset charset = Charset.forName("UTF-8");

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


🔜 Эволюция обработки кодировок в Java

JDK 1.4 — эра Charset. Начиная с JDK 1.4, Java внесла значительные изменения в работу с кодировками, введя класс Charset в пакет java.nio. Это послужило началом движения в сторону более структурированного и универсализированного API.

Java 7 — стандартизация кодировок. Продолжая развивать идеи обработки текстовых данных, в Java 7 был внедрен класс StandardCharsets, который предоставил разработчикам стандартизированные ссылки на часто используемые кодировки.

Поддержка кодировок может варьироваться в зависимости от платформы. Java, в свою очередь, обеспечивает поддержку определённых кодировок, таких как UTF-8 и ISO-8859-1. Класс Charset служит для проверки доступности кодировок на текущей системе.


🔜 Преимущества использования констант и экземпляров Charset

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

Переход к экземплярам Charset предполагает использование строгой типизации вместо включения строковых литералов, что делает взаимодействие внутри кода надёжнее и упрощает коммуникацию в команде.

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

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Циклический связанный список — Java-реализация

Циклический связанный список — это вариант связанного списка, в котором последний узел указывает на первый узел, завершая полный круг узлов.
Другими словами, этот вариант связанного списка не имеет пустого элемента в конце.

Благодаря этому простому изменению мы получаем некоторые преимущества:
— Любой узел в кольцевом связанном списке может быть отправной точкой.
— Следовательно, весь список можно пройти, начиная с любого узла.
— Поскольку последний узел кругового связанного списка имеет указатель на первый узел, легко выполнять операции постановки в очередь и удаления из очереди.
В целом, это очень полезно при реализации структуры данных "очередь".

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

▶️ Поехали к реализации циклического связанного списка

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥Принципы SOLID с примерами на Java

Отличная демонстрация принципов SOLID на Java, к каждому пункту приведён антипаттерн «как делать не нужно»

А вот и расшифровка самого акронима SOLID, повторить лишним не будет

🟡S — Single Responsibility Principle (Принцип единственной ответственности). Суть: класс должен обладать единственной ответственностью и иметь одну и лишь одну причину для его изменения.

🟡O — Open-Closed Principle (Принцип открытости/закрытости). Суть: программные сущности должны быть открыты для расширения и закрыты для изменения.

🟡L — Liskov Substitution Principle (Принцип подстановки Барбары Лисков). Суть: функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом.

🟡I — Interface Segregation Principle (Принцип разделения интерфейса). Суть: программные сущности не должны зависеть от методов, которые они не используют; много узконаправленных интерфейсов - это лучше для клиента этого интерфейса, чем один интерфейс общего назначения, "умеющий всё".

🟡D — Dependency Inversion Principle (Принцип инверсии зависимостей). Суть: 1) модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций. 2) Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

📎 Поехали

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 JSqlParser — библиотека Java для парсинга SQL

JSqlParser разбирает SQL-запрос и преобразует его в иерархию Java-классов.
Сгенерированная иерархия может быть перемещена с помощью паттерна Visitor

🖥 GitHub
🔘 Wiki

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Генерация типов Java на основе JSON или JSON Schema

brew install jsonschema2pojo

Можно использовать jsonschema2pojo как плагин Maven, задачу Ant, как утилиту командной строки, плагин Gradle или встроить в собственное Java-приложение.

🖥 GitHub
🟡 Можно использовать и онлайн

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Релиз CheerpJ 3.0

Learning Technologies, разработчики CheerpJ, среды для запуска приложений Java внутри браузеров, относительно недавно выпустили третью версию инструмента. По их словам, это «полная переработка CheerpJ, основанная на уроках, извлечённых за 7 лет его использования».

CheerpJ — полноценная виртуальная машина Java на основе WebAssembly. Её авторы уточняют, что благодаря множеству архитектурных инноваций CheerpJ 3.0 — чрезвычайно мощный инструмент, предназначенный для корпоративных приложений.

📎 Подробнее

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 PMD — расширяемый многоязычный статический анализатор кода, написанный на Java

cd $HOME
wget https://github.com/pmd/pmd/releases/download/pmd_releases%2F7.2.0/pmd-dist-7.2.0-bin.zip
unzip pmd-dist-7.2.0-bin.zip
alias pmd="$HOME/pmd-bin-7.2.0/bin/pmd"
pmd check -d /usr/src -R rulesets/java/quickstart.xml -f text


PMD находит неиспользуемые переменные, пустые блоки catch, ненужное создание объектов и всё в таком духе. В основном он работает с Java и Apex, но поддерживает 16 других языков. В комплект входит 400+ встроенных правил.

PMD легко можно кастомизировать с помощью пользовательских правил. Использует JavaCC и Antlr для разбора исходных файлов на абстрактные синтаксические деревья (AST) и запускает правила на их основе для поиска нарушений. Правила могут быть написаны на языке Java или с помощью запроса XPath.

🖥 GitHub
🟡 Доки

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
2024/07/01 03:11:06
Back to Top
HTML Embed Code: