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

Расследование аварии JVM-приложения на Scala

Раздел «Расследование аварии JVM-приложения на Scala» соединяет небольшие фрагменты Scala с ревью и рабочими сценариями. Проверяются: Снимок потоков, Снимок кучи, Журналы GC, План восстановления, Технический долг, Эволюция архитектуры.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. В каждом задании верен только один вариант. Фрагменты относятся к Scala 3; внешняя библиотека названа прямо в коде или условии.
Вопрос 1 из 30
В теме «Снимок потоков» на ревью спорят о причине наблюдаемого результата. Какое объяснение корректно?
ScalaСнимок потоков: чтение фрагмента
val lock = new Object
val worker = new Thread(
  () => lock.synchronized(Thread.sleep(5000)),
  "worker"
)
worker.start()
Thread.sleep(20)
println(worker.getName -> worker.getState)
Вопрос 2 из 30
Для темы «Снимок потоков» процесс перезапустили, и часть доказательств исчезла до начала расследования. Какой дефект остаётся возможным при корректном синтаксисе?
ScalaСнимок потоков: изменившийся контекст
// Дополнительный контекст: После увеличения памяти авария стала происходить реже, но паузы и удержание объектов выросли.
val lock = new Object
val worker = new Thread(
  () => lock.synchronized(Thread.sleep(5000)),
  "worker"
)
worker.start()
Thread.sleep(20)
println(worker.getName -> worker.getState)
Вопрос 3 из 30
При исправлении темы «Снимок потоков» на ревью уже воспроизвели проблему: Один снимок потоков может поймать случайный переход и не отличить устойчивую взаимную блокировку от краткого ожидания. Какую правку стоит принять?
ScalaСнимок потоков: решение на ревью
val lock = new Object
val worker = new Thread(
  () => lock.synchronized(Thread.sleep(5000)),
  "worker"
)
worker.start()
Thread.sleep(20)
println(worker.getName -> worker.getState)
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 4 из 30
В контракте темы «Снимок потоков» какое решение не превращает частный успешный случай в общее обещание?
retained\ size\ne shallow\ size
Вопрос 5 из 30
При проверке темы «Снимок потоков» какой контроль остаётся полезным после рефакторинга и переименования кода?
Вопрос 6 из 30
Какая характеристика конструкции «Снимок кучи» подтверждается показанным фрагментом?
ScalaСнимок кучи: чтение фрагмента
import scala.collection.mutable.ArrayBuffer
val cache = ArrayBuffer.empty[Array[Byte]]
for _ <- 1 to 100 do
  cache += Array.ofDim[Byte](1024 * 1024)
val retained = cache.iterator.map(_.length.toLong).sum
println(cache.size -> retained)
Вопрос 7 из 30
Для темы «Снимок кучи» что здесь требует отдельного теста или компиляционного примера?
ScalaСнимок кучи: изменившийся контекст
// Дополнительный контекст: Процесс перезапустили, и часть доказательств исчезла до начала расследования.
import scala.collection.mutable.ArrayBuffer
val cache = ArrayBuffer.empty[Array[Byte]]
for _ <- 1 to 100 do
  cache += Array.ofDim[Byte](1024 * 1024)
val retained = cache.iterator.map(_.length.toLong).sum
println(cache.size -> retained)
Вопрос 8 из 30
При исправлении темы «Снимок кучи» нужно устранить причину, а не замаскировать симптом. Какое изменение подходит лучше?
ScalaСнимок кучи: решение на ревью
import scala.collection.mutable.ArrayBuffer
val cache = ArrayBuffer.empty[Array[Byte]]
for _ <- 1 to 100 do
  cache += Array.ofDim[Byte](1024 * 1024)
val retained = cache.iterator.map(_.length.toLong).sum
println(cache.size -> retained)
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 9 из 30
В контракте темы «Снимок кучи» после изменения окружения команда пересматривает контракт. Какой вариант корректен?
recovery=stabilize+evidence+rollback
Вопрос 10 из 30
При проверке темы «Снимок кучи» какая проверка связывает принятую правку с реальной границей решения?
Вопрос 11 из 30
В теме «Журналы GC» проследите типы и порядок вычисления. Какой вывод выдерживает такую проверку?
ScalaЖурналы GC: чтение фрагмента
val batches = Vector.fill(200)(Array.ofDim[Byte](256 * 1024))
val allocated = batches.iterator.map(_.length.toLong).sum
println(s"allocated=$allocated")
Вопрос 12 из 30
Какое утверждение описывает реальную опасность механизма «Журналы GC»?
ScalaЖурналы GC: изменившийся контекст
// Дополнительный контекст: После увеличения памяти авария стала происходить реже, но паузы и удержание объектов выросли.
val batches = Vector.fill(200)(Array.ofDim[Byte](256 * 1024))
val allocated = batches.iterator.map(_.length.toLong).sum
println(s"allocated=$allocated")
Вопрос 13 из 30
Как восстановить корректный контракт темы «Журналы GC»?
ScalaЖурналы GC: решение на ревью
val batches = Vector.fill(200)(Array.ofDim[Byte](256 * 1024))
val allocated = batches.iterator.map(_.length.toLong).sum
println(s"allocated=$allocated")
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 14 из 30
В контракте темы «Журналы GC» какая формулировка учитывает и семантику конструкции, и реальный риск?
Вопрос 15 из 30
При проверке темы «Журналы GC» какой итог ревью содержит и действие, и способ заметить возврат риска?
Вопрос 16 из 30
В теме «План восстановления» какое утверждение не переносит в Scala правило из другого языка или другой конструкции?
ScalaПлан восстановления: чтение фрагмента
case class RecoveryStep(action: String, successMetric: String, rollback: String)
Вопрос 17 из 30
Процесс перезапустили, и часть доказательств исчезла до начала расследования. Какое ограничение темы «План восстановления» становится существенным?
ScalaПлан восстановления: изменившийся контекст
// Дополнительный контекст: После увеличения памяти авария стала происходить реже, но паузы и удержание объектов выросли.
case class RecoveryStep(action: String, successMetric: String, rollback: String)
Вопрос 18 из 30
При исправлении темы «План восстановления» какое решение уменьшает вероятность повторения обнаруженного дефекта?
ScalaПлан восстановления: решение на ревью
case class RecoveryStep(action: String, successMetric: String, rollback: String)
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 19 из 30
В контракте темы «План восстановления» новый сценарий не отменяет основное правило, но делает заметной его границу. Какой ответ это отражает?
Вопрос 20 из 30
При проверке темы «План восстановления» что нужно оставить после исправления, кроме комментария в исходном файле?
Вопрос 21 из 30
В теме «Технический долг» что здесь обеспечивается самим механизмом, а не удачным входом?
ScalaТехнический долг: чтение фрагмента
case class FollowUp(owner: String, due: java.time.LocalDate, evidence: String)
Вопрос 22 из 30
Для темы «Технический долг» обычный пример прошёл, затем изменились условия использования. Какой риск нужно проверить первым?
ScalaТехнический долг: изменившийся контекст
// Дополнительный контекст: Сбой воспроизвёлся под нагрузкой, но единичный снимок показал только один симптом.
case class FollowUp(owner: String, due: java.time.LocalDate, evidence: String)
Вопрос 23 из 30
При исправлении темы «Технический долг» команда сравнивает несколько правок. Какая из них делает допущение явным и проверяемым?
ScalaТехнический долг: решение на ревью
case class FollowUp(owner: String, due: java.time.LocalDate, evidence: String)
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 24 из 30
В контракте темы «Технический долг» процесс перезапустили, и часть доказательств исчезла до начала расследования. Какой анализ пригоден для публичного API?
Вопрос 25 из 30
Какой критерий готовности по теме «Технический долг» действительно поймает повтор прежнего дефекта?
Вопрос 26 из 30
В теме «Эволюция архитектуры» как сформулировать семантику примера так, чтобы она сохранилась после переименования переменных?
ScalaЭволюция архитектуры: чтение фрагмента
import java.util.UUID
import java.util.concurrent.ArrayBlockingQueue
case class Command(id: UUID, payload: String)
val queue = ArrayBlockingQueue[Command](1024)
val accepted = queue.offer(Command(UUID.randomUUID(), "rebuild"))
println(accepted -> queue.remainingCapacity())
Вопрос 27 из 30
Какой случай стоит добавить, чтобы проверить границу «Эволюция архитектуры»?
ScalaЭволюция архитектуры: изменившийся контекст
// Дополнительный контекст: После увеличения памяти авария стала происходить реже, но паузы и удержание объектов выросли.
import java.util.UUID
import java.util.concurrent.ArrayBlockingQueue
case class Command(id: UUID, payload: String)
val queue = ArrayBlockingQueue[Command](1024)
val accepted = queue.offer(Command(UUID.randomUUID(), "rebuild"))
println(accepted -> queue.remainingCapacity())
Вопрос 28 из 30
При исправлении темы «Эволюция архитектуры» какой вариант не переносит проблему в вызывающий код?
ScalaЭволюция архитектуры: решение на ревью
import java.util.UUID
import java.util.concurrent.ArrayBlockingQueue
case class Command(id: UUID, payload: String)
val queue = ArrayBlockingQueue[Command](1024)
val accepted = queue.offer(Command(UUID.randomUUID(), "rebuild"))
println(accepted -> queue.remainingCapacity())
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 29 из 30
В контракте темы «Эволюция архитектуры» какой вариант не теряет существенную часть технической картины?
Вопрос 30 из 30
При проверке темы «Эволюция архитектуры» какое правило следует зафиксировать тестом или пунктом ревью?

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

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

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

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