uz
Feedback
Java | Фишки и трюки

Java | Фишки и трюки

Kanalga Telegram’da o‘tish

Java: примеры кода, интересные фишки и полезные трюки Купить рекламу: https://telega.in/c/java_tips_and_tricks ✍️По всем вопросам: @Pascal4eg Менеджер по рекламе: @shmyzna

Ko'proq ko'rsatish
6 951
Obunachilar
-324 soatlar
-127 kunlar
+1230 kunlar
Postlar arxiv
📚 Чистый код. Функции ✅ Функции должны быть короткими и компактными. ✅ Функции должны быть очень короткими и очень компактными. ✅ Приблизительный максимум 20 строк и 150 символов в одной строке, если не влезает, то нужно разделять. ✅ Функция должна выполнять только одну операцию. - Она должна выполнять её хорошо и ничего другого она делать не должна. - Если функция выполняет только те действия, которые находятся на одном уровне абстракции, то функция выполняет одну операцию. - Чтобы определить выполняет ли функция более одной операции, попробуй извлечь из нее другую функцию, которая не будет являться простой переформулировкой реализации. ✅ Чтобы определить выполняет ли функция более одной операции, попробуй извлечь из нее другую функцию, которая не будет являться простой переформулировкой реализации. ✅ If, else, while и т.д. должны содержать вызов одной функции. Так будет читабельнее, понятнее и проще. ✅ Идеальное количество входных аргументов для функции = 0. Если входных аргументов больше трех, то стоит задуматься каким образом лучше от них избавиться, например, создать класс для этих аргументов. ✅ Чем больше входных аргументов, тем тяжелее понимается функция. ✅ Функция в которую передается аргумент-флаг, от которого зависит работа функции говорит о том, что функция выполняет более одной операции. Такие функции следует разбить на две и вызывать их уровнем выше. ✅ Функция, которая изменяет входной аргумент, должна отдавать ссылку на измененный объект, а не просто изменять без возврата. String transform(String text) ✅ Если функция, должна изменять входной аргумент, то пусть она изменяет состояние своего объекта-владельца. ✅ Если входной аргумент функции не должен меняться (и используется дальше в коде), то следует скопировать значение аргумента и внутри функции работать с копией. ✅ Вместо return null лучше использовать пустой объект — Collection.empty() или null-объект -EmptyObject(). ✅ Всегда старайся использовать нестатические функции. Если это невозможно, то используй статические. ✅ Если есть код, который должен следовать один за другим, то передавай результаты первой функции во вторую, чтобы кто-нибудь не изменил последовательность вызовов. ✅ Используй полиморфизм вместо if/else или switch/case или when. ✅ Избегай отрицательных условий.

⌨️Метод parallelStream() / parallel() Этот метод позволяет выполнять параллельные операции над элементами стрима. Это полезно при работе с большими наборами данных или при выполнении тяжелых вычислений, которые можно распараллелить. Вот пример использования метода parallel() для вычисления суммы квадратов всех чисел от 1 до 100:

import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        int sumOfSquares = IntStream.rangeClosed(1, 100)
                .parallel()  // запускаем параллельные операции
                .map(x -> x * x)  // применяем квадратное преобразование к каждому числу
                .sum();  // находим сумму всех чисел

        System.out.println("Sum of squares: " + sumOfSquares);
    }
}
В данном примере метод parallel() позволяет выполнять вычисления одновременно для нескольких чисел параллельно, что может значительно ускорить время выполнения программы.

Вам нравится читать контент на этом канале? Возможно, вы задумывались о том, чтобы купить на нем интеграцию? Следуйте 3 простым шагам, чтобы сделать это: 1) Регистрируйтесь по ссылке: https://telega.in/c/java_tips_and_tricks 2) Пополняйтесь удобным способом 3) Размещайте публикацию Если тематика вашего поста подойдет нашему каналу, мы с удовольствием опубликуем его.

☕️Использование Optional. 🌐Optional - это класс, представляющий контейнер, который может содержать или не содержать значение. Он помогает избежать NullPointerException. Пример:

 
List<String> names = Arrays.asList("Alice", "Bob", "Charlotte", "David"); 
 
Optional<String> nameOptional = names.stream() 
    .filter(name -> name.startsWith("A")) 
    .findFirst(); 
 
nameOptional.ifPresent(name -> System.out.println("Найдено имя, начинающееся на 'A': " + name)); 
 
✔️В этом примере мы используем Optional для поиска первого имени в списке, которое начинается на букву "A". Мы применяем метод filter для фильтрации и метод findFirst для поиска первого элемента. Затем мы используем метод ifPresent для выполнения действия, если значение было найдено. ⚙️Использование Optional помогает обработать ситуации, когда значение может отсутствовать, и предотвратить ошибки NullPointerException. Эта фишка улучшает безопасность кода и делает его более надежным, что является важным для профессиональных разработчиков на Java.

Скажите что-то на карьерном Тинькофф в поиске крутых ИТ-спецов. С компании — профессиональный рост, интересные финтех-задачи,
Скажите что-то на карьерном Тинькофф в поиске крутых ИТ-спецов. С компании — профессиональный рост, интересные финтех-задачи, решение бытовых забот и работа там, где вы живете. С вас — выбрать вакансию и откликнуться тут Реклама АО «Тинькофф Банк» ИНН 7710140679

☕️Пример Java кода для реализации алгоритма быстрой сортировки

public class QuickSort {
    // Метод для обмена элементов
    private static void swap(int[] array, int i, int j) {
        int temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }

    // Основной метод быстрой сортировки
    public static void quickSort(int[] array, int low, int high) {
        if (array == null || array.length == 0){
            return;
        }
        if (low >= high){
            return;
        }

        // Выбор опорного элемента (pivot)
        int middle = low + (high - low) / 2;
        int pivot = array[middle];

        // Разделение на подмассивы
        int i = low, j = high;
        while (i <= j) {
            while (array[i] < pivot) {
                i++;
            }
            while (array[j] > pivot) {
                j--;
            }
            if (i <= j) {
                swap(array, i, j);
                i++;
                j--;
            }
        }

        // Рекурсивные вызовы для подмассивов
        if (low < j){
            quickSort(array, low, j);
        }
        if (high > i){
            quickSort(array, i, high);
        }
    }

    // Тестирование алгоритма
    public static void main(String[] args) {
        int[] array = {9, -3, 5, 2, 6, 8, -6, 1, 3};
        System.out.println("Исходный массив: " + Arrays.toString(array));
        quickSort(array, 0, array.length - 1);
        System.out.println("Отсортированный массив: " + Arrays.toString(array));
    }
}
🔈 Реализация алгоритма включает в себя метод quickSort, осуществляющий сортировку массива чисел, включающий в себя выбор опорного элемента, разделение на подмассивы и рекурсивные вызовы. Также, есть метод swap для обмена элементов и метод main для тестирования алгоритма.

Яндекс Практикум запустил курс «Инженер по тестированию: от новичка до автоматизатора». На нём студенты научатся вручную тест
Яндекс Практикум запустил курс «Инженер по тестированию: от новичка до автоматизатора». На нём студенты научатся вручную тестировать приложения и сайты, а потом — писать код на языке Java, чтобы запускать автоматические тесты. Автоматизация — востребованный навык у опытных тестировщиков, который открывает путь к более высоким должностям. Что вас ждёт во время учёбы: — Интерактивный учебник, где всё объясняем простым языком. — Тренажёр с мгновенной проверкой заданий. — Практика на учебных приложениях и проекты для портфолио. — Команда сопровождения, которая поможет разобраться в сложных темах и дойти до конца. — Карьерные консультанты, которые научат составлять резюме, проходить собеседования и тестовые задания. Попробуйте курс бесплатно, а если понравится — приходите учиться.

☕️Использование библиотеки Lombok для автоматической генерации геттеров, сеттеров и конструкторов в Java. Пример кода:

import lombok.Getter;
import lombok.Setter;

public class User {
    
    @Getter @Setter
    private String name;
    
    @Getter @Setter
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
⚙️С помощью аннотаций @Getter и @Setter от Lombok, не нужно писать многочисленные геттеры и сеттеры для каждого поля класса. Библиотека автоматически их сгенерирует во время компиляции. Это значительно упрощает процесс программирования и делает код более чистым и понятным.

photo content

☕️Использование аннотаций @SuppressWarnings Аннотация @SuppressWarnings в Java используется для подавления предупреждений компилятора или IDE. Это может быть полезно, если вы уверены, что определенное предупреждение не является критическим и хотите, чтобы компилятор пропустил его. Однако следует использовать эту аннотацию осторожно, поскольку она может скрыть проблемы в коде. Вот пример использования аннотации @SuppressWarnings:
public class DeprecatedExample {
    
    @SuppressWarnings("deprecation")
    public void useDeprecatedMethod() {
        // Используем устаревший метод
        DeprecatedClass deprecatedClass = new DeprecatedClass();
        deprecatedClass.deprecatedMethod();
    }

    public static void main(String[] args) {
        DeprecatedExample example = new DeprecatedExample();
        example.useDeprecatedMethod();
    }
}
✔️В данном примере метод useDeprecatedMethod() использует метод deprecatedMethod() из класса DeprecatedClass, который помечен аннотацией @Deprecated как устаревший. Аннотация @SuppressWarnings("deprecation") подавляет предупреждение компилятора о том, что используется устаревший метод, и позволяет успешно скомпилировать код без предупреждений. Помните, что использование аннотации @SuppressWarnings должно быть обосновано, и важно следить за качеством кода, чтобы не упустить потенциальные проблемы в вашем приложении.

Нейросеть прочитает документ за вас ❓ Что случилось? Голландский ИИ-стартап Send AI получил инвестиции от Google's Gradient Ventures. Send AI планирует заменить признанных лидеров в области обработки документов — UiPath, Abbyy, Rossum и Kofax. Что предлагают? Send AI — «инфраструктура обработки документов», основанная на небольших ИИ-моделях с открытым исходным кодом. Стартап позволяет извлекать самые важные данные из объемных и сложных документов — нейросеть определяет, какой общий посыл имеет документ, ищет конкретные строки о том или ином положении и проверяет текст на точность и безопасность. 🇷🇺 Как можно переиспользовать в России? Технологию можно использовать в России для улучшения обработки документов в государственном секторе — например, для ускорения работы МФЦ, получения визы или загранпаспорта. Основатели стартапа предлагают также внедрять технологию в сферы здравоохранение, финансов и страхования. Про этот и другие уникальные IT - стартапы можно узнать на канале Foresight. Подписывайтесь, чтобы быть в курсе свежих бизнес-решений.

☕️Использование Java Reflection API для динамической инспекции и манипуляции с классами, методами, полями и другими элементами программы во время выполнения. Java Reflection API позволяет получать информацию о классах, создавать экземпляры классов, вызывать методы, получать и устанавливать значения полей, а также работать с аннотациями и конструкторами. Пример использования Java Reflection API:

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class MyClass {
    private String name;
    
    public MyClass(String name) {
        this.name = name;
    }
    
    public void printInfo() {
        System.out.println("Name: " + name);
    }
}

public class Main {
    public static void main(String[] args) throws Exception {
        MyClass obj = new MyClass("John");
        
        // Получение класса
        Class<?> clazz = obj.getClass();
        
        // Получение и установка значения поля
        Field field = clazz.getDeclaredField("name");
        field.setAccessible(true);
        System.out.println("Original value: " + field.get(obj));
        field.set(obj, "Alice");
        System.out.println("Updated value: " + field.get(obj));
        
        // Вызов метода
        Method method = clazz.getDeclaredMethod("printInfo");
        method.invoke(obj);
    }
}
🔔В этом примере используется Java Reflection API для получения доступа к полю name, изменения его значения, вызова метода printInfo и вывода информации об объекте класса MyClass. Reflection API предоставляет возможность обращаться к классам и их элементам динамически во время выполнения программы, что делает его мощным инструментом для реализации различных функций в профессиональной разработке на Java.

🔥 Годнота Наткнулся на базу с 1700 вопросов с собеседований на Java разработчика. Фишка в том что просчитана вероятность с которой вопрос буден задан и есть примеры ответов. Теперь можно легко получить оффер, подготовившись к самым популярным вопросам 😏

☕️Использование трассировки стека: Отлов багов – это, возможно, самая трудоемкая составляющая процесса разработки на Java. Трассировка стека позволяет отследить, в каком именно месте проекта было выброшено исключение.
public class StackTraceExample {

    public static void main(String[] args) {
        try {
            method1();
        } catch (Exception e) {
            e.printStackTrace(); // Вывод трассировки стека
        }
    }

    public static void method1() {
        method2();
    }

    public static void method2() {
        method3();
    }

    public static void method3() {
        throw new RuntimeException("Custom exception message");
    }
}
🔈В этом примере показано как генерировать и обрабатывать трассировку стека в Java. Когда метод method3 вызывает исключение, это исключение перехватывается в методе main, и затем с помощью вызова e.printStackTrace() выводится трассировка стека, которая содержит информацию о вызове каждого метода от точки, где произошло исключение.

☕️Использование аспектно-ориентированного программирования с помощью фреймворка AspectJ Данная фишка используется для реализации перехватов событий и внедрения дополнительной логики в код без изменения его основной логики. Пример кода:
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.JoinPoint;

@Aspect
public class LoggingAspect {

    @Before("execution(* com.example.service.*.*(..))")
    public void beforeServiceMethod(JoinPoint joinPoint) {
        System.out.println("Логирование: Вызов метода " + joinPoint.getSignature().getName());
    }
}
🔈В этом примере мы создаем аспект LoggingAspect, который использует фреймворк AspectJ для перехвата вызовов методов в пакете com.example.service. С помощью аспектно-ориентированного программирования мы можем внедрять логику логирования или другие операции в код без изменения самого кода, улучшая его модульность и поддерживаемость.

Всем кодерам посвящается Code Ready — твоя готовая библиотека: Проекты на GitHub, JavaScript шпаргалки, разработка веб-приложений, и многое другое для твоих проектов, сразу с готовым кодом и примером их использования. 🌐 Расставь приоритеты, добавь лёгкости в свою работу и становись лучше с @code_ready

☕️Использование CountDownLatch CountDownLatch - это класс в Java, который предоставляет возможность создания ожидания, пока не завершится определенное количество операций или событий. Он часто используется для ожидания завершения параллельных потоков. Пример кода:
import java.util.concurrent.CountDownLatch;

public class Main {
    public static void main(String[] args) throws InterruptedException {
        int count = 3;
        CountDownLatch latch = new CountDownLatch(count);

        // Потоки, которые будут уменьшать счетчик
        new Thread(new Worker(latch)).start();
        new Thread(new Worker(latch)).start();
        new Thread(new Worker(latch)).start();

        // Ожидание завершения всех потоков
        latch.await();
        System.out.println("Все потоки завершили работу");
    }
}

class Worker implements Runnable {
    private CountDownLatch latch;

    Worker(CountDownLatch latch) {
        this.latch = latch;
    }

    public void run() {
        // Имитация выполнения работы
        try {
            Thread.sleep((long) (Math.random() * 1000));
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Поток завершил работу");
        latch.countDown(); // Уменьшение счетчика
    }
}
📣В этом примере создается объект CountDownLatch с начальным значением 3, и три потока уменьшают его значение перед завершением своей работы. Главный поток ожидает, пока значение счетчика не достигнет 0, после чего выводится сообщение о завершении всех потоков.

#бесплатный _вебинар Друзья, приглашаем вас на бесплатный вебинар, посвященный работе с Hibernate — самой популярной реализац
#бесплатный _вебинар Друзья, приглашаем вас на бесплатный вебинар, посвященный работе с Hibernate — самой популярной реализацией ORM-технологии. В рамках семинара поговорим о том, почему почти в каждом проекте используется Hibernate, разберемся какие плюсы и минусы у этой технологии. А также обсудим, почему Hibernate стал синонимом ORM в мире Java. 📝 Содержание вебинара:  • ключевые принципы ORM концепции; • связь между ООП и реляционной моделью в Hibernate; • плюсы и минусы Hibernate; • разработка приложения с использованием Hibernate. 📅 Дата: 05.03.2024⏰ Время: 16:00-17:00 (мск.) 🚀 Регистрируйтесь прямо сейчас — количество мест ограничено.

☕️Использования коллекций неизменяемых (immutable) элементов. Начиная с Java 9, была добавлена возможность использования коллекций неизменяемых (immutable) элементов. Это достигается с помощью метода of в классе List, Set и Map. Вот пример:
// Создание неизменяемого списка
List<String> immutableList = List.of("apple", "banana", "cherry");

// Создание неизменяемого множества
Set<String> immutableSet = Set.of("apple", "banana", "cherry");

// Создание неизменяемой карты
Map<String, Integer> immutableMap = Map.of("apple", 1, "banana", 2, "cherry", 3);
✔️Это полезно, поскольку неизменяемые коллекции обеспечивают безопасность параллельного доступа и гарантируют, что данные остаются неизменными. Это особенно полезно в многопоточных средах и предотвращает неожиданные изменения данных. Также это может улучшить читаемость кода, подчеркивая намерение сделать коллекцию неизменяемой.

😨Вы видели этот хардовый тест для Java QA Engineer'ов (не для новичков)? Его проходят всего 30% 👉 Пройдите тест из 20 вопро
😨Вы видели этот хардовый тест для Java QA Engineer'ов (не для новичков)? Его проходят всего 30%  👉 Пройдите тест из 20 вопросов онлайн-курса «Java QA Engineer. Professional» и узнайте, осилите ли вы обучение в OTUS.  🟢 Пройти тест: https://otus.pw/49bs/ 💣Все, кто успешно пройдет тест, получит доступ к записям уроков курса для знакомства с форматом обучения и спец.цену на курс. 💻 За 4 месяца обучения на курсе вы освоите: — популярные инструменты автоматизации  — полный спектр технологий тестирования на Java — ключевые инструменты автоматизации UI- и API-тестирования — навыки работы с RestAssured и JsonSchemaValidator — навыки работы с Appium — многопоточное тестирование с помощью Selenoid Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: LjN8JwcUE