Java библиотека – Telegram
Java библиотека
31.5K subscribers
2.37K photos
91 videos
10 files
2.19K links
Книги, статьи, мемы и многое другое для Java программиста!

По сотрудничеству и рекламе: @NadikaKir

Канал в перечне РКН: https://vk.cc/cJrT4A

Мы на бирже: https://telega.in/c/javalib/

Сообщество VK https://vk.com/javatutorial
Download Telegram
Java для Sega Mega Drive — возможно ли это?

В этом проекте я хотел ответить на вопрос: возможно ли написать игру на Java для Sega Mega Drive/Genesis. Не хочу раскрывать спойлеры, но ответом будет «да».
Несколько лет назад я повстречал проект Java Grinder, который позволяет писать код для различных ретро процессоров на Java, в том числе для Sega Mega Drive. По сути, он интерпретирует байт-код из файлов .class, полученных после компиляции, в код на Ассемблере 68K. Если файлу класса нужны другие файлы классов, то они тоже считываются и обрабатываются. Все вызовы методов API записываются в выходном коде, либо как встроенный ассемблерный код, либо как вызовы предварительно написанных функций, выполняющих свою задачу.


Читать статью
👍19🔥43🍾1
Задачи с собеседований: Поиск первого уникального символа в строке (jun+)

— Как найти первый уникальный символ в строке?

🔘 Ключевые моменты:

- Используйте доп. структуру данных для хранения количества вхождений каждого символа
- Предложите в комментарии другие варианты решения.

Реализация через Map на картинке 👆

@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍156🔥3
🖥 awesome-low-level-design — полезный репозиторий, который предназначен для изучения низкоуровневого проектирования (Low-Level Design, LLD) и подготовки к собеседованию на эту тему

🌟 Здесь содержатся ресурсы по основным принципам ООП, SOLID, паттернам проектирования, диаграммам UML и другим концепциям, а также задачи для практики проектирования различных систем. Решения задач написаны на разных ЯП, в том числе и на Java!

🔐 Лицензия: GPL-3.0

🖥 GitHub

@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3
👩‍💻 Шпаргалка по основным командам Docker

От запуска контейнеров до их управления — все ключевые команды в одном месте. Сохраняйте, чтобы не потерять.

@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍73
🖥 MineDojo — это исследовательская платформа, разработанная для создания многоцелевых ИИ-агентов с помощью среды Minecraft.

Проект написан на Java и предоставляет инструменты и API, которые позволяют агентам взаимодействовать с Minecraft для выполнения сложных задач, таких как построение, крафтинг, исследование и другие

🌟 MineDojo создан для поддержки исследований в области ИИ, обучая агентов на большом количестве сценариев и примеров поведения. Платформа включает в себя предварительно настроенные задачи и сценарии, а также возможности для создания собственных агентов

🖥 Github

@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥164👍3🎉1
Путеводитель по техническим транзакциям с Camunda 8 и Spring

Интересно, как работают технические транзакции с Camunda и фреймворком Spring? Узнайте больше о транзакционном поведении в этом блоге.

Мы регулярно отвечаем на вопросы о том, как работают технические транзакции при использовании Camunda (в последней версии 8.x) и фреймворка Spring. Например, что происходит, если у вас есть две сервисные задачи, и второй вызов завершается с ошибкой? В этом блоге я опишу типичные сценарии, чтобы сделать поведение более наглядным. Я буду использовать примеры кода на Java 17, Camunda 8.3, Spring Zeebe 8.3, Spring Boot 2.7 и Spring Framework 5.3.


Читать статью
👍94
🤣
😁1094👍3
CI/CD Pipeline

CI/CD пайплайн — это система, которая позволяет автоматизировать ключевые этапы разработки: от сборки и тестирования до развертывания программного обеспечения. Такой подход объединяет все стадии жизненного цикла проекта — написание кода, его проверку, тестирование и публикацию — в единый поток, где каждый шаг выполняется автоматически и последовательно.

На диаграмме выше представлены инструменты, которые часто используются для создания эффективного CI/CD пайплайна.

Вы применяете какие-то из них в своих проектах?

@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉14👍52🔥2
🖥 Генерация классов Java из схем Avro с использованием Gradle!

💡 В этом уроке вы научитесь генерировать Java-классы из схемы Apache Avro. Сначала вы познакомитесь с двумя методами: использованием существующего плагина Gradle и созданием кастомного задания для скрипта сборки. Затем рассмотрите плюсы и минусы каждого подхода и поймете, в каких случаях каждый из них лучше всего применять!

🔗 Ссылка: *клик*

@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍134🔥4
Forwarded from Java Guru 🤓
Что будет выведено для запроса /api/hello?name=Spring
👍6🔥4
Forwarded from Java Guru 🤓
Что будет выведено для запроса /api/hello?name=Spring
Anonymous Quiz
3%
Hello, name
16%
Hello, World
69%
Hello, Spring
11%
400 Bad Request
😁15👍5🔥4🍾1
🖥 quarkus-langchain4j — расширение для Quarkus, которое упрощает интеграцию с библиотекой LangChain4j и позволяет использовать модели больших языковых моделей (LLMs) в приложениях на Quarkus!

🌟 Расширение поддерживает работу с различными LLM-провайдерами (такими как OpenAI и Hugging Face), кэширование, интеграцию с хранилищами документов (Redis, Chroma) и обеспечивает совместимость с нативной компиляцией.

🔐 Лицензия: Apache-2.0

🖥 Github

@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥63👍3
❗️ Что такое нормализация базы данных, и какие существуют нормальные формы?

Нормализация — это процесс приведения структуры базы данных к оптимальному виду для устранения избыточности данных и обеспечения их целостности. Процесс состоит из последовательных этапов, соответствующих нормальным формам (НФ).

Основные нормальные формы (НФ):

1️⃣ Первая нормальная форма (1НФ):
Данные делятся на атомарные (неделимые) значения.
Пример: В одной ячейке таблицы не может быть списка телефонов, вместо этого создается отдельная строка для каждого телефона.

2️⃣ Вторая нормальная форма (2НФ):
Требует выполнения 1НФ и исключения зависимости от части составного первичного ключа. Это устраняет проблему дублирования данных.
Пример: Если таблица использует составной ключ (например, "Курс" и "Студент"), информация, относящаяся только к "Курсу", выносится в отдельную таблицу.

3️⃣ Третья нормальная форма (3НФ):
Выполняется 2НФ и устраняются транзитивные зависимости — неключевые атрибуты должны зависеть только от ключа.
Пример: Если в таблице есть "ID сотрудника", "Отдел" и "Название отдела", то "Название отдела" переносится в отдельную таблицу "Отделы".

Редко используемые нормальные формы:

- Нормальная форма Бойса-Кодда (BCNF): Уточнённая версия 3НФ, где каждое определяющее множество является суперключом. Используется для устранения более сложных аномалий.
- Четвёртая нормальная форма (4НФ): Устраняет многозначные зависимости, которые появляются при использовании нескольких связей между одними и теми же атрибутами.
- Пятая нормальная форма (5НФ): Делает базу данных устойчивой к разделению данных, устраняя зависимости соединений.

Эти формы применяются в сложных сценариях, например, при проектировании корпоративных систем с огромным количеством взаимосвязей. Для большинства приложений 3НФ оказывается достаточной.

@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🔥96
🖥 Opik — это открытая платформа для разработки, тестирования и мониторинга приложений на основе больших языковых моделей (LLM)!

🌟 Этот инструмент помогает отслеживать и анализировать работу LLM, автоматизировать оценку, хранить тестовые случаи и поддерживает интеграцию с CI/CD для упрощения цикла разработки и развертывания. Платформа позволяет как локальный запуск, так и использование в облаке, поддерживает такие фреймворки, как OpenAI, LangChain и другие.

🔐 Лицензия: Apache-2.0

🖥 Github

@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍53
Spring Framework и Spring Boot с нуля! 🚀 (12 часов)

Это видео поможет вам с нуля освоить Spring Framework и Spring Boot. В нем вы:
Познакомитесь с основными инструментами.
Разберетесь в принципах работы Spring Framework изнутри.
Научитесь создавать полноценное приложение, используя всё, о чем говорится в видео.
Если вы никогда не работали со Spring Framework или переходите с другого языка программирования на Java, это видео станет отличным стартом для изучения этого фреймворка и начала работы над собственными проектами!


🌐🗣СМОТРЕТЬ VKVIDEO

📝🗣СМОТРЕТЬ DZEN

@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥63
❗️Как работает ConcurrentHashMap под капотом?

ConcurrentHashMap – это высокопроизводительная реализация Map, специально разработанная для многопоточной среды. Она гарантирует безопасность данных при одновременном доступе и минимизирует использование блокировок.

💡 Основные механизмы:

🟡 Сегментация данных (до 8 java): Данные разделялись на сегменты, и блокировка происходила на уровне сегмента, а не всей карты. Это обеспечивало параллельный доступ к разным частям карты.

🟡 Кассовые таблицы (Java 8+): Вместо сегментов используется структура на основе Node[] – массив узлов. Это сделало структуру более гибкой. Вместо сегментации применяется механизм Fine-Grained Locking и Compare-And-Swap:
- Compare-And-Swap используется для операций записи, что позволяет избегать блокировок для большинства операций. Операции с разными бакетами могут выполняться параллельно, поскольку локальная блокировка применяется только к отдельному узлу или бакету.
- Fine-Grained Locking минимизирует область блокировок. Например, если требуется масштабирование (resize) или обработка коллизий, потоки могут продолжать работу с другими бакетами, даже если один из них временно заблокирован.
- synchronized применяется только для случаев, когда CAS не справляется (например, при реорганизации данных или сложных операциях). Это помогает поддерживать баланс между безопасностью и производительностью.

🟡 Масштабируемый массив (Resizable Array): Масштабирование в ConcurrentHashMap происходит градуально, чтобы избежать блокировки всей структуры. Новый массив создаётся с увеличенным размером, и данные переносятся постепенно, по частям. Во время переноса используется специальный узел ForwardingNode, который перенаправляет операции к новому массиву, обеспечивая корректную работу всех потоков.

📚 Основные методы:

🔘 get(Object key):
Легковесная операция, не требует блокировок. Ключ хэшируется, затем вычисляется индекс сегмента. Если в сегменте есть соответствующий узел, он возвращается.

🔘 put(K key, V value):
- Сначала используется CAS для вставки нового элемента.
- Если CAS не срабатывает (например, при наличии коллизии), включается локальная блокировка на соответствующей корзине.

🔘computeIfAbsent/compute:
Более сложные операции, которые комбинируют вычисления с модификацией. Используются короткие локи для минимизации блокировки других потоков.

⚠️ Особенности:

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

Документация

@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24🔥83😁1
🖥 perfio — высокопроизводительные буферизированные инструменты ввода-вывода для JVM, оптимизированные для потоковой обработки бинарных и текстовых данных!

🌟 Эти инструменты значительно быстрее стандартных библиотек благодаря упрощенной архитектуре буферов и отказу от многослойного наследования. perfio поддерживает эффективную обработку строк и чисел с оптимизированным использованием памяти и минимизацией накладных расходов на синхронизацию.

🔐 Лицензия: Apache-2.0

🖥 Github

@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍124🔥4
Media is too big
VIEW IN TELEGRAM
Знакомство с Resilience4j. CircuitBreaker

В этом видео знакомимся с компонентом библиотеки Resilience4j - CircuitBreaker

📺🗣СМОТРЕТЬ RUTUBE

🌐🗣СМОТРЕТЬ VKVIDEO

📝🗣СМОТРЕТЬ DZEN

@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🎉4🔥3
Совет 👩‍💻 Spring Retry

Spring Retry предлагает возможность автоматического повторного выполнения неудачной операции. 🔥



@Configuration
@EnableRetry
public class Application {

}

@Service
class Service {
@Retryable(retryFor = RemoteAccessException.class)
public void service() {
// ... do something
}
@Recover
public void recover(RemoteAccessException e) {
// ... panic
}
}


🖥 Github

@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29🔥2
Media is too big
VIEW IN TELEGRAM
Spring Boot ПОЛНЫЙ курс для начинающих [2025]

В этом видео вы получите полный курс по Spring Boot для начинающих. Мы подробно разберем, что такое Spring, как он работает и почему является одним из самых популярных фреймворков для разработки на Java. Вы узнаете, как начать свой путь в программировании с помощью Spring Boot, а также я поделюсь лучшими практиками и советами, которые помогут вам стать уверенным разработчиком и освоить современные инструменты Java-разработки. Досмотрите видео до конца, чтобы получить полное представление о том, как работает Spring Boot и с чего начать свой путь в мире Java-разработки.

📺🗣СМОТРЕТЬ RUTUBE

🌐🗣СМОТРЕТЬ VKVIDEO

📝🗣СМОТРЕТЬ DZEN

@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥52
Forwarded from Java Guru 🤓
👇Паттерн Строитель (Builder)

Builder — это порождающий паттерн, который позволяет пошагово создавать сложные объекты. Вместо того чтобы создавать объект одним большим конструктором с множеством параметров, Builder организует процесс создания по частям, обеспечивая гибкость и читаемость кода.

Использование:

🟡 Когда нужно создать объект с большим количеством параметров, и не все из них обязательны.
🟡 Когда процесс создания объекта требует выполнения нескольких шагов или дополнительных проверок.
🟡 В случаях, когда один и тот же код должен создавать разные представления объекта (например, текстовое и графическое).

Преимущества:

1️⃣ Упрощает создание сложных объектов, делая процесс понятным и читаемым.
2️⃣ Позволяет создавать объекты с разными вариациями без необходимости дублирования кода.
3️⃣ Разделяет логику создания объекта от его структуры, что упрощает поддержку и модификацию кода.

Недостатки:

1️⃣ Увеличивает сложность кода за счёт создания дополнительных классов и методов.
2️⃣ Может быть избыточным для простых объектов с небольшим количеством параметров.
3️⃣ Требует дополнительного внимания при проектировании, чтобы избежать путаницы между обязательными и необязательными шагами.

📌 Паттерн Builder полезен, если объект имеет много параметров и их нужно задавать гибко. Например, при создании сложных конфигураций для HTTP-запросов (заголовки, тело, параметры), построении графических интерфейсов или генерации HTML-документов. Builder помогает сделать код более понятным и избежать создания конструкций с длинными и неудобными конструкторами.

@javatasks #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2110🔥6