Android面试题——掘金-Kotlin相关面试题(7.1)
一 概述
1 | 1)可变参数 |
二 面试题解答(仅供参考)
2.1 可变参数
1 | 在 Kotlin 中,可变参数(vararg) 是指函数可以接收 不定数量的参数, |
2.2 Object关键字
1 | 在 Kotlin 中,object 关键字非常强大,是实现 单例、伴生对象、匿名对象、对象表达式 等的重要工具。 |
2.3 密封类
1 | 1.概念 |
2.4 伴生类
1 | 在 Kotlin 中,伴生对象(Companion Object) 是用于模拟 Java 中 static 行为的机制。 |
2.5 数据类
1 | 一、概念 |
2.6 协程
一、概念
1 | Kotlin 协程(Coroutine)是 Kotlin 提供的一种轻量级并发解决方案, |
二、协程的核心概念
术语 | 解释 |
---|---|
suspend | 声明一个挂起函数,可被挂起并在稍后恢复,不会阻塞线程 |
CoroutineScope | 协程作用域,决定协程的生命周期 |
launch | 启动一个协程,不会阻塞当前线程(返回 Job) |
async | 启动协程并返回结果(返回 Deferred,配合 await() 使用) |
withContext | 切换协程上下文,如从 IO 切到 Main |
Dispatcher | 协程调度器,控制代码在哪个线程上运行(如 IO , Main , Default ) |
三、协程的基本使用
1 | // 示例:在后台执行网络请求,然后切回主线程更新 UI |
四、常用协程作用域
作用域 | 生命周期绑定 | 常用于 |
---|---|---|
GlobalScope | 应用级别 | 全局协程,不推荐 |
lifecycleScope | Activity/Fragment | UI 控制类中安全使用 |
viewModelScope | ViewModel | 业务处理、网络、数据库等 |
CoroutineScope 自定义 | 手动管理 | 工具类、仓库层等场景 |
五、挂起函数(suspend
)
1 | suspend fun getUser(): User { |
六、错误处理
1 | 1.try.catch |
七、并发执行(async/await
)
1 | val job1 = async { loadFromNetwork() } |
2.7 Flow
一、概念
1 | Kotlin 的 Flow 是一种异步数据流处理工具, |
二、什么是 Flow?
1 | Flow 是一个可以发射(emit)多个值的 冷流(cold stream), |
三、基本用法
1 | fun simpleFlow(): Flow<Int> = flow { |
四、Flow 的特点
特性 | 描述 |
---|---|
冷流 | 只有在 collect 时才真正执行逻辑 |
挂起函数 | collect 是挂起函数,必须在协程中调用 |
背压处理 | 天然支持挂起暂停,不会压垮线程 |
生命周期安全 | 搭配 lifecycleScope / viewModelScope 使用 |
五、操作符常用示例
操作符 | 作用 | 示例代码 |
---|---|---|
map | 数据变换 | .map { it * 2 } |
filter | 过滤数据 | .filter { it > 0 } |
onEach | 每个值执行副作用操作 | .onEach { println(it) } |
catch | 异常处理 | .catch { e -> emit(-1) } |
flowOn | 切换发射线程 | .flowOn(Dispatchers.IO) |
collectLatest | 如果新值来了,取消旧的收集逻辑 | 用于响应式 UI 场景 |
六、异常处理
1 | flow { |
2.8 chanel
一、说明
1 | Kotlin 中的 Channel 是一种用于在多个协程之间进行通信的工具,它是一个 热流(Hot Stream),用于传递数据。 |
二、Channel 基本概念
1 | -Channel 是协程间的数据传递通道。 |
三、Channel 基本使用
1 | 一、 创建 Channel |
四、Channel 与 Flow 的区别
特性 | Channel | Flow |
---|---|---|
使用场景 | 协程间的数据传递 | 数据流(如网络请求,实时数据等) |
发送和接收 | 手动控制发送(send() )和接收(receive() ) |
自动收集(collect() ) |
数据发射 | 热流:数据立即发射 | 冷流:只有在收集时才会开始发射 |
支持背压 | 支持背压控制,通过 Channel 的缓冲区控制 |
自动管理背压 |
三 参考
- 掘金—知识库的大纲