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

Репозиторий: https://github.com/proghub-official/java-interview
Прислать задачу/вопрос в дар: @cyberJohnny
Сотрудничество: @cyberJohnny
加入频道
🪄 Магия сопоставления шаблонов: 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
➡️ Использование Iterator для перебора List

В Java есть несколько способов перебрать список: цикл for с индексом, расширенный for и Iterator. Раньше я использовал цикл for с методом get(), как показано ниже:

for (int i = 0; i < list.size(); i++) {
String name = list.get(i);
}

🗣️ Этот метод работает для ArrayList, но если список — это LinkedList или другая реализация без поддержки случайного доступа, время выполнения увеличится до O(N^2), потому что get() для LinkedList имеет O(n) сложность.

Кроме того, при использовании циклов может возникнуть ошибка в многопоточном режиме, например, при работе с CopyOnWriteArrayList, когда один поток изменяет список, а другой пытается получить доступ к элементам, что может привести к IndexOutOfBoundsException.

✔️ Лучше использовать Iterator, который является стандартным способом перебора списка:

Iterator itr = list.iterator();

while (itr.hasNext()) {
String name = itr.next();
}

Это безопаснее и предотвращает непредсказуемое поведение.

👩‍💻

@javaquiz
➡️ Maven

Maven — один из трёх самых популярных инструментов для сборки проектов на Java. Он отвечает за компиляцию, создание jar-файлов (Java-архивов), создание дистрибутива программы, генерацию документации.

🗣️ Maven — просто отличная штука, хоть поначалу и не очень понятная. Если вы никогда не использовали Maven раньше, вы многое потеряли.

🔗 Ссылочка на доку (https://maven.apache.org/guides/index.html)

👩‍💻

@javaquiz
⚙️ Параллелизм в Java 8

В Java 8 было внесено несколько крупных изменений, улучшивших API параллелизма, включая метод newWorkStealingPool().

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

➡️ Другие улучшения в API параллелизма включают:

• Новые методы для ConcurrentHashMap: forEach(), forEachEntry(), forEachValue(), reduce(), merge() и search().
• CompletableFuture может явно устанавливать свое значение и статус.

👩‍💻

@javaquiz
➡️ Отправка email с использованием JavaMail API

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

⚙️ Настраивается соединение с SMTP-сервером, создается сессия и сообщение. Устанавливаются адрес отправителя и получателей, заголовки, тема и текст сообщения.

✔️ Затем сообщение отправляется с помощью метода Transport.send.

👩‍💻

@javaquiz
➡️ Создаем PDF-файл в Java

Этот код создает PDF-файл с использованием библиотеки iText в Java.

• Внутри метода main создается новый PDF-документ, добавляются два параграфа: один с текстом "Hello Kiran" и второй с текущей датой и временем.

• Затем документ сохраняется в файл C:\Test.pdf. Если возникает ошибка, она выводится в консоль.

👩‍💻

@javaquiz
⚙️ Перегрузка

Перегрузка методов происходит, когда в одном классе несколько методов имеют одинаковое имя, но разные параметры.

✔️ Это разрешается на этапе компиляции.

👩‍💻

@javaquiz