Java基础那篇发出去之后评论区都在喊"赶紧出Kotlin"。Kotlin面试比Java更难准备——特性太多太灵活,面试官经常从语法糖追到编译原理。6道题是字节中级Android岗Kotlin专项高频题,每道考深度理解,不是"会写"就行。Q1:suspend函数底层怎么实现的?CPS变换是什么?大部分人说"suspend就是挂起函数"就完了,字节面试官要的是底层原理。Kotlin编译器对每个suspend函数做CPS(Continuation-Passing Style)变换——给函数加一个隐藏参数Continuation,函数不再直接返回值,而是通过Continuation回调传递结果。每个挂起点被编译器转成状态机的一个状态,协程挂起时保存当前状态到Continuation里,恢复时从保存的状态继续。// 你写的 suspend fun fetchUser(): User { delay(1000) return User("Tom") } // 编译器变换后(简化) fun fetchUser(continuation: ContinuationUser): Any { when (label) { 0 - { label = 1; delay(1000, this) /* 挂起 */ } 1 - { /* 恢复执行,返回User */ } } }这就是协程"看起来顺序代码,实际能挂起恢复"的底层魔法——状态机+Continuation。追问:为什么suspend函数只能在协