Java задачи с собеседований
6.27K subscribers
596 photos
6 videos
19 files
247 links
Задачи, тесты и теоретические вопросы по JAVA.

Репозиторий: https://github.com/proghub-official/java-interview
Прислать задачу/вопрос в дар: @cyberJohnny
Сотрудничество: @cyberJohnny
加入频道
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++;
}
}
Какой метод интерфейса Map возвращает множество ключей из карты?
Anonymous Poll
11%
keys()
12%
entryKeys()
22%
getKeys()
49%
keySet()
13%
entrySet()
💬 Обратная связь

🎄 Поздравляю всех с наступающими праздниками.
Вы собираетесь решать задачки в новогодние праздники?

👍🏼 - Конечно, выкладывайте.
🌚 - Я буду отдыхать и веселиться. Выложите что-то ещё.

Напишите в комментариях, что было бы интересно почитать на новогодние праздники, кроме постов по тематике канала?
🚫 Антипаттерн недели: Применение списков для проверки наличия элемента

Использование списка List для проверки наличия элемента приводит к линейной сложности O(n), что делает такую операцию медленной для больших объемов данных.

✔️ Лучше использовать Set, который обеспечивает время выполнения O(1) для операций поиска.

👩‍💻
@javaquiz
Метод MethodHandle.invokeExact() из пакета java.lang.invoke позволяет вызывать метод или конструктор с помощью ссылки MethodHandle. Это эффективный инструмент для динамического вызова методов с высокой производительностью.

👩‍💻
@javaquiz
⚙️ Метод Stream.generate() предназначен для создания бесконечного потока элементов, которые генерируются с помощью функции. Это может быть полезно для генерации случайных данных, шаблонов или повторяющихся значений.

👩‍💻
@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
Метод ManagementFactory.getRuntimeMXBean() позволяет получить данные о работе Java-программы, такие как аргументы командной строки, идентификатор процесса (PID) и время запуска. Эта информация полезна для мониторинга и диагностики приложений.

👩‍💻
@javaquiz
⚙️ Шаблонное сопоставление для switch

Шаблонное сопоставление для switch позволяет применять шаблоны для более удобного и понятного сопоставления значений в операторе switch. Это значительно облегчает работу с разными типами данных и структурами.

👩‍💻
@javaquiz
⚙️ Метод ByteArrayOutputStream.writeTo() позволяет записать данные из байтового массива (ByteArrayOutputStream) непосредственно в другой выходной поток (OutputStream). Это удобно для перенаправления данных, например, в файл или сетевой сокет, без необходимости промежуточного копирования.

👩‍💻
@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
⚙️ Метод Pattern.asMatchPredicate(), который появился в Java 11, дает возможность превратить регулярное выражение в предикат. Этот предикат можно использовать для фильтрации потоков или для проверки строк на полное соответствие шаблону.

👩‍💻
@javaquiz