50 часто задаваемых вопросов и ответов на собеседовании по Kotlin
Kotlin стал горячей темой для разработчиков с того дня, как Google объявил о его официальной поддержке наряду с Java. Его можно использовать для разработки современных приложений для Android и iOS, не отвлекаясь на такие проблемы, как экосистема и переносимость. Итак, если вы разработчик Java и хотите заняться разработкой iOS, Kotlin также может быть идеальным решением. Из-за растущей популярности Kotlin предприятия обращают внимание на экспертов. Если вы хотите устроиться на работу разработчиком мобильных приложений в известных компаниях, вам необходимо освоить несколько важных вопросов на собеседовании по Kotlin. Мы подготовили это продуманное руководство, которое поможет вам начать работу с Kotlin и расширить свои возможности трудоустройства.
Основные вопросы для собеседования по Kotlin в 2020 году
Нет сомнений в том, что технологические компании будут продолжать нанимать разработчиков Kotlin. Поскольку вы можете разрабатывать приложения как для Android, так и для iOS с использованием Kotlin, это расширит возможности разработки и значительно снизит затраты. Наши редакторы очень старались составить этот список. Надеемся, что эти вопросы для собеседования по Kotlin помогут вам легко получить следующую должность разработчика мобильных приложений.
1. Что такое Котлин?
Kotlin — это надежный язык программирования, разработанный для работы поверх JVM (виртуальной машины Java). Он разработан Jetbrains, популярной ИТ-компанией, известной созданием высококачественных инструментов разработки. Kotlin статически типизирован и предлагает исключительную поддержку функционального программирования.
Кроме того, Kotlin решает некоторые очевидные проблемы, с которыми сталкиваются многие Java-программисты, такие как ошибки с нулевым значением. Его можно использовать для разработки приложений для Android и iOS вместе с программным обеспечением общего назначения. Благодаря исключительной совместимости с Java разработчики могут писать новые функции для своих приложений на основе Java непосредственно в Kotlin.
2. Kotlin лучше Java?
Часто работодатели задают такие вопросы, чтобы измерить глубину соискателей. Поскольку сравнение двух языков никогда не принесет плодотворных результатов, вместо этого вам следует обсудить их индивидуальные плюсы и минусы, чтобы продемонстрировать свой опыт. Java по-прежнему остается лучшим языком для создания потребительских приложений корпоративного уровня благодаря огромному списку функций и постоянной поддержке сообщества.
Однако, несмотря на то, что Kotlin является новым языком, он прекрасно взаимодействует с Java. Он позволяет разработчикам создавать инновационные приложения без написания сотен строк кода. Строгий вывод типов в Kotlin делает его надежным выбором для разработки приложений следующего поколения. Более того, поскольку его также можно использовать для разработки приложений для iOS, разработчикам больше не нужно использовать новые стеки.
3. Зачем использовать Kotlin при разработке мобильных приложений?
Поскольку Kotlin упрощает многие синтаксические элементы Java, легче писать краткий, хорошо документированный код. Кроме того, поскольку он работает непосредственно на JVM, предприятиям вряд ли нужно инвестировать в новые технологические стеки. Таким образом, соотношение затрат и выгод превосходно.
Более того, Kotlin уже начал заменять многие приложения для Android на основе Java, а также приложения для iOS, написанные на Swift. Со временем это число будет только увеличиваться, и адаптация к Kotlin станет необходимостью для современных предприятий. Итак, чтобы оставаться впереди конкурентов, разработчикам следует использовать Kotlin уже сегодня.
4. Каковы лучшие возможности Kotlin?
Некоторые из лучших функций Kotlin:
- Он поддерживает как объектно-ориентированную, так и функциональную парадигму программирования.
- Он предоставляет простые в использовании лямбда-функции, недоступные в Java.
- Поддержание Kotlin обходится значительно дешевле и обеспечивает отличную отказоустойчивость.
- Позволяет разрабатывать приложения Node.js и JVM.
- Отличная поддержка асинхронной связи.
- Исключительная совместимость с существующими кодами Java.
5. Что такое Null Safety в Котлине?
Kotlin имеет встроенную защиту от нежелательных нулевых ссылок, что делает его более отказоустойчивым. Таким образом, это позволяет программам уменьшать количество NullPointerExceptions во время выполнения и предотвращает нежелательные сбои программы. Это обычная проблема, с которой сталкивается большинство существующих программ Java, и она приводит к потерям, оценивающимся в миллионы долларов. Среди разработчиков Kotlin это часто называют Null Safety.
6. Разница между методами объявления переменных Kotlin
Соискателям работы часто задают этот вопрос в вопросах на собеседованиях по Kotlin. Kotlin позволяет объявлять переменные двумя разными способами. Для этой цели он предоставляет ключевые слова val и var. Однако, как вы увидите, они совершенно разные по своей работе.
var number: Int = 10
number = 15
В первой строке объявляется целочисленная переменная с именем Number и присваивается ее значению 10. Затем во второй строке эти 10 заменяются новым значением 15. Вам нужно будет объявить переменные таким образом, если вы захотите изменить их позже в программе.
val number: Int = 10
number = 15
Однако приведенный выше блок кода недействителен и приведет к ошибкам компиляции. Kotlin не позволяет пользователям изменять значения переменных, созданных с помощью ключевого слова val. Вы должны использовать его для объявления значений, которые остаются неизменными во всем вашем коде.
7. В чем проблема с приведенным ниже кодом?
val name = "UBUNTU"
val upperCase = name.toUpperCase()
name.inc()
Приведенный выше фрагмент кода не удастся скомпилировать из-за исключения типа. Kotlin статически типизирован и реализует строгий вывод типов. Поскольку значением переменной name является строка, Котлин предполагает, что имя также является типом String. Таким образом, вторая строка вполне допустима, поскольку метод toUpperCase() является строковым методом. Однако последняя строка пытается выполнить операцию увеличения. Эта строка приводит к тому, что Kotlin выдает ошибку компиляции, поскольку inc() может работать только со значениями Int, а не со строками.
8. Что такое Nullability в Котлине?
Многие языки программирования, такие как C и Java, допускают объявление переменных без установки начальных значений. Эти переменные обычно содержат значение типа null. Если вы вызовете методы для таких переменных позже в вашей программе, она выйдет из строя во время выполнения. Kotlin не позволяет программистам объявлять переменные таким образом и значительно снижает количество сбоев, связанных с нулевыми значениями.
val name: String = null
Таким образом, приведенная выше строка не будет компилироваться в Котлине. Вам нужно будет определить переменные как допускающие значение NULL, если вы хотите, чтобы они содержали значения NULL.
val name: String? = null
На этот раз имя может содержать либо строку, либо ноль.
9. Позволяет ли Kotlin вызывать функции Java?
Да, Kotlin позволяет программисту вызывать существующие процедуры Java из программы Kotlin. Такие функции, как дуэт геттеров и сеттеров, представлены как свойства. Котлин присваивает Unit каждому значению void, полученному из функции Java. Таким образом, Unit в Kotlin просто пуст в Java-коде.
Однако вам придется экранировать некоторые ключевые слова Kotlin в Java. Поскольку такие ключевые слова, как is, in и object, являются допустимыми идентификаторами в Java, вам необходимо экранировать их в библиотеках Java с помощью символа обратной кавычки (`). Кроме того, Kotlin реализует такие функции, как типы платформ и аннотации, чтобы обеспечить нулевую безопасность при вызове внешних функций Java.
10. Описать совместимость Kotlin с JavaScript
Во время многих вопросов на собеседованиях по Kotlin респондентов спрашивают о степени гибкости, которую Kotlin обеспечивает для приложений JavaScript. Kotlin позволяет разработчикам Android и iOS легко ориентироваться на JavaScript. Это означает, что вы можете легко перекомпилировать программу, написанную на Kotlin, в собственный код JavaScript. Это позволяет разработчикам легко создавать программное обеспечение для популярной платформы Node.JS.
Kotlin позволяет разработчикам контролировать все элементы программирования JS, такие как управление DOM, использование графики, управление серверной частью и т. д. Кроме того, вы можете использовать Kotlin с существующими библиотеками JS, такими как jQuery и React. Посетите это руководство для получения подробной информации о переносе Kotlin в JavaScript.
11. Почему в Котлине нет явных троичных условий?
Котлин не предлагает какого-либо конкретного тернарного оператора вида c=(a < b) ? a : b; как Java или C. Этот параметр опущен, поскольку вы можете сделать то же самое с выражением if в Kotlin. Поскольку приведенный выше тернарный оператор по сути является выражением формы (condition ? then : else), Kotlin просто позволяет вам сделать это, используя стандартное ключевое слово if.
val c = if (a < b) a else b
Эта строка кода делает в Kotlin то же самое, что и тернарный оператор в Java. Вы также можете упаковывать блоки внутри ветвей if-else.
12. Какова функция оператора Элвиса?
Оператор Elvis в Kotlin позволяет разработчикам приложений обрабатывать исключения с нулевым значением. Это привлекательная особенность Kotlin, которая позволяет программистам значительно сократить количество сбоев во время выполнения. Хотя вы по-прежнему можете обрабатывать нули самостоятельно, оператор Элвиса делает это относительно простым.
val z = x ?: return y
В этой строке z будет содержать значение x только в том случае, если оно не равно нулю. В противном случае все выражение прекратит выполнение и вернет y. Это работает, поскольку оператор return также является выражением. Итак, операторы Элвиса выглядят как a ?: b в Котлине.
13. Объясните, как работает When в Котлине
Во время многих вопросов на собеседовании по Kotlin соискатели сталкиваются с вопросами об условных утверждениях. Помимо традиционного if-else, в Kotlin есть еще одна условная конструкция, называемая When. Вы можете думать об этом как о замене конструкции переключателя, доступной в C и других популярных языках программирования. Однако в Котлине When — это выражение; в то время как переключатель является оператором в C.
val number = true
val final = when(number) {
true -> println("It is indeed true!")
false -> println("Oops! false")
}
Мы продемонстрировали простой пример с использованием логических выражений. Вы найдете это удобным при работе с исключительно большими условными ветвями.
14. Что такое умное кастинг в Котлине?
Интеллектуальное приведение — это простой, но полезный механизм, который позволяет программистам уменьшить большинство ошибок с нулевым значением. Компилятор Kotlin делает это путем определения переменных. Мы были свидетелями этого в предыдущем вопросе. Ниже мы иллюстрируем простой пример умного кастинга в Котлине.
fun test(a: Any) {
if (a is String) {
print(a.length) // a is cast to String by the compiler automatically
}
}
15. Что такое совместные подпрограммы в Котлине?
Kotlin стремится повысить производительность приложений за счет использования асинхронного выполнения. В отличие от традиционных потоков выполнения, асинхронные выполнения не блокируются при вводе-выводе. Это делает Kotlin идеальным для создания крупномасштабных ИТ-инфраструктур. Взгляните на приведенный ниже пример, чтобы более четко понять сопрограммы.
import kotlinx.coroutines.*
fun main() {
GlobalScope.launch { // creates a new coroutine and continues
delay(2000L) // non-blocking delay for 2000 milliseconds or 2 sec.
println("Hello")
}
println("World!") // execution continues even while coroutine waits
Thread.sleep(4000L) // block main thread for 4 seconds
}
Эта программа будет отображать строку «Мир!» перед отображением «Привет». Программа сначала создает новую сопрограмму в GlobalScope и ждет 2 секунды. Тем временем основной поток продолжит работу и напечатает “World!”. Затем она будет ждать 4 секунды, а через две секунды сопрограмма напечатает “Hello”.
16. Перечислите некоторые функции Kotlin, которых нет в Java
Иногда вопросы интервью Kotlin составлены таким образом, чтобы помочь компаниям понять потенциал будущих сотрудников. Ниже мы перечисляем некоторые функции Kotlin, которые просто недоступны на языке программирования Java.
- Null Safety — флагманская функция Kotlin
- Co-Routines - обеспечивает асинхронное программирование.
- Перегрузка операторов - ключевая функция, отсутствующая в Java
- Smart Casts - позволяет делать выводы.
- Объект-компаньон - еще одна полезная функция.
17. Какие методы расширения Kotlin предоставляет для java.io.File?
Java использует класс java.io.File для предоставления абстрактных представлений путей к файлам или каталогам. Kotlin предлагает следующие методы расширения этого файла:
- bufferedReader() - позволяет прочитать содержимое файла и поместить его в буфер.
- readBytes() - может использоваться для чтения содержимого файла в ByteArray.
- readText() - позволяет читать содержимое файла и помещает его в строку.
- forEachLine() - читает файл построчно.
- readLines() - построчно читает файл и помещает его в список.
18. Как перенести код Java на Kotlin?
Мы можем легко перенести существующие коды Java на Kotlin с помощью IntelliJ IDEA от JetBrains. В разделе ниже показано, как это сделать последовательно.
- Обновите файл сборки для поддержки компиляции Kotlin.
- Откройте необходимый файл .java с помощью IDEA.
- Скопируйте все необходимые фрагменты кода
- Создайте файл Kotlin, заканчивающийся на .kt.
- Вставьте фрагменты кода в этот файл Kotlin.
- Введите «Да», когда IDEA спросит, следует ли преобразовать код Java в Kotlin.
Посетите это официальное руководство, чтобы узнать больше об этой проблеме.
19. Почему в Котлине нет макросов?
Макросы полезны в ряде сценариев программирования. Однако они имеют тенденцию создавать беспорядок в вашем проекте и часто сбивают с толку новых разработчиков. Вот почему JetBrains, разработчики Kotlin, вообще исключили эту функцию. Более того, разработчикам часто сложно тестировать или оптимизировать кодовые базы, содержащие большое количество макросов. Таким образом, отказ от макросов — это дизайнерское решение. Однако разработчики Kotlin работают над такими функциями, как сериализация и плагины компилятора, чтобы устранить некоторые недостатки этого решения.
20. Объясните различные конструкторы в Kotlin
Котлин предлагает два разных конструктора для инициализации атрибутов класса. В этом отношении он отличается от Java, поскольку последний предоставляет только один конструктор. Эти два конструктора известны в Котлине как первичные конструкторы и вторичные конструкторы. Во многих вопросах на собеседованиях по Kotlin соискателей просят указать на различия между этими двумя понятиями.
- Первичный конструктор - находится в заголовке объявления класса.
- Вторичный конструктор - объявлен внутри тела класса Kotlin и может иметь несколько экземпляров.
21. Возможно ли выполнить код Kotlin без JVM?
Как мы уже много раз упоминали, Kotlin компилируется в байт-код и запускается поверх виртуальной машины Java (JVM). Однако также возможно скомпилировать Kotlin в собственный машинный код и, таким образом, успешно выполнить его, вообще не требуя какой-либо JVM.
Для этого разработчики могут легко использовать инструмент Kotlin/Native. Это эффективный бэкэнд LLVM, который позволяет нам создавать автономные исполняемые файлы. Он также предоставляет некоторые дополнительные функции. Для получения дополнительной информации обратитесь к их официальной документации.
22. Как диапазоны работают в Котлине?
Диапазоны позволяют нашим программам беспрепятственно перебирать список или прогрессию. Это один из многих итераторов, доступных в Kotlin, который повышает читаемость вашей программы. Приведенные ниже фрагменты кода демонстрируют некоторые основные функции диапазонов Kotlin.
for (i in 1..5) {
print(i) // prints 12345 as output
}
val x = 6
for (i in 1..10){
if( i!=x ) continue
print(i) // prints only 6
}
23. Объясните структурные выражения Kotlin
В Котлине есть три разных структурных выражения — а именно return, Break и continue. Мы обсуждаем каждый из них с короткими заметками.
- return - это выражение останавливает выполнение программы и возвращает из включающей функции
- разрыв - используется для завершения ближайшего охватывающего цикла в Котлине
- продолжить - позволяет перейти к следующей итерации без выполнения текущей операции.
Второй фрагмент предыдущего примера печатает значение 6, поскольку мы использовали продолжить. Если бы вместо этого мы использовали break, он бы ничего не напечатал.
24. Как сравнить две строки в Котлине?
Обработка строк составляет важную часть разработки любого приложения. Интервьюируемых часто спрашивают, как с этим справиться во время интервью по Kotlin. Для этого вы можете использовать оператор равенства «==», как показано в следующем примере.
val a: String = "This is the first string"
val b: String = "This is the second" + "string"
if (a == b) println("The Strings are Similar")
else println("They don't match!")
Кроме того, вы можете использовать функцию compareTo() для сравнения строк в Kotlin.
25. Описать циклы For в Котлине
Циклы — это важнейшая конструкция программирования, которая позволяет нам выполнять итерации по мере необходимости нашей программы. В Kotlin есть все часто используемые циклы, такие как for, while и do- while. В следующем разделе мы опишем цикл for в двух словах.
val sports = listOf("cricket", "football", "basketball")
for (sport in sports) { // for loop
println("Let's play $sport!")
}
Приведенный выше фрагмент иллюстрирует использование цикла for в Котлине. Он очень похож на Python и Ruby.
26. Описать циклы While и Do-While
Циклы while и do- while работают очень похоже, но имеют определенные различия. Цикл do- while выполняется хотя бы один раз, даже если первое условное выражение возвращается как ложное. В отличие от этого, циклы while прекратят выполнение, если цикл не будет истинным в данный момент времени.
var i = 1
while (i < 5) { // while loop
println(i)
i++
}
Этот код напечатает числа от 1 до 4, а затем завершится. Теперь взгляните на приведенный ниже фрагмент кода.
var i = 6
do{ // do-while
println(i)
i++
}while(i<5)
Хотя условие while является ложным, в качестве вывода будет выведено число 6. Это происходит потому, что выполнение блока do происходит без предварительной проверки условия.
27. Что такое классы данных Kotlin?
Котлин предлагает удобный способ хранения значений с помощью класса данных. Класс данных имеет множество полезных встроенных методов, например, для копирования, строковых представлений, коллекций экземпляров и т. д. Классы данных определяются с помощью модификатора данных. Некоторые автоматически создаваемые методы, доступные для вновь созданного класса данных: toString, equals, copy, hashCode, и функции comComponentN. Первый метод возвращает строковое представление, проверяет равенство свойств, а копирование позволяет клонировать.
28. Что такое запечатанные классы Kotlin?
Запечатанные классы — еще одна чрезвычайно полезная особенность этого современного языка программирования. Их можно использовать для ограничения иерархии наследования класса. Все, что вам нужно сделать, это определить класс как запечатанный, и никто не сможет создавать подклассы, принадлежащие этому запечатанному классу.
Эти классы пригодятся, когда вы будете использовать их внутри выражений when. Если вы можете идеально охватить все возможные случаи, вам не придется использовать предложение else. Однако помните, что запечатанные классы сами по себе абстрактны, и вы не можете создать их экземпляры напрямую.
29. Как создавать изменчивые переменные?
Изменчивые переменные — это привлекательная функция, которая позволяет программистам более эффективно управлять потоками и временем процессора. Объявить переменную как изменчивую довольно просто и немного отличается от Java.
@Volatile var name:String = "something"
На самом деле, в Kotlin, в отличие от Java, «летучий» не является ключевым словом. Скорее, это аннотация, которая делает каждую запись данных немедленно видимой для всех других потоков.
30. Какова цель ключевого слова объекта?
Kotlin предоставляет дополнительное ключевое слово под названием object наряду со своими стандартными объектно-ориентированными функциями. В отличие от традиционной объектно-ориентированной парадигмы, где вы определяете класс и создаете столько его экземпляров, сколько вам необходимо, ключевое слово object позволяет вам создать один ленивый экземпляр. Компилятор создаст этот объект, когда вы получите к нему доступ в своей программе Kotlin. Следующая программа представляет собой простую иллюстрацию.
fun calcRent(normalRent: Int, holidayRent: Int): Unit {
val rates = object{
var normal: Int = 30 * normalRent
var holiday: Int = 30 * holidayRent
}
val total = rates.normal + rates.holiday
print("Total Rent: $$total")
}
fun main() {
calcRent(10, 2)
}
31. Объясните модификаторы классов в Kotlin
Во время большинства вопросов на собеседованиях по Kotlin работодатели любят проверять соискателей на понимание классов и других конструкций объектно-ориентированного программирования. Модификаторы классов позволяют разработчикам настраивать объявления классов по мере необходимости. Мы демонстрируем четыре модификатора, которые Kotlin предоставляет программистам для этой цели.
- частный — объявление класса видно только внутри файла, который его содержит.
- public — эти объявления классов видны повсюду, в Котлине это значение по умолчанию.
- protected — делает класс недоступным для объявлений Kotlin верхнего уровня.
- внутренний — делает объявление доступным для всех одинаковых модулей.
32. Объясните основные типы данных Kotlin
Типы данных Kotlin определяют процедуры, доступные для некоторых данных. Компилятор выделяет пространство памяти для переменных, используя их тип данных. Как и во многих популярных языках программирования, в Kotlin есть некоторые часто используемые типы данных. В приведенном ниже разделе представлен краткий обзор различных типов данных Kotlin.
- целые числа - в отличие от Python, Kotlin имеет ограниченный размер целых чисел; доступные целочисленные типы: Long, Int, Short и Byte.
- float - значения с плавающей запятой содержат дробные значения; их можно объявить с помощью Float или Double
- символы - представлены модификатором Char; обычно содержит один символ Юникода
- строки - они создаются с использованием типа String и неизменяемы, как в Java.
- логические значения - представляет логические значения true и false
- массивы — массивы в Котлине представлены с помощью класса Array.
33. Как работает строковая интерполяция в Котлине?
Интерполяции строк работают с несколькими заполнителями и сначала оценивают их значение, чтобы отобразить окончательный вывод строки. Этот конечный результат будет содержать соответствующие значения заполнителей. Приведенный ниже фрагмент кода иллюстрирует простой пример интерполяции строк Kotlin.
fun main(args: Array<String>) { // String Interpolation
print("Please enter your name here:")
val name:String? = readLine()
print("Hello, $name!")
}
Здесь компилятор Kotlin сначала получает вводимые пользователем данные и интерполирует это значение вместо заполнителя $name. Последняя строка фрагмента транслируется компилятором, как показано ниже:
new StringBuilder().append("Hello, ").append(name).append("!").toString()
34. Как преобразовать строки в целые числа?
Разработчики приложений часто конвертируют строку в int по разным причинам. Kotlin позволяет сделать это несколькими способами. Ниже мы демонстрируем простую программу на Kotlin для этой цели.
fun main(args: Array<String>) {
for (string in args) {
try {
val parsedValue = string.toInt()
println("The parsed integer value is $parsedInt")
} catch (nfe: NumberFormatException) {
// not a valid int
}
}
}
Вы также можете сделать это без использования явных блоков try-catch. Для этого вам нужно будет использовать метод toIntOrNull().
35. В чем разница между const и val?
Ранее мы показали, как создавать переменные, содержащие только фиксированные данные, с помощью ключевого слова val. Однако Kotlin предлагает ключевое слово const для создания констант, таких как язык программирования C. Ключевое различие между val и const — это фаза их выполнения. Котлин по умолчанию устанавливает свойства val во время выполнения. С другой стороны, const устанавливается компилятором во время компиляции программы.
const val str = "Fixed string!" // global variable
fun main(args: Array<String>) {
const val x = 4
const val str = "New string.." // local variable
}
Кроме того, вы не можете использовать const внутри локальной области, поэтому приведенный выше блок кода не сможет скомпилироваться. Этот модификатор также неприменим к var.
36. Какова отправная точка для программ на Kotlin?
Kotlin, как и многие популярные языки программирования, опирается на определенную точку входа. В этом заключается функция main(), аналогичная другим языкам ООП, таким как C++ и Java. Разработчики могут легко определить аргументы командной строки, используемые программами Kotlin. Для этого вам нужно передать args: Array
Для этого требуется несколько иной синтаксис, чем в традиционных программах Java. Ниже мы иллюстрируем различия между функцией main() в Java и Kotlin. Вы можете легко сравнить их для лучшего понимания.
public static void main(String[] args) // Entry to Java Programs
fun main(args: Array<String>) // Entry to Kotlin Programs
37. Напишите программу на Kotlin для отображения ряда Фибоначчи
Большинство вопросов на собеседовании по Kotlin направлены на выяснение знаний кандидатов по практическим задачам. Ряд Фибоначчи — это распространенный вопрос, с которым соискатели работы сталкиваются на многих собеседованиях по Kotlin. Это математическая последовательность чисел, где каждое число представляет собой сумму двух предыдущих чисел.
fun main(args: Array<String>) {
val range = 10
var firstNumber = 0
var secondNumber = 1
print("First $range numbers of Fibonacci series: ")
for (i in 1..range) {
print("$firstNumber + ")
val sum = firstNumber + secondNumber
firstNumber = secondNumber
secondNumber = sum
}
}
Для вычисления этой серии мы использовали цикл for. Однако вы можете решить эту проблему, используя несколько стратегий.
38. Напишите программу для определения, является ли число простым или нет
Простые числа играют важную роль в современных вычислениях, особенно в теории чисел. Разработчики программного обеспечения обычно используют их для реализации механизмов безопасного шифрования для своих приложений. Мы иллюстрируем простую программу на Kotlin, которая определяет, является ли конкретное число простым или нет.
fun main( args: Array<String> ) {
print("Enter the number:")
var num = readLine()!!.toIntOrNull()
var flag = false
if( num != null ){
for (i in 2..num / 2) {
if (num % i == 0) {
flag = true
break
}
}
}
if (flag)
println("$num is not a prime number.")
else
println("$num is a prime number.")
}
39. Напишите программу для нахождения суммы натуральных чисел
Натуральные числа — это положительные значения, начиная с 1. Сумму этих чисел можно легко вычислить с помощью конструкций цикла Котлина. Ниже мы демонстрируем простую программу, которая принимает вводимые пользователем данные и вычисляет сумму всех натуральных чисел до этого момента.
fun main( args: Array<String> ) {
print("Enter the number:")
var num = readLine()!!.toIntOrNull()
var sum = 0 // inital value of summation
if( num != null ){
for (i in 1..num) {
sum += i
}
println("Sum = $sum")
}
}
40. Объясните различия между? и !! с точки зрения нулевой безопасности
Kotlin предоставляет два разных механизма для развертывания содержимого типа, допускающего значение NULL. Оператор Элвиса «?» обеспечивает безопасный вызов и не приводит к сбою вашей программы, если содержимое имеет нулевой тип. Однако, с другой стороны, !! используется для принудительного развертывания содержимого переменной, допускающей значение NULL. Это выполняется во время выполнения и, следовательно, может привести к потенциальному сбою системы, если возвращаемое значение равно нулю. Итак, вам следует использовать только !! модификатор, если вы уверены в значении своих переменных.
41. Найдите факториал чисел с помощью рекурсии
Факториал числа определяется как произведение всех чисел, начиная с 1 и до этого числа. Мы можем легко написать программу на Kotlin для выполнения этой работы, используя либо циклы, либо рекурсию. Последний представляет собой стратегию программирования «разделяй и властвуй», которая делит процедуру на множество похожих, но небольших подпрограмм.
fun main(args: Array<String>) {
print("Enter the number:")
val number = readLine()?.toInt()
if(number != null ){
val factorial = multiplyNums(number)
println("Factorial of $number = $factorial")
}
}
fun multiplyNums(number: Int): Long {
if (number >= 1)
return number * multiplyNums(number - 1) // recursive call to multiplyNums
else
return 1
}
42. Что такое мультиплатформенность Kotlin?
Разработчики Kotlin продолжают внедрять новые интересные функции для разработчиков. Мультиплатформенная функция — одна из таких экспериментальных функций, которая позволяет программистам совместно использовать код между несколькими платформами, такими как JavaScript, iOS и настольные приложения.
Это становится все более популярным среди современных разработчиков, поскольку позволяет значительно сократить объем кода. Благодаря этой функции вы можете использовать большую часть одной и той же кодовой базы для написания приложений для разных платформ. Просто создайте общий модуль для своих приложений и перечислите зависимости. Теперь вы можете создавать отдельные модули для разных платформ и интегрировать основные функции с помощью общего модуля.
43. Как лямбда-функции работают в Котлине?
Лямбда-функция — это небольшой автономный блок кода, который можно передавать в вашу программу для большей гибкости. Обычно они написаны встроенными и решают базовые, но часто встречающиеся задачи программирования. Мы более подробно рассмотрим некоторые простые лямбда-функции Kotlin, чтобы понять их более подробно.
fun main(args: Array<String>) {
val greet = { println("Hello!")} // first lambda function
greet()
val product = { x: Int, y: Int -> x * y } // second lambda function
val result = product(3, 5)
println("Product of two numbers: $result")
}
Первая лямбда приветствует пользователя текстом «Привет», а вторая возвращает произведение двух чисел. Лямбда-функции анонимны, то есть у них нет имен.
44. Объясните, почему следующий код не компилируется
class A{
}
class B : A(){
}
Классы в Котлине по умолчанию являются финальными. Итак, вы не можете наследовать атрибуты первого класса A от второго класса B. Для решения этого вопроса вам нужно будет объявить первый класс открытым. Приведенный ниже фрагмент проиллюстрирует это для вас.
open class A{
}
class B : A(){
}
Теперь этот код будет нормально компилироваться и выполняться, как и ожидалось. Котлин предоставляет этот модификатор open, чтобы обеспечить гибкое, но безопасное наследование классов.
45. Как объявления деструктуризации работают в Котлине?
Kotlin позволяет разработчикам присваивать переменным несколько значений из данных, хранящихся в объектах или массивах. Это очень умная функция, и работодатели часто спрашивают об этом на собеседованиях по Kotlin. Ниже мы продемонстрируем небольшой пример, который поможет вам более четко понять эту концепцию.
data class Book(val name: String, val publication: String){
}
fun main(args: Array<String>) {
val (name, publication) = Book("Kotlin for Dummies", "O’Reilly")
println(name)
println(publication)
}
При компиляции эта программа вернет название и публикацию книги из указанного класса данных. Деструктуризация происходит в первой строке внутри основной функции.
46. Напишите программу для замены двух чисел без использования временных переменных
Замена двух чисел с помощью временной переменной — обычная практика для многих. Однако мы можем легко менять значения переменных без использования таких переменных. Взгляните на приведенную ниже программу Kotlin, чтобы узнать, как это сделать в действии.
fun main(a: Array<String>) {
var variable1 = 10
var variable2 = 20
println("Before swapping:")
println("First variable has: $variable1")
println("Second variable has: $variable2")
variable1 = variable1 + variable2
variable2 = variable1 - variable2
variable1 = variable1 - variable2
println("After swapping:")
println("First variable contains: $variable1")
println("Second variable contains: $variable2")
}
47. Что такое Any, Unit и Nothing?
В Kotlin Any — это тип данных, который представляет базовые типы, такие как целые числа, числа с плавающей запятой и строки. Любой тип по умолчанию не может содержать нулевые значения и реализует автоматическое приведение типов более низкого уровня. Это похоже на объект Java java.Lang.Object.
Тип единицы — это тип, который возвращается вызовами функций, которые ничего не возвращают. Kotlin не предлагает void-функций, как C или Java, и для этой цели использует unit. Вы можете думать о unit как об одном конкретном экземпляре.
Тип Nothing возвращается функциями Kotlin, когда они не могут достичь нижней части функции. Обычно это происходит из-за бесконечных циклов или рекурсий.
48. Напишите программу на Kotlin для вычисления степени числа
Многие логики программирования используют силу числа для достижения своей конечной цели. К счастью, вычислить степень заданного числа в Котлине не составляет труда. В приведенной ниже программе показана простая программа для этой цели. Он основан на рекурсии.
fun main(args: Array<String>) {
print("Enter the base:")
val base = readLine()!!.toInt()
print("Enter the power:")
val power = readLine()!!.toInt()
val result = powerRaised(base, power)
println("$base^$power = $result")
}
fun powerRaised(base: Int, power: Int): Int {
if (power != 0)
return base * powerRaised(base, power - 1)
else
return 1
}
49. Как создавать статические методы в Kotlin?
Статические методы полезны по ряду причин. Они позволяют программистам предотвратить копирование методов и позволяют работать с ними без предварительного создания объекта. В Котлине нет широко используемого ключевого слова static, встречающегося в Java. Скорее, вам нужно будет создать сопутствующий объект. Ниже мы сравниваем создание статических методов в Java и Kotlin. Надеемся, они помогут вам лучше их понять.
class A {
public static int returnMe() { return 5; } // Java
}
class A {
companion object {
fun a() : Int = 5 // Kotlin
}
}
50. Как создавать массивы разных типов в Kotlin
Kotlin позволяет программистам легко создавать различные типы массивов с помощью метода arrayOf(). Ниже мы рассмотрим, как создавать массивы, содержащие целые числа, числа с плавающей запятой и строки, используя эту простую, но надежную процедуру.
val arr1 = arrayOf(1, 2, 3)
val arr2 = arrayOf(1.2, 2.3, 3.4)
val arr3 = arrayOf("Hello", "String", "Array)
Завершение мыслей
Вопросы на собеседовании по Kotlin могут отражать множество тем, включая базовые конструкции программирования и решение реальных проблем. Несмотря на то, что невозможно объединить все вопросы для высоких должностей в области информатики, требующих Kotlin, в одном руководстве, наши редакторы постарались изо всех сил изложить суть. Мы рекомендуем вам опробовать различные примеры программирования, продемонстрированные в этом руководстве, чтобы лучше понять Kotlin. Кроме того, вы должны попытаться понять основы как можно лучше. К концу этого руководства вы должны обладать значительными знаниями о Kotlin. Если у вас есть какие-либо вопросы, пожалуйста, оставьте их в нашем разделе комментариев.