Java 8 -> 11 -> 17 Flashcards

1
Q

Какие нововведения появились в java 8? (10)

A
  • Методы интерфейсов по умолчанию;
  • Функциональные интерфейсы;
  • Optional
  • Лямбда-выражения;
  • Ссылки на методы и конструкторы;
  • Stream API для работы с коллекциями;
  • Новое API для работы с датами и временем;
  • Добавлено несколько новых классов для потокобезопасной работы;
  • Добавлен стандартный класс для работы с Base64;
  • Удален PermGen, изменен способ хранения мета-данных классов;
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Какие новые классы для работы с датами появились в java 8? (9)

A

пакет java.time:
- LocalDate – дата без времени и временных зон;
- LocalTime – время без даты и временных зон;
- LocalDateTime – дата и время без временных зон;
- ZonedDateTime – дата и время с временной зоной;
- DateTimeFormatter – форматирует даты в строки и наоборот, только для классов java.time;
- Instant – колличество секунд с Unix epoch time (полночь 1 января 1970 UTC);
- Duration – продолжительность в секундах и наносекундах;
- Period – период времени в годах, месяцах и днях;
- TemporalAdjuster – корректировщик дат (к примеру, может получить дату следующего понедельника);

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

Какой класс появился в Java 8 для кодирования/декодирования данных?

A

Base64 - потокобезопасный класс, который реализует кодировщик и декодировщик данных.

Base64 содержит 6 основных методов:
**getEncoder()/getDecoder() ** - возвращает кодировщик/декодировщик base64, соответствующий стандарту RFC 4648;
getUrlEncoder()/getUrlDecoder() - возвращает URL-safe кодировщик/декодировщик base64, соответствующий стандарту RFC 4648; getMimeEncoder()/getMimeDecoder() - возвращает MIME кодировщик/декодировщик, соответствующий стандарту RFC 2045.

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

Как создать Base64 кодировщик и декодировщик?

A

// Encode
String b64 = Base64.getEncoder().encodeToString(“input”.getBytes(“utf-8”)); //aW5wdXQ==
// Decode
new String(Base64.getDecoder().decode(“aW5wdXQ==”), “utf-8”); //input

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

Какие дополнительные методы для работы с ассоциативными массивами
(maps) появились в Java 8? (7)

A

** forEach()** принимает функцию, которая производит операцию над каждым элементом: map.forEach((k, v) -> System.out.println(v));
putIfAbsent() добавляет пару «ключ-значение», только если ключ отсутствовал: map.putIfAbsent(“a”, “Aa”);
getOrDefault() – в случае отсутствия ключа возвращает переданное значение по умолчанию: map.getOrDefault(“a”, “not found”);
compute() создает или обновляет текущее значение на полученное в результате вычисления (возможно использовать ключ и текущее значение):
map.compute(“a”, (k, v) -> String.valueOf(k).concat(v)); //[“a”, “aAa”]
computeIfPresent() – если ключ существует, обновляет текущее значение на полученное в результате вычисления (возможно использовать ключ и текущее значение): map.computeIfPresent(“a”, (k, v) -> k.concat(v));
computeIfAbsent() – если ключ отсутствует, создает его со значением, которое вычисляется (возможно использовать ключ):
map.computeIfAbsent(“a”, k -> “A”.concat(k)); //[“a”,”Aa”]
merge() принимает ключ, значение и функцию, которая объединяет передаваемое и текущее значения, если под заданным ключом значение отсутствует, то записывает туда передаваемое значение.
map.merge(“a”, “z”, (value, newValue) -> value.concat(newValue)); //[“a”,”Aaz”]

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

Что такое LocalDateTime?

A

LocalDateTime объединяет вместе LocaleDate и LocalTime, содержит дату и время в календарной системе ISO-8601 без привязки к часовому поясу. Время хранится с точностью до наносекунды.
Содержит множество удобных методов, таких как plusMinutes, plusHours, isAfter, toSecondOfDay и т.д.

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

Что такое ZonedDateTime?

A

java.time.ZonedDateTime – улучшение java.util.Calendar, объект класса содержит LocalDateTime + ZoneId :
~~~
ZonedDateTime zdt = ZonedDateTime.of(LocalDateTime.now(), ZoneId.of(“America/New_York”));
~~~

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

Как получить текущую дату с использованием Date Time API из Java 8?

A

LocalDate.now();

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

Как добавить 1 неделю, 1 месяц, 1 год, 10 лет к текущей дате с
использованием Date Time API?

A

LocalDate.now().plusWeeks(1);
LocalDate.now().plusMonths(1);
LocalDate.now().plusYears(1);
LocalDate.now().plus(1, ChronoUnit.DECADES);

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

Как получить следующий вторник, используя Date Time API?

A

LocalDate.now()
.with(TemporalAdjusters.next(DayOfWeek.TUESDAY));

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

Как получить вторую субботу текущего месяца, используя Date Time API?

A

LocalDate
.of(LocalDate.now().getYear(), LocalDate.now().getMonth(), 1)
.with(TemporalAdjusters.nextOrSame(DayOfWeek.SATURDAY))
.with(TemporalAdjusters.next(DayOfWeek.SATURDAY));

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

Как получить текущее время с точностью до миллисекунд, используя Date
Time API?

A

new Date().toInstant();

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

Как получить текущее время по местному времени с точностью до
миллисекунд, используя Date Time API?

A

LocalDateTime.ofInstant(new Date().toInstant(), ZoneId.systemDefault());

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

Главные Инновации Java 9-11 (8)

A

1) Добавился коллектор ZGC, позволяющий работать с огромным heap (terrabytes…
2) var keyword
3) новый HTTP Client: HttpClient, HttpRequest, HttpResponse, WebSocket.
4)toArray() в Collections. / List / Set / Map - of() / copyOf
5) String : isBlank (), lines(), repeat (int), strip() / stripLeading / stripTrailing(),
6) Streams: takeWhile, dropWhile, iterate, flatMapping, filtering.
7) Optional: ifPresentOrElse, isEmpty()
8) Интерфейсы: private methods

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

Главные Инновации Java 12-17 (6)

A

1) Sealed Classes: новое средство для задания правил наследования: позволяет явно указывать классы, которые могут расширять или имплементировать данный:
public abstract sealed class Animal permits Cat, Dog {}
Преимущества: безопасность + информативность

2) Record: уменьшает бойлерплей при создании классов, в которых просто хранится информация:
record Point(int x, int y) { }; Point p = new Point(1, 2);

3) Pattern Matching in instanceof:
if (animal instanceof Cat cat) { System.out.println(cat.meow()); } : здесь создается переменная, что означает, что объект проверен на тип, закастован и доступен для использования в своём scope.

4) Switch Expressions:
- - введен оператор -> , что избавляет от return & break
- - блок кода после -> + yield keyword: -> { //some code; yield x;}
- - можно группировать константы в одном case
- - можно декларировать переменную как в instanceof

5) text blocks:
~~~
String block = “””
Multi-line text
with indentation
and “double quotes”!
“””;
~~~

6) улучшено описание NPE

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

Расскажите про класс Optional

A

Опциональное значение Optional — это контейнер для объекта, который может содержать или не содержать значение null. Такая обёртка является удобным средством предотвращения NullPointerException, т.к. имеет некоторые функции высшего порядка, избавляющие от добавления повторяющихся if null/notNull проверок:

Optional<String> optional = Optional.of(\"hello\");

optional.isPresent(); // true

optional.ifPresent(s -> System.out.println(s.length())); // 5

optional.get(); // \"hello\"

optional.orElse(\"ops...\"); // \"hello\"