Java core Flashcards

(17 cards)

1
Q

Расскажи про контракт equals() и hashcode()

A

Если не переопределять equals() и hashcode() вместе, то коллекции, которые используют под капотом hash будут работать некорректно. В Map потеряется ключ. Объекты равные по equals точно равны, объекты равные по hashcode не точно равны.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Отличие интерфейсов от абстрактных классов

A

Интерфейс описывает то, как класс должен вести себя. Абстрактный класс является каркасом для дочерних классов.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Области памяти java. Stack и heap. Что это такое?

A

Stack - это область в памяти, которая хранит данные о вызовах методов. Как только метод вызывается, запись об этом появляется в стеке со всеми данными, которые используются в этом методе. Когда метод заканчивает свою работу, он удаляется из стека.
Heap - это область в памяти, которая хранит все объекты и классы.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Какой класс называют Immutable?

A

Иммутабельный класс - это класс, экземпляры которого не изменяют своего состояния. Принципы создания:
- поля private final
- нет методов, которые изменяют состояние
- класс final
- все поля устанавливаются через конструктор

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Что такое сборщик мусора (garbage collector)

A

Сборщик мусора - это демон-поток, который ищет и чистит мусор.
Виды GC:
- ZGC (для приложений с огромными кучами и требованиями к минимальным паузам)
- Shenandoah (для приложений с низкими задержками и большими кучами)
- Parallel GC (для приложений, где важна пропускная способность, а не низкие задержки)
- Serial GC (для однопоточных приложений или приложений с небольшими кучами)
- CMS (Concurrent Mark-And-Sweep. Быстрый сбор мусора, минимизирует паузы)
- G1 GC (Garbage First. Балансирует между производительностью и паузами)
GC смотрит, есть ли ссылка на объект, если ее нет, то объект удаляется.
Основные алгоритмы GC:
- Mark-and-sweep. Отмечает используемые объекты и удаляет неиспользуемые.
- Generational GC. Разделяет память на молодое, старшее и постоянное поколение.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Что такое пул строк (string pool)?

A

Пул строк - это область памяти в heap. В нем хранятся литералы строк. Если строка создана через литерал и она есть в стринг пуле, то возвращается ссылка на эту строку. Если строка в стринг пуле уже есть, то строка создаётся и на неё возвращается ссылка.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Что означает модификатор final? К чему он может быть применен?

A

final у класса запрещает наследование, final у поля запрещает изменение, final у метода запрещает переопределение, final у массива запрещает изменение ссылки на массив (но можно изменять значения).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Что означает static?

A

static — это ключевое слово, которое говорит о том, что класс, поле или метод принадлежит к классу, а не объекту.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Какие типы ссылок существуют в Java?

A

Сильная ссылка (обычная ссылка — объект не будет удалён, пока на него есть хотя бы одна сильная ссылка).
Мягкая ссылка (используется для кеширования; объект со мягкой ссылкой будет удалён только если закончится память).
Слабая ссылка (объект будет удалён при следующей итерации GC).
Фантомная ссылка (используется для отслеживания, когда объект был удалён из памяти; фантомная ссылка не позволяет получить доступ к объекту напрямую, она только сигнализирует, что он скоро будет удалён).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Класс object и его методы?

A

Object — это базовый класс для любых классов в Java. Его методы:
- equals()
- hashcode()
- toString()
- getClass()
- clone()
- finalize()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Что такое аннотация? Зачем она нужна? Как создать свою аннотацию?

A

Аннотация — это механизм, который не изменяет поведение кода, но добавляет метаданные к нему.
Когда мы создаём свою аннотацию, нужно указать, как она будет использоваться с помощью мета-аннотаций:
- @Retention (определяет, на каком этапе жизненного цикла аннотация будет доступна)
- @Target (указывает, к чему можно применять аннотацию: методы, классы или поля)
- @Inherited (наследуется ли аннотация подклассами)
- @Repeatable (позволяет применять одну и ту же аннотацию несколько раз)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Что такое коллизия?

A

Это ситуация, когда у разных объектов одинаковые хеш-коды.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

JVM, JRE, JDK, JIT

A

JVM — виртуальная машина, которая исполняет байт-код.
JRE — среда выполнения Java; включает в себя JVM и стандартные библиотеки.
JDK — набор инструментов для разработки; включает в себя JRE, компилятор и другие утилиты.
JIT — компиляция байт-кода в машинный код во время выполнения программы.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Строки в Java. Из чего состоят? Нюансы

A

Класс String immutable из-за модификатора доступа и final и отсутствия сеттера. При редактировании строки будет создана новая строка.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Разница между StringBuilder, StringBuffer, String

A

String — неизменяемый и потокобезопасный; StringBuffer — изменяемый, потокобезопасный; StringBuilder — изменяемый, потоконебезопасный.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Каков порядок вызовов конструкторов и блоков инициализации с учётом иерархии классов?

A

Статические блоки у родителей.
Статический блок у наследника.
Не статический блок у родителя.
Конструктор у родителя.
Не статический блок у наследника.
Конструктор наследника.

17
Q

Расскажи что делает JIT компилятор

A

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