2024年最全10天学会kotlin DAY2 匿名函数 与 Lambda,2024年最新阿里面试官级别

资源分享

  • 最新大厂面试专题

这个题库内容是比较多的,除了一些流行的热门技术面试题,如Kotlin,数据库,Java虚拟机面试题,数组,Framework ,混合跨平台开发,等

  • 对应导图的Android高级工程师进阶系统学习视频
    最近热门的,NDK,热修复,MVVM,源码等一系列系统学习视频都有!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

}

println(methodValue(32.2, 33.4f, 44))

6、Lambda


匿名函数 属于Lambda

// 匿名函数 == Lambda 表达式

val addResultMethod = {number1: Int, number2: Int ->

“两个求和 ${number1 + number2}”

}

println(addResultMethod(3, 6))

// 匿名函数 入参 Int 返回Any 类型 (Any 类型于Java 中的 Object )

// Lambda 表达式的参数 Int, Lambda 表达式的结果Any 类型

val weakResultMethod = {number: Int ->

when(number){

1 -> “周一”

2 -> “周二”

3 -> “周三”

4 -> “周四”

5 -> “周五”

else -> -1

}

} // weakResultMethod 函数 (Int) -> Any

println(weakResultMethod(3))

7、函数中定义参数 是函数的函数


// 调用函数

loginAPI(“tiger”, “123456”){

msg: String, code: Int ->

println(“最终的登录情况是:msg: $msg code: $code”)

}

// 模拟服务器的数据

const val USER_NAME_SAVE_DB = “tiger”

const val USER_PASS_SAVE_DB = “123456”

// 模仿前端登录

fun loginAPI(userName: String, passWord: String, responseResult: (String, Int) -> Unit) {

if (userName == null || passWord == null){

// 出现问题,终止程序 抛出异常 Nothing(是一个编译期的抽象概念,只有需要将一个函数显示的标记为无法完成时,才有用到Nothing类型的必要)

TODO(“用户名或密码错误”)

}

if (userName.length > 3 && passWord.length > 3){

if (wbeServerLoginApi(name = userName, pwd = passWord)){

responseResult(“login success”, 200)

}else{

responseResult(“login error”, 500)

}

}else{

TODO(“用户名或密码错误”)

}

}

// 模拟登录操作

private fun wbeServerLoginApi(name: String, pwd: String): Boolean {

return name == USER_NAME_SAVE_DB && pwd == USER_PASS_SAVE_DB

}

8、函数内联


如果函数参数有Lambda ,尽量使用 inline 关键字,这样内部会做优化,减少函数开辟,对象开辟,的性能损耗

使用内联,相当于C++ #define 宏定义,宏替换,会把代码替换到调用处,没有任何函数的开辟, 对象的开辟,造成性能损耗

如果不使用内联,在调用端,会生成多个对象来完成Lambda 的调用(造成性能损耗)

// 模仿前端登录 inline 内联关键字

inline fun loginAPI(userName: String, passWord: String, responseResult: (String, Int) -> Unit) {

if (userName == null || passWord == null){

// 出现问题,终止程序 抛出异常 Nothing(是一个编译期的抽象概念,只有需要将一个函数显示的标记为无法完成时,才有用到Nothing类型的必要)

TODO(“用户名或密码错误”)

}

if (userName.length > 3 && passWord.length > 3){

if (wbeServerLoginApi(name = userName, pwd = passWord)){

responseResult(“login success”, 200)

}else{

responseResult(“login error”, 500)

}

}else{

TODO(“用户名或密码错误”)

}

}

9、函数引用


// Lambda 属于函数类型对象,需要把methodResponseResult 普通函数 通过 :: 转变成 函数类型的对象(函数引用)

loginAPI(“tiger”, “123456”, ::methodResponseResult)

//定义一个函数

fun methodResponseResult(msg: String, code: Int){

println(“最终的登录情况是:msg: $msg code: $code”)

}

// 模拟服务器的数据

const val USER_NAME_SAVE_DB = “tiger”

const val USER_PASS_SAVE_DB = “123456”

// 模仿前端登录

inline fun loginAPI(userName: String, passWord: String, responseResult: (String, Int) -> Unit) {

if (userName == null || passWord == null){

// 出现问题,终止程序 抛出异常 Nothing(是一个编译期的抽象概念,只有需要将一个函数显示的标记为无法完成时,才有用到Nothing类型的必要)

TODO(“用户名或密码错误”)

}

if (userName.length > 3 && passWord.length > 3){

if (wbeServerLoginApi(name = userName, pwd = passWord)){

responseResult(“login success”, 200)

}else{

responseResult(“login error”, 500)

}

}else{

TODO(“用户名或密码错误”)

}

}

// 模拟登录操作

fun wbeServerLoginApi(name: String, pwd: String): Boolean {

return name == USER_NAME_SAVE_DB && pwd == USER_PASS_SAVE_DB

}

10、函数类型作为返回类型


val showMethod = show(“tiger”)

// showMethod 是 show 函数的返回值,只不过这个返回值,是一个函数

// show == 匿名函数

println(showMethod(“王漂亮”, 18))

fun show(info: String) :(String, Int) -> String {

println(“我是show 函数 info: $info”)

return {name: String, age: Int ->

“里面的 name: $name, age: $age”

}

}

11、匿名函数和具名函数


// 匿名函数

showPersonInfo(“tiger”, 18, ‘男’, “学习kotlin”){

println(“显示结果: $it”)

}

// 具名函数 show

showPersonInfo(“tiger”, 18, ‘男’, “学习kotlin”, ::showResultImpl)

fun showResultImpl(result: String){

println(“具名函数的显示结果: $result”)

}

inline fun showPersonInfo(name: String, age: Int, sex: Char, study: String, showResult: (String) -> Unit){

val str = “name: $name, age: $age, sex: $sex, study: $study”

showResult(str)

}

最后,面试前该准备哪些资源复习?

其实客户端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

这里再分享一下我面试期间的复习路线:(以下体系的复习资料是我从各路大佬收集整理好的)

《Android开发七大模块核心知识笔记》

面试字节两轮后被完虐,字节面试官给你的技术面试指南,请查收

面试字节两轮后被完虐,字节面试官给你的技术面试指南,请查收

《960全网最全Android开发笔记》

面试字节两轮后被完虐,字节面试官给你的技术面试指南,请查收

《379页Android开发面试宝典》

历时半年,我们整理了这份市面上最全面的安卓面试题解析大全
包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。

《507页Android开发相关源码解析》

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。

真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。

《507页Android开发相关源码解析》

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。

真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 12
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值