Telegram Web Link
🖥 Mill — новый инструмент для сборки проектов на Java/Scala

Mill стремится облегчить процесс сборки, для чего заимствует идеи из таких современных инструментов, как Maven, Gradle, Bazel и SBT.

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

🖥 GitHub
🟡 Доки

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 XPipe — вся ваша серверная инфраструктура под рукой

choco install xpipe
или
bash <(curl -sL https://github.com/xpipe-io/xpipe/raw/master/get-xpipe.sh)

XPipe — open-source инструмент на Java, который позволяет получить доступ ко всей инфраструктуре сервера с локальной машины.

Он работает поверх установленных программ командной строки и не требует настройки на удаленных системах. Так что если вы используете такие инструменты, как ssh, docker, kubectl и т.д. для подключения к серверам, вы можете просто использовать XPipe поверх них.

XPipe полностью интегрируется с текстовыми редакторами, с терминалом, и с разными CLI утилитами.

🖥 GitHub

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Agrona — библиотека Java, позволяющая писать более лаконичный и производительный код

Agrona предоставляет набор структур данных и вспомогательных методов, которые часто требуются при создании высокопроизводительных приложений на Java.
Многие из этих компонентов используются, к примеру, в Aeron для эффективной и надежной передачи IPC-сообщений по протоколу UDP и обеспечивают высокопроизводительную реализацию буферов для поддержки кодека сообщений Simple Binary Encoding.

Например, с помощью Agrona можно переписать код:
List<Integer> numbers = new ArrayList<>();
// fill numbers somehow
Map<Integer, Integer> counters = new HashMap<>();
for (Integer x : numbers) {
counters.compute(x, (k, v) -> v == null ? 1 : v + 1);
}

вот так:
IntArrayList numbers = new IntArrayList();
// fill numbers somehow
Int2IntCounterMap counters = new Int2IntCounterMap(0);
for (int i = 0; i < numbers.size(); i++) {
counters.incrementAndGet(numbers.getInt(i));
}


🖥 GitHub

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 RoaringBitmap — битовые карты для сжатия чисел в Java

RoaringBitmap — это одна из лучших битовых карт;
используется в Apache Spark, Netflix Atlas, Apache Pinot, Tablesaw и во многих других компаниях.

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

🖥 GitHub
🟡 Доки

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
💻 Anvil — плагин для компилятора Kotlin, облегчающий внедрение зависимостей с помощью Dagger 2

Anvil упрощает внедрение зависимостей в Dagger за счет автоматического объединения модулей Dagger и интерфейсов компонентов. В общем, вместо того чтобы вручную добавлять модули в компонент Dagger и заставлять компонент Dagger расширять все интерфейсы компонента, эти модули и интерфейсы могут быть включены в компонент автоматически, типо того:

@Module
@ContributesTo(AppScope::class)
class DaggerModule { .. }

@ContributesTo(AppScope::class)
interface ComponentInterface {
fun getSomething(): Something
fun injectActivity(activity: MyActivity)
}

// The real Dagger component.
@MergeComponent(AppScope::class)
interface AppComponent


GitHub

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Piranha — инструмент Java для автоматического рефакторинга кода

Piranha — это инструмент для автоматического рефакторинга кода, связанного с устаревшими флагами.

Входными данными для Piranha являются имя флага и ожидаемое поведение;
также необходимо указать список API, связанных с флагами, в файле свойств.
Piranha будет использовать эти данные для автоматического рефакторинга кода в соответствии с ожидаемым поведением.

🖥 GitHub
🟡 Примеры рефакторинга с Piranha

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Как работают фильтры сервлетов?

Servlet содержит саму бизнес-логику обработки запросов. Реализации интерфейса javax.servlet.Filter выстраиваются в цепочку, через которую проходит запрос по пути в сервлет, и ответ на него по пути обратно к пользователю.

Filter Chain – типичный пример реализации паттерна Chain of responsibility. Каждый фильтр может модифицировать запрос/ответ, и либо отправить на обработку следующему фильтру, либо заворачивать обратно. В фильтрах удобно выполнять некий общий код обработки запросов: отклонение неавторизованных обращений, логгирование, обогащение запроса/ответа данными из контекста.

Фильтр состоит из трех методов: init, doFilter и destroy. doFilter – основная реализация фильтрации, он вызывается для каждого запроса. Инициализация и уничтожение вызываются строго по одному разу. Кроме того, сервлет-контейнер гарантирует, что их вызовы не будут пересекаться: doFilter не начнет работать до конца выполнения init, и закончит до начала destroy.

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Совет по Spring Boot 🚀

Еесли вы хотите узнать, когда начинается и заканчивается транзакция #JPA, как повторно использовать существующую транзакцию в @Transactional или шаблоне TransactionTemplate, включите логирование DEBUG для `org.springframework.orm.jpa`.

@javatg
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Визуализация 9 типов тестирования API

Smoke Testing
Выполняется после разработки API. Проверка того, что API работают и ничего не выходит из строя.

Functional Testing
Позволяет создать план тестирования на основе функциональных требований и сравнить его с фактическими результатами.

Integration Testing
Этот тест объединяет ряд вызовов API и выполняет сквозные тесты. Оцениваются коммуникации и передача данных в процессе эксплуатации.

Regression Testing

Этот тест гарантирует, что исправления ошибок или новые функции не нарушат текущее поведение API.

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

Stress Testing
API специально перегружаются, чтобы проверить, могут ли они функционировать должным образом.

Security Testing
Этот тест сертифицирует API от всех потенциальных угроз извне.

UI Testing
Гарантирует, что пользовательский интерфейс может взаимодействовать с этими API и отображать данные по мере необходимости.

Fuzz Testing
Этот тест отправляет недействительные или неожиданные входные данные в API и пытается вызвать его сбой. Делается путем выявления уязвимостей API.

#opensource #api #web

@javatg
🖥 Задача: Расположите в виде иерархии следующие интерфейсы: List, Set, Map, SortedSet, SortedMap, Collection, Iterable, Iterator, NavigableSet, NavigableMap

Ответ на картинке.

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Совет Java

Если вы случайно уже используете генератор метамодели в своем проекте, вы можете использовать сгенерированные классы модели в атрибуте mappedBy ваших отношений, чтобы обеспечить немного большую типобезопасность.

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Shallow Copy vs Deep Copy

⚡️ Поверхностное копирование:
Создается новая переменная. Она ссылается на тот же объект в памяти, что и оригинал. Это означает, что любые изменения в копии будут отражаться и на исходном объекте.
Используется:
- Когда объект содержит только примитивные типы данных.
- Когда две ссылки на один объект запланированы или допустимы.

⚡️ Глубокое копирование:
Создается полностью независимый дубликат объекта, включая все вложенные структуры.
Это гарантирует, что изменения в копии никак не повлияют на оригинальный объект.
Используется:
- Когда объекты содержат вложенные объекты или массивы.
- Когда вам нужна полная независимость между копиями.

@javatg
🖥 Sharing

Android-приложение, написанное на Java, которое позволяет обмениваться файлами и приложениями по HTTP между устройствами, подключенными к одной сети.

Пользователи могут запустить сервер на своем устройстве, отсканировать QR-код на другом устройстве и легко передавать файлы.

🖥 Github

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ every-programmer-should-know | Каждый кодер должен знать

Крутая подборка материалов про Computer Science. Неважно, какой ЯП вы используете, вам все равно стоит знать виды алгоритмов, структур данных, архитектуры и другую базу.


📌 Репозиторий проекта

@javatg
2025/07/04 20:35:36
Back to Top
HTML Embed Code: