Библиотека собеса по Java | вопросы с собеседований
6.38K subscribers
359 photos
4 videos
200 links
Вопросы с собеседований по Java и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/08c603b6

Работать у нас: https://job.proglib.io/

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
Что такое JAXP?

Ответ: JAXP, The Java API for XML Processing (Java API для обработки XML) — набор API, упрощающих обработку XML данных в программах написанных на Java. Содержит реализации DOM, SAX и StAX парсеров, поддерживает XSLT и возможность работать с DTD.
Что делает ключевое слово new?

Ключевое слово new используется для создания нового объекта. Оно всегда используется в сочетании с именем класса, к которому принадлежит создаваемый объект. Например, чтобы создать новый объект класса String, мы можем написать код, как на картинке.

В этом примере переменная str будет ссылаться на новый объект класса String. По умолчанию, новый объект будет инициализирован значениями по умолчанию для своего типа. Например, объект класса String будет содержать пустую строку.
Где должны располагаться статические (css, js, html) ресурсы в Spring MVC приложении?

Ответ: расположение статических ресурсов можно настроить. В документации Spring Boot рекомендуется использовать /static, или /public, или /resources, или /META-INF/resources.
Jackson-dataformat-csv

Jackson-dataformat-csv — это библиотека Java, являющаяся модулем расширения популярной библиотеки Jackson для обработки JSON. Она позволяет читать и записывать данные в формате CSV (Comma Separated Values), который широко используется для хранения и обмена табличными данными.
Объясните принципы работы и использование Future и Callable в Java для выполнения асинхронных задач. Приведите пример кода с использованием Future и Callable.

Ответ:

Callable: Представляет собой задачу, которую можно выполнить и получить результат.
Future: Интерфейс, предназначенный для представления результата асинхронной операции. Он позволяет проверять статус завершения задачи, ожидать завершения и получать результат.

Объяснение:

Создание ExecutorService с одним потоком.
ExecutorService executorService = Executors.newSingleThreadExecutor();

Создание объекта Callable, представляющего асинхронную задачу.
Callable<String> callableTask = ...;

Подача задачи на выполнение и получение объекта Future, с помощью которого можно управлять и получать результат асинхронной задачи.
Future<String> future = executorService.submit(callableTask);

Ожидание завершения задачи и получение результата. Если задача еще не завершена, метод get() будет блокировать текущий поток до завершения задачи.
String result = future.get();

Завершение работы ExecutorService после завершения всех задач.
executorService.shutdown();

Примечание:
Использование Callable и Future полезно в ситуациях, когда вы хотите выполнить асинхронную задачу и получить результат её выполнения. Это может быть полезно в приложениях, где необходимо избегать блокировки главного потока ожиданием завершения долгих операций.
SpotBugs

SpotBugs — это бесплатный инструмент статического анализа кода Java, являющийся преемником FindBugs. Он помогает обнаруживать широкий спектр ошибок и потенциальных проблем в коде, таких как нулевые указатели, утечки ресурсов, небезопасное использование API, логические ошибки и неэффективный код.
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

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

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Восходящее и нисходящее преобразование

Восходящее преобразование (upcasting) происходит, когда объект или значение преобразуется в тип, который находится выше в иерархии наследования.

Нисходящее преобразование (downcasting) происходит, когда объект или значение преобразуется в тип, который находится ниже в иерархии наследования. Для выполнения нисходящего преобразования необходимо явно привести типы.
Что такое StringJoiner?

Класс StringJoiner используется, чтобы создать последовательность строк, разделенных разделителем с возможностью присоединить к полученной строке префикс и суффикс:

StringJoiner joiner = new StringJoiner(».», «prefix-», «-suffix»);
for (String s : «Hello the brave world».split(» «)) {
joiner.add(s);
}
System.out.println(joiner); //prefix-Hello.the.brave.world-suffix
Cobertura

Cobertura — это инструмент для покрытия кода, который помогает разработчикам Java отслеживать, какие части их кода тестируются. Он работает путем сбора данных о том, какие строки кода выполняются во время тестов, и сравнения этих данных с полным набором строк кода в проекте.
🦾🧠🏋️Качаем мозги к лету!

Курс «Алгоритмы и структуры данных» для тех, кто хочет научиться работать с алгоритмами, подготовиться к собеседованию крупную IT-компанию и начать брать более сложные проекты.

➡️ Алгоритмы и структуры данных 35 990 ₽ 21 594

⭐️ Переходите и активируйте бесплатные вводные занятия курсаhttps://proglib.io/w/da6727d1

Вас ждут:

– 150 практических заданий и 47 видеолекций

– бессрочный доступ к обучению

– поддержка преподавателя в чате

А также очень харизматичный спикер из Яндекса 🙌🏻
Что такое WeakReference?

WeakReference — это класс, представляющий собой «слабую ссылку» на объект. Слабая ссылка не препятствует сборщику мусора (GC) в удалении объекта, на который она ссылается.

Когда использовать WeakReference:

— При кэшировании: Слабые ссылки можно использовать для реализации кэша, где объекты кеша удаляются из памяти, когда они больше не используются, но не сразу.
— При отслеживании объектов: Слабые ссылки можно использовать для отслеживания объектов, не препятствуя их удалению GC.
— При реализации «умных указателей»: Слабые ссылки можно использовать для реализации «умных указателей», которые автоматически освобождают ресурсы, когда они больше не нужны.
Как работает механизм Double Brace Initialization и какие потенциальные проблемы он может создать?

Double Brace Initialization в Java — это техника инициализации объектов, которая использует двойные фигурные скобки. Первая скобка создает анонимный внутренний класс, а вторая — блок инициализации этого класса. Этот метод часто используется для удобной инициализации коллекций. Однако он может привести к утечкам памяти, поскольку анонимный внутренний класс держит неявную ссылку на внешний класс, что может помешать сборке мусора во внешнем классе. Кроме того, он увеличивает размер класса и может влиять на производительность.
Worker Thread

Worker Thread (рабочий поток) — это обычный поток, который выполняет задачи в фоновом режиме, отдельно от главного потока приложения.

Использование Worker Thread:

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

Для сравнения элементов массива и букв строки в Java можно использовать следующую программу.

Программа создает массив из символов {'a', 'c', 'd', 'f', 'g'} и строку «abcdefg». В цикле происходит сравнение элементов массива и букв строки с помощью метода charAt(). Если элемент массива равен букве строки, то выводится сообщение об этом.

Затем массив сортируется по возрастанию методом sort() из класса Arrays. Отсортированный массив выводится на экран.
Объясните процесс загрузки, инициализации, выполнения и выгрузки класса в Java Virtual Machine (JVM). Какие шаги выполняются на каждом этапе?

Ответ:

Загрузка (Loading):
— Нахождение и загрузка класс-файла: Class Loader ищет и загружает байт-код класса из файловой системы, JAR-архива, сети или другого источника.
— Создание структур данных: Создаются структуры данных для представления класса в памяти JVM, такие как Class объект.

Подготовка (Preparation):
— Выделение памяти для статических переменных: Выделяется память для статических переменных, инициализированных значением по умолчанию.

Инициализация (Initialization):
— Инициализация статических переменных и выполнение статических блоков: Статические переменные получают значения из кода инициализации, выполняются статические блоки.

Выполнение (Execution):
— Вызов метода main(): Если класс содержит метод public static void main(String[] args), JVM вызывает этот метод для выполнения программы.
— Вызов других методов: JVM вызывает другие методы по мере необходимости.

Выгрузка (Unloading):
— Освобождение памяти: Если класс больше не используется и нет активных ссылок на его объекты, JVM может выгрузить класс и освободить память.
BrokenBarrierException

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

Как исправить:

— Обработайте исключение BrokenBarrierException в коде.
— Убедитесь, что все потоки, которые будут ждать на барьере, завершатся до того, как вы его сломаете.
— Используйте CyclicBarrier вместо Barrier, если вам нужно сбросить барьер и запустить его снова.
🔍 Тестирование в Java: лучшие практики, инструменты и
рекомендации для разработчиков

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

Читать статью
Метод setUp()

Метод setUp() (или before(), в предыдущих версиях JUnit) используется для настройки начальных условий перед выполнением каждого тестового метода. Этот метод выполняется перед каждым тестовым методом, который помечен аннотацией @Test. Это позволяет вам подготовить общие данные, создать объекты и настроить другие условия перед тестированием.
Apache Commons Lang3

Apache Commons Lang3 — это библиотека Java, предоставляющая набор утилит для работы с базовыми классами Java, такими как String, Object, Collection и др.

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