💬 Обратная связь
🎄 Поздравляю всех с наступающими праздниками.
Вы собираетесь решать задачки в новогодние праздники?
👍🏼 - Конечно, выкладывайте.
🌚 - Я буду отдыхать и веселиться. Выложите что-то ещё.
Напишите в комментариях, что было бы интересно почитать на новогодние праздники, кроме постов по тематике канала?
🎄 Поздравляю всех с наступающими праздниками.
Вы собираетесь решать задачки в новогодние праздники?
👍🏼 - Конечно, выкладывайте.
🌚 - Я буду отдыхать и веселиться. Выложите что-то ещё.
Напишите в комментариях, что было бы интересно почитать на новогодние праздники, кроме постов по тематике канала?
Как отсортировать подарки по весу?
Anonymous Poll
48%
Collections.sort(gifts, Comparator.comparing(Gift::getWeight));
19%
gifts.sort((g1, g2) -> g2.getWeight() - g1.getWeight());
7%
gifts.sort(Comparator.reverseOrder());
28%
Collections.sort(gifts, Comparator.comparingDouble(Gift::getWeight));
36%
Collections.sort(gifts, (g1, g2) -> g1.getWeight().compareTo(g2.getWeight()));
Что будет при вызове /api/customers/{5}, если записи с id 5 нет
Anonymous Poll
59%
HTTP 404 (Not Found) с телом ответа null
17%
HTTP 200 (OK) с телом ответа null
9%
NullPointerException
7%
HTTP 500 (Internal Server Error)
15%
HTTP 400 (Bad Request)
🚫 Антипаттерн недели: Применение списков для проверки наличия элемента
Использование списка List для проверки наличия элемента приводит к линейной сложности O(n), что делает такую операцию медленной для больших объемов данных.
✔️ Лучше использовать Set, который обеспечивает время выполнения O(1) для операций поиска.
👩💻
@javaquiz
Использование списка List для проверки наличия элемента приводит к линейной сложности O(n), что делает такую операцию медленной для больших объемов данных.
✔️ Лучше использовать Set, который обеспечивает время выполнения O(1) для операций поиска.
👩💻
@javaquiz
Метод MethodHandle.invokeExact() из пакета java.lang.invoke позволяет вызывать метод или конструктор с помощью ссылки MethodHandle. Это эффективный инструмент для динамического вызова методов с высокой производительностью.
👩💻
@javaquiz
👩💻
@javaquiz
⚙️ Метод 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