Собеседование по языку Kotlin
Опишите класс Any
Опишите класс Any
Какие методы предоставляет класс Any?
Какие методы предоставляет класс Any?
Опишите класс Unit
Опишите класс Unit
Опишите класс Nothing
Опишите класс Nothing
Чем отличаются val и var?
Чем отличаются val и var?
В чем отличие между val и const val?
В чем отличие между val и const val?
Что за метод hashCode, и зачем он нужен?
Что за метод hashCode, и зачем он нужен?
Перечислите правила для методов equals и hashCode
Перечислите правила для методов equals и hashCode
Что произойдёт, если переопределить equals, но не переопределить hashCode?
Что произойдёт, если переопределить equals, но не переопределить hashCode?
Что возвращает дефолтная реализация equals?
Что возвращает дефолтная реализация equals?
Какие модификаторы доступа существуют в Kotlin?
Какие модификаторы доступа существуют в Kotlin?
Что такое object в Kotlin?
Что такое object в Kotlin?
Можно ли использовать конструкторы при создании Singleton при помощи ключевого слова object?
Можно ли использовать конструкторы при создании Singleton при помощи ключевого слова object?
Какой делегат позволяет создать объект, используя паттерн Singleton (double-check)?
Какой делегат позволяет создать объект, используя паттерн Singleton (double-check)?
Что такое data класс в Kotlin, и какие у него особенности?
Что такое data класс в Kotlin, и какие у него особенности?
Какие есть требования к data классу?
Какие есть требования к data классу?
Можно ли наследоваться от data класса?
Можно ли наследоваться от data класса?
Может ли data class быть унаследован от какого-то другого класса?
Может ли data class быть унаследован от какого-то другого класса?
На основании каких свойств будут сгенерированы методы data class?
На основании каких свойств будут сгенерированы методы data class?
Что такое lateinit?
Что такое lateinit?
Как создать кастомный делегат для свойств класса?
Как создать кастомный делегат для свойств класса?
Какой паттерн проектирования реализуется при помощи делегирования реализации интерфейса?
Какой паттерн проектирования реализуется при помощи делегирования реализации интерфейса?
Перечислите основные отличия интерфейсов и абстрактных классов
Перечислите основные отличия интерфейсов и абстрактных классов
Что означает ключевое слово final в Kotlin?
Что означает ключевое слово final в Kotlin?
Что нужно сделать, чтобы метод какого-то класса можно было переопределить в наследниках?
Что нужно сделать, чтобы метод какого-то класса можно было переопределить в наследниках?
Что такое sealed класс?
Что такое sealed класс?
Чем sealed классы отличаются от enum?*
Чем sealed классы отличаются от enum?*
Как можно получить имя элемента enum?
Как можно получить имя элемента enum?
Можно ли унаследоваться от enum класса?*
Можно ли унаследоваться от enum класса?*
Чем отличаются nested и inner классы?
Чем отличаются nested и inner классы?
Что такое value класс?
Что такое value класс?
На какие два вида делятся все коллекции в Kotlin?
На какие два вида делятся все коллекции в Kotlin?
Чем отличаются коллекции Set и List?
Чем отличаются коллекции Set и List?
Перечислите основные реализации Set и их особенности
Перечислите основные реализации Set и их особенности
Что такое коллизии, и как они разрешаются в коллекции HashSet?
Что такое коллизии, и как они разрешаются в коллекции HashSet?
Какой интерфейс находится на вершине иерархии коллекций? Для чего он используется?
Какой интерфейс находится на вершине иерархии коллекций? Для чего он используется?
Что такое non-local return?
Что такое non-local return?
Для чего используется ключевое слово inline?
Для чего используется ключевое слово inline?
Для чего используется ключевое слово crossinline?
Для чего используется ключевое слово crossinline?
Для чего используется ключевое слово noinline?
Для чего используется ключевое слово noinline?
Как inline влияет на память/производительность?
Как inline влияет на память/производительность?
Что такое type erasure (стирание типов)?
Что такое type erasure (стирание типов)?
Как ключевое слово reified связано с type erasure?
Как ключевое слово reified связано с type erasure?
Что такое вариантность?
Что такое вариантность?
Перечислите виды вариантности
Перечислите виды вариантности
Расскажите про инвариантность
Расскажите про инвариантность
Расскажите про ковариантность
Расскажите про ковариантность
Расскажите про контрвариантность
Расскажите про контрвариантность
Какой вид вариантности используется в стандартных коллекциях Kotlin?
Какой вид вариантности используется в стандартных коллекциях Kotlin?
Чем отличаются коллекции от потоков данных (Sequence)?
Чем отличаются коллекции от потоков данных (Sequence)?
Какой терминальный оператор у Sequence применит операцию к каждому элементу потока?
Какой терминальный оператор у Sequence применит операцию к каждому элементу потока?
Чем Flow отличается от Sequence?
Чем Flow отличается от Sequence?
Что такое CoroutineContext?
Что такое CoroutineContext?
Какие виды Dispatcher вы знаете? И какие у них особенности?
Какие виды Dispatcher вы знаете? И какие у них особенности?
В чем заключается особенность потоков-демонов?
В чем заключается особенность потоков-демонов?
Назовите отличия coroutine builder-ов launch и async
Назовите отличия coroutine builder-ов launch и async
Перечислите основные правила Structured Concurrency?
Перечислите основные правила Structured Concurrency?
Почему GlobalScope не рекомендован к использованию?
Почему GlobalScope не рекомендован к использованию?
Чем отличается SupervisorJob от обычного объекта Job?
Чем отличается SupervisorJob от обычного объекта Job?
Перечислите отличия горячих и холодных Flow
Перечислите отличия горячих и холодных Flow
Перечислите отличия SharedFlow и StateFlow
Перечислите отличия SharedFlow и StateFlow
С помощью чего можно решить проблему Race Condition (состояние гонки)?
С помощью чего можно решить проблему Race Condition (состояние гонки)?
Расскажите об устройстве памяти в Kotlin
Расскажите об устройстве памяти в Kotlin
Что должно быть установлено на устройстве, чтобы можно было запускать программы, написанные на Kotlin?
Что должно быть установлено на устройстве, чтобы можно было запускать программы, написанные на Kotlin?
Что должно быть установлено на устройстве, чтобы можно было создавать программы на Kotlin?
Что должно быть установлено на устройстве, чтобы можно было создавать программы на Kotlin?
Вы приняты!
261.93K

Собеседование_Kotlin

1. Собеседование по языку Kotlin

2. Опишите класс Any

3. Опишите класс Any

• Any — это базовый класс для всех классов в Kotlin. Все классы в Kotlin
неявно наследуются от Any

4. Какие методы предоставляет класс Any?

5. Какие методы предоставляет класс Any?

• equals(other: Any?): Boolean — проверяет, равны ли два объекта.
• hashCode(): Int — возвращает хэш-код объекта.
• toString(): String — возвращает строковое представление объекта

6. Опишите класс Unit

7. Опишите класс Unit

• Тип Unit используется, как возвращаемое значение функций,
которые не возвращают данных.
• Значение Unit не обязательно указывать явно, так как
компилятор добавляет его автоматически.
• Unit является object-ом (Singleton), то есть он имеет
единственный экземпляр

8. Опишите класс Nothing

9. Опишите класс Nothing

• Nothing — является наследником абсолютно всех типов в Kotlin
• Создать экземпляр этого класса невозможно, он имеет
приватный конструктор
• Он используется в качестве возвращаемого типа функций,
которые никогда не завершаются успешно, например, в любом
случае выбрасывают исключение (пример функция TODO()) или
внутри используется бесконечный цикл, в котором нет условия
для выхода

10. Чем отличаются val и var?

11. Чем отличаются val и var?

• val (value) — неизменяемая переменная. Её значение
устанавливается один раз и не может быть изменено
• var (variable) — изменяемая переменная. Её значение можно
изменять

12. В чем отличие между val и const val?

13. В чем отличие между val и const val?

• val — это неизменяемая переменная, значение которой может быть
вычислено во время выполнения. Можно переопределить геттер.
Может быть экземпляром любого типа. Может быть создано в любом
месте программы (в конструкторах, методах, внутри классов и т.д)
• const val — это неизменяемая константа, значение которой
вычисляется во время компиляции. В байт-коде значение константы
будет подставлено в местах обращения к ней. У констант нельзя
переопределить геттер. Константа может быть экземпляром только
одного из базовых типов (Int, Float, Boolean, String…). Константы
обязаны быть статическими, то есть их можно объявить либо внутри
companion object, либо на уровне файла за пределами класса, либо
внутри класса, который объявлен, как object, то есть является
Singleton-ом

14. Что за метод hashCode, и зачем он нужен?

15. Что за метод hashCode, и зачем он нужен?

• hashCode — метод из родительского класса Any, который
возвращает числовое представление объекта. Используется
для быстрого поиска объекта в хэш-таблицах, таких как
HashMap или HashSet

16. Перечислите правила для методов equals и hashCode

17. Перечислите правила для методов equals и hashCode

• Переопределил equals – переопредели и hashCode
• Если хэш-коды объектов разные, то и объекты точно разные
• Если объекты равны по equals, то и хэш-коды у них должны
быть одинаковые
• Если хэш-коды разные, то это не значит, что объекты
одинаковые

18. Что произойдёт, если переопределить equals, но не переопределить hashCode?

19. Что произойдёт, если переопределить equals, но не переопределить hashCode?

• Это нарушит контракт equals и hashCode, что может привести к
некорректной работе хэш-таблиц (например, HashSet,
HashMap).

20. Что возвращает дефолтная реализация equals?

21. Что возвращает дефолтная реализация equals?

• Дефолтная реализация equals в классе Any сравнивает ссылки
объектов (аналогично ===).

22. Какие модификаторы доступа существуют в Kotlin?

23. Какие модификаторы доступа существуют в Kotlin?

• public — по умолчанию, доступен всем
• private — доступен только в пределах объявляющей области
(класса, объекта, файла)
• protected — доступен в пределах класса и его наследников
• internal — доступен в пределах одного модуля

24. Что такое object в Kotlin?

25. Что такое object в Kotlin?

• object — это ключевое слово в Kotlin, которое используется для
создания Singleton-объектов, экземпляров анонимных классов
и companion object-ов.

26. Можно ли использовать конструкторы при создании Singleton при помощи ключевого слова object?

27. Можно ли использовать конструкторы при создании Singleton при помощи ключевого слова object?

• Нет

28. Какой делегат позволяет создать объект, используя паттерн Singleton (double-check)?

29. Какой делегат позволяет создать объект, используя паттерн Singleton (double-check)?

• by lazy()

30. Что такое data класс в Kotlin, и какие у него особенности?

31. Что такое data класс в Kotlin, и какие у него особенности?

• data класс — это специальный тип класса в Kotlin,
предназначенный для хранения данных.
• У него «под капотом» переопределяются методы toString(),
equals() и hashCode(), а также генерируются методы copy() и
componentN()

32. Какие есть требования к data классу?

33. Какие есть требования к data классу?

• Класс должен иметь хотя бы одно свойство, объявленное в
первичном конструкторе
• Свойства в первичном конструкторе должны быть помечены как
val или var
• Data class не может быть помечен ключевым словом open

34. Можно ли наследоваться от data класса?

35. Можно ли наследоваться от data класса?

• Нет

36. Может ли data class быть унаследован от какого-то другого класса?

37. Может ли data class быть унаследован от какого-то другого класса?

• Да

38. На основании каких свойств будут сгенерированы методы data class?

39. На основании каких свойств будут сгенерированы методы data class?

• На основании свойств первичного конструктора. Остальные
свойства игнорируются

40. Что такое lateinit?

41. Что такое lateinit?

• lateinit — это модификатор для свойства, позволяющий
отложить его инициализацию до более позднего времени, но
при этом избежать использования nullable типа

42. Как создать кастомный делегат для свойств класса?

43. Как создать кастомный делегат для свойств класса?

• Если нужен делегат для свойств только для чтения, то
необходимо реализовать интерфейс ReadOnlyProperty и
реализовать метод getValue
• Если нужен делегат на чтение и запись, то необходимо
реализовать интерфейс ReadWriteProperty и реализовать
методы getValue и setValue

44. Какой паттерн проектирования реализуется при помощи делегирования реализации интерфейса?

45. Какой паттерн проектирования реализуется при помощи делегирования реализации интерфейса?

• Decorator/Wrapper (оболочка)

46. Перечислите основные отличия интерфейсов и абстрактных классов

47. Перечислите основные отличия интерфейсов и абстрактных классов

• Интерфейсы, в отличие от абстрактных классов, не могут содержать
конструктор
• Каждый класс может реализовывать сколько угодно интерфейсов, а
унаследоваться можно только от одного класса (даже если он
абстрактный)
• Обычно интерфейсы определяют поведение объекта, поэтому
классы, которые их реализуют, могут быть вообще не связаны между
собой (пример Comporable)
• Абстрактные классы обычно представляют собой родителя для
семейства классов с похожим предназначением (пример
UrlConnection)

48. Что означает ключевое слово final в Kotlin?

49. Что означает ключевое слово final в Kotlin?

• Final у классов означает, что от них нельзя наследоваться
• Final у методов и свойств означает, что их нельзя
переопределять
• В Kotlin применяется по умолчанию

50. Что нужно сделать, чтобы метод какого-то класса можно было переопределить в наследниках?

51. Что нужно сделать, чтобы метод какого-то класса можно было переопределить в наследниках?

• Если класс не абстрактный, то необходимо пометить его
ключевым словом open, также и метод, который нужно
переопределить
• Если класс абстрактный, то нужно добавить ключевое слово
abstract, если дефолтной реализации у метода нет, или open,
если дефолтная реализация есть

52. Что такое sealed класс?

53. Что такое sealed класс?

• sealed (запечатанный) класс — это класс с ограниченным
набором наследников. Все его подклассы должны быть
объявлены в том же пакете, где объявлен сам sealed класс. Это
позволяет компилятору знать все возможные варианты и
обеспечивает безопасность при использовании, например, в
конструкции when.

54. Чем sealed классы отличаются от enum?*

55. Чем sealed классы отличаются от enum?*

• Sealed классы представляют собой иерархию классов, где есть
родители и наследники. При этом экземпляров наследников
можно создавать сколько угодно
• Enum не представляет собой иерархию – это один класс, внутри
которого объявлены все возможные экземпляры этого класса,
создать другие объекты этого же типа за пределами enum
класса невозможно

56. Как можно получить имя элемента enum?

57. Как можно получить имя элемента enum?

• Для этого необходимо обратиться к свойству name. Каждый
элемент enum имеет свойство name, которое возвращает его
имя в виде строки.

58. Можно ли унаследоваться от enum класса?*

59. Можно ли унаследоваться от enum класса?*

• Нет, поскольку в этом случае появится возможность создать
другие экземпляры этого класса, а для корректной работы
программы все экземпляры должны быть объявлены внутри
enum класса

60. Чем отличаются nested и inner классы?

61. Чем отличаются nested и inner классы?

• nested — это вложенный класс, который не имеет доступа к
членам внешнего класса (используется по умолчанию)
• inner — это внутренний класс, который имеет доступ к членам
внешнего класса, включая приватные (необходимо указать
ключевое слово inner)

62. Что такое value класс?

63. Что такое value класс?

• Value класс — это специальный класс в Kotlin, который имеет
одно свойство в конструкторе. При компиляции он инлайнится,
вместо экземпляра этого класса используется его свойство,
следовательно лишние объекты не создаются, что повышает
производительность.

64. На какие два вида делятся все коллекции в Kotlin?

65. На какие два вида делятся все коллекции в Kotlin?

• Изменяемые (Mutable) и неизменяемые (Immutable)

66. Чем отличаются коллекции Set и List?

67. Чем отличаются коллекции Set и List?

• Set не позволяет хранить дубликаты в отличие от List
• Коллекции List позволяют обращаться к элементам по их
индексам, в отличие от Set

68. Перечислите основные реализации Set и их особенности

69. Перечислите основные реализации Set и их особенности

• HashSet – элементы хранятся беспорядочно, сложность всех
операций в лучшем случае O(1)
• LinkedHashSet – элементы хранятся в порядке добавления,
сложность всех операций в лучшем случае O(1)
• TreeSet – элементы хранятся в отсортированном виде ,
сложность всех операций в лучшем случае O(log(N))

70. Что такое коллизии, и как они разрешаются в коллекции HashSet?

71. Что такое коллизии, и как они разрешаются в коллекции HashSet?

• Если для двух разных объектов была получена одна и та же
ячейка в хэш-таблице, то это называется коллизией. В этом
случае в данной ячейке образуется связный список.
• Если количество элементов в этой ячейке превысит
определенный порог (на текущий момент он равен 8), то
связный список меняется на древовидную структуру для
улучшения производительности. Благодаря этому в худшем
случае сложность всех операций становится O(log(N))

72. Какой интерфейс находится на вершине иерархии коллекций? Для чего он используется?

73. Какой интерфейс находится на вершине иерархии коллекций? Для чего он используется?

• На вершине иерархии находится интерфейс Iterable. Он
используется в паттерне Iterator, для того чтобы все элементы
можно было перебирать в цикле for (forEach)

74. Что такое non-local return?

75. Что такое non-local return?

• Non-local return — это поведение, когда return в лямбде,
передаваемой в функцию, возвращает управление не только из
этой лямбды, но и из функции, которая её вызвала.
• Non-local return поддерживается только в inline функциях. В
обычных функциях лямбды не могут "выходить" из внешних
функций через return.

76. Для чего используется ключевое слово inline?

77. Для чего используется ключевое слово inline?

• Inline позволяет встроить тело функции в место ее вызова, это
дает следующие преимущества:
• 1. Избегаем создания лишних объектов
• 2. Можем использовать non-local return
• 3. Имеем возможность использовать модификатор reified

78. Для чего используется ключевое слово crossinline?

79. Для чего используется ключевое слово crossinline?

• Crossinline используется для лямбда-выражений в inline
функциях, если нужно запретить non local return. Обычно это
используется в тех случаях, когда вызов переданной функции
происходит в другом контексте (например, внутри анонимного
класса)

80. Для чего используется ключевое слово noinline?

81. Для чего используется ключевое слово noinline?

• Noinline используется для функций с модификатором inline,
чтобы отменить инлайнинг для конкретной лямбды,
передаваемой в функцию. Чаще всего это используется, если
нужно сохранить лямбду, как объект (например, передавать её
в другие функции)

82. Как inline влияет на память/производительность?

83. Как inline влияет на память/производительность?

• Инлайнинг функций с лямбда-выражениями может уменьшить
накладные расходы за счет отсутствия создания
дополнительных объектов, но также увеличивает размер
конечного байт-кода, так как тело функции встраивается
непосредственно в место ее вызова

84. Что такое type erasure (стирание типов)?

85. Что такое type erasure (стирание типов)?

• Type erasure (стирание типов) — это процесс, при котором
информация о типах, используемых в обобщённых (generic)
типах в Kotlin, теряется на этапе компиляции. В результате, в
байт-коде нет информации о типах параметров дженериков, и
доступ к ним в рантайме невозможен.

86. Как ключевое слово reified связано с type erasure?

87. Как ключевое слово reified связано с type erasure?

• Reified позволяет сохранить информацию о типе в рантайме,
несмотря на то, что обычные дженерики теряют эту
информацию из-за type erasure. Его использование возможно
только в inline функциях

88. Что такое вариантность?

89. Что такое вариантность?

• Сохранение совместимости присваивания исходных типов у
производных типов

90. Перечислите виды вариантности

91. Перечислите виды вариантности

• Инвариантность
• Ковариантность
• Контрвариантность

92. Расскажите про инвариантность

93. Расскажите про инвариантность

• Инвариантность – это отсутствие наследования или
совместимости присваивания между производными типами
• Используется по умолчанию, если к параметру не применялись
ключевые слова in/out

94. Расскажите про ковариантность

95. Расскажите про ковариантность

• Ковариантность - это сохранение совместимости присваивания
исходных типов у производных в прямом порядке.
• Используется, если к параметру было применено ключевое
слово out
• Стоит применять только в неизменяемых классах, которые
отдают элементы наружу, то есть являются производителями
(Producer)

96. Расскажите про контрвариантность

97. Расскажите про контрвариантность

• Контрвариантность - это сохранение совместимости
присваивания исходных типов у производных в обратном
порядке
• Используется, если к параметру было применено ключевое
слово in
• Стоит применять только в изменяемых классах, которые
принимают элементы, то есть являются потребителями
(Consumer)

98. Какой вид вариантности используется в стандартных коллекциях Kotlin?

99. Какой вид вариантности используется в стандартных коллекциях Kotlin?

• В изменяемых коллекциях – инвариантность
• В неизменяемых - ковариантность

100. Чем отличаются коллекции от потоков данных (Sequence)?

101. Чем отличаются коллекции от потоков данных (Sequence)?

• В потоках данных все элементы обрабатываются
последовательно промежуточными операторами, в коллекциях
сначала все элементы будут обработаны первым оператором,
затем вторым и так далее
• Поток данных прекращает работу, если элементы больше не
требуются, промежуточные операторы в коллекциях
выполняются независимо от того, нужны еще элементы или нет
• Промежуточные операторы в потоках данных не будут
выполняться, если не был вызван терминальный оператор, в
коллекциях они будут выполняться независимо от наличия
терминального оператора

102. Какой терминальный оператор у Sequence применит операцию к каждому элементу потока?

103. Какой терминальный оператор у Sequence применит операцию к каждому элементу потока?

• forEach { operation(it) }

104. Чем Flow отличается от Sequence?

105. Чем Flow отличается от Sequence?

• Flow, в отличие от Sequence, представляет собой асинхронный
поток данных и поддерживает работу с корутинами. В
промежуточных операторах Flow можно вызывать любые
suspend функции.

106. Что такое CoroutineContext?

107. Что такое CoroutineContext?

• CoroutineContext – это набор различных элементов, которые
управляют поведением и состоянием корутины. Он
представляет собой объект, который содержит несколько
компонентов, таких как:
• Dispatcher
• CoroutineName
• ExceptionHandler
• Job

108. Какие виды Dispatcher вы знаете? И какие у них особенности?

109. Какие виды Dispatcher вы знаете? И какие у них особенности?

• Main – использует пул из одного основного потока приложения,
обычно используется при работе с UI
• IO – использует CachedThreadPool, используется для операций чтения
и записи. Максимальное количество созданных потоков (без доп.
настроек) – 64
• Default – использует FixedThreadPool, количество потоков которого
равно количеству ядер процессора (но минимум 2). Применяется по
умолчанию. Используется при сложных вычислениях
• Unconfined – запускает работу в текущем потоке, а затем после
приостановки позволяет ей продолжить выполнение в том потоке,
который используется соответствующей приостановленной функцией
(на практике обычно не используется)

110. В чем заключается особенность потоков-демонов?

В чем заключается особенность потоковдемонов?

111. В чем заключается особенность потоков-демонов?

В чем заключается особенность потоковдемонов?
• Потоки-демоны не препятствуют завершению программы. Если
все основные потоки завершены, программа прекратит работу,
и все потоки-демоны будут отменены

112. Назовите отличия coroutine builder-ов launch и async

113. Назовите отличия coroutine builder-ов launch и async

• Launch возвращает объект Job, он не позволяет получить
результат из корутины
• Async возвращает объект Deferred, из которого можно получить
результат работы корутины при помощи метода await

114. Перечислите основные правила Structured Concurrency?

115. Перечислите основные правила Structured Concurrency?

• Все корутины должны быть запущены в рамках scope с
определенным жизненным циклом
• Корутины образуют иерархию объектов Job
• При отмене родительского объекта Job отменяются все
дочерние
• Родительский объект Job не завершит работу, пока не завершат
работу все дочерние

116. Почему GlobalScope не рекомендован к использованию?

117. Почему GlobalScope не рекомендован к использованию?

• Потому что он нарушает принципы Structured Concurrency, и его
невозможно отменить

118. Чем отличается SupervisorJob от обычного объекта Job?

119. Чем отличается SupervisorJob от обычного объекта Job?

• Job: Если в корутине произошла ошибка, то она поднимается
вверх по иерархии до корневого объекта Job, и этот объект Job
и все дочерние отменяются
• SupervisorJob: Отмена или ошибка в одной дочерней корутине
не влияет на другие дочерние корутины

120. Перечислите отличия горячих и холодных Flow

121. Перечислите отличия горячих и холодных Flow

• Горячие:
• Эмитят данные независимо от наличия подписчиков
• Все подписчики получают одни и те же элементы
• Никогда не завершается
• Холодные:
• Эмитят данные, только если есть подписчик
• На каждую подписку создается новый поток данных, и подписчики получают
данные из своего потока
• Завершает работу, если подписчикам больше не нужны данные
• Завершает работу, если в потоке больше нет данных

122. Перечислите отличия SharedFlow и StateFlow

123. Перечислите отличия SharedFlow и StateFlow


SharedFlow:
Может не содержать значений
Параметр replay = 0 (можно изменить)
Стратегия Suspend (можно изменить)
Дубликаты не фильтруются (решается через distinctUntilChanged)
Свойство value отсутствует
StateFlow:
Всегда содержит значение
Параметр replay = 1 (нельзя изменить)
Стратегия DROP_OLDEST (нельзя изменить)
Дубликаты (если идут подряд) фильтруются
Есть свойство value

124. С помощью чего можно решить проблему Race Condition (состояние гонки)?

125. С помощью чего можно решить проблему Race Condition (состояние гонки)?

• Если речь идет о suspend функциях, то можно использовать
класс Mutex, и метод withLock
• Если речь об обычных функциях, то можно использовать блок
синхронизации

126. Расскажите об устройстве памяти в Kotlin

127. Расскажите об устройстве памяти в Kotlin

• В Kotlin есть области памяти Stack и Heap (куча)
• В Stack хранятся примитивы и ссылки на объекты
• В Heap хранятся сами объекты
• Если до объекта в куче нельзя добраться из стэка, то есть на
него нет ссылок, то его уничтожит сборщик мусора

128. Что должно быть установлено на устройстве, чтобы можно было запускать программы, написанные на Kotlin?

129. Что должно быть установлено на устройстве, чтобы можно было запускать программы, написанные на Kotlin?

• JRE (Java Runtime Environment), который включает в себя JVM
(Java Virtual Machine) и стандартную библиотеку Java

130. Что должно быть установлено на устройстве, чтобы можно было создавать программы на Kotlin?

131. Что должно быть установлено на устройстве, чтобы можно было создавать программы на Kotlin?

• JDK (Java Development Kit), который включает в себя JRE +
компилятор Java + набор различных полезных инструментов
разработчика
• Компилятор Kotlin

132. Вы приняты!

English     Русский Правила