💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. В каждом задании верен только один вариант. Фрагменты относятся к Scala 3; внешняя библиотека названа прямо в коде или условии.
Вопрос 4 из 25
В контракте темы «Интерфейсы Java» что следует оставить в проектном решении после этого изменения контекста?
\text{Scala type}\to\text{JVM erased signature}
В проектном решении сохранить утверждение «sAM-преобразование позволяет передать лямбду там, где Java ожидает интерфейс с одним абстрактным методом» и риск «перегруженные Java-методы могут сделать тип лямбды неоднозначным, особенно с примитивными и упакованными вариантами».
В проектном решении сохранить утверждение «Scala вызывает Java API напрямую, но должна учитывать nullable-значения, перегрузки и Java-коллекции без гарантий Scala-типов» и риск «платформенный null может попасть в тип, который выглядит ненулевым, и вызвать исключение позже».
В проектном решении сохранить утверждение «Scala вызывает Java API напрямую, но должна учитывать nullable-значения, перегрузки и Java-коллекции без гарантий Scala-типов» и риск «прохождение happy path исключает ошибки сериализации на старых и неполных данных».
В проектном решении сохранить утверждение «Scala вызывает Java API напрямую, но должна учитывать nullable-значения, перегрузки и Java-коллекции без гарантий Scala-типов» и риск «ошибка границы может неожиданно пройти через слои, где тип результата обещает обычное значение».
В проектном решении сохранить утверждение «Java проверяемые исключения не отражаются в сигнатуре Scala, поэтому компилятор не заставляет их перехватывать» и риск «платформенный null может попасть в тип, который выглядит ненулевым, и вызвать исключение позже».
Вопрос 5 из 25
При проверке темы «Интерфейсы Java» какой итог можно проверить автоматически или воспроизводимым примером?
Scala вызывает Java API напрямую, но должна учитывать nullable-значения, перегрузки и Java-коллекции без гарантий Scala-типов. Считать отсутствие исключения достаточным подтверждением контракта.
Копируйте в неизменяемую коллекцию на границе, если нужен снимок и независимость от владельца Java-объекта. В проверке воспроизвести ситуацию: платформенный null может попасть в тип, который выглядит ненулевым, и вызвать исключение позже.
Проверяйте Java-результат на границе и сразу преобразуйте его в `Option`, `Either` или проверенный доменный тип. В проверке воспроизвести ситуацию: платформенный null может попасть в тип, который выглядит ненулевым, и вызвать исключение позже.
Проверяйте Java-результат на границе и сразу преобразуйте его в `Option`, `Either` или проверенный доменный тип. В проверке воспроизвести ситуацию: ошибка границы может неожиданно пройти через слои, где тип результата обещает обычное значение.
В теме «Интерфейсы Java» исправить один показанный вызов по рекомендации «Для публичной межъязыковой границы проверяйте `javap`, пишите маленький Java-тест и избегайте сложных Scala-типов в API». Общий контракт и прежнюю границу отдельно не воспроизводить.
Вопрос 9 из 25
В контракте темы «Функциональные интерфейсы SAM» Java-библиотека вернула коллекцию, которую другой поток продолжает менять. Какой вывод одновременно сохраняет правило и учитывает его границу?
SAM-преобразование позволяет передать лямбду там, где Java ожидает интерфейс с одним абстрактным методом. При этом учитывать: перегруженные Java-методы могут сделать тип лямбды неоднозначным, особенно с примитивными и упакованными вариантами.
SAM-преобразование позволяет передать лямбду там, где Java ожидает интерфейс с одним абстрактным методом. При этом учитывать: ошибка границы может неожиданно пройти через слои, где тип результата обещает обычное значение.
SAM-преобразование позволяет передать лямбду там, где Java ожидает интерфейс с одним абстрактным методом. При этом учитывать: если локальный вызов успешен, распределённые повторы и частичные отказы не меняют вывод.
Scala вызывает Java API напрямую, но должна учитывать nullable-значения, перегрузки и Java-коллекции без гарантий Scala-типов. При этом учитывать: платформенный null может попасть в тип, который выглядит ненулевым, и вызвать исключение позже.
Java проверяемые исключения не отражаются в сигнатуре Scala, поэтому компилятор не заставляет их перехватывать. При этом учитывать: перегруженные Java-методы могут сделать тип лямбды неоднозначным, особенно с примитивными и упакованными вариантами.
Вопрос 19 из 25
В контракте темы «Исключения границы» условия эксплуатации изменились, но синтаксис остался прежним. Что теперь важно удержать вместе?
Опираться на семантику «sAM-преобразование позволяет передать лямбду там, где Java ожидает интерфейс с одним абстрактным методом», но отдельно проверять ограничение «ошибка границы может неожиданно пройти через слои, где тип результата обещает обычное значение».
Опираться на семантику «Scala вызывает Java API напрямую, но должна учитывать nullable-значения, перегрузки и Java-коллекции без гарантий Scala-типов», но отдельно проверять ограничение «перегруженные Java-методы могут сделать тип лямбды неоднозначным, особенно с примитивными и упакованными вариантами».
Опираться на семантику «Java проверяемые исключения не отражаются в сигнатуре Scala, поэтому компилятор не заставляет их перехватывать», но отдельно проверять ограничение «ошибка границы может неожиданно пройти через слои, где тип результата обещает обычное значение».
Опираться на семантику «Java проверяемые исключения не отражаются в сигнатуре Scala, поэтому компилятор не заставляет их перехватывать», но отдельно проверять ограничение «успешная сборка гарантирует бинарную и исходную совместимость опубликованного API».
Опираться на семантику «Java проверяемые исключения не отражаются в сигнатуре Scala, поэтому компилятор не заставляет их перехватывать», но отдельно проверять ограничение «платформенный null может попасть в тип, который выглядит ненулевым, и вызвать исключение позже».
Вопрос 21 из 25
В теме «Проверка допущений» на ревью спорят о причине наблюдаемого результата. Какое объяснение корректно?
Scala Проверка допущений: чтение фрагмента Копировать
class Api:
def names(): List[String] = List("a", "b")
// На границе проверяем сгенерированную JVM-сигнатуру.
Проверка допущений JVM включает стирание типов, boxing, порядок инициализации и особенности аннотаций, видимых Java-коду.
Scala вызывает Java API напрямую, но должна учитывать nullable-значения, перегрузки и Java-коллекции без гарантий Scala-типов.
Стирание типов сохраняет параметры обобщений в JVM-сигнатуре, поэтому reflection всегда видит точный `List[String]`.
Любое значение, пришедшее из Java как `String`, гарантированно не равно `null`, потому что Scala запрещает null для ссылочных типов.
Java проверяемые исключения не отражаются в сигнатуре Scala, поэтому компилятор не заставляет их перехватывать.
Вопрос 24 из 25
В контракте темы «Проверка допущений» какое решение не превращает частный успешный случай в общее обещание?
Проверка допущений JVM включает стирание типов, boxing, порядок инициализации и особенности аннотаций, видимых Java-коду. Отдельная граница — код может компилироваться в Scala, но иметь неудобную или несовместимую Java-сигнатуру.
Scala вызывает Java API напрямую, но должна учитывать nullable-значения, перегрузки и Java-коллекции без гарантий Scala-типов. Отдельная граница — код может компилироваться в Scala, но иметь неудобную или несовместимую Java-сигнатуру.
Java проверяемые исключения не отражаются в сигнатуре Scala, поэтому компилятор не заставляет их перехватывать. Отдельная граница — платформенный null может попасть в тип, который выглядит ненулевым, и вызвать исключение позже.
Проверка допущений JVM включает стирание типов, boxing, порядок инициализации и особенности аннотаций, видимых Java-коду. Отдельная граница — одного успешного запуска достаточно, чтобы подтвердить контракт на всех входах.
Проверка допущений JVM включает стирание типов, boxing, порядок инициализации и особенности аннотаций, видимых Java-коду. Отдельная граница — ошибка границы может неожиданно пройти через слои, где тип результата обещает обычное значение.
Вопрос 25 из 25
При проверке темы «Проверка допущений» какой контроль остаётся полезным после рефакторинга и переименования кода?
Для публичной межъязыковой границы проверяйте `javap`, пишите маленький Java-тест и избегайте сложных Scala-типов в API. В проверке воспроизвести ситуацию: ошибка границы может неожиданно пройти через слои, где тип результата обещает обычное значение.
Проверяйте Java-результат на границе и сразу преобразуйте его в `Option`, `Either` или проверенный доменный тип. В проверке воспроизвести ситуацию: код может компилироваться в Scala, но иметь неудобную или несовместимую Java-сигнатуру.
В теме «Проверка допущений» исправить один показанный вызов по рекомендации «Копируйте в неизменяемую коллекцию на границе, если нужен снимок и независимость от владельца Java-объекта». Общий контракт и прежнюю границу отдельно не воспроизводить.
Проверка допущений JVM включает стирание типов, boxing, порядок инициализации и особенности аннотаций, видимых Java-коду. После правки ограничиться исходным примером без пограничного входа.
Для публичной межъязыковой границы проверяйте `javap`, пишите маленький Java-тест и избегайте сложных Scala-типов в API. В проверке воспроизвести ситуацию: код может компилироваться в Scala, но иметь неудобную или несовместимую Java-сигнатуру.