Java задачи с собеседований
6.22K subscribers
656 photos
7 videos
19 files
261 links
Задачи, тесты и теоретические вопросы по JAVA.

Репозиторий: https://github.com/proghub-official/java-interview
Прислать задачу/вопрос в дар: @cyberJohnny
Сотрудничество: @cyberJohnny
加入频道
➡️ Сила коллекций: Неизменяемые коллекции в Java

Java 10 представила удобную функцию, позволяющую создавать неизменяемые копии коллекций с использованием новых методов copyOf.

✔️ Эти методы обеспечивают легкий способ создания неизменяемых версий существующих коллекций, что способствует повышению безопасности и надежности кода.

👩‍💻

@javaquiz
👍4
⚙️ Оптимизация работы сборщика мусора с помощью параметра -XX:+UseG1GC

Java предоставляет разнообразные способы повышения производительности приложений.

✔️ Одним из таких методов является применение современного сборщика мусора G1 (Garbage First), который улучшает эффективность работы с большими объемами данных и уменьшает задержки.

➡️ Для активации G1GC нужно добавить флаг -XX:+UseG1GC при запуске Java-программы:

java -XX:+UseG1GC G1GCExample

👩‍💻

@javaquiz
👍2
🌐 Конфигурация HTTP-прокси в Java

Данный код задаёт параметры HTTP-прокси для Java-программы, включая адрес, порт, имя пользователя и пароль прокси-сервера.

✔️ Такая настройка даёт возможность отправлять запросы через прокси, чтобы обходить ограничения или улучшать безопасность.

👩‍💻

@javaquiz
💪 Сильный инструмент в одной строке: метод of()

Метод of() предоставляет лаконичный способ создавать неизменяемые коллекции.

🗣️ Этот метод удобен и эффективен для формирования коллекций с заданным набором элементов.

👩‍💻

@javaquiz
✔️ Применение Optional для предотвращения NullPointerException

В Java часто возникает ситуация, когда метод возвращает null, что может вызвать NullPointerException. Чтобы этого избежать, можно применять класс Optional.

👀 Давайте посмотрим пример, как использовать Optional для безопасного получения результата из метода, который способен вернуть null.

👩‍💻

@javaquiz
🔗 Соединение строк с помощью String.join

Часто нужно объединить несколько строк в одну, используя заданный разделитель.

🗣️ Раньше, до Java 8, для этого обычно применяли цикл и объект StringBuilder. С появлением метода String.join, выполнение этой задачи стало гораздо проще и понятнее.

Применение метода String.join заметно облегчает процесс соединения строк с разделителем, улучшая читаемость кода и уменьшая объем кода, который необходимо писать и поддерживать.

👩‍💻

@javaquiz
👍3
✔️ Как повысить читаемость вашего кода с помощью Records

Records — это новый вид классов в Java, который облегчает создание классов для хранения неизменяемых данных.

🗣️ Они автоматически создают стандартные методы, такие как equals(), hashCode() и toString(), что делает код более аккуратным и компактным.

👩‍💻

@javaquiz
👍2
➡️ Sealed Classes в Java

Sealed classes дают возможность программистам задавать, какие именно классы могут наследовать данный класс или реализовывать интерфейс.

🗣️ Это помогает создавать более управляемую и предсказуемую структуру классов.

👩‍💻

@javaquiz
🔥 Сопоставление с образцом для оператора instanceof

В Java 14 появилась возможность сопоставления с образцом для оператора instanceof. Это позволяет упростить и улучшить читаемость кода, который проверяет тип объекта и затем приводит его к нужному типу.

✔️ Применяйте эту функциональность для создания более аккуратного и понятного кода, избегая ненужных явных приведений типов.

👩‍💻

@javaquiz
👍1🔥1
🪄 Магия сопоставления шаблонов: Switch Expressions

ℹ️ Switch Expressions позволяет писать более компактный и выразительный код при использовании оператора switch.

👩‍💻

@javaquiz
🎉5🔥2👎1
➡️ Мощь статических методов: Использование методов интерфейсов

✔️ В Java 8 была введена возможность определения статических методов в интерфейсах, что открыло новые возможности для создания удобных и мощных утилитарных функций прямо в интерфейсах.

🗣В интерфейсе ListUtils определен статический метод max, который находит максимальный элемент в коллекции.

🗣В методе main мы вызываем статический метод max из интерфейса ListUtils, передавая ему список чисел.

🗣Мы выводим найденное максимальное число на экран.

👩‍💻

@javaquiz
👎1
✔️ Использование Collectors.teeing для объединения потоков

Java 12 представила новый метод Collectors.teeing, который позволяет объединить результаты двух различных коллекторов в один итоговый результат.

🗣️ Эта возможность значительно упрощает обработку сложных потоков данных.

👩‍💻

@javaquiz
👍3
➡️ Использование Optional для работы с потенциально null значениями

Использование Optional позволяет более безопасно работать с потенциально null значениями в Java.

🗣️ Этот подход помогает предотвратить распространенные ошибки, такие как NullPointerException, и делает код более читаемым и надежным.

👩‍💻

@javaquiz
🔥1
➡️ Фабричный метод коллекции

✔️ Коллекции — наиболее часто используемая функция в нашем ежедневном программировании. Они используются в качестве контейнера, в котором мы храним объекты и передаем их дальше.

Коллекции также используются для сортировки, поиска и перебора объектов, что упрощает жизнь программиста. Он предоставляет несколько базовых интерфейсов, таких как List, Set, Map и т. д., а также множество реализаций.

Традиционный способ создания коллекций и карт может показаться многим разработчикам многословным.

👀 Вот почему в Java 9 появилось несколько очень кратких фабричных методов.

👩‍💻

@javaquiz
👍2
Использование LocalDate и DateTimeFormatter для работы с датами

LocalDate и DateTimeFormatter предоставляют удобные и безопасные методы для работы с датами в Java.

🗣️ Этот подход упрощает задачи форматирования и парсинга дат, что делает код более читаемым и менее подверженным ошибкам.

👩‍💻

@javaquiz
👍2
➡️ Как объединить два списка в Java?

Этот код демонстрирует, как объединить два списка list1 и list2 в Java, создав новый список mergedList, который содержит все элементы из обоих исходных списков. В результате выполнения кода будет напечатан объединенный список.

🗣️ Этот подход часто используется на практике при работе с коллекциями в Java.

👩‍💻

@javaquiz
Парадокс Comparator’а

Если вам нужно написать Comparator для сортировки объектов по возрастанию, обычно он выглядит так:

public class ByScoreComparator implements Comparator {

@Override
public int compare(User u1, User u2) {
return (int) signum(u2.getAge() - u1.getAge());
}
}

➡️ Главная проблема — понять, от чего отнимать, чтобы порядок был правильным. Правильный ответ с первого раза получается редко, и часто мы замечаем ошибку уже после запуска кода.

Теперь это не нужно. Можно использовать ссылки на методы:

Comparator comparator = Comparator
.comparingDouble(User::getAge)
.thenComparing(User::getName);
List hList = ...;
hList.sort(comparator);

🗣️ Такой подход упрощает создание компараторов.

👩‍💻

@javaquiz
🔥2
⚙️ Оптимизация сборщика мусора с помощью -XX:+UseG1GC

Java предоставляет множество возможностей для оптимизации производительности приложений.

✔️ Одной из таких возможностей является использование современного сборщика мусора G1 (Garbage First), который улучшает работу приложений с большим объемом данных и снижает задержки.

➡️ Чтобы включить использование G1GC, необходимо добавить флаг -XX:+UseG1GC при запуске Java-приложения:

java -XX:+UseG1GC G1GCExample

👩‍💻

@javaquiz
👀 Случайные целочисленные числа

Теперь более трудное задание. Не читайте решение. Посмотрите сможете ли вы найти
ответ самостоятельно. Когда я запущу следующую программу:

for (int i = 0; i < 10; i++) {
System.out.println((Integer) i);
}

Иногда я получаю следующий вывод:

92
221
45
48
236
183
39
193
33
84

➡️ Но как такое вообще возможно? Ответ в кроется в переопределении JDK кеша Integer через рефлексию, и затем в использовании auto-boxing и auto-unboxing.

👩‍💻

@javaquiz
👀 Datafaker

Datafaker создает фиктивные данные для ваших программ JVM за считанные минуты, используя широкий спектр из более чем 100 поставщиков данных.

🗣️ Это может быть очень полезно при генерации тестовых данных для заполнения базы данных, генерации данных для стресс‑теста или анонимизации данных из производственных сервисов. Давайте включим его в наши зависимости.

🔗 Ссылочка на доку (https://www.datafaker.net/documentation/getting-started/)

👩‍💻

@javaquiz
👍4
➡️ Обработка CloneNotSupportedException и возврат экземпляра подкласса

Несмотря на критику функции клонирования объектов в Java, если вам нужно реализовать метод clone(), вот несколько лучших практик для упрощения задачи:

public Course clone() {
Course c = null;
try {
c = (Course)super.clone();
} catch (CloneNotSupportedException e) {} // Не произойдет

return c;
}

🗣️ Этот код использует тот факт, что метод clone() не вызовет CloneNotSupportedException, если класс реализует интерфейс Cloneable. Возврат подкласса называется ковариантным переопределением методов и доступен с Java 5, что позволяет избежать приведения типа на стороне клиента:

Course javaBeginners = new Course("Java", 100, 10);
Course clone = javaBeginners.clone();

Ранее, например, с классом Date, нужно было явно приводить результат метода clone():

Date d = new Date();
Date clone = (Date) d.clone();

👩‍💻

@javaquiz