如何通过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则抛出NPEval和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()) // true3. 函数式编程:Lambda、集合、作用域函数
Kotlin广泛使用函数式方法。准备好回答关于集合操作和作用域函数的问题。
你知道哪些作用域函数?它们有什么区别?
主要的有:let、run、with、apply、also。主要区别在于上下文(this或it)和返回值。
| 函数 | 上下文 |
|---|