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

Архитектура распределённого Scala-сервиса

В тесте «Архитектура распределённого Scala-сервиса» недостаточно узнать термин: потребуется проследить типы и выполнение, найти риск соседнего случая и выбрать проверяемую правку. Шкалы: Границы сервиса, Согласованность, Повтор операций, Наблюдаемость, Контроль ресурсов, Масштабирование решения.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. В каждом задании верен только один вариант. Фрагменты относятся к Scala 3; внешняя библиотека названа прямо в коде или условии.
Вопрос 1 из 30
В теме «Границы сервиса» какая из перечисленных гарантий принадлежит именно показанному механизму?
ScalaГраницы сервиса: чтение фрагмента
import cats.effect.IO
case class PlaceOrder(customerId: String, items: Vector[String])
opaque type OrderId = String
trait OrdersApi:
  def place(cmd: PlaceOrder): IO[OrderId]
Вопрос 2 из 30
Для темы «Границы сервиса» обычный пример прошёл, затем изменились условия использования. Какой риск нужно проверить первым?
ScalaГраницы сервиса: изменившийся контекст
// Дополнительный контекст: Клиент повторил команду после тайм-аута, не зная, завершилась ли первая попытка.
import cats.effect.IO
case class PlaceOrder(customerId: String, items: Vector[String])
opaque type OrderId = String
trait OrdersApi:
  def place(cmd: PlaceOrder): IO[OrderId]
Вопрос 3 из 30
При исправлении темы «Границы сервиса» команда сравнивает несколько правок. Какая из них делает допущение явным и проверяемым?
ScalaГраницы сервиса: решение на ревью
import cats.effect.IO
case class PlaceOrder(customerId: String, items: Vector[String])
opaque type OrderId = String
trait OrdersApi:
  def place(cmd: PlaceOrder): IO[OrderId]
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 4 из 30
В контракте темы «Границы сервиса» клиент повторил команду после тайм-аута, не зная, завершилась ли первая попытка. Какой анализ пригоден для публичного API?
retry\Rightarrow idempotency
Вопрос 5 из 30
Какой критерий готовности по теме «Границы сервиса» действительно поймает повтор прежнего дефекта?
Вопрос 6 из 30
В теме «Согласованность» как сформулировать семантику примера так, чтобы она сохранилась после переименования переменных?
ScalaСогласованность: чтение фрагмента
case class Version(value: Long)
case class Account(id: String, balance: BigDecimal, version: Version)
def update(current: Account, expected: Version, next: BigDecimal): Option[Account] =
  Option.when(current.version == expected)(current.copy(balance = next, version = Version(expected.value + 1)))
Вопрос 7 из 30
Какой новый сценарий требует пересмотреть допущение о «Согласованность»?
ScalaСогласованность: изменившийся контекст
// Дополнительный контекст: Горячий ключ остался у одного владельца, хотя число экземпляров сервиса увеличили.
case class Version(value: Long)
case class Account(id: String, balance: BigDecimal, version: Version)
def update(current: Account, expected: Version, next: BigDecimal): Option[Account] =
  Option.when(current.version == expected)(current.copy(balance = next, version = Version(expected.value + 1)))
Вопрос 8 из 30
При исправлении темы «Согласованность» какой вариант не переносит проблему в вызывающий код?
ScalaСогласованность: решение на ревью
case class Version(value: Long)
case class Account(id: String, balance: BigDecimal, version: Version)
def update(current: Account, expected: Version, next: BigDecimal): Option[Account] =
  Option.when(current.version == expected)(current.copy(balance = next, version = Version(expected.value + 1)))
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 9 из 30
В контракте темы «Согласованность» какой вариант не теряет существенную часть технической картины?
capacity\ge arrival\ rate
Вопрос 10 из 30
При проверке темы «Согласованность» что команда должна проверять при каждом похожем изменении?
Вопрос 11 из 30
Во фрагменте проверяется тема «Повтор операций». Какое правило точнее всего объясняет поведение кода?
ScalaПовтор операций: чтение фрагмента
case class Charge(idempotencyKey: String, account: String, amount: BigDecimal)
Вопрос 12 из 30
Для темы «Повтор операций» что остаётся обязанностью вызывающего кода или окружения?
ScalaПовтор операций: изменившийся контекст
// Дополнительный контекст: Клиент повторил команду после тайм-аута, не зная, завершилась ли первая попытка.
case class Charge(idempotencyKey: String, account: String, amount: BigDecimal)
Вопрос 13 из 30
При исправлении темы «Повтор операций» что следует изменить, чтобы следующий рефакторинг не вернул тот же риск?
ScalaПовтор операций: решение на ревью
case class Charge(idempotencyKey: String, account: String, amount: BigDecimal)
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 14 из 30
В контракте темы «Повтор операций» что следует оставить в проектном решении после этого изменения контекста?
Вопрос 15 из 30
При проверке темы «Повтор операций» какой итог можно проверить автоматически или воспроизводимым примером?
Вопрос 16 из 30
В теме «Наблюдаемость» что в этом примере определяется семантикой Scala, а не соглашением автора?
ScalaНаблюдаемость: чтение фрагмента
case class LogContext(orderId: String, traceId: String, attempt: Int)
def fields(c: LogContext): Map[String, String] = Map(
  "order_id" -> c.orderId,
  "trace_id" -> c.traceId,
  "attempt" -> c.attempt.toString
)
println(fields(LogContext("o-7", "t-2", 1)))
Вопрос 17 из 30
Для темы «Наблюдаемость» после переноса кода в общий модуль проявилось скрытое допущение. Какое?
ScalaНаблюдаемость: изменившийся контекст
// Дополнительный контекст: Горячий ключ остался у одного владельца, хотя число экземпляров сервиса увеличили.
case class LogContext(orderId: String, traceId: String, attempt: Int)
def fields(c: LogContext): Map[String, String] = Map(
  "order_id" -> c.orderId,
  "trace_id" -> c.traceId,
  "attempt" -> c.attempt.toString
)
println(fields(LogContext("o-7", "t-2", 1)))
Вопрос 18 из 30
Что следует изменить перед объединением кода по теме «Наблюдаемость»?
ScalaНаблюдаемость: решение на ревью
case class LogContext(orderId: String, traceId: String, attempt: Int)
def fields(c: LogContext): Map[String, String] = Map(
  "order_id" -> c.orderId,
  "trace_id" -> c.traceId,
  "attempt" -> c.attempt.toString
)
println(fields(LogContext("o-7", "t-2", 1)))
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 19 из 30
В контракте темы «Наблюдаемость» клиент повторил команду после тайм-аута, не зная, завершилась ли первая попытка. Какой вывод одновременно сохраняет правило и учитывает его границу?
Вопрос 20 из 30
При проверке темы «Наблюдаемость» как сформулировать защиту от регрессии без расплывчатого «работает как раньше»?
Вопрос 21 из 30
Какой вывод о теме «Контроль ресурсов» можно сделать без дополнительных допущений?
ScalaКонтроль ресурсов: чтение фрагмента
import cats.effect.IO
import cats.effect.std.Queue
import scala.concurrent.duration.*
case class Command(id: String)
def call(cmd: Command): IO[String] = IO.pure(cmd.id)
val program = Queue.bounded[IO, Command](1024).flatMap { queue =>
  queue.offer(Command("c-1")) *> call(Command("c-1")).timeout(2.seconds)
}
Вопрос 22 из 30
Для темы «Контроль ресурсов» какое последствие нельзя исключить одним успешным запуском?
ScalaКонтроль ресурсов: изменившийся контекст
// Дополнительный контекст: Горячий ключ остался у одного владельца, хотя число экземпляров сервиса увеличили.
import cats.effect.IO
import cats.effect.std.Queue
import scala.concurrent.duration.*
case class Command(id: String)
def call(cmd: Command): IO[String] = IO.pure(cmd.id)
val program = Queue.bounded[IO, Command](1024).flatMap { queue =>
  queue.offer(Command("c-1")) *> call(Command("c-1")).timeout(2.seconds)
}
Вопрос 23 из 30
При исправлении темы «Контроль ресурсов» какая правка сохраняет полезную семантику и не расширяет обещания API?
ScalaКонтроль ресурсов: решение на ревью
import cats.effect.IO
import cats.effect.std.Queue
import scala.concurrent.duration.*
case class Command(id: String)
def call(cmd: Command): IO[String] = IO.pure(cmd.id)
val program = Queue.bounded[IO, Command](1024).flatMap { queue =>
  queue.offer(Command("c-1")) *> call(Command("c-1")).timeout(2.seconds)
}
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 24 из 30
В контракте темы «Контроль ресурсов» локальный пример стал частью более крупной системы. Какая трактовка контракта остаётся полной?
Вопрос 25 из 30
При проверке темы «Контроль ресурсов» какой пункт следует добавить в критерии приёмки изменения?
Вопрос 26 из 30
В теме «Масштабирование решения» код компилируется и запускается. Какое утверждение о его контракте остаётся верным?
ScalaМасштабирование решения: чтение фрагмента
def shard(orderId: String, n: Int) = (orderId.hashCode & Int.MaxValue) % n
Вопрос 27 из 30
Для темы «Масштабирование решения» какой пограничный случай относится к контракту, а не только к стилю записи?
ScalaМасштабирование решения: изменившийся контекст
// Дополнительный контекст: Чтение сразу после записи попало на отстающую реплику.
def shard(orderId: String, n: Int) = (orderId.hashCode & Int.MaxValue) % n
Вопрос 28 из 30
При исправлении темы «Масштабирование решения» что здесь лучше исправить до объединения изменений?
ScalaМасштабирование решения: решение на ревью
def shard(orderId: String, n: Int) = (orderId.hashCode & Int.MaxValue) % n
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 29 из 30
В контракте темы «Масштабирование решения» условия эксплуатации изменились, но синтаксис остался прежним. Что теперь важно удержать вместе?
Вопрос 30 из 30
При проверке темы «Масштабирование решения» что поможет соседнему модулю не повторить ту же ошибку?

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

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

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

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