Теория
1. В чем особенность Kotlin по сравнению с Java?
2. Почему разработчики Kotlin не могли сделать synchronized одним ключевым словом?
3. Только ли с Java должен работать Kotlin?
4. Сталкивался ли с контрактами?
5. Что такое inline-функции, что они делают и когда уместны?
6. Что такое reified?
7. Что такое стирание типов и почему оно существует?
8. Какие есть способы взаимодействия между сервисом и Activity?
9. Что такое EventBus?
10. Что такое ResultSet view?
11. Придумай способ, чтобы Dagger-компонент переживал смену конфигурации Activity.
Задача 1
Практика12. Задача: Какие значения будут положены в этот HashSet?
data class Dog(
val breed: String = "shepherd"
) {
var name = ""
}
val set = hashSetOf(
Dog().apply { name = "Joe" },
Dog("shark"),
Dog().apply { name = "Henry" }
)Вопросы по задаче 2
Практика13. Как на самом деле называется эта функция?
synchronized
public inline fun secretFunction(lock: Any, block: () -> R): R {
callInPlace(block, InvocationKind.EXACTLY_ONCE)
}
@Suppress("NONPUBLICCALLFROMPUBLICINLINE", "INVISIBLEMEMBER")
monitorEnter(lock)
try {
return block()
}
finally {
@Suppress("NONPUBLICCALLFROMPUBLICINLINE", "INVISIBLEMEMBER")
monitorExit(lock)
}14. Чем synchronized является в Java
15. В чем особенность Kotlin как языка?
16. Почему synchronized в Kotlin сделано именно так?
17. Зачем нужны kotlin.contracts.contract?
18. Зачем здесь @Suppress("NONPUBLICCALLFROMPUBLIC_INLINE")?
19. Когда уместно использование inline?
20. Что сделать с функцией, чтобы компилятор не ругался на ненужный inline?
21. Расскажи про ключевое слово reified
Вопросы по задаче 3
Практикаclass Activity {
fun onCreate() {
Graph.create().inject(this)
}
fun onDestroy() {
//
}
}
@Component
interface Graph {
companion object {
fun create(): Graph {
return DaggerGraph.create()
}
}
}22. Какие способы взаимодействия между сервисом и активити?
23. Что такое EventBus? Это антипаттерн? Почему?
24. Расскажи про RecyclerView
25. DiffUtil. Какие методы там есть? getChangePayload()
26. Можешь придумать способ, чтобы компонент переживал смену конфигурации?
27. Что не рекомендуется делать в методе onDraw() при создании Custom View?
28. Эффект какого из launch mode Активити описан ниже?
Если экземпляр Активити уже существует на вершине текущего Task, новый экземпляр не будет сгенерирован, а новые данные для Активити будут оправлены через onNewIntent().
29. В каком из случаев вызов onDestroy() в Активити не гарантирован?
30. Какой из перечисленных источников данных RxJava либо успешно завершает свою работу без какого-либо возвращаемого значения, либо выбрасывает исключение?
31. Для чего используется Scope @Singleton в Dagger2?
32. Какая аннотация в Dagger2 используется для инъекции переменных зависимостей, которые неизвестны на момент компиляции?