Kotlin – последний язык программирования для JVM от JetBrains. Google сделал его официальным языком для разработки под Android наряду с Java. Разработчики утверждают, что он решает проблемы, с которыми сталкиваются при программировании на Java. Я написал много учебников по Kotlin, и вот я предоставляю важные вопросы для собеседования по Kotlin.
Вопросы для собеседования по Kotlin
Здесь я предоставляю вопросы и ответы для собеседования по Kotlin, которые помогут вам на собеседованиях по Kotlin. Эти вопросы подходят как для начинающих, так и для опытных программистов. Также есть задачи по кодированию для отработки ваших навыков программирования.
-
Какова целевая платформа Kotlin? Как достигается взаимодействие Kotlin с Java?
Целевая платформа Kotlin – это Java Virtual Machine (JVM). Kotlin на 100% совместим с Java, так как оба языка при компиляции производят байткод. Поэтому код на Kotlin можно вызывать из Java, и наоборот.
-
Как объявлять переменные в Kotlin? В чем разница в объявлении по сравнению с Java?
Есть два основных отличия между объявлением переменных в Java и Kotlin:
-
Тип объявления В Java объявление выглядит следующим образом:
String s = "Java String"; int x = 10;
В Kotlin объявление выглядит так:
val s: String = "Hi" var x = 5
В Kotlin объявление начинается с
val
иvar
, за которыми следует необязательный тип. Kotlin может автоматически определить тип с использованием вывода типов. -
Значение по умолчанию В Java можно сделать следующее:
String s:
Следующее объявление переменной в Kotlin недопустимо.
val s: String
-
-
В чем разница между объявлением val и var? Как преобразовать String в Int?
val
переменные нельзя изменять. Они подобны ключевому слову final в Java.var
может быть переназначен. Новое значение должно быть того же типа данных.fun main(args: Array<String>) { val s: String = "Привет" var x = 5 x = "6".toInt() }
Мы используем метод
toInt()
, чтобы преобразовать String в Int. -
Что такое безопасность Null и типы Nullable в Kotlin? Что такое оператор Элвиса?
Котлин уделяет большое внимание безопасности Null, которая представляет собой подход к предотвращению нежелательных исключений Null Pointer, используя типы Nullable, такие как
String?
,Int?
,Float?
и т. д. Они выступают в качестве оболочечного типа и могут содержать пустые значения. Пустое значение нельзя добавить к другому пустому или базовому типу значения. Для извлечения базовых типов мы должны использовать безопасные вызовы, которые разворачивают Nullable Типы. Если при разворачивании значение пустое, мы можем выбрать игнорировать или использовать значение по умолчанию. Оператор Элвиса используется для безопасного разворачивания значения из Nullable. Он представлен как?:
над типом Nullable. Значение справа будет использоваться, если тип Nullable содержит null.var str: String? = "JournalDev.com" var newStr = str?: "Default Value" str = null newStr = str?: "Default Value"
-
Что такое
const
? В чем отличие отval
?По умолчанию свойства
val
устанавливаются во время выполнения. Добавление модификатора const кval
сделает его константой времени компиляции.const
нельзя использовать сvar
или самостоятельно.const
не применим к локальной переменной. -
Позволяет ли Kotlin использовать примитивные типы, такие как int, float, double?
На уровне языка мы не можем использовать вышеупомянутые типы. Однако скомпилированный байткод JVM их определенно имеет.
-
Какая точка входа в каждую программу на Kotlin?
Функция
main
является точкой входа в каждую программу на Kotlin. В Kotlin мы можем выбрать не писать функцию main внутри класса. При компиляции JVM неявно инкапсулирует ее в классе. Строки, переданные в формеArray<String>
, используются для извлечения аргументов командной строки. -
Как
!!
отличается от ?. при извлечении значений, допускающих значение null? Существует ли еще какой-то способ безопасного извлечения значений, допускающих значение null?!!
используется для принудительного извлечения значения из типа, допускающего значение null. Если возвращаемое значение является null, это приведет к сбою во время выполнения. Поэтому оператор!!
следует использовать только в том случае, если вы абсолютно уверены, что значение не будет равно null. В противном случае вы получите temida нулевой указатель. С другой стороны, оператор ?. – это оператор Эльвиса, который выполняет безопасный вызов. Мы можем использовать лямбда-выражениеlet
для безопасного извлечения значения, допускающего значение null, как показано ниже.Здесь выражение let выполняет безопасный вызов для извлечения значения, допускающего значение null.
-
Как объявляется функция? Почему функции Kotlin известны как функции верхнего уровня?
fun sumOf(a: Int, b: Int): Int{ return a + b }
Тип возвращаемого значения функции определяется после символа
:
. Функции в Kotlin могут быть объявлены в корне файла Kotlin. -
В чем разница между операторами == и === в Kotlin?
\== is used to compare the values are equal or not. === is used to check if the references are equal or not.
- public
- internal
- protected
- private
`public` is the default visibility modifier.
```
class A{
}
class B : A(){
}
```
**NO**. By default classes are final in Kotlin. To make them non-final, you need to add the `open` modifier.
```
open class A{
}
class B : A(){
}
```
Constructors in Kotlin are of two types: **Primary** - These are defined in the class headers. They cannot hold any logic. There's only one primary constructor per class. **Secondary** - They're defined in the class body. They must delegate to the primary constructor if it exists. They can hold logic. There can be more than one secondary constructors.
```
class User(name: String, isAdmin: Boolean){
constructor(name: String, isAdmin: Boolean, age: Int) :this(name, isAdmin)
{
this.age = age
}
}
```
`init` is the initialiser block in Kotlin. It's executed once the primary constructor is instantiated. If you invoke a secondary constructor, then it works after the primary one as it is composed in the chain.
String interpolation is used to evaluate string templates. We use the symbol $ to add variables inside a string.
```
val name = "Journaldev.com"
val desc = "$name now has Kotlin Interview Questions too. ${name.length}"
```
Using `{}` we can compute an expression too.
By default, the constructor arguments are `val` unless explicitly set to `var`.
**NO**. Unlike Java, in Kotlin, new isn't a keyword. We can instantiate a class in the following way:
```
class A
var a = A()
val new = A()
```
when is the equivalent of `switch` in `Kotlin`. The default statement in a when is represented using the else statement.
```
var num = 10
when (num) {
0..4 -> print("value is 0")
5 -> print("value is 5")
else -> {
print("value is in neither of the above.")
}
}
```
`when` statments have a default break statement in them.
In Java, to create a class that stores data, you need to set the variables, the getters and the setters, override the `toString()`, `hash()` and `copy()` functions. In Kotlin you just need to add the `data` keyword on the class and all of the above would automatically be created under the hood.
```
data class Book(var name: String, var authorName: String)
fun main(args: Array<String>) {
val book = Book("Kotlin Tutorials","Anupam")
}
```
Thus, data classes saves us with lot of code. It creates component functions such as `component1()`.. `componentN()` for each of the variables. [](https://journaldev.nyc3.cdn.digitaloceanspaces.com/2018/04/kotlin-interview-questions-data-classes.png)
Destructuring Declarations is a smart way to assign multiple values to variables from data stored in objects/arrays. [](https://journaldev.nyc3.cdn.digitaloceanspaces.com/2018/04/kotlin-interview-questions-destructuring-declarations.png) Within paratheses, we've set the variable declarations. Under the hood, destructuring declarations create component functions for each of the class variables.
[Inline functions](/community/tutorials/kotlin-inline-function-reified) are used to save us memory overhead by preventing object allocations for the anonymous functions/lambda expressions called. Instead, it provides that functions body to the function that calls it at runtime. This increases the bytecode size slightly but saves us a lot of memory. [](https://journaldev.nyc3.cdn.digitaloceanspaces.com/2018/04/kotlin-interview-questions-inline-functions.png) [infix functions](/community/tutorials/kotlin-functions) on the other are used to call functions without parentheses or brackets. Doing so, the code looks much more like a natural language. [](https://journaldev.nyc3.cdn.digitaloceanspaces.com/2018/04/kotlin-interview-questions-infix-notations.png)
Both are used to delay the property initializations in Kotlin `lateinit` is a modifier used with var and is used to set the value to the var at a later point. `lazy` is a method or rather say lambda expression. It's set on a val only. The val would be created at runtime when it's required.
```
val x: Int by lazy { 10 }
lateinit var y: String
```
To use the singleton pattern for our class we must use the keyword `object`
```
object MySingletonClass
```
An `object` cannot have a constructor set. We can use the init block inside it though.
**NO**. Kotlin doesn't have the static keyword. To create static method in our class we use the `companion object`. Following is the Java code:
```
class A {
public static int returnMe() { return 5; }
}
```
The equivalent Kotlin code would look like this:
```
class A {
companion object {
fun a() : Int = 5
}
}
```
To invoke this we simply do: `A.a()`.
```
val arr = arrayOf(1, 2, 3);
```
The type is Array<Int>.
На этом все вопросы и ответы для собеседования по Kotlin.
Source:
https://www.digitalocean.com/community/tutorials/kotlin-interview-questions