⚙️ Шаблонное сопоставление для switch
Шаблонное сопоставление для switch позволяет применять шаблоны для более удобного и понятного сопоставления значений в операторе switch. Это значительно облегчает работу с разными типами данных и структурами.
👩💻
@javaquiz
Шаблонное сопоставление для switch позволяет применять шаблоны для более удобного и понятного сопоставления значений в операторе switch. Это значительно облегчает работу с разными типами данных и структурами.
👩💻
@javaquiz
⚙️ Метод ByteArrayOutputStream.writeTo() позволяет записать данные из байтового массива (ByteArrayOutputStream) непосредственно в другой выходной поток (OutputStream). Это удобно для перенаправления данных, например, в файл или сетевой сокет, без необходимости промежуточного копирования.
👩💻
@javaquiz
👩💻
@javaquiz
❓ Вопрос на собеседовании
Как функционирует механизм удаления дубликатов строк в JVM и как он помогает оптимизировать использование памяти?
Ответ ⬇️
Удаление дубликатов строк в JVM — это функция, которая появилась в Java 8 (с G1 GC), позволяющая JVM автоматически находить и повторно использовать одинаковые строки в памяти. Это особенно эффективно в приложениях с большим количеством повторяющихся строк, например, в веб-серверах или системах логирования.
Обычно, даже если строки одинаковые, они хранятся как отдельные объекты в памяти. Этот механизм позволяет JVM находить дубликаты и заменять их ссылками на уже существующие строки, что снижает потребление памяти.
Пример использования ⚙️
import java.util.ArrayList;
import java.util.List;
public class StringDeduplicationExample {
public static void main(String[] args) {
List list = new ArrayList();
for (int i = 0; i < 1_000_000; i++) {
list.add(("String_" + (i % 100)).intern()); // Используем String.intern() для принудительного объединения
}
System.out.println("Генерация завершена");
}
}
👩💻
@javaquiz
Как функционирует механизм удаления дубликатов строк в JVM и как он помогает оптимизировать использование памяти?
Ответ ⬇️
Удаление дубликатов строк в JVM — это функция, которая появилась в Java 8 (с G1 GC), позволяющая JVM автоматически находить и повторно использовать одинаковые строки в памяти. Это особенно эффективно в приложениях с большим количеством повторяющихся строк, например, в веб-серверах или системах логирования.
Обычно, даже если строки одинаковые, они хранятся как отдельные объекты в памяти. Этот механизм позволяет JVM находить дубликаты и заменять их ссылками на уже существующие строки, что снижает потребление памяти.
Пример использования ⚙️
import java.util.ArrayList;
import java.util.List;
public class StringDeduplicationExample {
public static void main(String[] args) {
List list = new ArrayList();
for (int i = 0; i < 1_000_000; i++) {
list.add(("String_" + (i % 100)).intern()); // Используем String.intern() для принудительного объединения
}
System.out.println("Генерация завершена");
}
}
👩💻
@javaquiz
🚫 Антипаттерн недели: Применение String вместо StringBuilder для объединения строк в циклах
В Java строки (String) не подлежат изменению. Каждый раз, когда происходит конкатенация с помощью +, создаётся новый объект, что приводит к излишним затратам памяти и ухудшению производительности, особенно в циклах.
✔️ Используйте StringBuilder, который изменяем и работает быстрее при частых манипуляциях с текстом.
👩💻
@javaquiz
В Java строки (String) не подлежат изменению. Каждый раз, когда происходит конкатенация с помощью +, создаётся новый объект, что приводит к излишним затратам памяти и ухудшению производительности, особенно в циклах.
✔️ Используйте StringBuilder, который изменяем и работает быстрее при частых манипуляциях с текстом.
👩💻
@javaquiz
⚙️ Метод Pattern.asMatchPredicate(), который появился в Java 11, дает возможность превратить регулярное выражение в предикат. Этот предикат можно использовать для фильтрации потоков или для проверки строк на полное соответствие шаблону.
👩💻
@javaquiz
👩💻
@javaquiz
Метод ProcessHandle.info() предоставляет информацию о текущих процессах в системе, включая аргументы командной строки, время их запуска и использование ресурсов. Это удобно для отслеживания процессов в приложениях на Java.
👩💻
@javaquiz
👩💻
@javaquiz
⚙️ Метод Files.mismatch()
Метод Files.mismatch(), который появился в Java 12, предоставляет возможность сравнить два файла и определить позицию первого байта, который не совпадает. Если файлы одинаковые, метод возвращает -1. Это может быть полезно для проверки целостности данных или сравнения файлов.
👩💻
@javaquiz
Метод Files.mismatch(), который появился в Java 12, предоставляет возможность сравнить два файла и определить позицию первого байта, который не совпадает. Если файлы одинаковые, метод возвращает -1. Это может быть полезно для проверки целостности данных или сравнения файлов.
👩💻
@javaquiz
🔥 Самые важные каналы для разработчиков на Java, чтобы увеличить свои доходы 💸
• Java | Вопросы собеседований (https://yangx.top/+i6I-717auZc0MTcy)
• Java | Вакансии с удаленной работой (https://yangx.top/+O6xDQY5XwKNjNGMy)
• Java | LeetCode (https://yangx.top/+3KgwdmW-QG9jZDgy)
• Java | Тесты (https://yangx.top/+2t4Qa_UhLpY2NWIy)
Подпишись, чтобы не упустить информацию ☝️
@javaquiz
• Java | Вопросы собеседований (https://yangx.top/+i6I-717auZc0MTcy)
• Java | Вакансии с удаленной работой (https://yangx.top/+O6xDQY5XwKNjNGMy)
• Java | LeetCode (https://yangx.top/+3KgwdmW-QG9jZDgy)
• Java | Тесты (https://yangx.top/+2t4Qa_UhLpY2NWIy)
Подпишись, чтобы не упустить информацию ☝️
@javaquiz
Telegram
Java | Вопросы собесов
Cайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp
Тесты t.me/+icUwivvbGOkwNWRi
Задачи t.me/+8eqUTboisnkyZjQy
Вакансии t.me/+4pspF5nDjgM4MjQy
Реклама @easyoffer_adv
ВП @easyoffer_vp
Тесты t.me/+icUwivvbGOkwNWRi
Задачи t.me/+8eqUTboisnkyZjQy
Вакансии t.me/+4pspF5nDjgM4MjQy
JarFile — это класс в Java, предназначенный для доступа к содержимому JAR-файла. JAR-файл (Java ARchive) представляет собой архивный формат, который позволяет объединять несколько файлов Java (.class) и другие ресурсы, такие как изображения, звуковые файлы и текстовые документы, в один файл.
Чтобы создать объект JarFile, нужно использовать его конструктор, который принимает путь к JAR-файлу в качестве аргумента.
👩💻
@javaquiz
Чтобы создать объект JarFile, нужно использовать его конструктор, который принимает путь к JAR-файлу в качестве аргумента.
👩💻
@javaquiz
Метод StackWalker.walk() дает возможность получить информацию о текущем стеке вызовов в режиме реального времени, а также производить его фильтрацию и анализ. Это удобно для ведения логов, отладки и мониторинга работы кода.
👩💻
@javaquiz
👩💻
@javaquiz
⚙️ Метод Thread.onSpinWait() информирует процессор о том, что поток находится в ожидании, не выполняя при этом никакой полезной работы. Это способствует повышению производительности в многопоточных приложениях, снижая нагрузку на процессор во время активного ожидания.
👩💻
@javaquiz
👩💻
@javaquiz
Метод ProcessHandle.onExit() предоставляет возможность следить за завершением внешнего процесса в асинхронном режиме. Это удобно для управления запущенными процессами и выполнения действий после их окончания.
👩💻
@javaquiz
👩💻
@javaquiz
❓ Вопрос на собеседовании
Как функционируют виртуальные потоки в Java и чем они отличаются от обычных потоков?
Ответ ⬇️
Виртуальные потоки появились в Java 21 и позволяют создавать огромное количество потоков без значительных затрат ресурсов. В отличие от обычных потоков, которые зависят от системных потоков операционной системы, виртуальные потоки управляются самой Java Virtual Machine и не блокируют системные ресурсы.
Использование виртуальных потоков значительно улучшает производительность приложений, которые выполняют множество операций ввода-вывода, например, сетевых запросов.
Пример использования ⚙️
public class VirtualThreadsExample {
public static void main(String[] args) {
try (var executor = java.util.concurrent.Executors.newVirtualThreadPerTaskExecutor()) {
for (int i = 0; i < 10; i++) {
executor.submit(() -> {
System.out.println(Thread.currentThread());
});
}
}
}
}
👩💻
@javaquiz
Как функционируют виртуальные потоки в Java и чем они отличаются от обычных потоков?
Ответ ⬇️
Виртуальные потоки появились в Java 21 и позволяют создавать огромное количество потоков без значительных затрат ресурсов. В отличие от обычных потоков, которые зависят от системных потоков операционной системы, виртуальные потоки управляются самой Java Virtual Machine и не блокируют системные ресурсы.
Использование виртуальных потоков значительно улучшает производительность приложений, которые выполняют множество операций ввода-вывода, например, сетевых запросов.
Пример использования ⚙️
public class VirtualThreadsExample {
public static void main(String[] args) {
try (var executor = java.util.concurrent.Executors.newVirtualThreadPerTaskExecutor()) {
for (int i = 0; i < 10; i++) {
executor.submit(() -> {
System.out.println(Thread.currentThread());
});
}
}
}
}
👩💻
@javaquiz
🚫 Антипаттерн недели: Неправильное использование оператора == для сравнения строк
В Java строки (String) являются объектами, а оператор == сравнивает их ссылки, а не содержимое. Это может вызвать неожиданные ошибки при сравнении строк, особенно если они создаются динамически.
✔️ Лучше использовать метод equals(), который сравнивает именно содержимое строк, а не их ссылки.
👩💻
@javaquiz
В Java строки (String) являются объектами, а оператор == сравнивает их ссылки, а не содержимое. Это может вызвать неожиданные ошибки при сравнении строк, особенно если они создаются динамически.
✔️ Лучше использовать метод equals(), который сравнивает именно содержимое строк, а не их ссылки.
👩💻
@javaquiz
⚙️ java.util.Timer()
Метод java.util.Timer() дает возможность создавать таймеры, которые выполняют определенные задачи через установленные временные интервалы. Это удобно для планирования и отложенного выполнения задач без блокировки основного потока.
👩💻
@javaquiz
Метод java.util.Timer() дает возможность создавать таймеры, которые выполняют определенные задачи через установленные временные интервалы. Это удобно для планирования и отложенного выполнения задач без блокировки основного потока.
👩💻
@javaquiz
Метод Thread.yield() уведомляет планировщик потоков о том, что текущий поток готов отдать процессор другим потокам с тем же приоритетом. Это полезно для управления многопоточными задачами без использования блокировок.
👩💻
@javaquiz
👩💻
@javaquiz
❓ Вопрос на собеседовании
Что такое ThreadLocal в Java и для чего он используется?
Ответ ⬇️
ThreadLocal — это механизм, который позволяет каждому потоку хранить уникальное значение переменной, изолированное от других потоков. Это особенно полезно для управления состоянием в многопоточных приложениях, например, для хранения информации о текущем пользователе в веб-приложениях.
Пример использования ⚙️
public class ThreadLocalExample {
private static final ThreadLocal threadLocal = ThreadLocal.withInitial(() -> 0);
public static void main(String[] args) {
Runnable task = () -> {
threadLocal.set((int) (Math.random() * 100));
System.out.println(Thread.currentThread().getName() + ": " + threadLocal.get());
};
new Thread(task).start();
new Thread(task).start();
}
}
👩💻
@javaquiz
Что такое ThreadLocal в Java и для чего он используется?
Ответ ⬇️
ThreadLocal — это механизм, который позволяет каждому потоку хранить уникальное значение переменной, изолированное от других потоков. Это особенно полезно для управления состоянием в многопоточных приложениях, например, для хранения информации о текущем пользователе в веб-приложениях.
Пример использования ⚙️
public class ThreadLocalExample {
private static final ThreadLocal threadLocal = ThreadLocal.withInitial(() -> 0);
public static void main(String[] args) {
Runnable task = () -> {
threadLocal.set((int) (Math.random() * 100));
System.out.println(Thread.currentThread().getName() + ": " + threadLocal.get());
};
new Thread(task).start();
new Thread(task).start();
}
}
👩💻
@javaquiz
⚙️ ProcessHandle.children()
ProcessHandle.children() предоставляет поток (Stream) дочерних процессов текущего процесса. Это может быть полезно для отслеживания запущенных подпроцессов и их управления.
👩💻
@javaquiz
ProcessHandle.children() предоставляет поток (Stream) дочерних процессов текущего процесса. Это может быть полезно для отслеживания запущенных подпроцессов и их управления.
👩💻
@javaquiz