Java | Фишки и трюки
前往频道在 Telegram
Java: примеры кода, интересные фишки и полезные трюки Купить рекламу: https://telega.in/c/java_tips_and_tricks ✍️По всем вопросам: @Pascal4eg Менеджер по рекламе: @shmyzna
显示更多6 953
订阅者
-324 小时
-27 天
+630 天
帖子存档
6 954
Бесплатный интенсив: Java-разработчик: старт в профессии с нуля.
📆 Когда: 25-26 февраля в 19:00 по мск.
За два дня интенсива в прямом эфире, под руководством опытного Java-разработчика, вы сможете:
✔️ Изучить базовые конструкции языка — переменные, типы данных, условные конструкции, циклы, импорты библиотек.
✔️ Написать свой первый проект и определить, подходит ли вам профессия разработчика.
✔️Создать приложение «To-do list».
✔️ Рассмотреть основы работы с SQL-базами данных.
✔️ Узнать ответы на интересующие вас вопросы.
✔️ Получить доступ к закрытому профессиональному сообществу.
🎁 Подарки для участниковинтенсива: гайд «Как заговорить на сленге IT-специалистов», карта компетенций начинающего Java-разработчика!
6 954
🔗 Разница между
List, Set и Map
Эти три интерфейса из java.util используются для хранения коллекций данных, но имеют разные свойства:
• List – упорядоченная коллекция, допускает дубликаты (ArrayList, LinkedList).
• Set – уникальные элементы, порядок может быть произвольным (HashSet, TreeSet).
• Map – хранит пары "ключ-значение" (HashMap, TreeMap).
✔️ Пример:
List<String> list = new ArrayList<>(List.of("A", "B", "A")); // [A, B, A]
Set<String> set = new HashSet<>(Set.of("A", "B", "A")); // [A, B]
Map<Integer, String> map = new HashMap<>(Map.of(1, "One", 2, "Two")); // {1=One, 2=Two}
💡 Совет: Используйте List, если важен порядок и дубликаты, Set – если важна уникальность, Map – для работы с парами ключ-значение.
#java #collections #list #set #map6 954
🔍 Что такое
switch с выражениями в Java 12+?
В Java 12 появился улучшенный switch, который позволяет возвращать значения и использовать case без break.
• Код стал короче и читабельнее.
• Можно присваивать результат switch переменной.
• Поддерживает yield для возврата значений.
✔️ Пример:
String result = switch (day) {
case "Monday", "Tuesday" -> "Рабочий день";
case "Saturday", "Sunday" -> "Выходной";
default -> "Неизвестный день";
};
System.out.println(result);
💡 Совет: Используйте новый switch для улучшения читаемости кода и уменьшения дублирования break.
#java #switch #java126 954
Что спрашивают на собеседовании у Middle Java-разработчика?
Уже завтра, 19 февраля в 19:00 мск — бесплатное открытое собеседование в прямом эфире!
Интервьюер Илья Аров с опытом работы в крупных банках задаст реальные вопросы разработчику-добровольцу и разберёт его ответы. В конце — время вопросов ментору из зала.
Что узнаешь на эфире:
✅ Какие вопросы задают на собеседованиях и зачем
✅ Как подготовиться, чтобы получить достойный оффер
✅ Чего ждут от кандидатов на Middle Java
Запишись на эфир в боте ШОРТКАТ → @shortcut_sh_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqwcVTDP
6 954
🔍 5 фишек
Stream API, которые упростят код
Stream API – мощный инструмент, но в нём есть интересные методы, о которых многие забывают.
🟢takeWhile() – берёт элементы, пока условие true.
🟢dropWhile() – пропускает элементы, пока условие true.
🟢iterate() – создаёт бесконечный поток.
🟢flatMap() – преобразует вложенные структуры в плоский поток.
🟢collect(Collectors.toMap()) – собирает Stream в Map.
✔️ Пример:
List<Integer> numbers = List.of(1, 2, 3, 4, 5);
numbers.stream()
.takeWhile(n -> n < 4)
.forEach(System.out::println); // 1, 2, 3
💡 Совет: Используйте эти методы, чтобы писать более лаконичный код без лишних for.
#java #streamapi #functionalprogramming6 954
☕️ Хочешь освоить Java и построить карьеру в IT?
Java — один из самых востребованных языков программирования в мире. Его используют разработчики, тестировщики и инженеры по автоматизации. А главное — он отлично подходит как для новичков, так и для профессионального роста!
На нашем курсе ты:
- Разберёшься в основах программирования, даже если раньше не писал код
- Научишься разрабатывать приложения и автоматизировать процессы
- Создашь свои первые проекты для портфолио
Почему Java?
- Востребован в разработке ПО, автоматизации и тестировании
- Отлично подходит для создания веб-приложений, мобильных сервисов и корпоративных систем
- Открывает путь к стабильной карьере и высоким доходам
Не откладывай! Регистрируйся на наш бесплатный вебинар!
6 954
⚡️ Оптимизация работы с большими коллекциями в Java
Работа с большими
List и Map в Java может привести к высоким затратам памяти и снижению производительности. Как этого избежать?
❌ Ошибка: использование ArrayList без задания начального размера
List<String> list = new ArrayList<>(); // По умолчанию – 10 элементов
for (int i = 0; i < 1000000; i++) {
list.add("data");
}
➡️ Решение: укажите размер сразу, если он известен
List<String> list = new ArrayList<>(1000000);
❌ Ошибка: HashMap без настройки initialCapacity и loadFactor
По умолчанию HashMap перераспределяет бакеты при загрузке 75%, что может вызвать лишние перераспределения.
➡️ Решение: настройка параметров
Map<String, String> map = new HashMap<>(1000000, 0.9f);
❌ Ошибка: использование LinkedList вместо ArrayList для поиска
List<String> list = new LinkedList<>();
list.get(5000); // O(n)
➡️ Решение: используйте ArrayList, если часто выполняете get()
💡 Совет: Профилируйте код с -XX:+PrintGCDetails и jcmd GC.heap_info, чтобы следить за лишними выделениями памяти.
#java #collections #performance6 954
🔗 Что такое
try-with-resources?
Конструкция try-with-resources, появившаяся в Java 7, позволяет автоматически закрывать ресурсы (например, файлы, потоки).
✔️ Преимущества:
1️⃣ Облегчает управление ресурсами.
2️⃣ Избегает утечек памяти.
Пример:
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
System.out.println(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
💡 Совет: Все ресурсы, используемые в try-with-resources, должны реализовывать интерфейс AutoCloseable.
#java #trywithresources #java76 954
⚙️ Разница между
deep copy и shallow copy
При копировании объектов в Java различают два типа копий:
• Shallow copy – копирует только ссылки на вложенные объекты, изменения в одном объекте затронут копию.
• Deep copy – создаёт полную копию, включая все вложенные объекты.
✔️ Пример shallow copy:
class Person implements Cloneable {
String name;
Person(String name) {
this.name = name;
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
Для создания полной копии можно использовать конструктор копирования или сериализацию/десериализацию.
✔️ Пример deep copy:
import java.io.*;
public class DeepCopyExample {
public static void main(String[] args) {
Person person = new Person("John", 30);
Person deepCopy = deepCopy(person);
System.out.println("Original: " + person.getName() + ", " + person.getAge());
System.out.println("Deep copy: " + deepCopy.getName() + ", " + deepCopy.getAge());
}
public static <T extends Serializable> T deepCopy(T object) {
try {
ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteOutputStream);
objectOutputStream.writeObject(object);
ByteArrayInputStream byteInputStream = new ByteArrayInputStream(byteOutputStream.toByteArray());
ObjectInputStream objectInputStream = new ObjectInputStream(byteInputStream);
T copy = (T) objectInputStream.readObject();
return copy;
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
return null;
}
}
}
class Person implements Serializable {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
💡 Совет: Используйте deep copy, если объект содержит изменяемые вложенные объекты, иначе изменения в одном месте могут неожиданно повлиять на копию.
#java #deepcopy #shallowcopy #clone6 954
🔍 Разница между
TreeSet и HashSet
Оба класса реализуют Set, но у них разные свойства:
• HashSet – хранит элементы в случайном порядке, обеспечивает быстрые операции add() и remove().
• TreeSet – хранит элементы в отсортированном порядке, но работает медленнее.
✔️ Пример:
Set<Integer> hashSet = new HashSet<>(Set.of(3, 1, 2)); // [3, 1, 2] (порядок может быть разным)
Set<Integer> treeSet = new TreeSet<>(Set.of(3, 1, 2)); // [1, 2, 3] (отсортировано)
💡 Совет: Используйте HashSet для быстрого доступа и TreeSet, если важен порядок элементов.
#java #treeset #hashset #collections6 954
Добро пожаловать в мир IT!
Специально для Вас мы создали приватный канал IT как образ жизни!
Канал ведет опытный Java-ментор с 10-летним стажем в индустрии:
• Java Core - (190 уроков)
• Spring Framework - (120 уроков)
• Hibernate - (80 уроков)
• JUnit - (70 уроков)
• Maven - (60 уроков)
• Gradle - (50 уроков)
• Apache Kafka - (90 уроков)
• Microservices - (110 уроков)
• Design Patterns - (100 уроков)
• Swing - (75 уроков)
• JavaFX - (65 уроков) и тд.
Создавай магию кода с нами 👇
6 954
⚡️ Разница между
ExecutorService и ForkJoinPool
Оба механизма предназначены для работы с многопоточностью, но у них разные задачи:
• ExecutorService – управляет пулом потоков, подходит для выполнения Runnable и Callable.
• ForkJoinPool – оптимизирован для рекурсивных задач, использует алгоритм work-stealing.
✔️ Пример ExecutorService:
ExecutorService executor = Executors.newFixedThreadPool(3);
executor.submit(() -> System.out.println("Task executed"));
executor.shutdown();
✔️ Пример ForkJoinPool:
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);
}
}
ForkJoinPool динамически управляет количеством потоков, при необходимости создавая новые. Обычно это количество соответствует числу процессоров, доступных в системе.
💡 Совет: Используйте ForkJoinPool для рекурсивных задач, а ExecutorService – для классической многопоточности.
#java #executorservice #forkjoinpool #multithreading6 954
Как делать веб приложения на Spring Boot
Первая понятная инструкция от опытного Java Разработчика из BigTech в Европе. Научитесь за 0 рублей и всего за 3 дня создавать собственные веб приложения.
Если вы планируете стать востребованным разработчиком в кратчайшие сроки, то приходите на интенсив от FAANG School, где за 72 часа:
– погрузитесь в базовые концепции Spring. Что такое бины, как работает ApplicationContext
– какие типичные ошибки делают 80% новичков с этим фреймворком
– разберетесь с ключевыми аннотациями и поймете, как создавать проекты для портфолио, которые способны выдерживать высокие нагрузки
– вместе с senior-разработчиком в прямом эфире создадите рабочее мини приложение и закрепите навыки на практике
Переходите, чтобы обучиться основам Spring на понятном языке со схемами и пошаговым планом.
6 954
⚙️ Что такое
CompletableFuture в Java?
CompletableFuture — это улучшенная альтернатива Future, появившаяся в Java 8, позволяющая работать с асинхронными вычислениями.
➡️ Почему стоит использовать?
1️⃣ Позволяет запускать задачи в фоне и получать результат позже.
2️⃣ Поддерживает цепочки операций .thenApply(), .thenAccept().
3️⃣ Может выполняться параллельно без блокировки основного потока.
✔️ Пример:
import java.util.concurrent.CompletableFuture;
public class AsyncExample {
public static void main(String[] args) {
CompletableFuture.supplyAsync(() -> "Hello, Async!")
.thenAccept(System.out::println);
}
}
💡 Совет: Используйте CompletableFuture, если хотите писать неблокирующий и эффективный код.
#java #completablefuture #async6 954
💡 Как управлять потоками с помощью ExecutorCompletionService
ExecutorCompletionService — это инструмент для удобной работы с потоками, позволяющий эффективно управлять задачами, выполняющимися асинхронно, и получать результаты по мере их готовности. Он сочетает в себе возможности
ExecutorService и очередь для получения результатов выполнения задач.
📌 Преимущества ExecutorCompletionService:
1️⃣ Удобное управление задачами: позволяет управлять и отслеживать несколько асинхронных задач одновременно.
2️⃣ Получение результатов по мере выполнения: результаты задач можно получать в том порядке, в котором они завершены.
3️⃣ Обработка ошибок: позволяет перехватывать исключения, возникающие в процессе выполнения задач.
📌 Пример использования ExecutorCompletionService:
import java.util.concurrent.*;
public class ExecutorCompletionServiceExample {
public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService executor = Executors.newFixedThreadPool(3);
ExecutorCompletionService<Integer> completionService = new ExecutorCompletionService<>(executor);
// Добавляем задачи в очередь
for (int i = 0; i < 5; i++) {
final int taskId = i;
completionService.submit(() -> {
// Задача выполняется
Thread.sleep(1000); // Эмулируем работу
return taskId * 2;
});
}
// Получаем результаты по мере их готовности
for (int i = 0; i < 5; i++) {
Future<Integer> result = completionService.take(); // Возвращает первый завершившийся результат
System.out.println("Задача завершена с результатом: " + result.get());
}
executor.shutdown();
}
}
📌 Как это работает:
1️⃣ Создаём ExecutorCompletionService, передавая ему пул потоков.
2️⃣ Задачи отправляются в очередь с помощью метода submit().
3️⃣ Метод take() извлекает завершённую задачу и её результат.
4️⃣ Метод get() позволяет получить результат выполнения задачи.
📌 Когда использовать ExecutorCompletionService?
- Когда необходимо параллельно выполнить несколько задач и получить результаты по мере их завершения.
- В ситуациях, когда задачи могут занять разное время на выполнение.
- Для эффективного управления потоками в многозадачных приложениях.
💡 Совет: Используйте ExecutorCompletionService для повышения производительности, когда важно обрабатывать результаты задач в порядке их завершения.
#Java #ExecutorCompletionService #ПараллельноеВыполнение #Многозадачность6 954
⌨️ Что такое
WeakReference?
WeakReference – это специальный тип ссылки, который не предотвращает сборщик мусора от удаления объекта.
• Используется, когда объект не является критически важным.
• Полезен для кеширования, где объект можно освободить при нехватке памяти.
✔️ Пример:
import java.lang.ref.WeakReference;
public class WeakRefExample {
public static void main(String[] args) {
String str = new String("WeakReference");
WeakReference<String> weakRef = new WeakReference<>(str);
str = null; // Теперь объект доступен для GC
System.gc();
System.out.println(weakRef.get()); // Может быть null
}
}
💡 Совет: Используйте WeakReference, если объект должен автоматически удаляться при нехватке памяти.
#java #weakreference6 954
⚡️ В сети начали массово сливать курсы и книги известных онлайн школ по айти
Вот отсортированная база с тонной материала (постепенно пополняется):
БАЗА (4687 видео/книг):
(363 видео, 87 книги) — Python
(415 видео, 68 книги) — Frontend
(143 видео, 33 книги) — ИБ/Хакинг
(352 видео, 89 книги) — С/С++
(343 видео, 87 книги) — Java
(176 видео, 32 книги) — Git
(293 видео, 63 книги) — C#
(174 видео, 91 книги) — DevOps
(167 видео, 53 книги) — PHP
(227 видео, 83 книги) — SQL/БД
(163 видео, 29 книги) — Linux
(114 видео, 77 книги) — Сисадмин
(107 видео, 43 книги) — BA/SA
(181 видео, 32 книги) — Go
(167 видео, 43 книги) — Kotlin/Swift
(112 видео, 24 книги) — Flutter
(137 видео, 93 книги) — DS/ML
(113 видео, 82 книги) — GameDev
(183 видео, 37 книги) — Дизайн
(129 видео, 73 книги) — QA
(213 видео, 63 книги) — Rust
(121 видео, 24 книги) — 1С
(136 видео, 33 книги) — PM/HR
Скачивать ничего не нужно — все выложили в Telegram
6 954
❓ Что такое
Record в Java?
Record – это новый тип класса, который появился в Java 14 и предназначен для создания неизменяемых объектов с минимальным кодом.
• Автоматически создаёт equals(), hashCode() и toString().
• Подходит для DTO (Data Transfer Object) и неизменяемых объектов.
✔️ Пример:
public record Person(String name, int age) {}
public class Main {
public static void main(String[] args) {
Person person = new Person("Alice", 30);
System.out.println(person); // Person[name=Alice, age=30]
}
}
💡 Совет: Используйте Record, если вам нужен неизменяемый объект с автогенерацией методов.
#java #record #java146 954
👥 Совет IT-спецам на 2025 год - чаще посещайте тематические мероприятия
❔Зачем тратить время на Ютубчик, когда можно интересно проводить время, при этом развивая свои навыки!
💡А чтобы не гуглить афиши и не подписываться на сотню разных каналов, IT-мероприятия России уже собрали все самые топовые события в одном месте.
👨💻 В этом канале ты найдешь самые актуальные и интересные события: анонсы форумов, конференций, митапов, вебинаров, хакатонов, олимпиад и многое другое.
⚡️ Все твои коллеги уже здесь - IT-мероприятия России / ITMeeting / IT events.
🔥 Присоединяйся и будь в курсе самых топовых IT-event'ов!
6 954
🔍 Что такое
var и когда его использовать?
С появлением Java 10 был добавлен var – ключевое слово для вывода типа переменной на основе присвоенного значения.
• Позволяет сократить код, убрав явное указание типа.
• Работает только для локальных переменных (нельзя использовать для аргументов метода или полей класса).
✔️ Пример использования:
var message = "Hello, Java!"; // Компилятор автоматически определит тип String
var number = 42; // int
var list = List.of("A", "B", "C"); // List<String>
❌ Нельзя использовать var так:
var x; // Ошибка, требуется инициализация
💡 Совет: Используйте var, если тип очевиден, но не злоупотребляйте, чтобы не терять читаемость кода.
#java #var #java10
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
