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

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

رفتن به کانال در Telegram

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

نمایش بیشتر
6 954
مشترکین
-124 ساعت
-117 روز
+1330 روز
آرشیو پست ها
⌨️ Почему Java не поддерживает перегрузку операторов? Перегрузка операторов делает код менее читаемым и плохо поддерживаемым. Чтобы сохранить простоту кода, Java не поддерживает перегрузку операторов. #java #operatorOverloading

❓Что выведет код на изображении выше? «Java в тестах» покажет тебе на сколько хорошо на самом деле ты знаешь Java. Тесты, кот
❓Что выведет код на изображении выше? «Java в тестах» покажет тебе на сколько хорошо на самом деле ты знаешь Java. Тесты, которые используются для сертификации разработчиков во всем мире: ▫️По программам OCA/OCP от Oracle ▫️По Spring Professional от VMWare. Или просто когда скучно на перерыве за кофе) Подключайся и стань настоящим профессионалом Java 👉 @java_in_quizes

⌨️ Метод forEachOrdered интерфейса Stream Метод forEachOrdered в интерфейсе Stream используется для обработки каждого элемента потока с сохранением порядка обработки, даже если поток является параллельным. В отличие от метода forEach(), который не гарантирует порядок выполнения в параллельных потоках, метод forEachOrdered() всегда сохраняет порядок элементов, как если бы поток был последовательным. Этот метод полезен, если вам нужно выполнить действия для каждого элемента в параллельном потоке, но при этом важен порядок обработки (например, вывод или запись данных в определенной последовательности). Параллельный поток с forEach:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.parallelStream().forEach(n -> System.out.println(n));
// Порядок не определён, например 3 1 4 2 5
Параллельный поток с forEachOrdered:

numbers.parallelStream()
     .forEachOrdered(n -> System.out.println(n));
// 1 2 3 4 5
#java #Stream #forEachOrdered

💸 Вакансии для IT'шников Выбери своё направление ⤵ 1. Frontend 2. Python 3. Java 4. Тестировщик QA 5. Data Science 6. DevOps 7. C# 8. C/C++ 9. Golang 10. PHP 11. Kotlin 12. Swift

⌨️ StringJoiner - это класс, который предназначен для объединения строк с использованием разделителя между ними. Этот класс был введен в Java 8 в пакете java.util. Он облегчает создание текстовых последовательностей, объединяя строки и вставляя разделители между ними. Вызов метода toString() возвращает объединенную строку с разделителями и окружающими символами. Вы также можете использовать метод setEmptyValue() для определения значения, которое будет использоваться, если StringJoiner остается пустым.

StringJoiner sj = new StringJoiner(", ", "[" , "]");
sj.setEmptyValue("No items");
System.out.println(sj.toString()); // No items

sj.add("Apple").add("Banana").add("Cherry");
System.out.println(sj.toString()); // [Apple, Banana, Cherry]
#java #StringJoiner

💻 Настоящие читы для программистов/разработчиков! Hacking & InfoSec Base — Самая большая в телеграме библиотека книг по хакингу и ИБ; Программистика — Лучший канал про Python; Coding Base — огромное количество полезных ресурсов, репозиториев статей для разработчиков; GameDev Base — Множество крутых приёмов и лайвхаков для геймдев разработчиков; 🫵 Подпишись и прокачивай свои навыки с невиданной скоростью!

⌨️ ForkJoinPool — это специальная реализация пула потоков, предназначенная для выполнения параллельных задач с использованием алгоритма разделяй и властвуй (divide and conquer). Этот пул потоков был представлен в Java 7 как часть библиотеки java.util.concurrent. Использует подход "разделяй и властвуй", где задача разбивается на подзадачи до тех пор, пока они не станут достаточно маленькими для последовательного решения. Для этого используются классы RecursiveTask<V> (возвращает результат) и RecursiveAction (без результата). ForkJoinPool динамически управляет количеством потоков, при необходимости создавая новые. Обычно это количество соответствует числу процессоров, доступных в системе. Использует технику work-stealing, где потоки, завершившие свои задачи, могут "красть" задачи у других потоков, чтобы эффективно использовать ресурсы процессора. ForkJoinPool обладает высокой производительностью для задач, которые можно разбить на независимые подзадачи. Основные методы: invoke(): синхронно запускает задачу и ждет её завершения. submit(): запускает задачу асинхронно. execute(): также запускает задачу асинхронно, но не возвращает результат. Пример использования:

import java.util.concurrent.RecursiveTask;
import java.util.concurrent.ForkJoinPool;

class SumTask extends RecursiveTask<Integer> {
    private final int[] array;
    private final int start, end;
    private final int threshold = 10;

    public SumTask(int[] array, int start, int end) {
        this.array = array;
        this.start = start;
        this.end = end;
    }

    @Override
    protected Integer compute() {
        if (end - start <= threshold) {
            // Базовый случай: небольшая задача
            int sum = 0;
            for (int i = start; i < end; i++) {
                sum += array[i];
            }
            return sum;
        } else {
            // Разделяем задачу
            int mid = (start + end) / 2;
            SumTask leftTask = new SumTask(array, start, mid);
            SumTask rightTask = new SumTask(array, mid, end);
            
            leftTask.fork(); // Асинхронно запускаем левую подзадачу
            int rightResult = rightTask.compute(); // Синхронно вычисляем правую подзадачу
            int leftResult = leftTask.join(); // Ждем завершения левой подзадачи
            
            return leftResult + rightResult;
        }
    }
}

public class ForkJoinExample {
    public static void main(String[] args) {
        ForkJoinPool pool = new ForkJoinPool();
        int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        SumTask task = new SumTask(array, 0, array.length);
        int result = pool.invoke(task);
        System.out.println("Сумма: " + result);
    }
}
Этот код создает задачу для суммирования массива, разбивая его на подзадачи. #java #ForkJoinPool

Разбираем как решать задачи на LeetCode ✅ Примеры решений ✅ Пояснения Выбери своё направление: 1. Python 2. JavaScript 3. Jav
Разбираем как решать задачи на LeetCode ✅ Примеры решений ✅ Пояснения Выбери своё направление: 1. Python 2. JavaScript 3. Java 4. C# 5. Golang 6. C/C++ 7. PHP 8. Kotlin 9. Swift

⌨️ Параллельные и последовательные потоки (Stream) Последовательные потоки (Sequential Streams) ✔️ Обрабатывают элементы последовательно, один за другим, на одном потоке, следовательно производительность ограничена возможностями одного ядра процессора. ✔️ Используют основной поток программы (main thread) для выполнения операций. ✔️ Метод stream() создаёт последовательный поток. Пример последовательного потока:

List<String> list = List.of("Hello ", "w", "o", "r", "l", "d!");
list.stream().forEach(System.out::print);
// Hello world!
Параллельные потоки (Parallel Streams) ✔️ Обрабатывают элементы параллельно, распределяя их между несколькими потоками (threads), что позволяет использовать многопоточность. ✔️ Используют ForkJoinPool для распределения задач между потоками. ✔️ Эффективны для больших наборов данных, поскольку могут улучшить производительность на многоядерных процессорах. ✔️ Параллельный поток можно создать, вызвав метод parallelStream() или применив метод parallel() к уже существующему потоку. Пример параллельного потока:

List<String> list = List.of("Hello ", "w", "o", "r", "l", "d!");
list.parallelStream().forEach(System.out::print);
// rlHello d!wo
#java #Stream #parallelStream

Да, быть разработчиком непросто. Но нет ничего невозможного, если у вас есть желание разобраться ☕ А если не уверены, что име
Да, быть разработчиком непросто. Но нет ничего невозможного, если у вас есть желание разобраться ☕ А если не уверены, что именно язык Java «ваш», то добро пожаловать на подготовительный курс «Java-разработчик» от онлайн-школы Хекслет. Практика с первого дня обучения, 62 онлайн-урока, 4 живых вебинара, помощь наставника, собственный проект по окончании программы, – и все это даже при нулевом уровне подготовки. Не обещаем, что будет легко, но интересно, полезно и недорого (всего 990 рублей!) – гарантируем. На все это вам будет отведено 2 недели и 1 наставник-эксперт, который поможет справиться с трудностями.  ⏰ Cтарт уже 3 октября, так что записывайтесь скорее!

⌨️ Arrays.deepToString() Метод deepToString из класса Arrays используется для создания строкового представления многомерных массивов (например, массивов массивов). Он обходит каждый уровень вложенности массива и выводит его элементы в виде строки. Это удобно для работы с многомерными массивами, так как стандартный метод toString не раскрывает их структуру. Пример использования:

int[][] array = {{1, 2, 3}, {4, 5, 6}};
System.out.println(Arrays.deepToString(array));
// [[1, 2, 3], [4, 5, 6]]
Этот метод работает рекурсивно, обеспечивая полное отображение структуры массива любой вложенности. #java #Arrays #deepToString

Repost from ITFB Group
Всем привет! 27 сентября в 16:00 приглашаем на совместный митап для Java-разработчиков от ITFB Group, «МТС Банка» и «СберТеха
Всем привет! 27 сентября в 16:00 приглашаем на совместный митап для Java-разработчиков от ITFB Group, «МТС Банка» и «СберТеха»! Обсудим современные подходы, инструменты и лучшие практики разработки на Java. Участие в митапе ITFB Group — отличная возможность обменяться опытом, обсудить новые технологии и прокачать свои знания в области Java-программирования. Программа: ➖Использование Kubernetes для Spring приложений ➖GraalVM vs JVM и GraalVМ vs Go ➖Spring Boot vs Micronaut под GraalVM Native Image ➖Теряем сообщения в системе легально — управление проблемными ситуациями ➖Observability в Spring Boot 3 Спикеры: ➖Матвей Светлов — архитектор центра разработки CRM, «МТС Банк» ➖Евгений Ходосов — ведущий разработчик, ITFB Group ➖Антон Ромза — архитектор, ITFB Group ➖Владимир Маслов — главный руководитель ИТ-направления, «СберТех» Для участия в митапе выберите формат (online или offline в офисе ITFB Group) и оставьте заявку на сайте ➡️ Реклама. ООО "ТСР ТЕХ". ИНН 9729307967. erid: LjN8KNatk

⌨️ Метод reduce интерфейса Stream Метод reduce в интерфейсе Stream используется для сведения набора элементов потока к одному результату, применяя заданную бинарную операцию (например, сложение, умножение). Этот метод часто используется для агрегации данных. Допустим, у нас есть список чисел, и мы хотим найти их сумму:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

int sum = numbers.stream()
    .reduce(0, (a, b) -> a + b);

System.out.println(sum); // 15
В этом примере: 0 — начальное значение (identity), (a, b) -> a + b — бинарная операция, которая складывает два значения. reduce полезен для таких операций, как сумма, произведение, объединение строк и т.д. #java #Stream #reduce

🔥Тесты для подготовки к собеседованию🔥 Выбери своё направление: 1. Frontend 2. Python 3. Java 4. Тестировщик QA 5. Data Sci
🔥Тесты для подготовки к собеседованию🔥 Выбери своё направление: 1. Frontend 2. Python 3. Java 4. Тестировщик QA 5. Data Science 6. DevOps 7. C# 8. C/C++ 9. Golang 10. PHP 11. Kotlin 12. Swift

⌨️ Почему 1==1 это true, а 128==128 это false?

Integer a = 128;
Integer b = 128;
System.out.println(a == b); // false

Integer x = 1;
Integer y = 1;
System.out.println(x == y); // true
Это не просто волшебство! Это связано с целочисленным кэшированием в Java. Для значений в диапазоне от -128 до 127 объекты типа Integer кэшируются, и ссылки на них одинаковы, а для значений за пределами этого диапазона создаются новые объекты, и ссылки на них будут разными. Так как используется оператор ==, то сравниваются ссылки на объекты. #java #magic

🔥 Самые нужные каналы для Java разработчика, чтобы расти в доходе 💸Java | Вопросы собесовJava | LeetCodeJava | ТестыJava | Удалёнка Подпишись, чтобы не потерять ☝️

⌨️ Какие побитовые операции вы знаете? ~ Побитовый унарный оператор NOT; & Побитовый AND; &= Побитовый AND с присваиванием; | Побитовый OR; |= Побитовый OR с присваиванием; ^ Побитовый исключающее XOR; ^= Побитовый исключающее XOR с присваиванием; >> Сдвиг вправо (деление на 2 в степени сдвига); >>= Сдвиг вправо с присваиванием; >>> Сдвиг вправо без учёта знака; >>>= Сдвиг вправо без учёта знака с присваиванием; << Сдвиг влево (умножение на 2 в степени сдвига); <<= Сдвиг влево с присваиванием. #java #bitwise

Этот фреймворк откроет дорогу к IT-гигантам Когда разработчики слышат про Spring, то испытывают страх, ведь там бины, зависим
Этот фреймворк откроет дорогу к IT-гигантам Когда разработчики слышат про Spring, то испытывают страх, ведь там бины, зависимость, ApplicationContex - во всем этом разобраться сложно. Однако если изучить этот фреймворк, то это прямой путь к топовым вакансиям. Специально для этого FAANG School взяли все самое важное про Spring и упаковали в простую эфир-лекцию, где помимо практических знаний вы заберете архитектуру и примеры конкретных фич для собственного проекта-портфолио. Вы узнаете: – что такое Spring и почему он настолько популярен среди разработчиков – в чем разница между Spring, Spring Boot и как их использовать – как работают Spring Beans и как не путаться в конфигурациях – что такое Autowiring и как автоматизировать настройку зависимостей – как работает Dependency Injection и почему это ключ к гибким и масштабируемым приложениям Переходите, чтобы зарегистрироваться. Самые быстрые получат бонусы - мерч, другие полезные материалы, а также грант на обучение на Java Буткемп!

Что выведет код?
Anonymous voting

public class Quest {
    public static void main(String[] args) {
        int minutes = 0;
        for (int ms = 0; ms < 60 * 60 * 1000; ms++) {
            if (ms % 60 * 1000 == 0) {
                minutes++;
            }
        }
        System.out.println(minutes);
    }
}
#java #quest