Java | Фишки и трюки
الذهاب إلى القناة على Telegram
Java: примеры кода, интересные фишки и полезные трюки Купить рекламу: https://telega.in/c/java_tips_and_tricks ✍️По всем вопросам: @Pascal4eg Менеджер по рекламе: @shmyzna
إظهار المزيد6 954
المشتركون
-124 ساعات
-117 أيام
+1330 أيام
أرشيف المشاركات
6 956
public class Quest {
public static final Quest INSTANCE = new Quest();
private final int yearsAgo;
private static final int CURRENT_YEAR = Calendar.getInstance().get(Calendar.YEAR);
private Quest() {
yearsAgo = CURRENT_YEAR - 2000;
}
public int yearsAgo() {
return yearsAgo;
}
public static void main(String[] args) {
System.out.println(INSTANCE.yearsAgo());
}
}6 956
Блиц-тестирование на грейд в Java
Менторы ШОРТКАТ собрали полезный небольшой тест, который поможет тебе проверить знания.
Конечно, это не определит грейд точно, но даст понять, какие темы западают. За прохождение ещё и дадут скидку на менторство.
Переходи в бот, чтобы пройти тест: @shortcut_sh_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqxDv1BP
6 956
⌨️ Простой пример использования Project Reactor, который демонстрирует основы работы с Mono и Flux.
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
public class ProjectReactorExample {
public static void main(String[] args) {
// Пример с Mono
Mono<String> monoExample = Mono.just("Hello, Reactor!");
monoExample
.map(String::toUpperCase) // Преобразуем строку в верхний регистр
.subscribe(System.out::println); // Подписываемся и выводим результат
// Пример с Flux
Flux<Integer> fluxExample = Flux.just(1, 2, 3, 4, 5);
fluxExample
.filter(num -> num % 2 == 0) // Фильтруем четные числа
.map(num -> num * num) // Возводим в квадрат
.subscribe(System.out::println); // Подписываемся и выводим результат
}
}
🔍 Что происходит в коде?
1. Mono:
- Создаем экземпляр Mono с помощью Mono.just(), передавая строку.
- Используем метод map(), чтобы преобразовать строку в верхний регистр.
- Подписываемся на Mono с помощью subscribe, который выводит результат.
2. Flux:
- Создаем экземпляр Flux с числовыми значениями от 1 до 5.
- Фильтруем четные числа с помощью filter().
- Применяем map(), чтобы возвести каждое четное число в квадрат.
- Подписываемся на Flux и выводим результат.6 956
2024 все.. а ты еще не разработчик?
нет опыта, не хватает идей и времени, высокая конкуренция. Оставь эти отговорки в 2024! И читай здесь, что нужно для успешной карьеры 👇
- актуальные навыки в 2025. Чем быстрее адаптируешься к запросам рынка, тем выше твоя зп 😉
- идеи для проектов, современные инструменты разработки (Jira, GitHub, Miro)
- успешное прохождение интервью
Не понимаешь, как это реализовать? Тогда приходи на мощный 3-х дневный интенсив «Пошаговый гайд к работе Java Dev в 2025» от FAANG SCHOOL. И у тебя полностью перевернется представление о том, как действительно выглядит рынок IT!
- какие навыки изучить в первую очередь
- как выбирать актуальные идеи для проекта
- ошибки, из-за которых 80% проектов оказываются провальными
- как преодолеть фильтры HR без накрутки опыта
⬇️ Пока ты думаешь, кто-то получает твой оффер! Переходи, забирай подарок и узнай, как даже джуну создать проект, способный обеспечить пассивный доход!
6 956
🚀 Реактивное программирование с помощью Project Reactor
Реактивное программирование — это новый подход к созданию асинхронных и масштабируемых приложений. Project Reactor — библиотека для Java, которая делает этот процесс простым и эффективным.
🔍 Что такое Project Reactor?
Project Reactor предоставляет инструменты для работы с потоками данных, основанные на спецификации Reactive Streams. Это дает возможность обрабатывать асинхронные события, используя:
1. Mono: асинхронный поток, который возвращает 0 или 1 элемент. Идеален для единичных значений.
2. Flux: поток, который может вернуть 0, 1 или много элементов. Отлично подходит для работы с коллекциями данных.
⚡ Преимущества Project Reactor:
🏎️ Высокая производительность: Неблокирующая модель усиливает эффективность использования ресурсов.
🛠️ Простой в обработке ошибок: Реактивные методы делают управление ошибками интуитивным.
📜 Читабельный код: Операторы позволяют писать более чистый и понятный код.
6 956
Подробно рассказываем о высокопроизводительных решениях с фреймворком userver на новом бесплатном вебинаре!
Он предназначен для создания надежных и молниеносных микросервисов и веб-серверов. Освойте передовой C++ фреймворк всего за 90 минут!
✅ Вы узнаете:
- Уникальные архитектурные особенности и преимущества userver, которые сделают вашу работу легче и эффективнее.
- Как быстро настроить окружение и запустить свой первый проект, не тратя лишнего времени.
- Советы высококлассных профессионалов по работе с асинхронностью, которые помогут вам стать мастером своего дела и очень много другой полезной сочной информации!
📌Получите практический и ценный опыт работы с userver, который можно сразу применить в своих проектах - регистрируйтесь по ссылке: https://clck.ru/3F9DAQ?erid=LjN8K92wW
P.S. Все зарегистрированные участники получат приличную скидку на обновленный топовый курс «C++ Developer. Professional»
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
6 956
⌨️ Метод Stream.distinct()
Если у вас есть поток, который может содержать повторяющиеся элементы, используйте операцию
distinct(), чтобы удалить их.
var list = Arrays.asList(1, 2, 3, 3, 4, 5, 5);
var distinctList = list.stream()
.distinct()
.collect(Collectors.toList());
// distinctList: [1, 2, 3, 4, 5]6 956
🌟 Функциональное программирование с Vavr: Пример использования
Сегодня мы рассмотрим, как библиотека Vavr может упростить обработку ошибок и повысить читаемость вашего кода.
Пример использования
Vavr: Обработка ошибок с помощью Try
Представьте, что у вас есть метод, который выполняет операцию деления, и вам нужно обработать возможные ошибки, например деление на ноль. Вместо стандартного подхода с try-catch, мы можем использовать класс Try из Vavr, который автоматически обрабатывает исключения.
Вот как это можно сделать:
import io.vavr.control.Try;
public class VavrExample {
public static void main(String[] args) {
// Попробуем выполнить деление
Try<Double> result = Try.of(() -> divide(10, 0)); // Делим на ноль
// Обработка результата
result.onSuccess(value -> System.out.println("Результат: " + value)) // Если успешно
.onFailure(ex -> System.out.println("Ошибка: " + ex.getMessage())); // Если произошла ошибка
}
// Метод деления
private static double divide(int a, int b) {
return a / b; // Здесь может произойти исключение
}
}
Как это работает?
1. Try.of(): Мы оборачиваем вызов метода деления в Try. Если операция пройдет успешно, метод вернет значение. Если произойдет исключение (например, деление на ноль), это исключение будет перехвачено и "записано" в объект Try.
2. onSuccess(): Этот метод вызывается, если операция прошла успешно. В нашем случае, он выводит результат деления в консоль.
3. onFailure(): Этот метод вызывается, если произошла ошибка. Он позволяет легко обработать исключение, например, выведя сообщение об ошибке.
#Java #ФункциональноеПрограммирование #Vavr6 956
🚀 Усовершенствования в области параллелизма:
Project Loom
Project Loom — это инициатива в Java, которая вводит легковесные потоки (или корутины), делая асинхронное программирование более простым и понятным. Он позволяет разработчикам создавать и управлять огромным количеством потоков с минимальными затратами на ресурсы.
Почему это важно?
С использованием Project Loom вы сможете писать асинхронный код в синхронном стиле, что улучшает читаемость и упрощает отладку. Это значит меньше вложенных колбеков и легче управляемый код.
Как это работает?
Потоки в Project Loom называются "виртуальными", и вы можете создавать их так же просто, как обычные:
public class LoomExample {
public static void main(String[] args) {
// Создаем виртуальный поток
Thread.startVirtualThread(() -> {
System.out.println("Hello from a virtual thread!");
});
// Основной поток продолжает работу
System.out.println("Hello from the main thread!");
}
}
В этом примере мы создаем виртуальный поток, который выводит сообщение в консоль. Основной поток продолжает выполнять свою работу параллельно, что показывает, как просто можно организовать параллелизм без сложных конструкций.
Project Loom облегчает жизнь разработчикам, позволяя создавать многопоточные приложения проще и удобнее.6 956
Онлайн-курс «Java-разработчик» от EdMe: 6-8 месяцев, гарантия получения работы, оплата после трудоустройства
Образовательный проект EdMe открывает набор на курс по Java-разработке. Программа подойдет для начинающих и тех, кто стремится улучшить свои навыки.
Обучение построено на менторстве и направлено на комплексную подготовку к трудоустройству. За 6-8 месяцев вы сможете достичь уровня middle, для этого нужно уделять обучению от 20 часов в неделю.
Вы будете взаимодействовать с опытным разработчиком, который объяснит, что нужно учить и как это делать, а также чего избегать, чтобы быстрее освоить необходимые навыки и получить оффер. Ментор будет направлять вас, советовать, как решать технические вопросы, и помогать готовиться к собеседованиям.
Плюсы курса:
➕Гарантированное трудоустройство с зарплатой от 140 000 рублей.
➕Оплата после выхода на работу: вы платите только 20% от зарплаты в течение 18 месяцев.
➕Карьерная поддержка даже после окончания курса.
➕Если по каким-то причинам вы не сможете завершить обучение, это можно сделать без оплаты.
Во время обучения вы будете использовать Jira, Confluence, Bitbucket, GitLab – те самые системы, которые станут вашими рабочими инструментами в IT-компаниях.
Программа курса:
▪️Основы Java: Java Core, List, JDBC, Hibernate, Spring (Core, MVC, Security), Spring Boot, Git
▪️Проект
▪️Подготовка к собеседованиям (составление резюме, прохождение тестовых собеседований)
▪️Прохождение реальных собеседований
Узнать подробности и записаться на курс «Java-разработчик» можно на EdMe.pro
Отбор включает тестовое задание, которое под силу выполнить человеку без опыта, и собеседование.
Реклама. ООО "БАКСЭТ", ИНН 4345115602. Erid 2VtzqwacuhS
6 956
public class Quest {
public static void main(String[] args) {
System.out.println(4_32l + 4_32l);
}
}6 956
⌨️ Пример реализации Dependency Injection с использованием Reflection
Продолжаем тему метапрограммирования и поговорим о том, как реализовать паттерн проектирования Dependency Injection (DI) с использованием рефлексии. DI позволяет нам разделить зависимости и упростить управление ими, что делает код более чистым и тестируемым.
Пример: Простой контейнер для Dependency Injection
В этом примере мы создадим простой контейнер, который будет автоматически связывать зависимости на основе аннотаций. Для этого нам понадобятся:
1. Аннотация @Inject для пометки полей, которые мы хотим внедрить.
2. Контейнер для обработки аннотаций и создания объектов.
Шаг 1: Создаем аннотацию
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
@interface Inject {}
Шаг 2: Создаем классы с зависимостями
class Service {
public void serve() {
System.out.println("Service is working!");
}
}
class Client {
@Inject
private Service service;
public void doSomething() {
service.serve();
}
}
Шаг 3: Реализуем контейнер для Dependency Injection
import java.lang.reflect.Field;
class DIContainer {
public static void inject(Object obj) {
Class<?> clazz = obj.getClass();
for (Field field : clazz.getDeclaredFields()) {
if (field.isAnnotationPresent(Inject.class)) {
try {
field.setAccessible(true); // Делаем поле доступным
Object dependency = field.getType().getDeclaredConstructor().newInstance(); // Создаем экземпляр зависимости
field.set(obj, dependency); // Внедряем зависимость
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
Шаг 4: Используем наш контейнер
public class Main {
public static void main(String[] args) {
Client client = new Client();
DIContainer.inject(client); // Внедряем зависимости
client.doSomething(); // Вывод: Service is working!
}
}
Как это работает?
1️⃣ Мы создаем аннотацию @Inject, чтобы пометить поля, которые должны быть внедрены.
2️⃣ В классе Client поле service помечено этой аннотацией.
3️⃣ Контейнер DIContainer проходит по полям класса, ищет аннотацию @Inject, и, если находит, создает объект зависимости и устанавливает его в поле.
4️⃣ Когда мы вызываем метод doSomething, объект Service успешно внедрен, и мы можем использовать его методы.
#Java #Метапрограммирование #DependencyInjection6 956
+4
Новогодний список: ёлка, мандарины и карьерный рост! 🎇
Новый год — шанс стать лучшей версией себя. Как раз для этого и создан бесплатный онлайн-интенсив в Открытых школах Т1 для Java-разработчиков с опытом от года.
За месяц ты сможешь поднять свои скилы на новый уровень и познакомиться с ИТ-холдингом Т1, а после — принять участие в offer weeks.
📆 Быстрое обучение: 1 месяц.
💻 Гибкий формат: все этапы проходят онлайн, занятия — по вечерам.
Почему в Т1 классно?
🔹Уникальный рыночный опыт и масштабные ИТ-проекты для ключевых отраслей экономики. Разработки Т1 ежегодно получают награды на ИТ-конкурсах: Global CIO, Национальной банковской премии и других.
🔹Быстрый рост в ИТ при экспертной поддержке. Карьерные треки для выпускников Открытых школ позволяют быстро расти в профессии.
🔹Бигтех-культура и айтишные бонусы: ИТ-аккредитация, современный техстек, ДМС, удаленка, крутые офисы, спорт, обучение, ИТ-конференции, программы признания и развития и многое другое от Т1.
Подай заявку на интенсив до 14.01, и пусть 2025 принесёт тебе не только подарки, но и карьерный рост!
Реклама. ООО «Т1» ИНН: 7720484492. Erid: 2SDnjdhR9hM
6 956
⌨️Метапрограммирование: Использование Reflection для динамического изменения кода
Reflection — это механизм в Java, который позволяет программам анализировать и манипулировать объектами во время выполнения. С помощью рефлексии вы можете:
✔️ Получать информацию о классах, методах и полях. Это позволяет динамически исследовать структуры данных вашего приложения.
✔️ Создавать экземпляры классов: Вы можете создавать объекты, не зная их тип на этапе компиляции.
✔️ Вызывать методы динамически: Это дает возможность запускать методы объектов, основываясь на их именах, переданных в виде строк.
✔️ Изменять значения полей: Вы можете динамически изменять значения полей объектов, что может быть особенно полезно в контексте тестирования или сериализации.
Преимущества использования рефлексии:
✔️ Потенциал для создания более абстрактного кода: Вы можете реализовать паттерны проектирования, такие как Dependency Injection.
✔️ Упрощение работы с библиотеками и фреймворками: Многие популярные библиотеки, такие как Spring и Hibernate, активно используют рефлексию для создания и управления объектами.
В следующем посте мы рассмотрим конкретные примеры использования рефлексии на практике. Оставайтесь с нами! 🚀
#Java #Метапрограммирование #Reflection
6 956
Онлайн-курс «Java-разработчик» от EdMe: 6-8 месяцев, гарантия получения работы, оплата после трудоустройства
Образовательный проект EdMe открывает набор на курс по Java-разработке. Программа подойдет для начинающих и тех, кто стремится улучшить свои навыки.
Обучение построено на менторстве и направлено на комплексную подготовку к трудоустройству. За 6-8 месяцев вы сможете достичь уровня middle, для этого нужно уделять обучению от 20 часов в неделю.
Вы будете взаимодействовать с опытным разработчиком, который объяснит, что нужно учить и как это делать, а также чего избегать, чтобы быстрее освоить необходимые навыки и получить оффер. Ментор будет направлять вас, советовать, как решать технические вопросы, и помогать готовиться к собеседованиям.
Плюсы курса:
➕Гарантированное трудоустройство с зарплатой от 140 000 рублей.
➕Оплата после выхода на работу: вы платите только 20% от зарплаты в течение 18 месяцев.
➕Карьерная поддержка даже после окончания курса.
➕Если по каким-то причинам вы не сможете завершить обучение, это можно сделать без оплаты.
Во время обучения вы будете использовать Jira, Confluence, Bitbucket, GitLab – те самые системы, которые станут вашими рабочими инструментами в IT-компаниях.
Программа курса:
▪️Основы Java: Java Core, List, JDBC, Hibernate, Spring (Core, MVC, Security), Spring Boot, Git
▪️Проект
▪️Подготовка к собеседованиям (составление резюме, прохождение тестовых собеседований)
▪️Прохождение реальных собеседований
Узнать подробности и записаться на курс «Java-разработчик» можно на EdMe.pro
Отбор включает тестовое задание, которое под силу выполнить человеку без опыта, и собеседование.
Реклама. ООО "БАКСЭТ", ИНН 4345115602. Erid 2VtzqwacuhS
6 956
public class Quest {
public static void main(String[] args) {
System.out.print(op1() + op2() * op3());
}
private static int op1() {
System.out.print(1);
return 1;
}
private static int op2() {
System.out.print(2);
return 2;
}
private static int op3() {
System.out.print(3);
return 3;
}
}
#java #quest6 956
⌨️ Использование Fixed Thread Pool
1️⃣ Создание пула потоков
Для начала нужно создать экземпляр
ExecutorService, который будет представлять ваш пул потоков. В этом примере мы создадим фиксированный пул из 5 потоков:
ExecutorService executor = Executors.newFixedThreadPool(5);
2️⃣ Отправка задач для выполнения
После создания пула, вы можете отправлять ему задачи с помощью метода submit(). В качестве примера, давайте создадим несколько задач, которые будут выполняться параллельно:
for (int i = 0; i < 10; i++) {
final int taskId = i;
executor.submit(() -> {
System.out.println("Задача " + taskId + " выполняется в: " + Thread.currentThread().getName());
// Имитация длительной задачи
try {
Thread.sleep(1000); // Задержка на 1 секунду
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
System.out.println("Задача " + taskId + " завершена в: " + Thread.currentThread().getName());
});
}
3️⃣ Завершение работы пула
После того как все задачи были отправлены, важно завершить работу пула, чтобы освободить ресурсы:
executor.shutdown(); // Ждем завершения всех задач
В этом примере создается пул из 5 потоков, и на него отправляется 10 задач. Поскольку пул состоит из 5 потоков, одновременно будут выполняться не более 5 задач. Остальные задачи будут ожидать своей очереди. Это демонстрирует, как Thread Pool управляет ресурсами и оптимизирует обработку задач.
При использовании Thread Pool вы можете быть уверены, что ваше приложение будет работать более эффективно, избегая затрат на создание новых потоков и управляя нагрузкой на систему.
#java #FixedThreadPool6 956
💼 Декабрьский челлендж для алготрейдеров!
Используешь роботов в торговле на бирже? Тогда заходи в Терминал или приложение Т-Банка, нажимай на кнопку «Участвовать», подключай брокерский счет и готовься к конкурсу от Т-Инвестиций.
С 2 по 13 декабря твой робот должен совершить минимум 1000 сделок. По итогам конкурса выберем трейдеров с самой высокой доходностью в двух категориях: портфели до 1 млн руб. и от 1 млн руб.
Лидеры категорий разделят между собой призовой фонд в размере 550 000 рублей.
Узнать больше про конкурс можно тут.
P.S.📚 А если не торгуешь, но эта тема интересна - то изучи Invest API для подключения торговых роботов, готовый sdk и примеры роботов других участников.
Сроки акции с 2.12.2024 по 13.12.2024. Подробнее об организаторе акции, порядке её проведения, призах, сроках, месте и порядке их получения на tbank.ru. АО «ТБанк». Реклама.
متاح الآن! بحث تيليغرام 2025 — أهم رؤى العام 
