💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. В каждом задании верен только один вариант. Фрагменты относятся к Scala 3; внешняя библиотека названа прямо в коде или условии.
Вопрос 9 из 20
В контракте темы «Map и Set» условия эксплуатации изменились, но синтаксис остался прежним. Что теперь важно удержать вместе?
Опираться на семантику «неизменяемые `Map` и `Set` возвращают новое значение после добавления или удаления; исходная коллекция остаётся доступной без изменений», но отдельно проверять ограничение «штатный пример доказывает корректность порядка событий при любой нагрузке».
Опираться на семантику «`List` оптимальна для добавления и снятия элемента с головы, а `Vector` даёт более ровный доступ и обновление по индексу», но отдельно проверять ограничение «игнорирование результата `updated` или `+` создаёт видимость изменения, хотя фактически новое значение потеряно».
Опираться на семантику «неизменяемые `Map` и `Set` возвращают новое значение после добавления или удаления; исходная коллекция остаётся доступной без изменений», но отдельно проверять ограничение «игнорирование результата `updated` или `+` создаёт видимость изменения, хотя фактически новое значение потеряно».
Опираться на семантику «`map`, `filter`, `collect` и `flatMap` создают преобразованный результат и не меняют исходную неизменяемую коллекцию», но отдельно проверять ограничение «частое добавление в конец `List` через `:+` приводит к повторным проходам и квадратичной работе на растущем наборе».
Опираться на семантику «неизменяемые `Map` и `Set` возвращают новое значение после добавления или удаления; исходная коллекция остаётся доступной без изменений», но отдельно проверять ограничение «цепочка из многих промежуточных коллекций может дать лишние выделения памяти, хотя логика остаётся корректной».
Вопрос 13 из 20
При исправлении темы «Преобразования» на ревью уже воспроизвели проблему: Цепочка из многих промежуточных коллекций может дать лишние выделения памяти, хотя логика остаётся корректной. Какую правку стоит принять?
Scala Преобразования: решение на ревью Копировать
val result = List(1,2,3,4).filter(_ % 2 == 0).map(_ * 10)
println(result.mkString("/"))
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Хранить один `Iterator` в поле и выдавать его каждому потребителю, чтобы не создавать новые обходы.
Всегда присваивайте результат преобразования или возвращайте его из функции; имя старой версии сохраняйте, если оно ещё нужно.
Использовать `lazy val` для любого дорогого вычисления, не проверяя срок жизни результата и объём удерживаемых объектов.
В горячем участке проверяйте фактический тип коллекции и сложность используемых операций, а не только удобство метода.
Сначала добивайтесь ясности, затем измеряйте; для длинной цепочки над большим набором рассмотрите `view` или `iterator`.
Вопрос 14 из 20
В контракте темы «Преобразования» какое решение не превращает частный успешный случай в общее обещание?
Опираться на семантику «неизменяемые `Map` и `Set` возвращают новое значение после добавления или удаления; исходная коллекция остаётся доступной без изменений», но отдельно проверять ограничение «цепочка из многих промежуточных коллекций может дать лишние выделения памяти, хотя логика остаётся корректной».
Опираться на семантику «`map`, `filter`, `collect` и `flatMap` создают преобразованный результат и не меняют исходную неизменяемую коллекцию», но отдельно проверять ограничение «успешная обработка одного значения подтверждает совместимость всех вариантов модели».
Опираться на семантику «`map`, `filter`, `collect` и `flatMap` создают преобразованный результат и не меняют исходную неизменяемую коллекцию», но отдельно проверять ограничение «цепочка из многих промежуточных коллекций может дать лишние выделения памяти, хотя логика остаётся корректной».
Опираться на семантику «`List` оптимальна для добавления и снятия элемента с головы, а `Vector` даёт более ровный доступ и обновление по индексу», но отдельно проверять ограничение «частое добавление в конец `List` через `:+` приводит к повторным проходам и квадратичной работе на растущем наборе».
Опираться на семантику «`map`, `filter`, `collect` и `flatMap` создают преобразованный результат и не меняют исходную неизменяемую коллекцию», но отдельно проверять ограничение «игнорирование результата `updated` или `+` создаёт видимость изменения, хотя фактически новое значение потеряно».