💡 Подключение к Minio из Java
Если вы ищете способ работать с объектным хранилищем Minio из Java, то эта статья от BlackSlate — именно то, что вам нужно! Рассмотрим ключевые моменты:
Что такое Minio?
Minio — это высокопроизводительный, S3-совместимый объектный сервер с открытым исходным кодом, который позволяет легко хранить, управлять и извлекать данные. Он отлично подходит для облачных и серверных приложений.
Основные темы статьи:
- Установка и настройка Minio:
Статья описывает, как запустить Minio сервер в локальной или облачной среде. Вы узнаете, как создать пользователя и настроить доступные ключи для подключения.
- Использование Minio Java SDK:
Для работы с Minio из Java необходимо добавить соответствующую зависимость в ваш проект. В статье приведены примеры настройки Maven/Gradle:
- Базовые операции с хранилищем:
Вы научитесь:
- Подключаться к Minio серверу с помощью MinioClient.
- Создавать бакеты.
- Загрузить и скачать объекты.
- Удалять объекты и бакеты.
- Пример кода:
Статья содержит подробный пример кода, демонстрирующий подключение и выполнение базовых операций:
Почему это важно?
Подключение к Minio позволяет разработчикам создавать масштабируемые, гибкие и отказоустойчивые приложения с использованием объектного хранилища. Используя Java SDK, вы получаете простой и понятный API для интеграции с вашим сервисом.
Если вы работаете над проектом, где важны быстрые операции с данными и совместимость с AWS S3 API, то этот подход — отличное решение!
✍️ Читайте полную статью: https://https://www.blackslate.io/articles/connect-to-minio-from-java
@javatg
Если вы ищете способ работать с объектным хранилищем Minio из Java, то эта статья от BlackSlate — именно то, что вам нужно! Рассмотрим ключевые моменты:
Что такое Minio?
Minio — это высокопроизводительный, S3-совместимый объектный сервер с открытым исходным кодом, который позволяет легко хранить, управлять и извлекать данные. Он отлично подходит для облачных и серверных приложений.
Основные темы статьи:
- Установка и настройка Minio:
Статья описывает, как запустить Minio сервер в локальной или облачной среде. Вы узнаете, как создать пользователя и настроить доступные ключи для подключения.
- Использование Minio Java SDK:
Для работы с Minio из Java необходимо добавить соответствующую зависимость в ваш проект. В статье приведены примеры настройки Maven/Gradle:
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.3</version>
</dependency>
- Базовые операции с хранилищем:
Вы научитесь:
- Подключаться к Minio серверу с помощью MinioClient.
- Создавать бакеты.
- Загрузить и скачать объекты.
- Удалять объекты и бакеты.
- Пример кода:
Статья содержит подробный пример кода, демонстрирующий подключение и выполнение базовых операций:
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import io.minio.GetObjectArgs;
// Другие необходимые импорты
public class MinioExample {
public static void main(String[] args) throws Exception {
// Инициализируем клиента с URL, access key и secret key
MinioClient minioClient = MinioClient.builder()
.endpoint("http://127.0.0.1:9000")
.credentials("YOUR_ACCESS_KEY", "YOUR_SECRET_KEY")
.build();
// Создание бакета (если ещё не создан)
boolean bucketExists = minioClient.bucketExists("my-bucket");
if (!bucketExists) {
minioClient.makeBucket("my-bucket");
}
// Загрузка файла в бакет
minioClient.putObject(
PutObjectArgs.builder()
.bucket("my-bucket")
.object("example.txt")
.stream(new FileInputStream("example.txt"), -1, 10485760)
.build()
);
// Скачивание файла из бакета
InputStream stream = minioClient.getObject(
GetObjectArgs.builder()
.bucket("my-bucket")
.object("example.txt")
.build()
);
// Далее можно считать данные из stream...
stream.close();
}
}
Почему это важно?
Подключение к Minio позволяет разработчикам создавать масштабируемые, гибкие и отказоустойчивые приложения с использованием объектного хранилища. Используя Java SDK, вы получаете простой и понятный API для интеграции с вашим сервисом.
Если вы работаете над проектом, где важны быстрые операции с данными и совместимость с AWS S3 API, то этот подход — отличное решение!
✍️ Читайте полную статью: https://https://www.blackslate.io/articles/connect-to-minio-from-java
@javatg
erid: 2W5zFH6MTbv
Канал про собеседования, алгоритмы, System Design, процессы, культуру и инженерию в FAANG/BigTech
Автор канала — разработчик с 18-летним опытом, из которых 8 лет он провёл в FAANG (3,5 года — в Amazon). Работал и жил в России, Германии, Люксембурге и Великобритании, провёл более 100 технических интервью в FAANG-компании.
На канале разбираю реальные задачи с собеседований в FAANG по алгоритмам и System Design. Рассматриваю задачи из не-FAANG компаний на Java, делая акцент на многопоточность. Делюсь опытом работы в FAANG, рассказываю о процессах, технологиях и инженерной культуре, обсуждаю особенности релокации и жизни разработчика в разных странах.
Если вам интересны эти темы, подписывайтесь: www.tg-me.com/faangmaster
Канал про собеседования, алгоритмы, System Design, процессы, культуру и инженерию в FAANG/BigTech
Автор канала — разработчик с 18-летним опытом, из которых 8 лет он провёл в FAANG (3,5 года — в Amazon). Работал и жил в России, Германии, Люксембурге и Великобритании, провёл более 100 технических интервью в FAANG-компании.
На канале разбираю реальные задачи с собеседований в FAANG по алгоритмам и System Design. Рассматриваю задачи из не-FAANG компаний на Java, делая акцент на многопоточность. Делюсь опытом работы в FAANG, рассказываю о процессах, технологиях и инженерной культуре, обсуждаю особенности релокации и жизни разработчика в разных странах.
Если вам интересны эти темы, подписывайтесь: www.tg-me.com/faangmaster
🚀 Java API Tip — Integer.valueOf() и кеширование 🚀
Знаешь ли ты, что
📦 Значения в диапазоне от -128 до 127 кэшируются!
Это значит, что:
Но:
🔍 Почему так?
Чтобы повысить производительность и сэкономить память, Java автоматически кеширует часто используемые значения.
🛠 Кстати, ты можешь изменить границу кеша через JVM-опцию:
📌 Полезно, если у тебя в системе часто используются числа вне стандартного диапазона.
#Java #Performance #JVM #DevTips
@javatg
Знаешь ли ты, что
Integer.valueOf(int)
не всегда создаёт новый объект?📦 Значения в диапазоне от -128 до 127 кэшируются!
Это значит, что:
Integer a = Integer.valueOf(100);
Integer b = Integer.valueOf(100);
System.out.println(a == b); // 👉 true (один и тот же объект)
Но:
Integer x = Integer.valueOf(200);
Integer y = Integer.valueOf(200);
System.out.println(x == y); // 👉 false (два разных объекта)
🔍 Почему так?
Чтобы повысить производительность и сэкономить память, Java автоматически кеширует часто используемые значения.
🛠 Кстати, ты можешь изменить границу кеша через JVM-опцию:
-XX:AutoBoxCacheMax=512
📌 Полезно, если у тебя в системе часто используются числа вне стандартного диапазона.
#Java #Performance #JVM #DevTips
@javatg
💥 Задача: Почему эта структура «ломается» в многопоточной среде?
🔍 Разбор:
С первого взгляда кажется, что BrokenImmutable — иммутабельный класс. Мы оборачиваем Map через Collections.unmodifiableMap, и поле data — final.
Но проблема в глубине структуры.
unmodifiableMap запрещает перезапись ключей, но не делает элементы внутри truly immutable. В данном случае, значение по ключу "key" — это ArrayList, которую легко модифицировать.
💣 В main() мы получили доступ к внутреннему списку и… тихо сломали инвариант класса, добавив "🚨".
✅ Решение:
Чтобы сделать структуру действительно иммутабельной, нужно:
Копировать и оборачивать значения внутри Map.
Сделать глубокую защиту:
public BrokenImmutable(Map<String, List<String>> input) {
Map<String, List<String>> copy = new HashMap<>();
for (Map.Entry<String, List<String>> e : input.entrySet()) {
copy.put(e.getKey(), List.copyOf(e.getValue())); // immutable list
}
this.data = Map.copyOf(copy); // immutable map
}
Теперь никто не сможет мутировать data, даже если получит на него ссылку.
🧠 Вопрос на подумать:
А что если вместо ArrayList внутри Map был бы CopyOnWriteArrayList или ImmutableList от Guava? Почему CopyOnWriteArrayList — тоже плохой выбор для truly immutable структур?
@javatg
import java.util.*;
public class BrokenImmutable {
private final Map<String, List<String>> data;
public BrokenImmutable(Map<String, List<String>> input) {
this.data = Collections.unmodifiableMap(input);
}
public Map<String, List<String>> getData() {
return data;
}
public static void main(String[] args) {
Map<String, List<String>> base = new HashMap<>();
base.put("key", new ArrayList<>(List.of("a")));
BrokenImmutable bi = new BrokenImmutable(base);
Map<String, List<String>> d = bi.getData();
d.get("key").add("🚨");
System.out.println(bi.getData());
}
}
🔍 Разбор:
С первого взгляда кажется, что BrokenImmutable — иммутабельный класс. Мы оборачиваем Map через Collections.unmodifiableMap, и поле data — final.
Но проблема в глубине структуры.
unmodifiableMap запрещает перезапись ключей, но не делает элементы внутри truly immutable. В данном случае, значение по ключу "key" — это ArrayList, которую легко модифицировать.
💣 В main() мы получили доступ к внутреннему списку и… тихо сломали инвариант класса, добавив "🚨".
✅ Решение:
Копировать и оборачивать значения внутри Map.
Сделать глубокую защиту:
public BrokenImmutable(Map<String, List<String>> input) {
Map<String, List<String>> copy = new HashMap<>();
for (Map.Entry<String, List<String>> e : input.entrySet()) {
copy.put(e.getKey(), List.copyOf(e.getValue())); // immutable list
}
}
Теперь никто не сможет мутировать data, даже если получит на него ссылку.
🧠 Вопрос на подумать:
А что если вместо ArrayList внутри Map был бы CopyOnWriteArrayList или ImmutableList от Guava? Почему CopyOnWriteArrayList — тоже плохой выбор для truly immutable структур?
@javatg
🌉 Apache Beam — единый мост между batch- и stream-обработкой данных. Этот проект позволяет описывать pipelines всего один раз, а запускать их где угодно: от локальной машины до кластеров Spark или Flink, не переписывая код.
Проект использует один API для всех сценариев — будь то анализ исторических данных или обработка бесконечных потоков событий в реальном времени. При этом инструмент не навязывает конкретную инфраструктуру, оставляя свободу выбора движка исполнения.
🤖 GitHub
@javatg
Проект использует один API для всех сценариев — будь то анализ исторических данных или обработка бесконечных потоков событий в реальном времени. При этом инструмент не навязывает конкретную инфраструктуру, оставляя свободу выбора движка исполнения.
🤖 GitHub
@javatg
🔥 Успех в IT = скорость + знания + окружение
Здесь ты найдёшь всё это — коротко, по делу и без воды.
Пока другие ищут, где “подглядеть решение”, ты уже используешь самые свежие инструменты!
AI: www.tg-me.com/ai_machinelearning_big_data
Python: www.tg-me.com/pythonl
Linux: www.tg-me.com/linuxacademiya
Собеседования DS: www.tg-me.com/machinelearning_interview
C++ www.tg-me.com/cpluspluc
Docker: www.tg-me.com/DevopsDocker
Хакинг: www.tg-me.com/linuxkalii
Devops: www.tg-me.com/DevOPSitsec
Data Science: www.tg-me.com/data_analysis_ml
Javascript: www.tg-me.com/javascriptv
C#: www.tg-me.com/csharp_ci
Java: www.tg-me.com/java_library
Базы данных: www.tg-me.com/sqlhub
Python собеседования: www.tg-me.com/python_job_interview
Мобильная разработка: www.tg-me.com/mobdevelop
Golang: www.tg-me.com/Golang_google
React: www.tg-me.com/react_tg
Rust: www.tg-me.com/rust_code
ИИ: www.tg-me.com/vistehno
PHP: www.tg-me.com/phpshka
Android: www.tg-me.com/android_its
Frontend: www.tg-me.com/front
Big Data: www.tg-me.com/bigdatai
МАТЕМАТИКА: www.tg-me.com/data_math
Kubernets: www.tg-me.com/kubernetc
Разработка игр: https://www.tg-me.com/gamedev
Haskell: www.tg-me.com/haskell_tg
Физика: www.tg-me.com/fizmat
💼 Папка с вакансиями: www.tg-me.com/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: www.tg-me.com/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: www.tg-me.com/addlist/eEPya-HF6mkxMGIy
Папка ML: https://www.tg-me.com/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://www.tg-me.com/addlist/mzMMG3RPZhY2M2Iy
😆ИТ-Мемы: www.tg-me.com/memes_prog
🇬🇧Английский: www.tg-me.com/english_forprogrammers
🧠ИИ: www.tg-me.com/vistehno
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
📕Ит-книги бесплатно: https://www.tg-me.com/addlist/BkskQciUW_FhNjEy
Подпишись, если хочешь быть в числе тех, кого зовут в топовые проекты!
Здесь ты найдёшь всё это — коротко, по делу и без воды.
Пока другие ищут, где “подглядеть решение”, ты уже используешь самые свежие инструменты!
AI: www.tg-me.com/ai_machinelearning_big_data
Python: www.tg-me.com/pythonl
Linux: www.tg-me.com/linuxacademiya
Собеседования DS: www.tg-me.com/machinelearning_interview
C++ www.tg-me.com/cpluspluc
Docker: www.tg-me.com/DevopsDocker
Хакинг: www.tg-me.com/linuxkalii
Devops: www.tg-me.com/DevOPSitsec
Data Science: www.tg-me.com/data_analysis_ml
Javascript: www.tg-me.com/javascriptv
C#: www.tg-me.com/csharp_ci
Java: www.tg-me.com/java_library
Базы данных: www.tg-me.com/sqlhub
Python собеседования: www.tg-me.com/python_job_interview
Мобильная разработка: www.tg-me.com/mobdevelop
Golang: www.tg-me.com/Golang_google
React: www.tg-me.com/react_tg
Rust: www.tg-me.com/rust_code
ИИ: www.tg-me.com/vistehno
PHP: www.tg-me.com/phpshka
Android: www.tg-me.com/android_its
Frontend: www.tg-me.com/front
Big Data: www.tg-me.com/bigdatai
МАТЕМАТИКА: www.tg-me.com/data_math
Kubernets: www.tg-me.com/kubernetc
Разработка игр: https://www.tg-me.com/gamedev
Haskell: www.tg-me.com/haskell_tg
Физика: www.tg-me.com/fizmat
💼 Папка с вакансиями: www.tg-me.com/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: www.tg-me.com/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: www.tg-me.com/addlist/eEPya-HF6mkxMGIy
Папка ML: https://www.tg-me.com/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://www.tg-me.com/addlist/mzMMG3RPZhY2M2Iy
😆ИТ-Мемы: www.tg-me.com/memes_prog
🇬🇧Английский: www.tg-me.com/english_forprogrammers
🧠ИИ: www.tg-me.com/vistehno
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
📕Ит-книги бесплатно: https://www.tg-me.com/addlist/BkskQciUW_FhNjEy
Подпишись, если хочешь быть в числе тех, кого зовут в топовые проекты!
💫 Geb — Groovy-фреймворк для автоматизации браузеров. Этот фреймворк сочетает мощь WebDriver с jQuery-подобным синтаксисом выборки элементов на Groovy, делая код для скрапинга или UI-тестов неожиданно лаконичным.
Особенность инструмента в встроенной поддержке асинхронных операций. Конструкции вроде
🤖 GitHub
@javatg
Особенность инструмента в встроенной поддержке асинхронных операций. Конструкции вроде
waitFor { $("p.status").text() == "Done" }
избавляют от ручного ожидания AJAX-запросов. А интеграция со Spock и JUnit позволяет использовать его как для адхок-скриптов, так и для полноценных acceptance-тестов. 🤖 GitHub
@javatg
Автор показывает, как с нуля создать полноценного ассистента на Java, используя современные AI-технологии. В статье — не только теория, но и конкретные примеры кода, архитектурные решения и нюансы интеграции.
Что внутри:
● Выбор архитектуры и подготовка проекта на Spring Boot
● Интеграция с языковыми моделями (LLM) через OpenAI API
● Построение цепочек prompt-инжиниринга для гибких диалогов
● Хранение истории общения, работа с сессиями
● Создание простого web-интерфейса для управления ассистентом
● Советы по деплою, безопасности и масштабированию
● Возможность добавлять новые навыки и источники знаний
Статья идеально подойдёт, если вы хотите:
— разобраться, как работает интеграция Java-приложения с LLM
— реализовать кастомные диалоги и навыки
— быстро собрать своего AI-ассистента для бизнеса или личных задач
Ссылка на подробный гайд:
🔗 https://dmitrykornilov.net/2025/05/16/building-ai-assistant-application-in-java/
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🔧 Rundeck — open-source платформа для автоматизации рутинных операционных задач. Этот инструмент помогает стандартизировать и выполнять workflows через веб-интерфейс, CLI или API, упрощая управление инфраструктурой и развертывание скриптов на множестве узлов.
Проект разрабатывается PagerDuty и предлагает готовые решения для DevOps-инженеров и SRE. С его помощью можно организовать централизованное выполнение задач, начиная от простых скриптов до сложных многошаговых процедур с контролем доступа и логированием. Для развертывания доступны варианты с Docker, DEB/RPM-пакетами или WAR-архивом.
🤖 GitHub
@javatg
Проект разрабатывается PagerDuty и предлагает готовые решения для DevOps-инженеров и SRE. С его помощью можно организовать централизованное выполнение задач, начиная от простых скриптов до сложных многошаговых процедур с контролем доступа и логированием. Для развертывания доступны варианты с Docker, DEB/RPM-пакетами или WAR-архивом.
🤖 GitHub
@javatg
📜 JBake — генератор статических сайтов для Java-разработчиков. Этот инструмент превращает Markdown, AsciiDoc или HTML-файлы в готовые статические сайты, сохраняя при этом гибкость шаблонов через Freemarker и Groovy.
Сборка через Gradle позволяет кастомизировать процесс, а встроенная поддержка Docker избавляет от необходимости настраивать окружение вручную. Для блогов разработчиков есть удобная организация контента по датам и тегам. Проект развивается с 2013 года и сохраняет минималистичный подход — никаких избыточных зависимостей, только ядро и плагины для расширения функциональности.
🤖 GitHub
@javatg
Сборка через Gradle позволяет кастомизировать процесс, а встроенная поддержка Docker избавляет от необходимости настраивать окружение вручную. Для блогов разработчиков есть удобная организация контента по датам и тегам. Проект развивается с 2013 года и сохраняет минималистичный подход — никаких избыточных зависимостей, только ядро и плагины для расширения функциональности.
🤖 GitHub
@javatg
🧠 Хитрая Java-задача: «Клонируемый итератор с разделяемым буфером»
Уровень: 💥 продвинутый (Java 17+)
🎯 Задача
Реализуйте класс
✔ Оборачивает любой
✔ Позволяет создать независимые клоны, каждый из которых продолжает чтение с текущего места
✔ Поддерживает *эффективное* разделение буфера: память O(k), где k — число активных клонов
✔ Не дублирует данные, не загружает всё в память и работает потокобезопасно (не обязательно
📌 Пример
💡 Ограничения
• Нельзя просто скопировать Iterator или заранее собирать весь список
• Память должна освобождаться, если часть буфера уже не нужна (все клоны её прошли)
• Только стандартная библиотека Java (можно использовать Deque, ArrayList, WeakReference, Optional, AtomicInteger и т.д.)
🔍 Подсказка по архитектуре
• Ведите общий буфер типа Deque<T>
• Каждому клону сопоставляется индекс, отслеживающий позицию в буфере
• По мере продвижения всех клонов — чистим буфер до минимального индекса
• Продумайте синхронизацию доступа, если хотите потокобезопасную версию
✅ Прототип реализации (без потокобезопасности)
🚀 Что можно улучшить
• Потокобезопасность (ConcurrentLinkedDeque, AtomicInteger)
• Освобождение ресурсов при уничтожении клонов (WeakReference)
• Поддержка remove()
• Версия Stream<T> с spliterator() или flatMap()
@javatg
Уровень: 💥 продвинутый (Java 17+)
🎯 Задача
Реализуйте класс
CloneableIterator<T>
, который:✔ Оборачивает любой
Iterator<T>
✔ Позволяет создать независимые клоны, каждый из которых продолжает чтение с текущего места
✔ Поддерживает *эффективное* разделение буфера: память O(k), где k — число активных клонов
✔ Не дублирует данные, не загружает всё в память и работает потокобезопасно (не обязательно
synchronized
, но без багов)📌 Пример
CloneableIterator<Integer> base = new CloneableIterator<>(List.of(10, 20, 30, 40).iterator());
Iterator<Integer> it1 = base.clone();
Iterator<Integer> it2 = base.clone();
System.out.println(it1.next()); // 10
System.out.println(it1.next()); // 20
System.out.println(it2.next()); // 10
System.out.println(it2.next()); // 20
System.out.println(it2.next()); // 30
💡 Ограничения
• Нельзя просто скопировать Iterator или заранее собирать весь список
• Память должна освобождаться, если часть буфера уже не нужна (все клоны её прошли)
• Только стандартная библиотека Java (можно использовать Deque, ArrayList, WeakReference, Optional, AtomicInteger и т.д.)
🔍 Подсказка по архитектуре
• Ведите общий буфер типа Deque<T>
• Каждому клону сопоставляется индекс, отслеживающий позицию в буфере
• По мере продвижения всех клонов — чистим буфер до минимального индекса
• Продумайте синхронизацию доступа, если хотите потокобезопасную версию
✅ Прототип реализации (без потокобезопасности)
import java.util.*;
public class CloneableIterator<T> {
private final Iterator<T> source;
private final List<T> buffer = new ArrayList<>();
private final List<Integer> positions = new ArrayList<>();
public CloneableIterator(Iterator<T> source) {
this.source = source;
}
public Iterator<T> clone() {
int index = 0;
positions.add(index);
int myId = positions.size() - 1;
return new Iterator<T>() {
private int pos = positions.get(myId);
@Override
public boolean hasNext() {
fillBuffer();
return pos < buffer.size();
}
@Override
public T next() {
fillBuffer();
if (pos >= buffer.size()) {
throw new NoSuchElementException();
}
T value = buffer.get(pos++);
positions.set(myId, pos);
cleanupBuffer();
return value;
}
private void fillBuffer() {
if (!source.hasNext()) return;
while (buffer.size() <= pos && source.hasNext()) {
buffer.add(source.next());
}
}
private void cleanupBuffer() {
int min = Collections.min(positions);
if (min > 0) {
buffer.subList(0, min).clear();
for (int i = 0; i < positions.size(); i++) {
positions.set(i, positions.get(i) - min);
}
}
}
};
}
}
🚀 Что можно улучшить
• Потокобезопасность (ConcurrentLinkedDeque, AtomicInteger)
• Освобождение ресурсов при уничтожении клонов (WeakReference)
• Поддержка remove()
• Версия Stream<T> с spliterator() или flatMap()
@javatg
Media is too big
VIEW IN TELEGRAM
🚀 Что нового
• Встроенный API для разбора и генерации PEM-текста (Privacy-Enhanced Mail)
• Поддержка публичных и приватных ключей, X.509-сертификатов, CRL
• Единый высокоуровневый интерфейс без сторонних зависимостей
🔍 Почему это важно
• Упрощает интеграцию с PKI и системами безопасности
• Исключает ручной парсинг Base64 и ошибки форматирования
• Обеспечивает безопасное хранение шифруемых ключей
Video: https://www.youtube.com/watch?v=hqvMn2SwKiI
JEP 470: https://openjdk.org/jeps/470
JDK 25 EA: https://jdk.java.net/25/
#Java #OpenJDK #Security
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Jooby — лаконичный веб-фреймворк для Java и Kotlin. Этот проект предлагает минималистичный подход к созданию API — без лишних абстракций, но с поддержкой популярных серверов вроде Jetty и Netty. Инструмент универсален: один и тот же код работает как в традиционных Java-приложениях, так и в Kotlin-проектах.
Фреймворк сохраняет совместимость с существующими решениями, позволяя подключать модули для GraphQL, WebSocket или авторизации. При этом стартовый шаблон умещается в несколько строк — достаточно вызвать
🤖 GitHub
@javatg
Фреймворк сохраняет совместимость с существующими решениями, позволяя подключать модули для GraphQL, WebSocket или авторизации. При этом стартовый шаблон умещается в несколько строк — достаточно вызвать
runApp
и описать роуты. 🤖 GitHub
@javatg
☕ Java-задача: что выведет этот код с `Integer` и `==`?
🔍 Варианты:
• a)
• b)
• c)
• d)
💡 Разбор:
В Java объект в диапазоне от -128 до 127 кешируется. Это значит:
- и будут ссылаться на один и тот же объект
- и — разные объекты, хоть и равны по значению
А оператор проверяет ссылочное равенство, а не значение.
✅ Правильный ответ: c) `true`, `false`
📌 Чтобы сравнивать значения , всегда используй :
🧠 Вывод: кеш работает в пределах -128..127. За пределами — создаются новые объекты. Используй вместо , если важны значения, а не ссылки.
public class Main {
public static void main(String[] args) {
Integer a = 100;
Integer b = 100;
Integer x = 1000;
Integer y = 1000;
System.out.println(a == b);
System.out.println(x == y);
}
}
🔍 Варианты:
• a)
true
, true
• b)
false
, false
• c)
true
, false
• d)
false
, true
💡 Разбор:
Integer
-
Integer a = 100;
Integer b = 100;
-
Integer x = 1000;
Integer y = 1000;
А оператор
==
✅ Правильный ответ: c) `true`, `false`
📌 Чтобы сравнивать значения
Integer
.equals()
System.out.println(x.equals(y)); // true
🧠 Вывод: кеш
Integer
equals()
==
MТС Web Services приглашает на митап True Tech QA
📍 3 июля | 19:00
📍 Офлайн в Москве | Онлайн
На True Tech QA выступят эксперты из MWS, Альфа-банка и BugBuster.
Обсудим мобильную ферму с возможностью ручного и автотестирования MWS SunQ, фреймворк Akita2, автотесты на естественном языке и процессы предективной оценки качества.
Для участия зарегистрируйся по ссылке
На True Tech QA выступят эксперты из MWS, Альфа-банка и BugBuster.
Обсудим мобильную ферму с возможностью ручного и автотестирования MWS SunQ, фреймворк Akita2, автотесты на естественном языке и процессы предективной оценки качества.
Для участия зарегистрируйся по ссылке
Please open Telegram to view this post
VIEW IN TELEGRAM
📚 Spring AI Alibaba — универсальный фреймворк для создания AI-агентов. Этот проект от Alibaba предлагает необычный подход к созданию чат-ботов. Вместо простых диалоговых систем здесь можно строить сложные мультиагентные workflows с визуальным графом выполнения, интеграцией с облачными сервисами Aliyun и даже human-in-the-loop взаимодействием.
Интересно выглядит DeepResearch — агент для аналитики, умеющий самостоятельно искать информацию, обрабатывать данные и генерировать отчеты. Поддержка Nacos и OpenTelemetry делает проект готовым к продакшену из коробки.
🤖 GitHub
@javatg
Интересно выглядит DeepResearch — агент для аналитики, умеющий самостоятельно искать информацию, обрабатывать данные и генерировать отчеты. Поддержка Nacos и OpenTelemetry делает проект готовым к продакшену из коробки.
🤖 GitHub
@javatg
Поступи в магистратуру с грантом до 1,2 млн рублей
Современная магистратура – это не пары для галочки, а возможность продвинуть карьеру и стать сильным специалистом.
Центральный университет ведет набор на пять программ магистратуры по популярным ИТ-направлениям. Партнеры – ведущие компании на рынке РФ: ВТБ, Сбер, Т-Банк, Яндекс, Avito, Ozon, Х5 Tech и другие. 62% магистрантов ЦУ находят новую работу с ростом зарплаты в 1,6 раза уже на первом курсе. Средняя зарплата – 195 тысяч рублей.
Обучение можно совмещать с работой, а поступить – уже с третьего курса.
Стань частью новой волны специалистов и получи грант на обучение до 1,2 млн рублей.
И подавай заявку на поступление уже сейчас.
Реклама. АНО ВО "Центральный университет", ИНН 7743418023, erid:2Ranym2uef3
Современная магистратура – это не пары для галочки, а возможность продвинуть карьеру и стать сильным специалистом.
Центральный университет ведет набор на пять программ магистратуры по популярным ИТ-направлениям. Партнеры – ведущие компании на рынке РФ: ВТБ, Сбер, Т-Банк, Яндекс, Avito, Ozon, Х5 Tech и другие. 62% магистрантов ЦУ находят новую работу с ростом зарплаты в 1,6 раза уже на первом курсе. Средняя зарплата – 195 тысяч рублей.
Обучение можно совмещать с работой, а поступить – уже с третьего курса.
Стань частью новой волны специалистов и получи грант на обучение до 1,2 млн рублей.
И подавай заявку на поступление уже сейчас.
Реклама. АНО ВО "Центральный университет", ИНН 7743418023, erid:2Ranym2uef3
🌊 Project Nessie — транзакционный каталог для data lakes с Git-подобным управлением версиями. Этот инструмент позволяет работать с данными как с кодом: создавать ветки, сливать изменения и откатывать их до предыдущих состояний. Особенно удобен для команд, которые хотят внести контроль версий в свои процессы обработки данных.
Инструмент поддерживает таблицы и представления Iceberg, а также интеграцию с популярными инструментами вроде Spark, Hive и Flink. Для быстрого старта можно развернуть готовый Docker-образ или воспользоваться CLI. Проект активно развивается: есть веб-интерфейс, аутентификация через OpenID Connect и подробная документация.
🤖 GitHub
@javatg
Инструмент поддерживает таблицы и представления Iceberg, а также интеграцию с популярными инструментами вроде Spark, Hive и Flink. Для быстрого старта можно развернуть готовый Docker-образ или воспользоваться CLI. Проект активно развивается: есть веб-интерфейс, аутентификация через OpenID Connect и подробная документация.
🤖 GitHub
@javatg
Forwarded from Machinelearning
This media is not supported in your browser
VIEW IN TELEGRAM
• Лёгкий и мощный инструмент для разработки в командной строке
• Работает на базе Gemini 2.5 Pro
• Код агента в открытом доступе (Apache 2.0)
• Поддержка контекста в 1 миллион токенов
• Бесплатный тариф: до 60 запросов в минуту и 1000 в день
• Привязка к Google Search
• Поддержка MCP
• Интеграция с VS Code (Gemini Code Assist)
Запуск в cli:
npx https://github.com/google-gemini/gemini-cli
@ai_machinelearning_big_data
#AI #ML #agent #Google
Please open Telegram to view this post
VIEW IN TELEGRAM
⛓️ Jimmer — революционный ORM для JVM (Java/Kotlin), переосмысливающий работу с данными. Этот инструмент позволяет оперировать не отдельными сущностями, а целыми графами объектов любой сложности, как при чтении, так и при сохранении.
Инструмент имеет встроенную поддержку DTO с кодогенерацией, самостоятельного устранения проблемы N+1 запросов и работы с рекурсивными структурами. ORM автоматически оптимизирует SQL-запросы, убирает лишние JOIN'ы и поддерживает многоуровневое кеширование. Проект предлагает удобные DSL для запросов, интеграцию с GraphQL и работает через APT/KSP, что обеспечивает безопасность типов на этапе компиляции.
🤖 GitHub
@androidits
Инструмент имеет встроенную поддержку DTO с кодогенерацией, самостоятельного устранения проблемы N+1 запросов и работы с рекурсивными структурами. ORM автоматически оптимизирует SQL-запросы, убирает лишние JOIN'ы и поддерживает многоуровневое кеширование. Проект предлагает удобные DSL для запросов, интеграцию с GraphQL и работает через APT/KSP, что обеспечивает безопасность типов на этапе компиляции.
🤖 GitHub
@androidits