SC Scala  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

Конкурентность и управление ресурсами

Раздел «Конкурентность и управление ресурсами» соединяет небольшие фрагменты Scala с ревью и рабочими сценариями. Проверяются: Легковесные волокна, Семафоры, Отмена, Гарантии освобождения, Разбор отказов, Восстановление системы.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. В каждом задании верен только один вариант. Фрагменты относятся к Scala 3; внешняя библиотека названа прямо в коде или условии.
Вопрос 1 из 30
В теме «Легковесные волокна» проследите типы и порядок вычисления. Какой вывод выдерживает такую проверку?
ScalaЛегковесные волокна: чтение фрагмента
import cats.effect.IO
import cats.syntax.all.*
val taskA = IO.pure(40)
val taskB = IO.pure(2)
val program = (taskA, taskB).parTupled.map(_ + _)
println(program)
Вопрос 2 из 30
Где находится практическая граница механизма «Легковесные волокна»?
ScalaЛегковесные волокна: изменившийся контекст
// Дополнительный контекст: Дочернее волокно продолжило работу после выхода из родительской области.
import cats.effect.IO
import cats.syntax.all.*
val taskA = IO.pure(40)
val taskB = IO.pure(2)
val program = (taskA, taskB).parTupled.map(_ + _)
println(program)
Вопрос 3 из 30
Что следует изменить в коде, не расширяя контракт «Легковесные волокна»?
ScalaЛегковесные волокна: решение на ревью
import cats.effect.IO
import cats.syntax.all.*
val taskA = IO.pure(40)
val taskB = IO.pure(2)
val program = (taskA, taskB).parTupled.map(_ + _)
println(program)
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 4 из 30
В контракте темы «Легковесные волокна» какая формулировка учитывает и семантику конструкции, и реальный риск?
permits\le downstream\ capacity
Вопрос 5 из 30
При проверке темы «Легковесные волокна» какой итог ревью содержит и действие, и способ заметить возврат риска?
Вопрос 6 из 30
В теме «Семафоры» какое утверждение не переносит в Scala правило из другого языка или другой конструкции?
ScalaСемафоры: чтение фрагмента
import cats.effect.IO
import cats.effect.std.Semaphore
val limited = Semaphore[IO](10).flatMap { semaphore =>
  semaphore.permit.use(_ => IO.pure("remote response"))
}
Вопрос 7 из 30
Операцию повторили после ошибки, когда внешний эффект мог уже произойти. Какое ограничение темы «Семафоры» становится существенным?
ScalaСемафоры: изменившийся контекст
// Дополнительный контекст: Дочернее волокно продолжило работу после выхода из родительской области.
import cats.effect.IO
import cats.effect.std.Semaphore
val limited = Semaphore[IO](10).flatMap { semaphore =>
  semaphore.permit.use(_ => IO.pure("remote response"))
}
Вопрос 8 из 30
При исправлении темы «Семафоры» какое решение уменьшает вероятность повторения обнаруженного дефекта?
ScalaСемафоры: решение на ревью
import cats.effect.IO
import cats.effect.std.Semaphore
val limited = Semaphore[IO](10).flatMap { semaphore =>
  semaphore.permit.use(_ => IO.pure("remote response"))
}
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 9 из 30
В контракте темы «Семафоры» новый сценарий не отменяет основное правило, но делает заметной его границу. Какой ответ это отражает?
cancel\Rightarrow finalizers
Вопрос 10 из 30
При проверке темы «Семафоры» что нужно оставить после исправления, кроме комментария в исходном файле?
Вопрос 11 из 30
В теме «Отмена» что компилятор или среда выполнения обязаны обеспечить в этом случае?
ScalaОтмена: чтение фрагмента
import cats.effect.IO
import scala.concurrent.duration.*
def mayBlock(): String = Thread.sleep(20); "done"
val bounded = IO.interruptible(mayBlock()).timeout(2.seconds)
Вопрос 12 из 30
Для темы «Отмена» обычный пример прошёл, затем изменились условия использования. Какой риск нужно проверить первым?
ScalaОтмена: изменившийся контекст
// Дополнительный контекст: Дочернее волокно продолжило работу после выхода из родительской области.
import cats.effect.IO
import scala.concurrent.duration.*
def mayBlock(): String = Thread.sleep(20); "done"
val bounded = IO.interruptible(mayBlock()).timeout(2.seconds)
Вопрос 13 из 30
При исправлении темы «Отмена» команда сравнивает несколько правок. Какая из них делает допущение явным и проверяемым?
ScalaОтмена: решение на ревью
import cats.effect.IO
import scala.concurrent.duration.*
def mayBlock(): String = Thread.sleep(20); "done"
val bounded = IO.interruptible(mayBlock()).timeout(2.seconds)
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 14 из 30
В контракте темы «Отмена» операцию повторили после ошибки, когда внешний эффект мог уже произойти. Какой анализ пригоден для публичного API?
Вопрос 15 из 30
Какой критерий готовности по теме «Отмена» действительно поймает повтор прежнего дефекта?
Вопрос 16 из 30
В теме «Гарантии освобождения» как сформулировать семантику примера так, чтобы она сохранилась после переименования переменных?
ScalaГарантии освобождения: чтение фрагмента
import cats.effect.{IO, Resource}
val connection = Resource.make(IO.pure("open"))(_ => IO.println("closed"))
val result = connection.use(name => IO.pure(name.length))
Вопрос 17 из 30
После какого изменения «Гарантии освобождения» может повести себя не так, как ожидалось?
ScalaГарантии освобождения: изменившийся контекст
// Дополнительный контекст: Дочернее волокно продолжило работу после выхода из родительской области.
import cats.effect.{IO, Resource}
val connection = Resource.make(IO.pure("open"))(_ => IO.println("closed"))
val result = connection.use(name => IO.pure(name.length))
Вопрос 18 из 30
При исправлении темы «Гарантии освобождения» какой вариант не переносит проблему в вызывающий код?
ScalaГарантии освобождения: решение на ревью
import cats.effect.{IO, Resource}
val connection = Resource.make(IO.pure("open"))(_ => IO.println("closed"))
val result = connection.use(name => IO.pure(name.length))
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 19 из 30
В контракте темы «Гарантии освобождения» какой вариант не теряет существенную часть технической картины?
Вопрос 20 из 30
При проверке темы «Гарантии освобождения» какое правило следует зафиксировать тестом или пунктом ревью?
Вопрос 21 из 30
Во фрагменте проверяется тема «Разбор отказов». Какое правило точнее всего объясняет поведение кода?
ScalaРазбор отказов: чтение фрагмента
case class PoolSnapshot(activeFibers: Int, waitingPermits: Int, queued: Int, openConnections: Int)
val before = PoolSnapshot(40, 0, 2, 18)
val during = PoolSnapshot(400, 280, 900, 20)
val starvationLikely =
  during.waitingPermits > before.waitingPermits &&
  during.openConnections <= before.openConnections + 2
println(starvationLikely)
Вопрос 22 из 30
Для темы «Разбор отказов» на какой границе это решение перестаёт быть достаточным?
ScalaРазбор отказов: изменившийся контекст
// Дополнительный контекст: Дочернее волокно продолжило работу после выхода из родительской области.
case class PoolSnapshot(activeFibers: Int, waitingPermits: Int, queued: Int, openConnections: Int)
val before = PoolSnapshot(40, 0, 2, 18)
val during = PoolSnapshot(400, 280, 900, 20)
val starvationLikely =
  during.waitingPermits > before.waitingPermits &&
  during.openConnections <= before.openConnections + 2
println(starvationLikely)
Вопрос 23 из 30
При исправлении темы «Разбор отказов» что следует изменить, чтобы следующий рефакторинг не вернул тот же риск?
ScalaРазбор отказов: решение на ревью
case class PoolSnapshot(activeFibers: Int, waitingPermits: Int, queued: Int, openConnections: Int)
val before = PoolSnapshot(40, 0, 2, 18)
val during = PoolSnapshot(400, 280, 900, 20)
val starvationLikely =
  during.waitingPermits > before.waitingPermits &&
  during.openConnections <= before.openConnections + 2
println(starvationLikely)
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 24 из 30
В контракте темы «Разбор отказов» что следует оставить в проектном решении после этого изменения контекста?
Вопрос 25 из 30
При проверке темы «Разбор отказов» какой итог можно проверить автоматически или воспроизводимым примером?
Вопрос 26 из 30
В теме «Восстановление системы» что в этом примере определяется семантикой Scala, а не соглашением автора?
ScalaВосстановление системы: чтение фрагмента
import java.util.UUID
case class Command(id: UUID, payload: String)
val seen = scala.collection.mutable.Set.empty[UUID]
def accept(c: Command): Boolean = seen.add(c.id)
val id = UUID.randomUUID()
println(accept(Command(id, "rebuild")) -> accept(Command(id, "rebuild")))
Вопрос 27 из 30
Для темы «Восстановление системы» после переноса кода в общий модуль проявилось скрытое допущение. Какое?
ScalaВосстановление системы: изменившийся контекст
// Дополнительный контекст: Дочернее волокно продолжило работу после выхода из родительской области.
import java.util.UUID
case class Command(id: UUID, payload: String)
val seen = scala.collection.mutable.Set.empty[UUID]
def accept(c: Command): Boolean = seen.add(c.id)
val id = UUID.randomUUID()
println(accept(Command(id, "rebuild")) -> accept(Command(id, "rebuild")))
Вопрос 28 из 30
Какое решение по теме «Восстановление системы» выдерживает предметное ревью?
ScalaВосстановление системы: решение на ревью
import java.util.UUID
case class Command(id: UUID, payload: String)
val seen = scala.collection.mutable.Set.empty[UUID]
def accept(c: Command): Boolean = seen.add(c.id)
val id = UUID.randomUUID()
println(accept(Command(id, "rebuild")) -> accept(Command(id, "rebuild")))
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 29 из 30
В контракте темы «Восстановление системы» операцию повторили после ошибки, когда внешний эффект мог уже произойти. Какой вывод одновременно сохраняет правило и учитывает его границу?
Вопрос 30 из 30
При проверке темы «Восстановление системы» как сформулировать защиту от регрессии без расплывчатого «работает как раньше»?

Ответьте на все 30 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу