SC Scala  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

Future и асинхронные вычисления

Тест по теме «Future и асинхронные вычисления» проверяет Контекст выполнения, Композиция Future, Ошибки, Параллельность и Читаемость решения. Здесь нужно читать код, различать близкие технические объяснения и замечать границы гарантий.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. В каждом задании верен только один вариант. Фрагменты относятся к Scala 3; внешняя библиотека названа прямо в коде или условии.
Вопрос 1 из 25
Во фрагменте проверяется тема «Контекст выполнения». Какое правило точнее всего объясняет поведение кода?
ScalaКонтекст выполнения: чтение фрагмента
import scala.concurrent.*
import scala.concurrent.duration.*
val blockingPool = java.util.concurrent.Executors.newFixedThreadPool(2)
given ExecutionContext = ExecutionContext.fromExecutor(blockingPool)
val f = Future { Thread.sleep(20); 40 + 2 }
println(Await.result(f, 1.second))
blockingPool.shutdown()
Вопрос 2 из 25
Для темы «Контекст выполнения» на какой границе это решение перестаёт быть достаточным?
ScalaКонтекст выполнения: изменившийся контекст
// Дополнительный контекст: Удалённый вызов стал иногда завершаться после тайм-аута и пересекаться с повторной попыткой.
import scala.concurrent.*
import scala.concurrent.duration.*
val blockingPool = java.util.concurrent.Executors.newFixedThreadPool(2)
given ExecutionContext = ExecutionContext.fromExecutor(blockingPool)
val f = Future { Thread.sleep(20); 40 + 2 }
println(Await.result(f, 1.second))
blockingPool.shutdown()
Вопрос 3 из 25
При исправлении темы «Контекст выполнения» что следует изменить, чтобы следующий рефакторинг не вернул тот же риск?
ScalaКонтекст выполнения: решение на ревью
import scala.concurrent.*
import scala.concurrent.duration.*
val blockingPool = java.util.concurrent.Executors.newFixedThreadPool(2)
given ExecutionContext = ExecutionContext.fromExecutor(blockingPool)
val f = Future { Thread.sleep(20); 40 + 2 }
println(Await.result(f, 1.second))
blockingPool.shutdown()
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 4 из 25
В контракте темы «Контекст выполнения» что следует оставить в проектном решении после этого изменения контекста?
T_{seq}=T_a+T_b
Вопрос 5 из 25
При проверке темы «Контекст выполнения» какой итог можно проверить автоматически или воспроизводимым примером?
Вопрос 6 из 25
В теме «Композиция Future» что в этом примере определяется семантикой Scala, а не соглашением автора?
ScalaКомпозиция Future: чтение фрагмента
import scala.concurrent.*
import ExecutionContext.Implicits.global
val a = Future(20)
val b = Future(22)
val sum = for x <- a; y <- b yield x + y
sum.foreach(println)
Вопрос 7 из 25
Для темы «Композиция Future» после переноса кода в общий модуль проявилось скрытое допущение. Какое?
ScalaКомпозиция Future: изменившийся контекст
// Дополнительный контекст: Обработчик ошибки добавили в конце цепочки, но часть побочного эффекта уже успевала выполниться.
import scala.concurrent.*
import ExecutionContext.Implicits.global
val a = Future(20)
val b = Future(22)
val sum = for x <- a; y <- b yield x + y
sum.foreach(println)
Вопрос 8 из 25
Какую рекомендацию по теме «Композиция Future» можно проверить тестом или измерением?
ScalaКомпозиция Future: решение на ревью
import scala.concurrent.*
import ExecutionContext.Implicits.global
val a = Future(20)
val b = Future(22)
val sum = for x <- a; y <- b yield x + y
sum.foreach(println)
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 9 из 25
В контракте темы «Композиция Future» удалённый вызов стал иногда завершаться после тайм-аута и пересекаться с повторной попыткой. Какой вывод одновременно сохраняет правило и учитывает его границу?
T_{par}\approx\max(T_a,T_b)
Вопрос 10 из 25
При проверке темы «Композиция Future» как сформулировать защиту от регрессии без расплывчатого «работает как раньше»?
Вопрос 11 из 25
Какой вывод о теме «Ошибки» можно сделать без дополнительных допущений?
ScalaОшибки: чтение фрагмента
import scala.concurrent.*
import ExecutionContext.Implicits.global
val f = Future(10 / 0).recover {
  case _: ArithmeticException => 0
}
f.foreach(println)
Вопрос 12 из 25
Для темы «Ошибки» какое последствие нельзя исключить одним успешным запуском?
ScalaОшибки: изменившийся контекст
// Дополнительный контекст: Удалённый вызов стал иногда завершаться после тайм-аута и пересекаться с повторной попыткой.
import scala.concurrent.*
import ExecutionContext.Implicits.global
val f = Future(10 / 0).recover {
  case _: ArithmeticException => 0
}
f.foreach(println)
Вопрос 13 из 25
При исправлении темы «Ошибки» какая правка сохраняет полезную семантику и не расширяет обещания API?
ScalaОшибки: решение на ревью
import scala.concurrent.*
import ExecutionContext.Implicits.global
val f = Future(10 / 0).recover {
  case _: ArithmeticException => 0
}
f.foreach(println)
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 14 из 25
В контракте темы «Ошибки» локальный пример стал частью более крупной системы. Какая трактовка контракта остаётся полной?
Вопрос 15 из 25
При проверке темы «Ошибки» какой пункт следует добавить в критерии приёмки изменения?
Вопрос 16 из 25
В теме «Параллельность» код компилируется и запускается. Какое утверждение о его контракте остаётся верным?
ScalaПараллельность: чтение фрагмента
import scala.concurrent.*
import ExecutionContext.Implicits.global
val left = Future { Thread.sleep(20); 1 }
val right = Future { Thread.sleep(20); 2 }
val total = for a <- left; b <- right yield a + b
total.foreach(println)
Вопрос 17 из 25
Для темы «Параллельность» какой пограничный случай относится к контракту, а не только к стилю записи?
ScalaПараллельность: изменившийся контекст
// Дополнительный контекст: Два независимых вычисления случайно связали последовательной композицией.
import scala.concurrent.*
import ExecutionContext.Implicits.global
val left = Future { Thread.sleep(20); 1 }
val right = Future { Thread.sleep(20); 2 }
val total = for a <- left; b <- right yield a + b
total.foreach(println)
Вопрос 18 из 25
При исправлении темы «Параллельность» что здесь лучше исправить до объединения изменений?
ScalaПараллельность: решение на ревью
import scala.concurrent.*
import ExecutionContext.Implicits.global
val left = Future { Thread.sleep(20); 1 }
val right = Future { Thread.sleep(20); 2 }
val total = for a <- left; b <- right yield a + b
total.foreach(println)
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 19 из 25
В контракте темы «Параллельность» условия эксплуатации изменились, но синтаксис остался прежним. Что теперь важно удержать вместе?
Вопрос 20 из 25
При проверке темы «Параллельность» что поможет соседнему модулю не повторить ту же ошибку?
Вопрос 21 из 25
В теме «Читаемость решения» на ревью спорят о причине наблюдаемого результата. Какое объяснение корректно?
ScalaЧитаемость решения: чтение фрагмента
import scala.concurrent.*
import ExecutionContext.Implicits.global
def load(): Future[Int] = Future.successful(42)
def endpoint(): Future[String] = load().map(n => s"value=$n")
endpoint().foreach(println)
Вопрос 22 из 25
Для темы «Читаемость решения» два независимых вычисления случайно связали последовательной композицией. Какой дефект остаётся возможным при корректном синтаксисе?
Вопрос 23 из 25
При исправлении темы «Читаемость решения» на ревью уже воспроизвели проблему: `Await.result` внутри серверного пути блокирует поток и может вызвать истощение пула или взаимную задержку. Какую правку стоит принять?
ScalaЧитаемость решения: решение на ревью
import scala.concurrent.*
import ExecutionContext.Implicits.global
def load(): Future[Int] = Future.successful(42)
def endpoint(): Future[String] = load().map(n => s"value=$n")
endpoint().foreach(println)
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 24 из 25
В контракте темы «Читаемость решения» какое решение не превращает частный успешный случай в общее обещание?
Вопрос 25 из 25
При проверке темы «Читаемость решения» какой контроль остаётся полезным после рефакторинга и переименования кода?

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

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

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

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