Java Core

0.0(0)
studied byStudied by 0 people
learnLearn
examPractice Test
spaced repetitionSpaced Repetition
heart puzzleMatch
flashcardsFlashcards
Card Sorting

1/26

flashcard set

Earn XP

Description and Tags

Flashcards for Java Core concepts based on lecture notes.

java core

Study Analytics
Name
Mastery
Learn
Test
Matching
Spaced

No study sessions yet.

27 Terms

1
New cards

JVM (Java Virtual Machine)

Виртуальная машина Java, обеспечивающая кроссплатформенность за счет выполнения байт-кода.

2
New cards

Плюсы Java

Развитая экосистема (Spring, Hibernate), ООП, устоявшийся язык, безопасность, платформенная независимость.

3
New cards

Минусы Java

Тяжёлый в плане памяти, многословный, медленнее C/C++ (несмотря на JIT).

4
New cards

JDK (Java Development Kit)

JRE (JVM, ClassLoader, стандартные библиотеки), компилятор Java (JAVAC), примеры, документацию, различные утилиты.

5
New cards

JRE (Java Runtime Environment)

Минимально необходимая для работы Java приложений реализация виртуальной машины. Состоит из JVM, ClassLoader, и стандартного набора библиотек и классов джава

6
New cards

JVM (Java Virtual Machine)

Виртуальная машина Java, которая выполняет байт-код, скомпилированный JIT компилятором, с помощью встроенного интерпретатора байт кода.

7
New cards

Исключение

Объект, описывающий исключительное состояние.

8
New cards

Правила переопределения hashCode()

Хэш-код над одним и тем же объектом всегда равен. Хэш-код над двумя одинаковыми объектами всегда равен. Хэш-код над двумя разными объектами обычно не равен.

9
New cards

Контракт между hashCode() и equals()

1) Если два объекта возвращают разные значения hashcode(), то они не могут быть равны. 2) Если equals объектов true, то и хэшкоды должны быть равны. 3) Переопределив equals, всегда переопределять и hashcode.

10
New cards

JIT (Just-in-time) компилятор

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

11
New cards

Как реализовать иммутабельный класс?

Файнал класс, приватный конструктор, отсутствие сеттеров.

12
New cards

Динамическая загрузка Class.forName()

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

13
New cards

Что произойдёт если в блоке инициализации возникнет исключение?

Для нестатических блоков, если исключение прописано явно, то нужно указать это в throws конструктора, иначе будет ошибка компиляции. У статического блока будет ошибка компиляции.

14
New cards

Сериализация

Процесс сохранения состояния объекта в последовательность байт. Реализована через маркерный интерфейс Serializable и Externalizable.

15
New cards

Для чего нужна сериализация?

Для компактного сохранения состояния объекта и считывания этого состояния.

16
New cards

Шаги сериализации (writeObject())

Проверка реализует ли объект Serializable; Запись метаданных (имя класса, serialVersionUID, список полей, иерархия); Запись значений полей (нестатических и не transient). Объекты — рекурсивно; Если есть writeObject() — вызывается вместо дефолтного поведения.

17
New cards

Шаги десериализации (readObject())

Чтение метаданных и сравнение serialVersionUID; Создание объекта без конструктора; Установка значений сериализованных полей; Если есть readObject() — вызывается вместо стандартного чтения.

18
New cards

Пример сериализации

ObjectOutputStream oos.writeObject, oos.flush, oos.close.

19
New cards

В чём проблема сериализации синглтона?

Создаётся новый объект. Решение: readResolve() будет возвращён изначальный синглтон.

20
New cards

Дженерики

Параметризованные типы, они позволяют писать типобезопасный и переиспользуемый код. Компилятор проверяет типы. Дженериком может быть класс, интерфейс, конструктор, поле и метод. Информация о типе доступна только на моменте компиляции и стирается в рантайм, в байткод попадает обобщённый вариант.

21
New cards

Для чего нужны дженерики?

Для строгой типизации и проверки на этапе компиляции.

22
New cards

Вайлдкард

Дженерик вида , означает, что тип может быть чем угодно. Можно задать ограничения: ? extends T (наследник T, либо сам T), ? super T (предок T, либо сам T).

23
New cards

Лямбда-выражение

Короткий способ написать анонимный метод, т.е. метод без имени, который можно передать как объект. Функция, которую можно засунуть в переменную, передать как аргумент и вызвать потом.

24
New cards

Функциональные интерфейсы

Predicate (boolean test(T t)), Function

25
New cards

Стримы

Последовательность элементов над которой можно проводить различные операции. Операции бывают промежуточными и терминальными. Важно заметить, что стримы ленивые и начнут выполнение только при вызове терминального метода.

26
New cards

Как создать стрим?

Stream.empty(), list.stream(), map.entrySet().stream(), Arrays.stream(array), Stream.of("1", "2", "3").

27
New cards

Метод peek

Map принимает на вход один объект, а возвращает другой, peek же возвращает тот же объект, но возможно с изменённым внутренним состоянием. Также не нужно указывать ретёрн, программа и так знает что нужно возвращать.