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

Производительность на JVM

В тесте «Производительность на JVM» недостаточно узнать термин: потребуется проследить типы и выполнение, найти риск соседнего случая и выбрать проверяемую правку. Шкалы: Аллокации, Упаковка примитивов, Динамическая компиляция JIT, Профилирование, Совместимость и переносимость, Стратегия тестирования.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. В каждом задании верен только один вариант. Фрагменты относятся к Scala 3; внешняя библиотека названа прямо в коде или условии.
Вопрос 1 из 30
Во фрагменте проверяется тема «Аллокации». Какое правило точнее всего объясняет поведение кода?
ScalaАллокации: чтение фрагмента
val total = data.iterator.filter(_ > 0).map(_ * 2).sum
Вопрос 2 из 30
Для темы «Аллокации» какой случай уже не покрывается показанной гарантией?
ScalaАллокации: изменившийся контекст
// Дополнительный контекст: Нагрузка стала многопоточной, и прежний микротест перестал отражать работу приложения.
val total = data.iterator.filter(_ > 0).map(_ * 2).sum
Вопрос 3 из 30
При исправлении темы «Аллокации» что следует изменить, чтобы следующий рефакторинг не вернул тот же риск?
ScalaАллокации: решение на ревью
val total = data.iterator.filter(_ > 0).map(_ * 2).sum
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 4 из 30
В контракте темы «Аллокации» что следует оставить в проектном решении после этого изменения контекста?
allocation\ rate=bytes/second
Вопрос 5 из 30
При проверке темы «Аллокации» какой итог можно проверить автоматически или воспроизводимым примером?
Вопрос 6 из 30
В теме «Упаковка примитивов» что в этом примере определяется семантикой Scala, а не соглашением автора?
ScalaУпаковка примитивов: чтение фрагмента
val xs: Array[Int] = Array(1,2,3)
val any: Any = xs(0)
println(any.getClass)
Вопрос 7 из 30
Для темы «Упаковка примитивов» после переноса кода в общий модуль проявилось скрытое допущение. Какое?
ScalaУпаковка примитивов: изменившийся контекст
// Дополнительный контекст: Нагрузка стала многопоточной, и прежний микротест перестал отражать работу приложения.
val xs: Array[Int] = Array(1,2,3)
val any: Any = xs(0)
println(any.getClass)
Вопрос 8 из 30
Какой вариант доработки темы «Упаковка примитивов» сохраняет точный контракт?
ScalaУпаковка примитивов: решение на ревью
val xs: Array[Int] = Array(1,2,3)
val any: Any = xs(0)
println(any.getClass)
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 9 из 30
В контракте темы «Упаковка примитивов» профиль выделений памяти изменился после безобидного на вид рефакторинга коллекций. Какой вывод одновременно сохраняет правило и учитывает его границу?
p99\gg p50
Вопрос 10 из 30
При проверке темы «Упаковка примитивов» как сформулировать защиту от регрессии без расплывчатого «работает как раньше»?
Вопрос 11 из 30
Какой вывод о теме «Динамическая компиляция JIT» можно сделать без дополнительных допущений?
ScalaДинамическая компиляция JIT: чтение фрагмента
@volatile var sink = 0
def hot(n: Int): Int =
  var acc = 0
  var i = 0
  while i < n do
    acc += i
    i += 1
  acc
for _ <- 1 to 100000 do sink = hot(100)
println(sink)
Вопрос 12 из 30
Для темы «Динамическая компиляция JIT» какое последствие нельзя исключить одним успешным запуском?
ScalaДинамическая компиляция JIT: изменившийся контекст
// Дополнительный контекст: Профиль выделений памяти изменился после безобидного на вид рефакторинга коллекций.
@volatile var sink = 0
def hot(n: Int): Int =
  var acc = 0
  var i = 0
  while i < n do
    acc += i
    i += 1
  acc
for _ <- 1 to 100000 do sink = hot(100)
println(sink)
Вопрос 13 из 30
При исправлении темы «Динамическая компиляция JIT» какая правка сохраняет полезную семантику и не расширяет обещания API?
ScalaДинамическая компиляция JIT: решение на ревью
@volatile var sink = 0
def hot(n: Int): Int =
  var acc = 0
  var i = 0
  while i < n do
    acc += i
    i += 1
  acc
for _ <- 1 to 100000 do sink = hot(100)
println(sink)
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 14 из 30
В контракте темы «Динамическая компиляция JIT» локальный пример стал частью более крупной системы. Какая трактовка контракта остаётся полной?
Вопрос 15 из 30
При проверке темы «Динамическая компиляция JIT» какой пункт следует добавить в критерии приёмки изменения?
Вопрос 16 из 30
В теме «Профилирование» код компилируется и запускается. Какое утверждение о его контракте остаётся верным?
ScalaПрофилирование: чтение фрагмента
def normalize(xs: Vector[String]): Int =
  xs.iterator.map(_.trim).filter(_.nonEmpty).map(_.length).sum
val sample = Vector.fill(10000)("  scala  ")
val result = normalize(sample)
println(result)
Вопрос 17 из 30
Для темы «Профилирование» какой пограничный случай относится к контракту, а не только к стилю записи?
ScalaПрофилирование: изменившийся контекст
// Дополнительный контекст: Нагрузка стала многопоточной, и прежний микротест перестал отражать работу приложения.
def normalize(xs: Vector[String]): Int =
  xs.iterator.map(_.trim).filter(_.nonEmpty).map(_.length).sum
val sample = Vector.fill(10000)("  scala  ")
val result = normalize(sample)
println(result)
Вопрос 18 из 30
При исправлении темы «Профилирование» что здесь лучше исправить до объединения изменений?
ScalaПрофилирование: решение на ревью
def normalize(xs: Vector[String]): Int =
  xs.iterator.map(_.trim).filter(_.nonEmpty).map(_.length).sum
val sample = Vector.fill(10000)("  scala  ")
val result = normalize(sample)
println(result)
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 19 из 30
В контракте темы «Профилирование» условия эксплуатации изменились, но синтаксис остался прежним. Что теперь важно удержать вместе?
Вопрос 20 из 30
При проверке темы «Профилирование» что поможет соседнему модулю не повторить ту же ошибку?
Вопрос 21 из 30
В теме «Совместимость и переносимость» на ревью спорят о причине наблюдаемого результата. Какое объяснение корректно?
ScalaСовместимость и переносимость: чтение фрагмента
val runtime = Runtime.version()
println(runtime.feature())
Вопрос 22 из 30
Для темы «Совместимость и переносимость» нагрузка стала многопоточной, и прежний микротест перестал отражать работу приложения. Какой дефект остаётся возможным при корректном синтаксисе?
ScalaСовместимость и переносимость: изменившийся контекст
// Дополнительный контекст: Нагрузка стала многопоточной, и прежний микротест перестал отражать работу приложения.
val runtime = Runtime.version()
println(runtime.feature())
Вопрос 23 из 30
При исправлении темы «Совместимость и переносимость» на ревью уже воспроизвели проблему: Тюнинг под один collector может ухудшить поведение на другом или перестать работать после обновления JDK. Какую правку стоит принять?
ScalaСовместимость и переносимость: решение на ревью
val runtime = Runtime.version()
println(runtime.feature())
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 24 из 30
В контракте темы «Совместимость и переносимость» какое решение не превращает частный успешный случай в общее обещание?
Вопрос 25 из 30
При проверке темы «Совместимость и переносимость» какой контроль остаётся полезным после рефакторинга и переименования кода?
Вопрос 26 из 30
Какая характеристика конструкции «Стратегия тестирования» подтверждается показанным фрагментом?
ScalaСтратегия тестирования: чтение фрагмента
case class Sample(p50Millis: Double, p99Millis: Double, bytesPerRequest: Long)
val before = Sample(8.0, 42.0, 18_000)
val after  = Sample(7.5, 67.0, 31_000)
val regression = after.p99Millis > before.p99Millis || after.bytesPerRequest > before.bytesPerRequest
println(regression)
Вопрос 27 из 30
Для темы «Стратегия тестирования» что здесь требует отдельного теста или компиляционного примера?
ScalaСтратегия тестирования: изменившийся контекст
// Дополнительный контекст: Нагрузка стала многопоточной, и прежний микротест перестал отражать работу приложения.
case class Sample(p50Millis: Double, p99Millis: Double, bytesPerRequest: Long)
val before = Sample(8.0, 42.0, 18_000)
val after  = Sample(7.5, 67.0, 31_000)
val regression = after.p99Millis > before.p99Millis || after.bytesPerRequest > before.bytesPerRequest
println(regression)
Вопрос 28 из 30
При исправлении темы «Стратегия тестирования» нужно устранить причину, а не замаскировать симптом. Какое изменение подходит лучше?
ScalaСтратегия тестирования: решение на ревью
case class Sample(p50Millis: Double, p99Millis: Double, bytesPerRequest: Long)
val before = Sample(8.0, 42.0, 18_000)
val after  = Sample(7.5, 67.0, 31_000)
val regression = after.p99Millis > before.p99Millis || after.bytesPerRequest > before.bytesPerRequest
println(regression)
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 29 из 30
В контракте темы «Стратегия тестирования» после изменения окружения команда пересматривает контракт. Какой вариант корректен?
Вопрос 30 из 30
При проверке темы «Стратегия тестирования» какая проверка связывает принятую правку с реальной границей решения?

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

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

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

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