На зачете будет два вопроса, по одному из каждой половины курса.
Вопросы к зачету (1-4 дни)
- Case-классы: зачем нужны и чем отличаются от обычных классов. Зачем нужен extractor и как он применяется.
- Алгебраические типы: зачем нужны; пример декларации. Выбор между полиморфизмом на методах и pattern matching.
- Option[T]: как устроен; способы работы - pattern matching, map/flatMap, for
- Обработка исключения при помощи try и Try. Отличия.
- List[T]: устройство. Использование общих элементов структуры на примере вставки элемента в середину списка.
- Обычная и хвостовая рекурсия. Как заменить рекурсию на цикл?
- Основные операции над списками: map, flatMap, filter, collect. Что делают, пример на каждый метод.
- Основные отличия List и Vector, сравнение эфективности операций вставки, доступа и декомпозации.
- Vector: устройство, схема поиска элемента, схема вставки элемента в конец.
- Stream. Устройство. Схема работы операции вставки элемента по заданому индексу.
- Монады на примере Option. Как работает конструкция for … yield
- Тайпклассы: что это и зачем нужно. Как устроен тайпкласс.
- Способы сериализации JSON. Тайпкласс или reflection, преимущества/недостатки.
- Чтение JSON в Play-JSON. Императивный стиль (as/asOpt), через Reads и комбинация reads в монаду и аппликативный функтор.
Вопросы к зачету (5-8 дни)
- Конкурентный доступ к переменной: проблемы; разница между использованием блокировок, volatile и atomic. Deadlock - как возникает и как его избегать.
- Future и Promise. Что это такое; устройство, работа с callback’ами.
- Трансформация Future. Основные операции; схема работы метода map
- HTTP/1.1: базовое устройство протокола; основные методы; режимы передачи тела запроса/ответа
- Неблокироющийся ввод-вывод и Event Loop: преимущества и проблемы; схема работы
- Что такое актор? Основные компоненты актора; акторы и многопоточность
- Работа с Future в акторе. Как сделать запрос и изменить состояние на основе ответа? Как сделать запрос и передать ответ отправителю?
- CircuitBreaker: что это и какую проблему он решает.
- Взаимодействие акторов и back pressure. Какую проблему решаем; схема работы.
- Akka Streams. Зачем нужны асинхронные потоки? Что такое Source, Sink, Flow и Materializer?