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

Многоплатформенный Kotlin

Многоплатформенный Kotlin рассматривается через границу общего и платформенного кода, пары expect/actual и публикацию артефактов. Задания проверяют, что действительно можно вынести в commonMain и какую цену создаёт слишком широкая платформенная абстракция.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. В каждом задании верен только один вариант. После завершения будут показаны общий результат и 6 тематических шкал.
Вопрос 1 из 30
Какой рефакторинг делает поведение «Common и target-specific тесты» предсказуемее?
KotlinТестирование и инструменты · Common и target-specific тесты
// Сохраните назначение фрагмента, но укрепите его контракт.
// commonTest
class PriceCalculatorTest {
    @Test fun total_uses_rate() { /* fake Rates */ }
}
// jvmTest / iosTest: adapter contract tests
Вопрос 2 из 30
На каком входе или состоянии граница «Общая оболочка платформенного хранилища» становится заметной?
Вопрос 3 из 30
Какой соседний случай отличает устойчивое решение «Платформенное имя через expect/actual» от удачного примера?
Вопрос 4 из 30
Какое ограничение сохранится после правки «Платформенно-нейтральный расчёт»: Переносить доменные правила и state machines, а не пытаться механически поделить каждый интерфейс и системный адаптер?
Вопрос 5 из 30
Зачем общий код зависит от `Clock`, а не от конкретного системного API?
KotlinПлатформенные API · Общий контракт часов
// Проследите фактическое выполнение без изменения кода.
interface Clock { fun now(): Instant }
// JVM adapter delegates to java.time; iOS adapter to platform clock
Вопрос 6 из 30
Что точнее описывает механику фрагмента «Targets и общая зависимость»?
KotlinПубликация · Targets и общая зависимость
// На ревью требуется объяснить причину поведения.
// build.gradle.kts
kotlin {
    jvm()
    iosArm64()
    iosSimulatorArm64()
    sourceSets.commonMain.dependencies { api(libs.coroutines.core) }
}
Вопрос 7 из 30
Что может усложниться в сопровождении после изменения «Общая оболочка платформенного хранилища»: Определить thread affinity, атомарность, dispatcher и процессную конкуренцию в PlatformStore; использовать нативную транзакцию там, где она нужна?
Вопрос 8 из 30
Что станет новой точкой внимания после изменения «Платформенное имя через expect/actual»: Держать expect API маленьким и предметным, а крупные платформенные сервисы передавать интерфейсами/фабриками?
Вопрос 9 из 30
Почему такая логика хорошо подходит для `commonMain`?
KotlinОбщий код · Платформенно-нейтральный расчёт
// Проследите фактическое выполнение без изменения кода.
class PriceCalculator(private val rates: Rates) {
    fun total(items: List<Item>): Money = items.fold(Money.ZERO) { sum, item ->
        sum + rates.convert(item.price)
    }
}
Вопрос 10 из 30
Какой принцип лежит в основе поведения «Общий контракт часов»?
KotlinПлатформенные API · Общий контракт часов
// На ревью требуется объяснить причину поведения.
interface Clock { fun now(): Instant }
// JVM adapter delegates to java.time; iOS adapter to platform clock
Вопрос 11 из 30
Какую правку выбрать, чтобы сохранить назначение «Targets и общая зависимость» и убрать хрупкость?
KotlinПубликация · Targets и общая зависимость
// Сохраните назначение фрагмента, но укрепите его контракт.
// build.gradle.kts
kotlin {
    jvm()
    iosArm64()
    iosSimulatorArm64()
    sourceSets.commonMain.dependencies { api(libs.coroutines.core) }
}
Вопрос 12 из 30
Какой редкий случай способен сломать наивную трактовку «Common и target-specific тесты»?
Вопрос 13 из 30
Какой контракт задаёт пара expect/actual?
Kotlinexpect и actual · Платформенное имя через expect/actual
// Проследите фактическое выполнение без изменения кода.
// commonMain
expect fun platformName(): String
// jvmMain
actual fun platformName(): String = "JVM"
Вопрос 14 из 30
Какой контракт определяет наблюдаемый результат «Платформенно-нейтральный расчёт»?
KotlinОбщий код · Платформенно-нейтральный расчёт
// На ревью требуется объяснить причину поведения.
class PriceCalculator(private val rates: Rates) {
    fun total(items: List<Item>): Money = items.fold(Money.ZERO) { sum, item ->
        sum + rates.convert(item.price)
    }
}
Вопрос 15 из 30
Как превратить неявное предположение в проверяемый контракт «Общий контракт часов»?
KotlinПлатформенные API · Общий контракт часов
// Сохраните назначение фрагмента, но укрепите его контракт.
interface Clock { fun now(): Instant }
// JVM adapter delegates to java.time; iOS adapter to platform clock
Вопрос 16 из 30
Какой сценарий выявит скрытое ограничение «Targets и общая зависимость»?
Вопрос 17 из 30
Предложенная правка для «Common и target-specific тесты» звучит так: Создать contract test function, которую вызывает каждый target с собственной фабрикой адаптера. Какой недостаток важнее обсудить?
Вопрос 18 из 30
Что нельзя предполагать без контракта `PlatformStore`?
KotlinАрхитектура и конкурентность · Общая оболочка платформенного хранилища
// Проследите фактическое выполнение без изменения кода.
import kotlinx.coroutines.sync.*
class Store(private val platform: PlatformStore) {
    private val mutex = Mutex()
    suspend fun update(f: (State) -> State) = mutex.withLock {
        platform.write(f(platform.read()))
    }
}
Вопрос 19 из 30
Какую правку выбрать, чтобы сохранить назначение «Платформенно-нейтральный расчёт» и убрать хрупкость?
KotlinОбщий код · Платформенно-нейтральный расчёт
// Сохраните назначение фрагмента, но укрепите его контракт.
class PriceCalculator(private val rates: Rates) {
    fun total(items: List<Item>): Money = items.fold(Money.ZERO) { sum, item ->
        sum + rates.convert(item.price)
    }
}
Вопрос 20 из 30
Где поведение «Общий контракт часов» требует отдельной проверки?
Вопрос 21 из 30
В «Targets и общая зависимость» выбрали решение: Запускать проверочные проекты-потребители для JVM, Android и Apple, подписывать/версионировать артефакты и проверять POM/module metadata. Какова его реальная цена?
Вопрос 22 из 30
Как разделить тесты?
KotlinТестирование и инструменты · Common и target-specific тесты
// Проследите фактическое выполнение без изменения кода.
// commonTest
class PriceCalculatorTest {
    @Test fun total_uses_rate() { /* fake Rates */ }
}
// jvmTest / iosTest: adapter contract tests
Вопрос 23 из 30
Какое объяснение результата «Общая оболочка платформенного хранилища» выдерживает проверку соседними случаями?
KotlinАрхитектура и конкурентность · Общая оболочка платформенного хранилища
// На ревью требуется объяснить причину поведения.
import kotlinx.coroutines.sync.*
class Store(private val platform: PlatformStore) {
    private val mutex = Mutex()
    suspend fun update(f: (State) -> State) = mutex.withLock {
        platform.write(f(platform.read()))
    }
}
Вопрос 24 из 30
Какое правило нужно применить, чтобы объяснить «Платформенное имя через expect/actual»?
Kotlinexpect и actual · Платформенное имя через expect/actual
// На ревью требуется объяснить причину поведения.
// commonMain
expect fun platformName(): String
// jvmMain
actual fun platformName(): String = "JVM"
Вопрос 25 из 30
Какова практическая цена решения «Общий контракт часов»: Определить единицы, timezone, монотонность и ошибки в общем контракте, а не переносить сырые платформенные типы?
Вопрос 26 из 30
Что нужно проверить перед публикацией библиотеки?
KotlinПубликация · Targets и общая зависимость
// Проследите фактическое выполнение без изменения кода.
// build.gradle.kts
kotlin {
    jvm()
    iosArm64()
    iosSimulatorArm64()
    sourceSets.commonMain.dependencies { api(libs.coroutines.core) }
}
Вопрос 27 из 30
Какое объяснение результата «Common и target-specific тесты» выдерживает проверку соседними случаями?
KotlinТестирование и инструменты · Common и target-specific тесты
// На ревью требуется объяснить причину поведения.
// commonTest
class PriceCalculatorTest {
    @Test fun total_uses_rate() { /* fake Rates */ }
}
// jvmTest / iosTest: adapter contract tests
Вопрос 28 из 30
Какой рефакторинг делает поведение «Общая оболочка платформенного хранилища» предсказуемее?
KotlinАрхитектура и конкурентность · Общая оболочка платформенного хранилища
// Сохраните назначение фрагмента, но укрепите его контракт.
import kotlinx.coroutines.sync.*
class Store(private val platform: PlatformStore) {
    private val mutex = Mutex()
    suspend fun update(f: (State) -> State) = mutex.withLock {
        platform.write(f(platform.read()))
    }
}
Вопрос 29 из 30
Какая небольшая правка заметно повышает надёжность «Платформенное имя через expect/actual»?
Kotlinexpect и actual · Платформенное имя через expect/actual
// Сохраните назначение фрагмента, но укрепите его контракт.
// commonMain
expect fun platformName(): String
// jvmMain
actual fun platformName(): String = "JVM"
Вопрос 30 из 30
Какой сценарий выявит скрытое ограничение «Платформенно-нейтральный расчёт»?

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

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

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

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