Java | Фишки и трюки
الذهاب إلى القناة على Telegram
Java: примеры кода, интересные фишки и полезные трюки Купить рекламу: https://telega.in/c/java_tips_and_tricks ✍️По всем вопросам: @Pascal4eg
إظهار المزيد6 813
المشتركون
لا توجد بيانات24 ساعات
-137 أيام
-6630 أيام
أرشيف المشاركات
6 818
public class Quest {
public static void main(String[] args) {
int i = 1;
inc(i);
System.out.println(i);
}
private static void inc(int num) {
num++;
}
}
#java #quest6 818
⌨️ Чем отличается процесс от потока?
Процесс — экземпляр программы во время выполнения, независимый объект, которому выделены системные ресурсы (например, процессорное время и память). Каждый процесс выполняется в отдельном адресном пространстве: один процесс не может получить доступ к переменным и структурам данных другого. Если процесс хочет получить доступ к чужим ресурсам, необходимо использовать межпроцессное взаимодействие. Это могут быть конвейеры, файлы, каналы связи между компьютерами и многое другое.
Для каждого процесса ОС создает так называемое «виртуальное адресное пространство», к которому процесс имеет прямой доступ. Это пространство принадлежит процессу, содержит только его данные и находится в полном его распоряжении. Операционная система же отвечает за то, как виртуальное пространство процесса проецируется на физическую память.
Поток(thread) — определенный способ выполнения процесса, определяющий последовательность исполнения кода в процессе. Потоки всегда создаются в контексте какого-либо процесса, и вся их жизнь проходит только в его границах. Потоки могут исполнять один и тот же код и манипулировать одними и теми же данными, а также совместно использовать описатели объектов ядра, поскольку таблица описателей создается не в отдельных потоках, а в процессах. Так как потоки расходуют существенно меньше ресурсов, чем процессы, в процессе выполнения работы выгоднее создавать дополнительные потоки и избегать создания новых процессов.
#java #process #thread
6 818
⌨️ Кооперативная и вытесняющая многозадачность. Какой тип многозадачности использует Java? Чем обусловлен этот выбор?
Кооперативная многозадачность - это способ деления процессорного времени между потоками, при котором каждый поток обязан отдавать управление следующему добровольно.
Преимущества такого подхода - простота реализации, меньшие накладные расходы на переключение контекста.
Недостатки - если один поток завис или ведет себя некорректно, то зависает целиком вся система и другие потоки никогда не получат управление.
Java использует вытесняющую многозадачность, при которой решение о переключении между потоками процесса принимает операционная система.
В отличие от кооперативной многозадачности управление операционной системе передаётся вне зависимости от состояния работающих приложений, благодаря чему, отдельные зависшие потоки процесса, как правило, не «подвешивают» всю систему целиком. За счёт регулярного переключения между задачами также улучшается отзывчивость приложения и повышается оперативность освобождения ресурсов, которые больше не используются.
В реализации вытесняющая многозадачность отличается от кооперативной, в частности, тем, что требует обработки системного прерывания от аппаратного таймера.
6 818
public class Quest {
public static void main(String[] args) {
int x = 5;
int y = 10;
int result = add(x, y) * multiply(x, y);
System.out.println(result);
}
public static int add(int a, int b) {
try {
return a + b;
} finally {
return a - b;
}
}
public static int multiply(int a, int b) {
try {
return a * b;
} finally {
return a / b;
}
}
}
#java #quest6 818
Регистрация на Java meetup 2024 уже открыта! ⚡️
7 сентября встречаемся в штаб-квартире Сбера на Кутузовском проспекте, чтобы поговорить о Spring Framework, нативных сборках Java-приложений и устройстве разработки в мире open source.
Для опытных разработчиков на митапе будет инсайдерская информация и глубокое погружение в технологию, а для тех, кто только начинает путь в IT — простое и понятное изложение материала.
По ссылке — подробное расписание и заявка на участие. До встречи на Java meetup 2024! 💚
6 818
⌨️ Потокобезопасность (Thread-Safe) — это свойство объекта или кода, которое гарантирует корректное поведение при одновременном доступе нескольких потоков. Например, потокобезопасный счетчик будет правильно учитывать каждое увеличение, даже если его используют одновременно несколько потоков. Это означает, что результаты работы будут предсказуемыми и соответствующими ожиданиям, независимо от того, сколько потоков обращаются к объекту или выполняют код одновременно.
#java #ThreadSafe
6 818
⌨️ Дженерики (generics) — это механизм, который позволяет создавать классы, интерфейсы и методы, работающие с различными типами данных, при этом сохраняя строгую типизацию. Они были введены в Java начиная с версии 5 для повышения безопасности типов и повторного использования кода.
Дженерики позволяют определить параметр типа, который будет заменен конкретным типом данных при создании экземпляра класса или вызове метода. Например,
List<T> может использоваться как List<String>, List<Integer> и т.д.
Благодаря дженерикам, ошибки типа (например, попытка вставить объект неправильного типа) обнаруживаются на этапе компиляции, а не во время выполнения программы.
Один универсальный класс или метод может работать с различными типами данных, что позволяет избежать дублирования кода.
Во время компиляции информация о типах стирается, и вместо этого используется базовый тип, что позволяет сохранять совместимость с кодом, написанным до появления дженериков.
public class Box<T> {
private T item;
public void setItem(T item) {
this.item = item;
}
public T getItem() {
return item;
}
}
Box<String> stringBox = new Box<>();
stringBox.setItem("Hello");
String str = stringBox.getItem();
В этом примере класс Box<T> является обобщенным и может работать с любым типом данных, который заменит T при создании объекта.
#java #generics #T6 818
Востребованный разработчик за 2 часа
Всего одна фича увеличит шансы найти работу в 5-10 раз. И это – умение создавать высоконагруженное приложение с Redis.
Если вы стремитесь начать карьеру в IT, стать востребованным разработчиком, а также хотите повысить квалификацию и увеличить зарплату, приходите на онлайн лекцию от FAANG School. Там вы:
– Получите готовую архитектуру фич для своего проекта с использованием Redis
– Узнаете, что такое кэш и когда его эффективно использовать
– Разберетесь, что такое Redis и почему он так востребован на рынке
– Сможете сразу реализовать несколько фич с Redis для своего проекта.
Переходите и забирайте подарки:
- гайд «5 улучшений для твоего пет-проекта»
- шпаргалка по Redis
- пошаговый Roadmap по Java
- шпаргалка по Kafka
- шпаргалка «Микросервисы: вопросы с собеседований»
Жмите на красную кнопку, чтобы после эфира реализовать несколько фич с Redis и увеличить шанс получить оффер.
6 818
public class Quest {
public static void main(String[] args) {
String s = null;
if (s != null & s.length() > 0) {
System.out.println("YES!");
} else {
System.out.println("NO!");
}
}
}
#java #quest6 818
Разыскиваются 5 активных JAVA разработчиков 🔥🔥🔥
Для обучения AI-разработке!
Мы научим вас создавать и тренировать нейронные сети, и вы сможете:
1️⃣ Устроиться разработчиком в крупную компанию и зарабатывать от 150 тысяч руб. в месяц
2️⃣ Разрабатывать такие проекты на заказ и зарабатывать от 500 тысяч руб. за проект
3️⃣ Создать нейро-сотрудника в вашей компании и вырасти на +30-100% в зарплате
На интенсиве будет много практики: создадим 9 нейросетей за 1 вечер:
🧬 Оценка выброса CO2 по параметрам машины
🧬 Сегментация изображения для робота доставщика
🧬 Трекинг людей на видео
🧬 Распознавание речии другие
Ведущий интенсива - Senior AI-разработчик нейросетей и основатель Университета искусственного интеллекта
🔥 Регистрируйтесь на бесплатный интенсив! Встречаемся в ближайшую среду. Вы узнаете, как освоить самую востребованную профессию 2024 года!
Реклама. ООО "ТЕРРА ЭЙАЙ". ИНН 9728019395.
6 818
⌨️ Byte Buddy — это мощная библиотека для Java, предназначенная для создания, модификации и управления байт-кодом на лету, без необходимости использования низкоуровневых инструментов вроде ASM. Основное применение Byte Buddy — это динамическое создание и изменение классов в рантайме, что может быть полезно для написания агентов Java, создания прокси-объектов, внедрения кода в существующие классы и тестирования.
Библиотека позволяет создавать новые классы и изменять существующие без изменения исходного кода, а так же позволяет добавлять аннотации и реализовывать интерфейсы в динамически создаваемых классах.
Byte Buddy поддерживает широкий диапазон версий Java и интегрируется с такими библиотеками, как Spring и Hibernate.
import net.bytebuddy.ByteBuddy;
import net.bytebuddy.dynamic.loading.ClassLoadingStrategy;
import net.bytebuddy.implementation.FixedValue;
import static net.bytebuddy.matcher.ElementMatchers.named;
public class ByteBuddyExample {
public static void main(String[] args) throws Exception {
// Создаем новый класс динамически
Class<?> dynamicType = new ByteBuddy()
.subclass(Object.class) // Класс наследуется от Object
.name("com.example.HelloWorld") // Указываем имя нового класса
.method(named("toString")) // Переопределяем метод toString
.intercept(FixedValue.value("Hello from Byte Buddy!")) // Метод будет возвращать фиксированное значение
.make()
.load(ByteBuddyExample.class.getClassLoader(), ClassLoadingStrategy.Default.WRAPPER)
.getLoaded();
// Создаем экземпляр нового класса
Object instance = dynamicType.getDeclaredConstructor().newInstance();
// Вызываем переопределенный метод toString
System.out.println(instance.toString()); // Вывод: Hello from Byte Buddy!
}
}
#java #ByteBuddy6 818
👀 Знаете ли вы все секреты клавиш F на вашей клавиатуре?
Думали, что клавиши F просто занимают место на клавиатуре❓
Ошибаетесь! Эти кнопки способны творить магию — ускорять рутинные задачи и экономить вам драгоценное время ✨
✅ Хотите быстро переименовать файл 🔜 нажмите F2
✅ Нужен быстрый поиск в любом приложении 🔜 F3
✅ А если вам нужно быстро открыть адресную строку браузера 🔜 нажмите F6
И это лишь вершина айсберга! На нашем канале — самые свежие новости, инсайдерская информация и фишки, которые вы не найдете нигде больше ⚡️
📌 Откройте для себя новые горизонты программирования вместе с нами!
Не теряйте времени — подпишитесь и прокачайте свои навыки в программировании 💬
TechVibe
6 818
⌨️ В чем отличие между поверхностным и глубоким клонированием?
Поверхностное копирование копирует настолько малую часть информации об объекте, насколько это возможно. По умолчанию, клонирование в Java является поверхностным, т.е. класс
Object не знает о структуре класса, которого он копирует. Клонирование такого типа осуществляется JVM по следующим правилам:
✔️ Если класс имеет только члены примитивных типов, то будет создана совершенно новая копия объекта и возвращена ссылка на этот объект.
✔️ Если класс помимо членов примитивных типов содержит члены ссылочных типов, то тогда копируются ссылки на объекты этих классов. Следовательно, оба объекта будут иметь одинаковые ссылки.
Глубокое копирование дублирует абсолютно всю информацию объекта:
✔️ Нет необходимости копировать отдельно примитивные данные;
✔️ Все члены ссылочного типа в оригинальном классе должны поддерживать клонирование. Для каждого такого члена при переопределении метода clone() должен вызываться super.clone();
✔️ Если какой-либо член класса не поддерживает клонирование, то в методе клонирования необходимо создать новый экземпляр этого класса и скопировать каждый его член со всеми атрибутами в новый объект класса, по одному.
#java #clone6 818
🎓 Архив слитых курсов прямо в телеграм!
Вот огромная база материалов, которая пополняется каждый день!
>Python (96гб видео)
>С++(51 курсов)
>Java (23гб видео)
>Базы данных (50гб курсов)
>C# (45гб курсов)
>Английский (101гб курсов)
>PHP (43гб видео)
>Мобильная разработка (22гб курсов)
>Go ( 132гб видео)
>Rust (35 гб видео)
>SQL (43гб видео)
>MySQL (31гб видео)
>Другое (1679 гб видео)
⛓ Огромный кладезь топовых материалов более 20198Гб: Курсов, свежих книг, шпаргалок, гайдов , лекций, — всё в одном месте: @datacours
6 818
ThreadLocal - это класс в Java, который позволяет создавать локальные переменные, привязанные к каждому потоку. Это полезно, когда вам нужно иметь уникальную копию переменной для каждого потока, чтобы избежать конфликтов и обеспечить безопасность в многопоточной среде.
Преимущества ThreadLocal:
1⃣ Безопасность потоков: Каждый поток имеет свою собственную копию переменной, что устраняет соревнование и конфликты доступа.
2⃣ Улучшение производительности: Использование ThreadLocal может уменьшить необходимость синхронизации при доступе к переменным в многопоточной среде.
3⃣ Удобство: ThreadLocal делает работу с потоками более удобной и чистой, позволяя каждому потоку иметь свои собственные данные.
ThreadLocal полезен в ситуациях, когда вам нужно сохранить состояние для каждого потока, и он помогает избежать сложностей, связанных с синхронизацией и разделяемыми ресурсами.
