Java8, class loaders, reference types, xml Flashcards
Какие новшества появились в Java 8?
Lamba expression Method references default method new tools stream API Date Time API Optional Nashorn, JavaScript Engine
Что такое лямбда выражения, какой у них синтаксис?
(argument)->(body)
Для чего используются лямбда выражения?
Уменьшение количества кода
Последовательное и параллельное выполнение
Какая область видимости лямбда выражений?
Лямбда-выражения имеют доступ к области видимости в которой они были объявлены. Лямбда-выражения в отличии от локальных и анонимных классов не порождают своей области видимости объекта, то есть, не переопределяют переменную this.
Что такое функциональные интерфейсы?
Это интерфейсы, которые должны содержать только один абстрактный метод.
Runablr, Callable,Comparator, ActionListener
Для используется аннотация @FunctionalInterface?
Для обозначения интерфейса функциональным
Могут ли лямбда-выражения работать с статическими полями?
В отличии от локальных переменных, мы можем записывать значения в экземплярные поля класса и статические переменные внутри лямбда-выражений
Для чего используется оператор ::?
Для получения ссылки на метод или конструктор
Какие есть виды ссылок на методы?
Ссылка на статический метод (ContainingClass::staticMethodName)
Ссылка на метод конкретного объекта
(ContainingObject::instanceMethodName)
Ссылка на метод произвольного объекта конкретного типа
(ContainingType::methodName)
Ссылка на конструктор
(ClassName::new)
Как определяется какой конструктор будет передан через ClassName::new?
Автоматически, компилятором. Сигнатуры должны совпадать.
Что такое предикаты?
Предикаты - это функции, принимающие один аргумент, и возвращающие значение типа boolean.
Что позволяет делать интерфейс Function?
Функции принимают один аргумент и возвращают некоторый результат. Методы по умолчанию могут использоваться для построения цепочек вызовов(compose, andThen)
Что такое поставщики (suppliers) в java8?
поставщики (suppliers) предоставляют результат заданного типа. В отличии от функции, поставщики не принимают аргументов.
Что такое потребители(Consumers)
Потребители представляют собой операции, которые производятся на одним входным аргуметом
Что такое опциональные значения(optional)
Optionals - это контейнер для значения, которое может быть null. Optionals не являются функциональными интерфейсами, однако удобное средство предотвращения NPE
Что такое потоки java.util.Stream?
java.util.Stream представляет собой последовательность элементов, над которой можно проводить операции (промежуточные - intermediate или конечные - terminal). Конечные операции возвращают результат определенного типа, а промежуточные операции возвращают тот же поток.
Что позволяют сделать потоки java.util.Stream?
Фильтрация
Сортировка данных
Конвертация
Поиск по шаблону
Поддерживают ли потоки реализацию Map
Нет
Что делают операции filter и forEach?
filter Фильтрует все элементы потока
Принимает предикат. Промежуточная над результатом.
forEach принимает функцию, которая вызывается для каждого элемента в (уже отфильтрованом) поток. Конечная операция.
Что такое операция Sorted?
Промежуточная
возвращает отсортированное представление потока
Сортирует в обычном порядке, если не предоставлен другой компаратор
Что делает операция map?
map преобразовывает каждый элемент в другой объект при помощи переданной функции
Промежуточная
Для чего предназначена операция match?
Для проверки удовлетворяет ли поток заданному предикату, используются различные операции сопоставления(match) Все операции сопоставления являются конечными и возвращается результат boolean
Что такое операция Count?
Count возвращает количество элементов в потоке(long)
Конечная
Что делает операция reduce()?
Производит свертку элементов потока по заданной функции(optional)
Как вызвать параллельный стрим?
values.parallelStream()
Какие новые методы добавлены к интерфейсу Map в java 8?
getOrDefault() forEach() replaceAll() putIfAbsent() remove(Object key, Object value) computeIfAbsent() computeIfPresent() merge()
Что представляет собой класс Clock
Содержит в себе текущее время и дату в зависимости от локали. Можно получить вреся в миллисекундах, а также инстан даты.
Как в java 8 представлены часовые пояса
ZoneID
Чем отличается LocalDate от LocalTime?
LocalDate представляет конкретную дату
Localtime время с учетом часового пояса
Оба immutable
Какое средство форматирования даты и времени?
DateTimeFormatter
Что позволяет аннотация Repeatable и как обходились без нее?
Аннотация Reapeatable позволяет использовать множество аннотаций одного типа
Что такое default method
Это метод который можно объявить в интерфейсе
В чем отличие между абстрактным методом и default методом в интерфейсе?
Абстрактные класс содержащие abstract методы могут хранить состояние, а точнее переменные, в с вою очередь интерфейсам это не под силу максимум что могут интерфейсы это хранить константы.
Можно ли переопределить default метод?
Да
Для чего предназначен класс StringJoiner?
Соединение коллекции строк
Что такое ClassLoader
Это средство, которое загружает исполняемый код в JVM
Какие типы ClassLoader-ов есть?
Bootstrap ClassLoader - он загружает внутренние классы JDK и пакеты java.*
Extension Classloader - загружает различные пакеты расширений
System Classloader - загружает классы, пути к котором указаны в переменной окружения CLASSPATH или пути, которые указаны в командной строке после ключей -classpath или -cp
Как работает ClassLoader?
Системный загрузчик проверит, не загружался ли данный класс ранее, если да, то возвращает данный класс из кэша. Если нет, делегирует поиск класса родительскому классу-загрузчику.
Загрузчик расширений выполняет такую же процедуру
Базовый загрузчик загружает класс самостоятельно
Как создать свой Classloader?
унаследоваться от java.lang.ClassLoader
Опишите процесс загрузки класса
- Loading - происходит поиск и физическая загрузка файла класса в определенном источнике
- Linking - проверки байт кода, подготовка структуры данных
- Initialization - происходит выполнение статических инициализаторов определенных в классе
Что такое strong referebce?
это обычная ссылка в Java
Что такое Weak reference?
Это такая ссылка, которая не достаточно ссыльная что бы заставить достижимый объект оставаться в памяти
Что такое Soft reference?
Это как weak reference но они “менее охотно” избавляются от объекта
Что такое Phantom Reference?
Хватка такого объекта настолько незначительна, что метод get всегда возвращает null
Единственное применение для такой ссылки это отслеживание когда она попадет в очередь ReferenceQueue
Помещение PhantomReference объекта в ReferenceQueue свидетельствует о том что данный объект не используется и “сборщик мусора” готов его убрать из памяти
Какой подход к парсингу документа в SAX парсерах?
SAX парсер использует событийную модель разбора документа, парсинг происходит на лету и загружать в память сразу весь XML нет необходимости
Какой подход к парсингу документа в DOM парсерах?
DOM парсер сначала загружает весть исходный документ в java объект, с которым затем начинает работать
Какие преимущества и недостатки SAX и DOM парсеров?
DOM высокая скорость работы и очень большие затраты памяти
SAX не требует больших затрат памяти, относительно быстрый, но для сложный для реализации и для изменения процесса загрузки.
Что такое XPath?
XPath - это язык запросов к элемента xml xhtml документа
Что бы получить интересующие данные, необходимо всего ли создать запрос, описывающий эти данные.
Всю черную работу выполнит интерпритатор языка XPath
Что такое DTD и XMLSchma?
DTD это текствый файл. который определяет атрибуты, используемые в XML, SGML, HTML or XHTML.
XMLSchma - язык описания структуры XML-документа. Спецификация XML Schema является рекомендацией W3C
XML Schema была задумана для определения правил, которым должен подчиняться документ.
Что такое POJO объект?
Plain Old Java Object - простой Java-объект не унаследованный от какого-то специфического объекта и не реализующий никаких служебных интерфейсов сверх тех, которые нужны для бизнес-модели.
Что такое JSR?
Java Specification Request Это некоторое соглашение или стандарт который могут реализовывать производители.
Реализация JSR, как правило, означает реализацию некого API. Документы этих стандартов разрабатывает Java Community Process в которую входят различные компании.