Java | Фишки и трюки
Kanalga Telegram’da o‘tish
Java: примеры кода, интересные фишки и полезные трюки Купить рекламу: https://telega.in/c/java_tips_and_tricks ✍️По всем вопросам: @Pascal4eg Менеджер по рекламе: @shmyzna
Ko'proq ko'rsatish6 954
Obunachilar
-124 soatlar
-117 kunlar
+1330 kunlar
Postlar arxiv
6 954
⌨️ Почему Java не поддерживает перегрузку операторов?
Перегрузка операторов делает код менее читаемым и плохо поддерживаемым. Чтобы сохранить простоту кода, Java не поддерживает перегрузку операторов.
#java #operatorOverloading
6 954
❓Что выведет код на изображении выше?
«Java в тестах» покажет тебе на сколько хорошо на самом деле ты знаешь Java.
Тесты, которые используются для сертификации разработчиков во всем мире:
▫️По программам OCA/OCP от Oracle
▫️По Spring Professional от VMWare.
Или просто когда скучно на перерыве за кофе)
Подключайся и стань настоящим профессионалом Java 👉 @java_in_quizes
6 954
⌨️ Метод 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 #forEachOrdered6 954
6 954
⌨️ 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 #StringJoiner6 954
💻 Настоящие читы для программистов/разработчиков!
Hacking & InfoSec Base — Самая большая в телеграме библиотека книг по хакингу и ИБ;
Программистика — Лучший канал про Python;
Coding Base — огромное количество полезных ресурсов, репозиториев статей для разработчиков;
GameDev Base — Множество крутых приёмов и лайвхаков для геймдев разработчиков;
🫵 Подпишись и прокачивай свои навыки с невиданной скоростью!
6 954
⌨️ 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 #ForkJoinPool6 954
6 954
⌨️ Параллельные и последовательные потоки (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 #parallelStream6 954
Да, быть разработчиком непросто. Но нет ничего невозможного, если у вас есть желание разобраться ☕
А если не уверены, что именно язык Java «ваш», то добро пожаловать на подготовительный курс «Java-разработчик» от онлайн-школы Хекслет.
Практика с первого дня обучения, 62 онлайн-урока, 4 живых вебинара, помощь наставника, собственный проект по окончании программы, – и все это даже при нулевом уровне подготовки.
Не обещаем, что будет легко, но интересно, полезно и недорого (всего 990 рублей!) – гарантируем.
На все это вам будет отведено 2 недели и 1 наставник-эксперт, который поможет справиться с трудностями.
⏰ Cтарт уже 3 октября, так что записывайтесь скорее!
6 954
⌨️ 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 #deepToString6 954
Repost from 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
6 954
⌨️ Метод 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 #reduce6 954
6 954
⌨️ Почему 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 #magic6 954
🔥 Самые нужные каналы для Java разработчика, чтобы расти в доходе 💸
• Java | Вопросы собесов
• Java | LeetCode
• Java | Тесты
• Java | Удалёнка
Подпишись, чтобы не потерять ☝️
6 954
⌨️ Какие побитовые операции вы знаете?
~ Побитовый унарный оператор NOT;
& Побитовый AND;
&= Побитовый AND с присваиванием;
| Побитовый OR;
|= Побитовый OR с присваиванием;
^ Побитовый исключающее XOR;
^= Побитовый исключающее XOR с присваиванием;
>> Сдвиг вправо (деление на 2 в степени сдвига);
>>= Сдвиг вправо с присваиванием;
>>> Сдвиг вправо без учёта знака;
>>>= Сдвиг вправо без учёта знака с присваиванием;
<< Сдвиг влево (умножение на 2 в степени сдвига);
<<= Сдвиг влево с присваиванием.
#java #bitwise6 954
Этот фреймворк откроет дорогу к IT-гигантам
Когда разработчики слышат про Spring, то испытывают страх, ведь там бины, зависимость, ApplicationContex - во всем этом разобраться сложно.
Однако если изучить этот фреймворк, то это прямой путь к топовым вакансиям.
Специально для этого FAANG School взяли все самое важное про Spring и упаковали в простую эфир-лекцию, где помимо практических знаний вы заберете архитектуру и примеры конкретных фич для собственного проекта-портфолио.
Вы узнаете:
– что такое Spring и почему он настолько популярен среди разработчиков
– в чем разница между Spring, Spring Boot и как их использовать
– как работают Spring Beans и как не путаться в конфигурациях
– что такое Autowiring и как автоматизировать настройку зависимостей
– как работает Dependency Injection и почему это ключ к гибким и масштабируемым приложениям
Переходите, чтобы зарегистрироваться.
Самые быстрые получат бонусы - мерч, другие полезные материалы, а также грант на обучение на Java Буткемп!
6 954
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
Endi mavjud! Telegram Tadqiqoti 2025 — yilning asosiy insaytlari 
