Java core Flashcards
(17 cards)
Расскажи про контракт equals() и hashcode()
Если не переопределять equals() и hashcode() вместе, то коллекции, которые используют под капотом hash будут работать некорректно. В Map потеряется ключ. Объекты равные по equals точно равны, объекты равные по hashcode не точно равны.
Отличие интерфейсов от абстрактных классов
Интерфейс описывает то, как класс должен вести себя. Абстрактный класс является каркасом для дочерних классов.
Области памяти java. Stack и heap. Что это такое?
Stack - это область в памяти, которая хранит данные о вызовах методов. Как только метод вызывается, запись об этом появляется в стеке со всеми данными, которые используются в этом методе. Когда метод заканчивает свою работу, он удаляется из стека.
Heap - это область в памяти, которая хранит все объекты и классы.
Какой класс называют Immutable?
Иммутабельный класс - это класс, экземпляры которого не изменяют своего состояния. Принципы создания:
- поля private final
- нет методов, которые изменяют состояние
- класс final
- все поля устанавливаются через конструктор
Что такое сборщик мусора (garbage collector)
Сборщик мусора - это демон-поток, который ищет и чистит мусор.
Виды GC:
- ZGC (для приложений с огромными кучами и требованиями к минимальным паузам)
- Shenandoah (для приложений с низкими задержками и большими кучами)
- Parallel GC (для приложений, где важна пропускная способность, а не низкие задержки)
- Serial GC (для однопоточных приложений или приложений с небольшими кучами)
- CMS (Concurrent Mark-And-Sweep. Быстрый сбор мусора, минимизирует паузы)
- G1 GC (Garbage First. Балансирует между производительностью и паузами)
GC смотрит, есть ли ссылка на объект, если ее нет, то объект удаляется.
Основные алгоритмы GC:
- Mark-and-sweep. Отмечает используемые объекты и удаляет неиспользуемые.
- Generational GC. Разделяет память на молодое, старшее и постоянное поколение.
Что такое пул строк (string pool)?
Пул строк - это область памяти в heap. В нем хранятся литералы строк. Если строка создана через литерал и она есть в стринг пуле, то возвращается ссылка на эту строку. Если строка в стринг пуле уже есть, то строка создаётся и на неё возвращается ссылка.
Что означает модификатор final? К чему он может быть применен?
final у класса запрещает наследование, final у поля запрещает изменение, final у метода запрещает переопределение, final у массива запрещает изменение ссылки на массив (но можно изменять значения).
Что означает static?
static — это ключевое слово, которое говорит о том, что класс, поле или метод принадлежит к классу, а не объекту.
Какие типы ссылок существуют в Java?
Сильная ссылка (обычная ссылка — объект не будет удалён, пока на него есть хотя бы одна сильная ссылка).
Мягкая ссылка (используется для кеширования; объект со мягкой ссылкой будет удалён только если закончится память).
Слабая ссылка (объект будет удалён при следующей итерации GC).
Фантомная ссылка (используется для отслеживания, когда объект был удалён из памяти; фантомная ссылка не позволяет получить доступ к объекту напрямую, она только сигнализирует, что он скоро будет удалён).
Класс object и его методы?
Object — это базовый класс для любых классов в Java. Его методы:
- equals()
- hashcode()
- toString()
- getClass()
- clone()
- finalize()
Что такое аннотация? Зачем она нужна? Как создать свою аннотацию?
Аннотация — это механизм, который не изменяет поведение кода, но добавляет метаданные к нему.
Когда мы создаём свою аннотацию, нужно указать, как она будет использоваться с помощью мета-аннотаций:
- @Retention (определяет, на каком этапе жизненного цикла аннотация будет доступна)
- @Target (указывает, к чему можно применять аннотацию: методы, классы или поля)
- @Inherited (наследуется ли аннотация подклассами)
- @Repeatable (позволяет применять одну и ту же аннотацию несколько раз)
Что такое коллизия?
Это ситуация, когда у разных объектов одинаковые хеш-коды.
JVM, JRE, JDK, JIT
JVM — виртуальная машина, которая исполняет байт-код.
JRE — среда выполнения Java; включает в себя JVM и стандартные библиотеки.
JDK — набор инструментов для разработки; включает в себя JRE, компилятор и другие утилиты.
JIT — компиляция байт-кода в машинный код во время выполнения программы.
Строки в Java. Из чего состоят? Нюансы
Класс String immutable из-за модификатора доступа и final и отсутствия сеттера. При редактировании строки будет создана новая строка.
Разница между StringBuilder, StringBuffer, String
String — неизменяемый и потокобезопасный; StringBuffer — изменяемый, потокобезопасный; StringBuilder — изменяемый, потоконебезопасный.
Каков порядок вызовов конструкторов и блоков инициализации с учётом иерархии классов?
Статические блоки у родителей.
Статический блок у наследника.
Не статический блок у родителя.
Конструктор у родителя.
Не статический блок у наследника.
Конструктор наследника.
Расскажи что делает JIT компилятор
Преобразует байт-код в машинный код для увеличения производительности.