java core Flashcards
Какие задачи выполняет ClassLoader?
Загрузка классов, Проверка классов, Сопряжение, Инициализация классов, Кеширование классов
ClassLoader загружает классы в JVM по мере их необходимости из файлов .class, JAR-архивов, сети и других источников.
Что такое fat JAR?
Файл со всеми зависимостями
Fat JAR содержит все необходимые библиотеки и классы для работы приложения.
Что такое проблема зависимостей в теневых JAR (shaded JAR)?
Конфликты или дублирование классов и библиотек при создании единого JAR-файла с включенными зависимостями
Проблема возникает из-за несовместимости версий библиотек.
Какое различие между интерфейсом и абстрактным классом?
Интерфейсы задают контракт, абстрактные классы задают базовое поведение
Интерфейсы используются для множественного наследования, абстрактные классы — для общего поведения и состояния.
Что такое дефолтные методы в интерфейсах и абстрактных классах?
Методы, позволяющие добавлять новые функции в интерфейсы без нарушения совместимости
Ограничения: нельзя переопределять Object-методы и возникают конфликты при реализации одинаковых дефолтных методов.
Различие между Optional.of() и Optional.ofNullable()?
Optional.of() выкинет исключение, Optional.ofNullable() подразумевает null
Optional.of() используется, чтобы явно указать, что передаваемое значение не должно быть null.
Что такое аннотации и как они используются?
Метаданные, добавляемые к коду для предоставления дополнительной информации компилятору
Аннотации фактически представляют собой интерфейсы.
Что такое время жизни аннотации?
SOURCE/CLASS/RUNTIME
Определяет, на каком этапе аннотация доступна: на уровне исходного кода, во время компиляции или во время выполнения.
За что отвечает JVM?
Независимость Java-кода от платформы, автоматическое управление памятью, безопасность выполнения программ
Основные задачи: загрузка и выполнение байт-кода, управление памятью, обеспечение безопасности, обработка исключений, поддержка многопоточности.
Какова структура JVM?
ClassLoader, Runtime Data Areas, Execution Engine, Garbage Collector (GC)
ClassLoader загружает классы, Runtime Data Areas управляет памятью, Execution Engine интерпретирует или компилирует байт-код.
Что такое рефлексия?
Механизм, позволяющий получать информацию о классах, методах, полях и конструкторах во время выполнения
Используется для доступа к непредусмотренному разработчиком функционалу.
Какие ограничения существуют при выполнении математических операций?
Переполнение, Деление на ноль, Ограниченная точность, Побитовые операции, Ошибки при сравнении дробных чисел
Важно следить за переполнением, точностью, делением на ноль и корректным сравнением чисел.
Как ускорить Java с помощью байт-кода?
JIT-компилятор компилирует байт-код в машинный код во время выполнения
Использование дополнительных флагов JVM и профилирования может значительно ускорить выполнение программы.
Как создать неизменяемый объект?
Класс должен быть final, все поля — private и final, отсутствие сеттеров
Если объект содержит ссылочные типы, нужно гарантировать, что эти объекты тоже не могут быть изменены.
Как происходит процесс компиляции?
Исходный код (.java) → javac → Байт-код (.class) → ClassLoader → Верификация байт-кода → JVM + JIT-компилятор → Выполнение
Процесс включает в себя несколько этапов от компиляции до выполнения.
Сколько стандартных ClassLoader в HotSpot?
Три: Bootstrap, Extension, Application
Можно создать свой Custom ClassLoader для загрузки классов из нестандартных мест.