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

Репозиторий: https://github.com/proghub-official/java-interview
Прислать задачу/вопрос в дар: @cyberJohnny
Сотрудничество: @cyberJohnny
Download Telegram
➡️ Использование библиотеки Jodd для упрощения повседневных задач в Java

Jodd — это набор утилит и инструментов для Java, который содержит множество полезных компонентов для работы с JSON, HTTP, Email, файловой системой и многим другим. В отличие от узкоспециализированных библиотек, Jodd предоставляет универсальные и лёгкие в использовании утилиты для повседневных задач.

• Jodd — отличный выбор, если вам нужен набор небольших и эффективных инструментов для решения повседневных проблем в Java-программировании.

🔗 Ссылочка на доку (https://github.com/oblac)

👩‍💻

@javaquiz
👍2
➡️ Использование метода formatted для более простого форматирования строк (Java 15+)

Метод formatted — это новая функция, появившаяся в Java 15, которая позволяет легко форматировать строки. Этот метод является лаконичной и более читабельной альтернативой методу String.format(). Теперь вы можете напрямую вызывать метод форматирования на строковом литерале или объекте String.

• formatted упрощает форматирование строк, делая код более компактным и понятным.

👩‍💻

@javaquiz
🔥2
➡️ Использование библиотеки joor для упрощенной работы с рефлексией в Java

Joor — это легковесная библиотека для работы с рефлексией в Java, которая значительно упрощает использование этого мощного механизма.

✔️ Она предоставляет удобный API для создания экземпляров, вызова методов и доступа к полям классов, делая код более читаемым и компактным.

🔗 Ссылочка на доку (https://github.com/jOOQ/joor)

👩‍💻

@javaquiz
Метод isDaemon()

Метод isDaemon() используется для определения, является ли поток демоном или нет.

Демон (daemon) — это поток, который работает в фоновом режиме и не препятствует завершению программы. Основная программа может завершиться, даже если демон все еще выполняется.

👩‍💻

@javaquiz
👍3
Что такое Lambda-выражения?

Лямбда-выражения — это способ написать анонимные функции (или функциональные объекты) в Java. Они были введены в Java 8 и позволяют передавать поведение как аргументы в методы.

🗣 Лямбда-выражения значительно упрощают работу с такими функциональными интерфейсами, как Runnable, Callable, Comparator и многими другими.

✔️ Преимущества Lambda-выражений

• Краткость: Лямбда-выражения позволяют писать меньше кода.
• Читаемость: Код становится более читабельным и понятным.
• Поддержка функциональных интерфейсов: Лямбда-выражения работают с функциональными интерфейсами, делая работу с ними проще и интуитивно понятной.
• Повышенная производительность: В некоторых случаях лямбда-выражения могут улучшить производительность за счёт оптимизаций, выполненных компилятором.

👩‍💻

@javaquiz
uniVocity-parsers

uniVocity-parsers — это набор высокопроизводительных и надежных парсеров для Java. Он предлагает унифицированный интерфейс для работы с различными форматами файлов, а также надежную инфраструктуру для разработки новых парсеров.

👩‍💻

@javaquiz
⚙️ Files.move()

В Java метод Files.move() из пакета java.nio.file используется для переименования или перемещения файла/директории. Он является мощным инструментом для работы с файловой системой.

👩‍💻

@javaquiz
➡️ Использование Chronicle Map для распределенных ключ-значение хранилищ

Chronicle Map — это мощный инструмент для создания распределенных хранилищ "ключ-значение" с высокой производительностью. Поддерживает работу с большими объемами данных в реальном времени и отлично подходит для высоконагруженных систем.

• Поддерживает распределенные хранилища.
• Минимальная задержка, высокая производительность.
• Идеальна для финансовых и IoT-приложений.

🔗 Ссылочка на доку (https://github.com/OpenHFT/Chronicle-Map)

👩‍💻

@javaquiz
👍1
⚙️ Collections.reverse()

В Java метод Collections.reverse() изменяет порядок элементов в списке на обратный. Это удобно для работы с коллекциями, где требуется обратный порядок.

👩‍💻

@javaquiz
👍1
➡️ Feign: Секрет быстрого и чистого вызова REST API в Java

Feign – библиотека для Java, автоматизирующая вызов REST API. Она сокращает код, создавая запросы и обрабатывая исключения без лишних конструкций. Идеально подходит для работы с несколькими API и упрощает тестирование.

• Автоматическая генерация кода для вызова API, избавляя от рутины.
• Лёгкость тестирования и расширяемость при добавлении новых API.

🔗 Ссылочка на доку (https://github.com/OpenFeign/feign#why-feign-and-not-x)

👩‍💻

@javaquiz
👍3
⚙️ Optional.ofNullable()

В Java метод Optional.ofNullable() создаёт объект Optional, который может содержать значение или быть пустым. Полезен для избежания NullPointerException и обработки необязательных значений.

👩‍💻

@javaquiz
👍2
#Вопросы_с_собеседования
В чем разница между Thread.sleep() и Thread.yield()?

Thread.sleep(): Этот метод приостанавливает выполнение текущего потока на заданное количество времени. Время задается в миллисекундах и указывается в качестве аргумента метода. При вызове Thread.sleep(), поток переходит в состояние ожидания и не выполняет код в течение указанного периода времени. После истечения времени поток снова становится готовым к выполнению. Вызов Thread.sleep() может сгенерировать исключение InterruptedException, поэтому необходимо обрабатывать его или пробрасывать.

Thread.yield(): Этот метод предоставляет намек планировщику потоков на то, что поток, вызвавший yield(), готов уступить процессорное время другим потокам с тем же приоритетом. Однако это рекомендация, а не гарантия. Вызов Thread.yield() приводит к тому, что текущий поток переходит из исполняемого в состояние готовности, чтобы другие потоки могли получить доступ к процессору. Однако, если нет других готовых потоков с тем же приоритетом, поток может продолжить выполнение.

👩‍💻

@javaquiz
👍2
⚙️ Collectors.joining()

В Java метод Collectors.joining() из пакета java.util.stream позволяет объединить элементы потока в одну строку с опциональным разделителем, префиксом и суффиксом. Это удобно для создания строковых представлений коллекций.

👩‍💻

@javaquiz
👍3
➡️ Quarkus — быстрый и лёгкий фреймворк для Java-приложений

Quarkus — оптимизированный фреймворк для создания Java-приложений с низким временем запуска и минимальным потреблением памяти. Подходит для облачных и серверлесс-приложений.

• Быстрый старт с нативной компиляцией на GraalVM.
• Оптимизация для облака и контейнеров.
• Совместимость с Java API и фреймворками Spring, Hibernate.
• Горячая перезагрузка для ускорения разработки.

🔗 Ссылочка на доку (https://quarkus.io/guides/)

👩‍💻

@javaquiz
🎉1
⚙️ Comparator.reverseOrder()

В Java метод Comparator.reverseOrder() создаёт компаратор, который сортирует элементы в порядке убывания. Это удобно для работы с сортировкой коллекций, когда нужно изменить стандартный порядок.

👩‍💻

@javaquiz
👍2
Вопрос на собеседовании

Как работает CompletableFuture в Java, чем он отличается от Future, и как использовать метод thenCombine() для выполнения параллельных задач?

Ответ ⬇️
CompletableFuture — это расширение Future, позволяющее выполнять асинхронные задачи и комбинировать их без необходимости вручную управлять потоками. В отличие от Future, он предоставляет богатый API для обработки результатов, включая цепочку методов и возможность комбинирования нескольких задач. Метод thenCombine() используется для объединения результатов двух асинхронных задач, выполняемых параллельно, в одну итоговую операцию.

Пример использования ⚙️
import java.util.concurrent.CompletableFuture;

public class Main {
public static void main(String[] args) {
// Первая асинхронная задача
CompletableFuture task1 = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(1000); // Эмуляция задержки
} catch (InterruptedException e) {
e.printStackTrace();
}
return 10;
});

// Вторая асинхронная задача
CompletableFuture task2 = CompletableFuture.supplyAsync(() -> 20);

// Комбинируем результаты двух задач
CompletableFuture combined = task1.thenCombine(task2, Integer::sum);

// Получаем и выводим результат
combined.thenAccept(result -> System.out.println("Сумма: " + result));

// Ждем завершения всех задач (только для примера)
combined.join();
}
}

// Результат выполнения:
// Сумма: 30

👩‍💻

@javaquiz
👍1
Semaphore

Semaphore — это класс, который позволяет ограничивать количество потоков, одновременно работающих с каким-либо ресурсом.

Поток должен получить разрешение, чтобы войти в критическую секцию.
Semaphore управляет набором разрешений (permits), а конструктор принимает количество разрешений.
Если разрешений нет, поток ставится в очередь до освобождения.

Метод acquire() получает разрешение, release() — освобождает.

👩‍💻

@javaquiz
👍1
👩‍💻 Задача по Java: Проверка строки на наличие всех букв алфавита

Напишите функцию, которая проверяет, содержит ли строка все буквы английского алфавита (a-z). Игнорируйте регистр букв и символы, не являющиеся буквами.

Пример:

System.out.println(isPangram("The quick brown fox jumps over the lazy dog"));
// Ожидаемый результат: true

System.out.println(isPangram("Hello, World!"));
// Ожидаемый результат: false

Решение задачи на картинке ☝️

👩‍💻

@javaquiz
👍4
🔥 Всё ещё сталкиваетесь с долгими релизами и ручной проверкой кода?

Приглашаем на открытый урок который поможет решить эти вопросы.

🗓 12 августа в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Kotlin Backend Developer. Professional».

На открытом уроке «Почему все переходят на Kotlin? Секреты успешной миграции с Java» мы покажем, как сократить время разработки на 30% и минимизировать риски NullPointerException.
Вы узнаете ключевые отличия Kotlin, пошаговый план миграции без переписывания проекта и лучшие практики корутин для асинхронности.

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

🔗 Ссылка на регистрацию: https://clck.ru/3NTKyf

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576