⚙️ Метод Stream.generate() предназначен для создания бесконечного потока элементов, которые генерируются с помощью функции. Это может быть полезно для генерации случайных данных, шаблонов или повторяющихся значений.
👩💻
@javaquiz
👩💻
@javaquiz
❓ Вопрос на собеседовании
Как лямбда-выражения в Java используют переменные из внешнего контекста и какие существуют ограничения на это?
Ответ ⬇️
В Java лямбда-выражения могут использовать переменные из окружающей области, но только если они являются фактически финализированными. Это означает, что переменная должна быть объявлена как final или её значение не должно изменяться после инициализации.
Данное ограничение связано с тем, что лямбды могут выполняться в другом потоке, и изменение переменной вне лямбды может привести к непредсказуемым результатам.
Пример использования ⚙️
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) {
int base = 10;
Consumer multiplier = value -> {
System.out.println(value * base); // Использование захваченной переменной
};
multiplier.accept(5); // Вывод: 50
// base = 20; // Ошибка компиляции: переменная должна быть фактически финализированной
}
}
👩💻
@javaquiz
Как лямбда-выражения в Java используют переменные из внешнего контекста и какие существуют ограничения на это?
Ответ ⬇️
В Java лямбда-выражения могут использовать переменные из окружающей области, но только если они являются фактически финализированными. Это означает, что переменная должна быть объявлена как final или её значение не должно изменяться после инициализации.
Данное ограничение связано с тем, что лямбды могут выполняться в другом потоке, и изменение переменной вне лямбды может привести к непредсказуемым результатам.
Пример использования ⚙️
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) {
int base = 10;
Consumer multiplier = value -> {
System.out.println(value * base); // Использование захваченной переменной
};
multiplier.accept(5); // Вывод: 50
// base = 20; // Ошибка компиляции: переменная должна быть фактически финализированной
}
}
👩💻
@javaquiz
⚙️ Метод MethodHandles.privateLookupIn предоставляет возможность доступа к приватным методам, полям и конструкторам класса с помощью MethodHandle. Это мощный и необычный инструмент для работы с закрытыми членами классов. 👩💻
@javaquiz
@javaquiz
Как я создаю игру с открытым исходным кодом на Java
Посмотреть статью (https://habr.com/ru/companies/korus_consulting/articles/874134/)
👩💻
@javaquiz
https://habr.com/ru/companies/korus_consulting/articles/874134/?utm_source=vk_habr&utm_medium=social&utm_campaign=23379228
Посмотреть статью (https://habr.com/ru/companies/korus_consulting/articles/874134/)
👩💻
@javaquiz
https://habr.com/ru/companies/korus_consulting/articles/874134/?utm_source=vk_habr&utm_medium=social&utm_campaign=23379228
Хабр
Как я пишу open source игру на Java
Автор текста: Александр Нилов Архитектор информационных систем департамента «Логистика» КОРУС Консалтинг Всем привет! Меня зовут Александр Нилов, я архитектор департамента «Логистика» КОРУС...
Метод ManagementFactory.getRuntimeMXBean() позволяет получить данные о работе Java-программы, такие как аргументы командной строки, идентификатор процесса (PID) и время запуска. Эта информация полезна для мониторинга и диагностики приложений.
👩💻
@javaquiz
👩💻
@javaquiz
⚙️ Шаблонное сопоставление для 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