Java | Фишки и трюки
Kanalga Telegram’da o‘tish
Java: примеры кода, интересные фишки и полезные трюки Купить рекламу: https://telega.in/c/java_tips_and_tricks ✍️По всем вопросам: @Pascal4eg Менеджер по рекламе: @shmyzna
Ko'proq ko'rsatish6 953
Obunachilar
-324 soatlar
-27 kunlar
+630 kunlar
Postlar arxiv
6 954
⌨️
Array vs ArrayList
Выбор между Array и ArrayList зависит от специфики задачи, которую требуется решить.
📌Помните о следующих особенностях этих типов:
✔️ Array имеет фиксированный размер и память для него выделяется в момент объявления, а размер ArrayLists может динамически изменяться.
✔️ Массивы работают гораздо быстрее, а в ArrayList намного проще добавлять/удалять элементы.
✔️ При работе с Array велика вероятность получить ошибку ArrayIndexOutOfBoundsException.
✔️ У ArrayList только одно измерение, а вот массивы могут быть многомерными.
import java.util.ArrayList;
public class arrayVsArrayList {
public static void main(String[] args) {
// объявление Array
int[] myArray = new int[6];
// обращение к несуществующему индексу
myArray[7]= 10; // ArrayIndexOutOfBoundsException
// объявление ArrayList
ArrayList<Integer> myArrayList = new ArrayList<>();
// простое добавление и удаление элементов
myArrayList.add(1);
myArrayList.add(2);
myArrayList.add(3);
myArrayList.add(4);
myArrayList.add(5);
myArrayList.remove(0);
// получение элементов ArrayList
for(int i = 0; i < myArrayList.size(); i++) {
System.out.println("Element: " + myArrayList.get(i));
}
// многомерный Array
int[][][] multiArray = new int [3][3][3];
}
}6 954
⌨️ Перегрузка (Overloading) vs. Переопределение (Overriding)
Перегрузка методов (Method Overloading) – это создание нескольких методов с одним именем, но разными параметрами (различаются количество или типы аргументов).
Пример:
class MathUtils {
int sum(int a, int b) {
return a + b;
}
double sum(double a, double b) { // Перегруженный метод
return a + b;
}
}
Переопределение методов (Method Overriding) – это изменение поведения унаследованного метода в подклассе.
Пример:
class Animal {
void sound() {
System.out.println("Some sound");
}
}
class Dog extends Animal {
@Override
void sound() { // Переопределение метода
System.out.println("Bark");
}
}
⚡ Вывод:
✔️Перегрузка – это создание нескольких версий метода в одном классе.
✔️Переопределение – это изменение поведения метода родителя в подклассе.6 954
⌨️ Double-brace инициализация - техника создания и инициализации коллекций в одном выражении, используя анонимный внутренний класс.
✅ Пример:
List<String > planets = new ArrayList<>() {{
add ("Mercury");
add ("Venus");
add ("Earth");
add ("Mars");
add ("Jupiter");
add ("Saturn");
add ("Uranus") ;
add ("Neptune");
}};
✅Преимущества:
1. Краткость
2. Читаемость
3. Удобство для небольших коллекций
🚫Недостатки:
1. Создание анонимного класса (увеличение потребления памяти)
2. Скрытая ссылка (возможные утечки памяти)
3. Ограничения с final классами
4. Несовместимость с оператором diamond
5. Потенциальное влияние на производительность
6. Считается антипаттерном
🔻Альтернативы:
1. ☕️Java 8 Stream API:
List<String> planets = Stream.of("Mercury", "Venus", "Earth")
.collect(Collectors.toList());
2. ☕️Java 9+:
List<String> planets = List.of("Mercury", "Venus", "Earth");
3.🖨Конструктор копирования:
List<Integer> list = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(2, 3, 5)));
Несмотря на удобство, double-brace инициализация считается антипаттерном из-за проблем с производительностью и возможных утечек памяти.6 954
Научись писать код для работы с базами данных на уровне Senior+
Тестируешь на Java и до сих пор не знаешь, как эффективно работать с JDBC, PreparedStatement и Connection Pooling?
Приходи на открытое занятие Java для продвинутых.
Автор программы, Дмитрий Тучс, Head of QA в Dodo Engineering, спикер Codefest, Codetalks, EpicHey!, ментор и open-source контрибьютор — собрал все важное на курсе Java Advanced.
Ты научишься:
👉 Писать чистый и эффективный код с JDBC API
👉 Использовать PreparedStatement правильно и безопасно
👉 Разбираться в Connection Pooling и оптимизировать производительность тестов
👉 Избегать типичных ошибок при работе с БД
Ждем тебя на открытом уроке завтра в 20:00 (МСК).
🔗 Зарегистрируйся по ссылке.
6 954
Научись писать код для работы с базами данных на уровне Senior+
Тестируешь на Java и до сих пор не знаешь, как эффективно работать с JDBC, PreparedStatement и Connection Pooling?
Приходи на открытое занятие Java для продвинутых.
Автор программы, Дмитрий Тучс, Head of QA в Dodo Engineering, спикер Codefest, Codetalks, EpicHey!, ментор и open-source контрибьютор — собрал все важное на курсе Java Advanced.
Ты научишься:
👉 Писать чистый и эффективный код с JDBC API
👉 Использовать PreparedStatement правильно и безопасно
👉 Разбираться в Connection Pooling и оптимизировать производительность тестов
👉 Избегать типичных ошибок при работе с БД
Ждем тебя на открытом уроке завтра в 20:00 (МСК).
🔗 Зарегистрируйся по ссылке.
6 954
⌨️ Diamond-оператор (
<>) упрощает работу с обобщениями (Generics), позволяя компилятору автоматически выводить тип.
➡️ До Java 7 (без <>):
List<String> list = new ArrayList<String>(); // Приходилось дублировать <String>
➡️ С Java 7+ (с <>):
List<String> list = new ArrayList<>(); // Компилятор сам выводит <String>
Преимущества <>:
✅ Уменьшает дублирование кода
✅ Улучшает читаемость
✅ Работает с любыми обобщёнными классами
⚡ Итог: Diamond-оператор делает код чище и проще, автоматизируя вывод типов!6 954
Привет, ребята!
1,5 года я учился на программиста, а сайт easyoffer.ru стал моим пет-проектом. Я создавал его, потому что:
а) нужно было добавить хоть какой-нибудь проект в резюме
б) подготовиться к прохождению собесов
И всё получилось! Благодаря еasyoffer я успешно прошёл собеседование и устроился Junior-разработчиком на удаленку с зарплатой 115 тысяч рублей.
Однако ещё во время разработки я понял, что у этого проекта есть потенциал. Казалось, что сайт может стать популярным и, возможно, превратится в стартап. Результат превзошёл ожидания! С момента запуска easyoffer посетило 400 тысяч человек и я принял решение уйти с работы, чтобы полностью посвятить себя разработке новой версии сайта.
Уже год я работаю над easyoffer 2.0.
Это будет более масштабный и качественно новый проект:
– Появятся задачи из собеседований и вероятность их встретить
– Фильтрация по компаниям, можно будет готовиться к собесу в конректную компанию
– Появится тренажер для подготовки к вопросам на собеседовании
– А также тренажер "Реальное интервью", со стеком вопросов отдельных компаний.
– В рейтинге вопросах с собеседований появится фильтрация по грейду и типу интревью (Техничкое/HR-скрининг)
И еще очень много фич, о которых я расскажу позже.
Хочу, довести easyoffer до ума, чтобы сайт стал настоящим помощником для всех, кто готовится к собеседованиям. По этому уже на этой неделе я объявлю о старте краудфандинговой кампании, чтобы ускорить разработку. Все кто поддержит проект до официального релиза получат самые выгодные условия пользования сервисом. А именно 1 год доступа к сайту по цене месячной подписки.
‼️ Очень важно, чтобы как можно больше людей поддержали проект в первые дни, по-этому те кто окажет поддержку первыми получат еще более выгодную цену на годовую подписку и существенный бонус 💎 Подписывайтесь на этот телеграм канал, чтобы узнать о старте проекта раньше других и воспользоваться лимитированными вознаграждениями.
6 954
⌨️ Какой хеш-код имеет
null?
null не имеет хеш-кода, потому что null не является объектом. Однако, при использовании null в структурах данных, таких как HashMap или HashSet, применяется специальная логика:
➡️ Что происходит с null в HashMap и HashSet?
✔️ В HashMap ключ null всегда попадает в первый бакет (bucket 0).
✔️ В HashSet (который использует HashMap внутри) null также хранится в этом же бакете.
✔️ Проверки выполняются в Objects.hashCode(), который для null всегда возвращает 0.
➡️ Пример:
System.out.println(Objects.hashCode(null)); // 0
📌 Вывод: null не имеет собственного хеш-кода, но в хеш-структурах ему назначается 0.6 954
Внимание, программисты!
День рождение у автора DMdev - а подарок у вас!
Праздничная распродажа на все 13 курсов по Java от DMdev
👇
Только сегодня 14.999 rub 4.999 rub с доступом на год.
Каждый, кто успеет записаться, получит не только доступ к мега-курсам, но и шикарный подарок — участие в закрытом вебинаре "Микросервисы" 🎁
И это еще не всё!
Также будут разыграны три крутых приза, которые могут стать твоими!
Время тик-такает!
Жмите на ссылку и погружайтесь в Java программирование с DMdev!
6 954
Varargs (Variable Arguments List, изменяющийся список аргументов) — это способ создания методов, которые могут принимать произвольное количество аргументов одного типа (от нуля и более). Данная возможность появилась в JDK 5.
Запись вида
Object... args и есть varargs.
При этом три точки после типа указывают, что метод в качестве аргумента может принимать как массив, так и любую последовательность аргументов, записанных через запятую, которая все равно преобразуется в одномерный массив - «под капотом» компилятор на уровне байт-кода неявно заменяет переданную последовательность массивом. Уже в методе аргумент varargs используется как одномерный массив.
Альтернативой varargs является перегрузка методов или передача в метод массива значений.
Varargs был создан с целью упрощения работы программиста, удобства и краткости кода.
📌 В качестве ограничения любой метод может использовать varargs только в единственном числе и строго последним аргументом.6 954
⚡️Слита База из 1000+ топовых курсов и материалов для айтишников
🖥 Python: @python_baza
👩💻 Frontend: @frontend_baza
👩💻 Backend: @backend_baza
🎨 Дизайн: @design_baza
📚 Книги: @archive_baza
👩💻 Все языки: @main_it_baza
Всё лучшее про IT бесплатно — уже на Базе 🚀
6 954
☕️ Возвращение пустых коллекций вместо
null
Возвращение пустых коллекций вместо null-это рекомендуемый подход для методов, возвращающих коллекции. Он упрощает обработку данных, предотвращает ошибки и делает код более предсказуемым.
✅ Преимущества
1. Улучшение читаемости: Код становится проще, так как не нужно проверять результат на null.
2. Предотвращение NullPointerException: Исключается вероятность ошибок, связанных с доступом к null.
3.Соответствие принципу наименьшего удивления: Методы всегда возвращают коллекцию, даже если она пуста.
4. Эффективность: Пустые коллекции создаются один раз и переиспользуются благодаря реализации через паттерн Singleton.
5. Совместимость с функциональным программированием: Пустые коллекции легко интегрируются в стримы и другие функциональные конструкции.
Пример:
public class CacheService {
private final Map<String, List<Object>> cache = new ConcurrentHashMap<>();
public List<Object> getCachedValues(String key) {
return cache.getOrDefault(key, Collections.emptyList());
}
public void addToCache(String key, Object value) {
cache.computeIfAbsent(key, k -> new ArrayList<>()).add(value);
}
}
❗️ Метод Collections.emptyList() является частью стандартной библиотеки Java (java.util.Collections). Он реализован через паттерн Singleton для повышения эффективности и безопасности.
Использование пустых коллекций вместо null делает код более устойчивым и предсказуемым. Это особенно важно в сложных многопоточных приложениях или системах с большим количеством взаимосвязанных компонентов.6 954
Сливаем вам 2 архива на 500 курсов!
➤ Backend и языки программирования:
- Python
- REST
- Java
- PHP
- Go
- SQL
- NoSQL
- C#
- C++
- Rust
- JavaScript
- Другое
➤ Frontend и Web-дизайн:
- JavaScript
- Figma
- Web-Дизайн
- HTML/CSS
- Верстка
- UI/UX
- Другое
6 954
⌨️ Почему String неизменяемый класс?
Есть несколько преимуществ в неизменности строк:
✔️ Пул строк возможен только потому, что строка неизменяемая, таким образом виртуальная машина сохраняет больше свободного места в Heap, поскольку разные строковые переменные указывают на одну и ту же переменную в пуле. Если бы строка была изменяемой, то интернирование строк не было бы возможным, потому что изменение значения одной переменной отразилось бы также и на остальных переменных, ссылающихся на эту строку.
✔️ Если строка будет изменяемой, тогда это станет серьезной угрозой безопасности приложения. Например, имя пользователя базы данных и пароль передаются строкой для получения соединения с базой данных и в программировании сокетов реквизиты хоста и порта передаются строкой. Так как строка неизменяемая, её значение не может быть изменено, в противном случае злоумышленник может изменить значение ссылки и вызвать проблемы в безопасности приложения.
✔️ Неизменяемость позволяет избежать синхронизации: строки безопасны для многопоточности и один экземпляр строки может быть совместно использован различными потоками.
✔️ Строки используются classloader и неизменность обеспечивает правильность загрузки класса.
✔️ Поскольку строка неизменяемая, её hashCode() кэшируется в момент создания и нет необходимости рассчитывать его снова. Это делает строку отличным кандидатом для ключа в HashMap т.к. его обработка происходит быстрее.
#java #string #immutable
6 954
QA.GURU | GraphQL 📱
Прокачайся в JAVA автоматизации на открытых вебинарах от Head of QA
🫢 Загляни под капот автотестов GraphQL, разберись в тонкостях микросервисной архитектуры и на практике узнай, как подменять настоящие микросервисы Wiremock-ом.
Об этом и многом другом говорим на занятиях для продвинутых.
👉 Заходи в @qa_guru >>>
👉 Заходи в @qa_guru >>>
Здесь ты найдешь анонсы ближайших открытых занятий нашей школы и полезные материалы от опытных инженеров.
Решаешь интересный кейс?
Обратись за помощью в открытый чат сообщества. Мы любим сложные задачи.
20 марта ждем тебя на открытом вебинаре по Java для продвинутых.
🔗 Зарегистрируйся за минуту >>>
6 954
⌨️ Чем отличается процесс от потока?
Процесс — экземпляр программы во время выполнения, независимый объект, которому выделены системные ресурсы (например, процессорное время и память). Каждый процесс выполняется в отдельном адресном пространстве: один процесс не может получить доступ к переменным и структурам данных другого. Если процесс хочет получить доступ к чужим ресурсам, необходимо использовать межпроцессное взаимодействие. Это могут быть конвейеры, файлы, каналы связи между компьютерами и многое другое.
Для каждого процесса ОС создает так называемое «виртуальное адресное пространство», к которому процесс имеет прямой доступ. Это пространство принадлежит процессу, содержит только его данные и находится в полном его распоряжении. Операционная система же отвечает за то, как виртуальное пространство процесса проецируется на физическую память.
Поток(thread) — определенный способ выполнения процесса, определяющий последовательность исполнения кода в процессе. Потоки всегда создаются в контексте какого-либо процесса, и вся их жизнь проходит только в его границах. Потоки могут исполнять один и тот же код и манипулировать одними и теми же данными, а также совместно использовать описатели объектов ядра, поскольку таблица описателей создается не в отдельных потоках, а в процессах. Так как потоки расходуют существенно меньше ресурсов, чем процессы, в процессе выполнения работы выгоднее создавать дополнительные потоки и избегать создания новых процессов.
#java #process #thread
6 954
⭐️🚀 Смарт-контракты управляют миллионами транзакций в мире блокчейна. Хотите научиться их разрабатывать?
Solidity — ключевой язык программирования для создания децентрализованных приложений. Разбираем, как написать, задеплоить и протестировать смарт-контракт.
После открытого вебинара вы сможете создать свой первый контракт, поймёте принципы работы Solidity и подготовитесь к профессиональному росту в Web3-разработке.
⏰ Встречаемся 19 марта в 20:00 мск! Участники получат скидку на большое обучение «Solidity Developer».
👉 Для участия зарегистрируйтесь https://otus.pw/PmAj/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
6 954
👾Захват стека вызовов через StackWalker
🔸StackWalker, введенный в Java 9, предоставляет эффективный способ работы с текущим стеком вызовов. Это мощный инструмент для логирования, отладки и анализа производительности.
✅Основные преимущества StackWalker:
1. 🟢Эффективность: StackWalker использует ленивую загрузку фреймов стека.
2. 🟢Гибкость: API предоставляет различные методы для работы со стеком.
3. 🟢Настраиваемость: Можно указать, какие фреймы включать в обход.
🟣Пример использования StackWalker:
public class StackWalkerExample {
public static void main(String[] args) {
method1();
}
private static void method1() {
method2();
}
private static void method2() {
method3();
}
private static void method3() {
StackWalker walker = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE);
walker.forEach(frame -> {
System.out.println("Класс: " + frame.getClassName() +
", Метод: " + frame.getMethodName() +
", Строка: " + frame.getLineNumber());
});
}
}
Более сложный пример с фильтрацией и обработкой стека:
public class AdvancedStackWalkerExample {
public static void main(String[] args) {
logMethodCall();
}
private static void logMethodCall() {
StackWalker walker = StackWalker.getInstance(EnumSet.of(
StackWalker.Option.RETAIN_CLASS_REFERENCE,
StackWalker.Option.SHOW_REFLECT_FRAMES
));
List callStack = walker.walk(stream ->
stream.filter(frame -> !frame.getClassName().startsWith("java.lang"))
.map(frame -> frame.getClassName() + "." + frame.getMethodName())
.limit(5)
.collect(Collectors.toList())
);
System.out.println("Стек вызовов (до 5 методов, исключая java.lang):");
callStack.forEach(System.out::println);
}
}
В заключение, StackWalker предоставляет мощный и эффективный способ работы со стеком вызовов, улучшая производительность и гибкость кода.6 954
⚡ Когда мне говорят, что Java слишком простой язык, я показываю канал Java Learning
Здесь я научился:
▪️ Разрабатывать высоконагруженные серверные приложения
▪️ Управлять сложными базами данных
▪️ Организовывать эффективную многопоточную обработку данных
▪️ Проходить технические собеседования в ведущие IT-компании
Самый необычный канал про Java, подписывайся – @Java_per_month
Endi mavjud! Telegram Tadqiqoti 2025 — yilning asosiy insaytlari 
