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

Репозиторий: https://github.com/proghub-official/java-interview
Прислать задачу/вопрос в дар: @cyberJohnny
Сотрудничество: @cyberJohnny
加入频道
⚙️ Оптимизация работы сборщика мусора с помощью параметра -XX:+UseG1GC

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

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

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

java -XX:+UseG1GC G1GCExample

👩‍💻

@javaquiz
🌐 Конфигурация 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
✔️ Как повысить читаемость вашего кода с помощью Records

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

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

👩‍💻

@javaquiz
➡️ Sealed Classes в Java

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

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

👩‍💻

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

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

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

👩‍💻

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

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

👩‍💻

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

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

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

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

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

👩‍💻

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

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

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

👩‍💻

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

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

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

👩‍💻

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

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

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

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

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

👩‍💻

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

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

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

👩‍💻

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

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

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

👩‍💻

@javaquiz
Как получить карьерный буст и MacBook за подписку

В интернете полно курсов по самопиару и карьерному развитию в IT, но все они не сравнятся с реальными кейсами от действующих практиков.

Не нужно покупать дорогие консультации, чтобы перенять чужой опыт — достаточно подписаться на папку, где собралось более 30 лучших экспертов из IT и digital

Это люди, которые не только построили успешную карьеру с нуля, но и основали собственные компании.

Они собрались, чтобы прокачать тебя в маркетинге и дизайне, а ещё провести розыгрыш.

Подпишись на них и получи один из 3 призов:

🥇Главный приз — MacBook Air (M2)
🥈2 место: Яндекс Станция Лайт 2
🥉3 место: Наушники HUAWEI Freebuds 5i

Участвуешь?

1. Подпишись на папку
2. Подтверди участие в боте

19 июня в прямом эфире опубликуем итоги розыгрыша!
Please open Telegram to view this post
VIEW IN TELEGRAM
Парадокс 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
⚙️ Оптимизация сборщика мусора с помощью -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
➡️ Обработка 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