如何通过Kotlin面试:从A到Z的热门问题

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

如何通过Kotlin面试:从A到Z的热门问题



Kotlin面试不仅仅是对语法的考察。雇主希望看到你理解这门语言的哲学:空安全、函数式风格、惯用语法和编译特性。在本文中,我们整理了最常见的问题——从基础到高级。为面试做好100%的准备。



1. 基础问题:语法与空安全



面试通常从基础开始。以下是必须了解的内容。



Kotlin中有哪些数据类型?它们与Java有何不同?

Kotlin是一种静态类型语言。所有类型都是对象,没有基本类型(但编译器可以进行优化)。主要类型有:Int、Double、Boolean、String、Array。与Java不同,Kotlin中创建对象不需要new关键字,可空类型需用?显式标记。



什么是空安全?Kotlin如何实现它?

空安全是内置的防止NullPointerException的机制。类型分为可空(String?)和非空(String)。使用以下操作符进行安全访问:

val name: String? = nullprintln(name?.length)       // 安全调用 -> nullprintln(name?.length ?: 0)  // Elvis操作符 -> 0println(name!!.length)      // 强制调用 -> 如果为null则抛出NPE


val和var有什么区别?

  • val — 不可变引用(只读)。相当于Java中的final。
  • var — 可变引用(可修改)。

重要提示:val不保证对象本身不可变,只保证引用不可变。



2. 高级结构:类、函数与密封类



这里考察编写简洁且安全代码的能力。



什么是数据类?它会生成哪些方法?

data class是用于存储数据的类。编译器会自动生成:equals()、hashCode()、toString()、copy()和componentN()。

data class User(val id: Int, val name: String)val user = User(1, "Alice")val copy = user.copy(name = "Bob")println(user) // User(id=1, name=Alice)


什么是密封类?何时使用它们?

sealed class是一种受限的类层次结构。所有子类必须在同一文件中声明。非常适合表示状态(例如,加载结果)。

sealed class Result {    data class Success(val data: String) : Result()    data class Error(val message: String) : Result()    object Loading : Result()}

fun handle(result: Result) = when (result) { is Result.Success -> println(result.data) is Result.Error -> println(result.message) Result.Loading -> println("Loading...")}

优点:when必须是穷尽的——编译器会检查所有分支。



什么是扩展函数?它们如何工作?

扩展函数允许在不继承的情况下向现有类添加新方法。实际上,它们是静态函数,将类实例作为第一个参数接收。

fun String.isEmail(): Boolean = this.contains("@")println("test@mail.ru".isEmail()) // true


3. 函数式编程:Lambda、集合、作用域函数



Kotlin广泛使用函数式方法。准备好回答关于集合操作和作用域函数的问题。



你知道哪些作用域函数?它们有什么区别?

主要的有:let、run、with、apply、also。主要区别在于上下文(this或it)和返回值。

博客

书籍推荐

函数上下文