Core-2: 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