Forwarded from Java Guru 🤓
Какой запрос нужно послать, чтобы получить 15?
Anonymous Quiz
5%
/api/sum?sum=15
10%
/sum?a=10&b=5
10%
/api/sum?a=10,b=5
5%
/api/sum&a=10&b=5
69%
/api/sum?a=10&b=5
👍32😁7🔥4
Класс "обертка" (wrapper class)
Класс-обертка (wrapper class) — это класс, который обеспечивает возможность использования примитивных типов данных как объектов. Каждый примитивный тип данных в Java имеет соответствующий класс-обертку: byte — Byte, short — Short, int — Integer, long — Long, float — Float, double — Double, boolean — Boolean и char — Character.
Классы-обертки используются, например, при работе с объектами коллекций, такими как ArrayList, где примитивные типы не могут быть использованы (список может хранить только объекты).
В этом примере мы создаем объекты классов-оберток для примитивных типов int, double, char и выводим значения этих объектов с помощью метода println().
@javalib #java
Класс-обертка (wrapper class) — это класс, который обеспечивает возможность использования примитивных типов данных как объектов. Каждый примитивный тип данных в Java имеет соответствующий класс-обертку: byte — Byte, short — Short, int — Integer, long — Long, float — Float, double — Double, boolean — Boolean и char — Character.
Классы-обертки используются, например, при работе с объектами коллекций, такими как ArrayList, где примитивные типы не могут быть использованы (список может хранить только объекты).
В этом примере мы создаем объекты классов-оберток для примитивных типов int, double, char и выводим значения этих объектов с помощью метода println().
@javalib #java
🔥13👍8❤4
Динамический массив
В Java динамический массив представляет собой структуру данных, которая позволяет хранить и управлять коллекцией элементов переменного размера.
Он реализуется с помощью класса ArrayList. ArrayList представляет собой реализацию списка, который может изменять свой размер по мере необходимости.
@javalib #java
В Java динамический массив представляет собой структуру данных, которая позволяет хранить и управлять коллекцией элементов переменного размера.
Он реализуется с помощью класса ArrayList. ArrayList представляет собой реализацию списка, который может изменять свой размер по мере необходимости.
@javalib #java
❤13👍5🔥2
🔗 REST – популярный подход для публичных API и веб-приложений, поддерживает JSON, XML, HTML и текст.
🔗 SOAP – использует структуру сообщений с оберткой на основе XML. Применяется в платежных системах и телеком-сервисах, но имеет высокий порог входа.
🔗 GraphQL – гибкая схема и система типов, позволяет использовать JSON и подходит для сложных систем и мобильных API.
🔗 gRPC – высокопроизводительный фреймворк RPC, работает через протоколы сериализации, используется для высоконагруженных систем.
🔗 WebSocket – поддерживает двустороннюю связь, подходит для чатов и других приложений реального времени.
🔗 Webhook – асинхронный подход, применим для CI/CD процессов и платежных шлюзов.
@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
❤20👍9
Paging vs. Segmentation
Когда речь идет об управлении памятью, важно понимать различия между пагинацией и сегментацией. Эти два метода имеют разные подходы к разделению адресного пространства процесса и распределению физической памяти.
🟡 Пагинация:
Пагинация разбивает виртуальную память на фиксированные блоки — страницы, а физическую память — на фреймы. Это позволяет системе избежать необходимости в непрерывном распределении памяти.
Преимущества:
- Устраняет внешнюю фрагментацию.
- Облегчает работу с виртуальной памятью и перемещением страниц.
- Управление памятью становится более простым и эффективным.
🟡 Сегментация:
Сегментация делит память на переменные по размеру сегменты, основываясь на логических частях программы (функции, объекты и массивы данных). Каждый сегмент может иметь свои ограничения и базовый адрес.
Преимущества:
- Обеспечивает логическое разделение кода и данных.
- Упрощает защиту и обмен сегментами.
- Поддерживает управление растущими структурами данных.
@javalib #java
Когда речь идет об управлении памятью, важно понимать различия между пагинацией и сегментацией. Эти два метода имеют разные подходы к разделению адресного пространства процесса и распределению физической памяти.
Пагинация разбивает виртуальную память на фиксированные блоки — страницы, а физическую память — на фреймы. Это позволяет системе избежать необходимости в непрерывном распределении памяти.
Преимущества:
- Устраняет внешнюю фрагментацию.
- Облегчает работу с виртуальной памятью и перемещением страниц.
- Управление памятью становится более простым и эффективным.
Сегментация делит память на переменные по размеру сегменты, основываясь на логических частях программы (функции, объекты и массивы данных). Каждый сегмент может иметь свои ограничения и базовый адрес.
Преимущества:
- Обеспечивает логическое разделение кода и данных.
- Упрощает защиту и обмен сегментами.
- Поддерживает управление растущими структурами данных.
@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥8🎉6❤1
Trie
Trie (дерево префиксов) — это структура данных в виде дерева, используемая для хранения ассоциативных данных, например словарей.
Она позволяет эффективно хранить и находить слова по их префиксам.
Trie состоит из узлов, каждый из которых может ссылаться на несколько дочерних узлов. Каждая ветвь от корня до листа представляет одно слово, а символы слова образуют путь от корня до узла-листа.
Узлы, которые являются концом слова, помечаются специальным флагом.
Поиск слова заключается в прохождении от корня по ветвям символов этого слова. Добавление нового слова — добавление отсутствующих узлов для его символов.
Trie оптимальна для хранения словарей и поиска по префиксам благодаря эффективности этих операций.
В Java для реализации Trie удобно использовать HashMap в узлах для связей с дочерними узлами.
@javalib #java
Trie (дерево префиксов) — это структура данных в виде дерева, используемая для хранения ассоциативных данных, например словарей.
Она позволяет эффективно хранить и находить слова по их префиксам.
Trie состоит из узлов, каждый из которых может ссылаться на несколько дочерних узлов. Каждая ветвь от корня до листа представляет одно слово, а символы слова образуют путь от корня до узла-листа.
Узлы, которые являются концом слова, помечаются специальным флагом.
Поиск слова заключается в прохождении от корня по ветвям символов этого слова. Добавление нового слова — добавление отсутствующих узлов для его символов.
Trie оптимальна для хранения словарей и поиска по префиксам благодаря эффективности этих операций.
В Java для реализации Trie удобно использовать HashMap в узлах для связей с дочерними узлами.
@javalib #java
👍7❤6
SSO (Single Sign-On) или Единая система аутентификации — это схема аутентификации, которая позволяет пользователю войти в разные системы, используя одну учетную запись.
На фото выше показан принцип работы SSO.
Шаг 1: Пользователь заходит в Gmail или любой другой сервис электронной почты. Gmail обнаруживает, что пользователь не авторизован, и перенаправляет его на SSO сервер аутентификации, который также обнаруживает отсутствие входа. Пользователь попадает на страницу авторизации SSO и вводит свои учетные данные.
Шаги 2-3: SSO сервер проверяет данные пользователя, создает глобальную сессию и выдает токен.
Шаги 4-7: Gmail проверяет токен на SSO сервере. Система аутентификации регистрирует Gmail и возвращает статус «действительно». Gmail отправляет пользователю защищенный ресурс.
Шаг 8: Из Gmail пользователь переходит на другой сайт Google, например, YouTube.
Шаги 9-10: YouTube обнаруживает, что пользователь не авторизован, и запрашивает подтверждение. SSO сервер находит уже активную сессию пользователя и выдает токен.
Шаги 11-14: YouTube проверяет токен на SSO сервере. Система аутентификации регистрирует YouTube и возвращает статус «действительно». YouTube отправляет пользователю защищенный ресурс.
@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🎉12☃5
DoubleAdder
DoubleAdder — это класс из пакета java.util.concurrent, предназначенный для эффективного параллельного суммирования значений типа double.
DoubleAdder оптимизирован для многопоточных приложений, когда нужно подсчитать сумму или другое агрегатное значение из большого числа потоков.
Преимущества:
— Высокая скорость за счет разделения на сегменты и отсутствия блокировок.
— Минимизация конфликтов между потоками при обновлении.
— Хорошо масштабируется на большом количестве CPU ядер.
@javalib #java
DoubleAdder — это класс из пакета java.util.concurrent, предназначенный для эффективного параллельного суммирования значений типа double.
DoubleAdder оптимизирован для многопоточных приложений, когда нужно подсчитать сумму или другое агрегатное значение из большого числа потоков.
Преимущества:
— Высокая скорость за счет разделения на сегменты и отсутствия блокировок.
— Минимизация конфликтов между потоками при обновлении.
— Хорошо масштабируется на большом количестве CPU ядер.
@javalib #java
👍10🔥9🎉5🎅1
Spring Initializr – инструмент, который поможет вам с начальной конфигурацией Spring-приложения. Выберите сборщик, зависимости, версию Java, и он сгенерирует базовую структуру проекта, готовую для импорта в вашу IDE и начала разработки.
@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9😁8🔥3❤2
Stream API (поток) — принципиально новый способ работы с коллекциями в Java (по крайней мере он был таким на момент релиза).
В данной статье речь пойдёт о наиболее интересных и показательных примерах использования Stream.
Обсудим, как применять Stream API эффективно, делая код лучше и избегая ошибок.
@javalib
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤6🔥4😁1
—
brew install jadxjadx предоставляет инструменты командной строки и GUI для получения исходного кода Java из APK, dex, aar, aab и zip-файлов.
Также позволяет декодировать
AndroidManifest.xml и другие ресурсы из resources.arsc.Имеется встроенный деобфускатор.
@javalib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29🔥6❤4🎄1
Оркестрация и хореография: что выбрать?
Когда дело доходит до координации взаимодействий между микросервисами, выбор между оркестрацией и хореографией — один из ключевых вопросов. Оба подхода имеют свои плюсы и минусы, а также подходят для разных архитектурных сценариев.
🔹 Оркестрация — это централизованный подход, при котором один сервис (оркестратор) управляет всеми взаимодействиями между сервисами. Он выступает дирижером, направляя выполнение процессов и следя за их последовательностью.
▪️ Плюсы:
- Четкий контроль за процессом выполнения задач.
- Упрощенная отладка и мониторинг.
▪️ Минусы:
- Слабая гибкость при изменении требований.
- Если оркестратор падает, система теряет управление процессами.
🔹 Хореография — децентрализованный подход, при котором каждый сервис реагирует на события и инициирует свои действия на основе этих событий. Здесь нет центрального контроллера; сервисы взаимодействуют по принципу «реакции».
▪️ Плюсы:
- Высокая гибкость и легкость в добавлении новых сервисов.
- Отсутствие единой точки отказа.
▪️ Минусы:
- Сложность в отслеживании последовательности выполнения.
- Потенциальные проблемы с согласованностью данных.
🎯 Когда что выбрать?
- Оркестрация хорошо подходит для бизнес-процессов с четкой последовательностью действий, когда требуется строгий контроль выполнения.
- Хореография лучше подходит для распределенных систем, где важно масштабирование и гибкость, а также в сценариях с высокой скоростью событий и реакций.
@javalib #java
Когда дело доходит до координации взаимодействий между микросервисами, выбор между оркестрацией и хореографией — один из ключевых вопросов. Оба подхода имеют свои плюсы и минусы, а также подходят для разных архитектурных сценариев.
🔹 Оркестрация — это централизованный подход, при котором один сервис (оркестратор) управляет всеми взаимодействиями между сервисами. Он выступает дирижером, направляя выполнение процессов и следя за их последовательностью.
▪️ Плюсы:
- Четкий контроль за процессом выполнения задач.
- Упрощенная отладка и мониторинг.
▪️ Минусы:
- Слабая гибкость при изменении требований.
- Если оркестратор падает, система теряет управление процессами.
🔹 Хореография — децентрализованный подход, при котором каждый сервис реагирует на события и инициирует свои действия на основе этих событий. Здесь нет центрального контроллера; сервисы взаимодействуют по принципу «реакции».
▪️ Плюсы:
- Высокая гибкость и легкость в добавлении новых сервисов.
- Отсутствие единой точки отказа.
▪️ Минусы:
- Сложность в отслеживании последовательности выполнения.
- Потенциальные проблемы с согласованностью данных.
🎯 Когда что выбрать?
- Оркестрация хорошо подходит для бизнес-процессов с четкой последовательностью действий, когда требуется строгий контроль выполнения.
- Хореография лучше подходит для распределенных систем, где важно масштабирование и гибкость, а также в сценариях с высокой скоростью событий и реакций.
@javalib #java
👍19🔥6❤5☃1
SeaTunnel - это высокопроизводительный инструмент распределенной интеграции данных нового поколения, способный ежедневно синхронизировать огромные объемы данных.
SeaTunnel способен стабильно и эффективно синхронизировать данные в режиме реального времени и уже используется в продакшене почти 100 компаниями.
Написан полностью на Java
@javalib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤3🔥3
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2
Apache Zeppelin — веб-блокнот на Java, позволяющий проводить интерактивную аналитику данных и создавать совместные документы с использованием SQL, Scala и других языков.
Быстрый старт с помощью Docker:
docker run -p 8080:8080 --rm --name zeppelin apache/zeppelin:0.11.1@javalib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🎉7🔥5
@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍6❤1
Ядро Vert.x содержит достаточно низкоуровневую функциональность, включая поддержку HTTP, TCP, доступ к файловой системе и различные другие возможности. Можно использовать Vert.x непосредственно в своих приложениях.
@javalib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤5🔥4