TGViewer
Channel Public Channel
Java Ready | Программирование

Java Ready | Программирование

@java_ready

Авторский канал по разработке на Java.
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!

Cотрудничество: @energy_c
Subscribers
9.25K
Photos
1.4K
Videos
77
Links
759

Showing posts older than #1806 · Back to latest

Older Posts 12 shown
Post #1801 1.59K
👩‍💻 Spliterator — механизм, на котором построены потоки данных в Java!

Он позволяет обходить коллекции и при необходимости делить их на части для параллельной обработки. Это делает работу Stream API эффективной и масштабируемой, особенно при обработке больших наборов данных.

Понимание Spliterator помогает лучше разобраться в том, как Java оптимизирует итерацию и распределяет задачи между потоками. Даже если вы используете только Stream API, именно этот интерфейс выполняет основную работу под капотом.


👉 Java Ready | #шпора
  • 🔥 13
  • ❤ 4
  • 👍 4
Post #1799 1.7K
📂 Напоминалка по Java Collections Framework!

Например, ArrayList используется для динамических массивов и быстрого доступа по индексу, а HashSet позволяет хранить только уникальные элементы без повторений.

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

Сохрани, чтобы не забыть!

👉 Java Ready | #ресурс
  • ❤ 12
  • 👍 9
  • 🔥 6
Post #1798 1.68K
Выявление мошеннических транзакций с помощью ML!

Детекция мошеннических операций — одна из основных задач финтех-систем. Модель должна оценивать риск транзакции и выявлять подозрительную активность в потоке платежей.

Установка библиотек:
pip install pandas scikit-learn


Будем использовать pandas для работы с данными и scikit-learn для построения модели.

Импорт модулей:
import pandas as pd

from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report


Мы будем использовать пайплайн, который объединяет предобработку и модель — это стандартная практика для воспроизводимости и предотвращения утечек данных.

Пример структуры данных (учебный):
data = pd.DataFrame({
"amount": [12, 35, 60, 15, 22, 40, 2500, 4200, 5000, 3600],
"hour": [14, 18, 12, 10, 16, 19, 3, 2, 1, 2],
"is_foreign": [0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
"transactions_last_24h": [2, 3, 1, 2, 2, 3, 15, 20, 25, 18],
"fraud": [0, 0, 0, 0, 0, 0, 1, 1, 1, 1]
})


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

Разделим данные на признаки и целевую переменную:
X = data.drop(columns=["fraud"])
y = data["fraud"]


Теперь модель будет учиться предсказывать fraud на основе остальных признаков.

Разделим данные на обучающую и тестовую выборки:
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42, stratify=y
)


Стратификация сохраняет долю мошеннических операций в обеих выборках, что особенно важно при дисбалансе классов.

В антифроде логистическая регрессия часто используется как базовая модель: она быстрая, понятная и умеет оценивать вероятность мошенничества. Чтобы учесть дисбаланс классов, зададим веса.

Обучим модель в составе пайплайна:
model = Pipeline(steps=[
("scaler", StandardScaler()),
("clf", LogisticRegression(max_iter=1000, class_weight="balanced"))
])

model.fit(X_train, y_train)


StandardScaler нормализует числовые признаки, что улучшает сходимость линейных моделей.

Оценка качества модели:
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))


Отчёт показывает precision, recall и F1-меру для каждого класса. На малых данных, метрики приведены исключительно в демонстрационных целях.

Пример оценки новой транзакции:
tx = pd.DataFrame([{
"amount": 3200,
"hour": 2,
"is_foreign": 1,
"transactions_last_24h": 18
}])

risk = model.predict_proba(tx)[0][1]
print("Вероятность мошенничества:", round(risk, 2))


Модель возвращает вероятность fraud, которую можно использовать для принятия решения.

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

👉 Java Ready | #практика
  • ❤ 10
  • 👍 7
  • 👎 5
  • 🔥 5
  • 😁 1
Post #1796 1.67K
  • ❤ 13
  • 🔥 8
  • 👍 5
Post #1795 2.03K
Timeout wrapper для операций!

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

Создаём пул потоков для выполнения задач:
var pool = java.util.concurrent.Executors.newSingleThreadExecutor();


Оборачиваем операцию в Future:
var future = pool.submit(() -> {
Thread.sleep(2000); // имитация долгой операции
return "Готово";
});


Пытаемся получить результат с таймаутом:
try {
var result = future.get(1, java.util.concurrent.TimeUnit.SECONDS);
System.out.println(result);
}


Если время вышло прерываем задачу:
catch (java.util.concurrent.TimeoutException e) {
future.cancel(true);
System.out.println("Операция превысила лимит времени");
}


Не забываем завершить пул потоков:
pool.shutdown();


Теперь любая операция может выполняться с ограничением по времени.

👉 Java Ready | #практика
  • ❤ 8
  • 👍 4
  • 🔥 4
Post #1793 2.11K
☕️ Tutorials от Oracle — настоящая база знаний по Java!

Это обучающий портал, где подробно разобраны синтаксис, ООП, коллекции, исключения, потоки ввода-вывода, многопоточность и другое. Материал подаётся структурированно, от основ языка до продвинутых тем и API. Почти в каждом разделе есть примеры кода, объяснение концепций и ссылки на официальную документацию.

📌 Оставляю ссылочку: oracle.com

👉 Java Ready | #сайт
  • ❤ 11
  • 👍 10
  • 🔥 7
Post #1788 1.99K
👩‍💻 Optional — способ сделать null безопасным и контролируемым!

Вместо скрытых проверок и неожиданных NullPointerException код становится явным: значение либо есть, либо его нет. Это упрощает чтение логики и уменьшает количество защитных условий.

Правильное использование Optional делает API понятнее и безопаснее. Метод сразу показывает, что результат может отсутствовать, а цепочка вызовов позволяет обрабатывать этот случай аккуратно.


👉 Java Ready | #шпора
  • ❤ 11
  • 🔥 7
  • 👍 6
  • 🤝 3
Post #1786 1.81K
✍️ Awesome Java — большая подборка полезных ресурсов!

Репозиторий представляет собой структурированный список качественных материалов для Java-разработчиков: инструменты сборки (Maven, Gradle), статьи, руководства, видео-лекции и практические разборы. Удобно для обучения, повторения и поиска источников.

Оставляю ссылочку: GitHub 📱


👉 Java Ready | #репозиторий
  • 👍 9
  • ❤ 6
  • 🔥 6
Post #1785 1.9K
Змейка в консоли

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

Поле и стартовые координаты:
int width = 20, height = 10;
int x = width / 2, y = height / 2;


Еда:
int foodX = (int) (Math.random() * width);
int foodY = (int) (Math.random() * height);


Чтение управления (WASD):
char key = sc.nextLine().toLowerCase().charAt(0);


Двигаем голову змейки:
if (key == 'w') y--;
if (key == 's') y++;
if (key == 'a') x--;
if (key == 'd') x++;


Проверка стен:
if (x < 0 || x >= width || y < 0 || y >= height) {
System.out.println("Game Over");
break;
}


Если съели еду спавним новую и добавляем очки:
if (x == foodX && y == foodY) {
score++;
foodX = (int) (Math.random() * width);
foodY = (int) (Math.random() * height);
}


Отрисовка кадра:
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
if (i == y && j == x) System.out.print("O");
else if (i == foodY && j == foodX) System.out.print("*");
else System.out.print(".");
}
System.out.println();
}
System.out.println("Score: " + score);


Код очень простой, но подойдёт для новичков.

👉 Java Ready | #совет
  • ❤ 13
  • 👍 7
  • 🔥 5
  • 👎 3
Post #1783 1.83K
📂 Напоминалка по HTTP vs HTTPS!

Например, HTTP передаёт данные в открытом виде, без шифрования. HTTPS работает поверх TLS и защищает соединение: выполняется проверка сертификата, обмен ключами и дальнейшая передача данных в зашифрованном виде.

На картинке — ключевые этапы установления соединения.

Сохрани, чтобы не забыть!

👉 Java Ready | #ресурс
  • ❤ 12
  • 👍 6
  • 🔥 4
Post #1782 1.81K
Защита от повторных запросов!

В API часто бывает повторы задач, что бы защититься от этого можно использовать Idempotency-key.

Создаём хранилище ключей с временем истечения:
record Entry(String response, long expireAt) {}
var store = new java.util.concurrent.ConcurrentHashMap<String, Entry>();


Функция для проверки/выполнения операции по ключу:
String handle(String key, java.util.function.Supplier<String> action, long ttlMs) {
long now = System.currentTimeMillis();
var saved = store.get(key);
if (saved != null && saved.expireAt() > now) return saved.response();


Если ключ новый выполняем действие и сохраняем ответ:
    var result = action.get();
store.put(key, new Entry(result, now + ttlMs));
return result;
}


Пример: один и тот же ключ возвращает один и тот же ответ:
var key = "pay:order-42";
var r1 = handle(key, () -> "OK#" + java.util.UUID.randomUUID(), 60000);
var r2 = handle(key, () -> "OK#" + java.util.UUID.randomUUID(), 60000);
System.out.println(r1);
System.out.println(r2);


Теперь повторные запросы с тем же ключом не выполняют операцию повторно.

👉 Java Ready | #практика
  • ❤ 7
  • 👍 4
  • 🔥 4
  • 👎 2
Post #1780 1.79K
📂 Напоминалка для работы с HTTP-запросами!

Например, GET используется для получения данных, POST — для создания новых записей, а DELETE — для удаления.

На картинке — 9 самых популярных методов HTTP-запросов, которые стоит держать под рукой каждому разработчику.

Сохрани, чтобы не забыть!

👉 Java Ready | #ресурс
  • 👍 10
  • 🔥 8
  • ❤ 5
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →