Android面试题——kotlin相关面试题_kotlin面试题-程序员宅基地

技术标签: android  kotlin  Android  开发语言  

一 面试主要知识点

  1. kotlin协程
  2. 协程异常处理
  3. kotlin中高阶函数
  4. kotlin中with,run,apply,let函数
  5. 安卓中扫码区域大小(分别率-自定义)
  6. 多语言适配(多语言占位符)
  7. 静态代理和动态代理
  8. Android网络访问框架(Okhttp+retrofit)
  9. Jetpack Compose 组件介绍
  10. 约束布局
  11. 线程中断
  12. VMC/MVP/MVVM
  13. 项目亮点及难点
  14. flutter与安卓通信

二 面试题解答

2.1 kotlin协程

1- 协程是我们在 Android 上进行异步编程的推荐解决方案。它的特点包括:

  • 轻量
  • 内存泄漏更少
  • 内置取消支持
  • jetpack集成

2- 创建协程

// 方法一,使用 runBlocking 顶层函数
runBlocking {
    get(url)
}

// 方法二,自行通过 CoroutineContext 创建一个 CoroutineScope 对象,通过launch开启协程
val coroutineScope = CoroutineScope(context)
coroutineScope.launch {
    get(url)
}

// 方法三,使用 GlobalScope 单例对象,GlobalScope 实际是CoroutineScope的子类,本质是CoroutineScope
GlobalScope.launch {
    get(url)
}

//方法四,使用async开启协程
GlobalScope.async {
      get(url)
}

3-协程使用

协程最常用的功能是并发,而并发的典型场景就是多线程。

可以使用 Dispatchers.IO 参数把任务切到 IO 线程执行

coroutineScope.launch(Dispatchers.IO) {
    ...
}

使用Dispatchers.Main 切换到主线程

coroutineScope.launch(Dispatchers.Main) {
    ...
}

4-协程的挂起(suspend)

2.2 协程异常处理

  • 协程的异常,一般使用try/catch或者runCatching内置函数来处理
  • 协程处理异常的第二个方法是使用CoroutineExceptionHandler

2.3 kotlin中高阶函数

1-定义

高阶函数定义:参数有函数类型或者返回值是函数类型的函数。

2-高阶函数示例

(String, Int) -> Unit

3-高阶函数有三种用法

  • 双冒号 ::method
  • 匿名函数
  • Lambda 表达式

4-系统常用的高阶函数

  • map
  • flatMap
  • reduce
  • fold
  • joinToString
  • filter

2.4 kotlin中with,run,apply,let函数

1- 基本介绍:

  • with:不是T的扩展函数,需要传入对象进去,不能判空,最后一行是返回值。
  • run:是T的扩展函数,内部使用this,最后一行是返回值。
  • apply:是T的扩展函数,内部使用this,最后一行返回的是自身。
  • let:是T的扩展函数,内部使用it,当然可以自定义名称(通过修改lambda表达式参数),最后一行是返回值。
  • also:是T的扩展函数,和let一样内部使用it,最后一行是返回自身。

2- 使用场景

  • 用于初始化对象或更改对象属性,可使用apply
  • 如果将数据指派给接收对象的属性之前验证对象,可使用also
  • 如果将对象进行空检查并访问或修改其属性,可使用let
  • 如果想要计算某个值,或者限制多个本地变量的范围,则使用run

3-区别

函数 是否是扩展函数 函数参数(this、it) 返回值(调用本身、最后一行)
with 不是 this 最后一行
T.run this 最后一行
T.let it 最后一行
T.also it 调用本身
T.apply this 调用本身

2.5 安卓中扫码区域大小(分别率-自定义)

Zxing包中有个类CameraManager,它是来设置扫描框的大小

扫描框框初始化数值

 private static  int MIN_FRAME_WIDTH = 240;

  private static  int MIN_FRAME_HEIGHT = 240;

  private static  int MAX_FRAME_WIDTH = 480;

  private static  int MAX_FRAME_HEIGHT = 360;

此类里面有个getFramingRect方法用来设置扫描的框的大小,如果要修改扫描框的大小可以在这个方法里修改

2.6 多语言适配(多语言占位符)

%s:字符串类型

%d:整数类型

%f:浮点数类型

2.7 静态代理和动态代理

  • 静态代理:由程序创建或者特定工具自动生成源代码,在程序运行前,代理类的.class文件已经存在
  • 动态代理:在程序运行时,运用反射机制动态创建而成,无需手动编写代码

2.8 Android网络访问框架(Okhttp+retrofit)

OkHttp拦截器链

  • RetryAndFollowUpInterceptor:重试和失败定向拦截器,会创建StreamAllocation对象,用来传递给后面的拦截器
  • BridgeInterceptor:桥接和适配拦截器
  • CacheInterceptor:缓存拦截器
  • ConnectInterceptor:连接拦截器,建立可用的连接,是下面拦截器的基础
  • CallServerInterceptor:负责将我们的请求写进网络流中,别切会从IO流中读取服务器返回给我们的客户端的数据

2.9 Jetpack Compose 组件介绍

Jetpack 是一个丰富的组件库,它的组件库按类别分为 4 类

1-架构(Architecture)

  • Data Binding
  • Lifecycles
  • LiveData
  • Navigation
  • Paging
  • Room
  • ViewModel
  • WorkManager

2- 界面(UI)

  • Animation & Transitions
  • Auto,Tv&Wear
  • Emoji
  • Fragment
  • Layout
  • Palette

3-行为(behavior)

  • Download Manager
  • Media&Playback
  • Permissions
  • Notifications
  • Sharing
  • Slices

4-基础(foundation)

  • AppCompat
  • Android KTX
  • Multidex
  • Test

2.10 约束布局(ConstraintLayout)

ConstraintLayout 是一个 ViewGroup,它的出现是为了解决复杂布局时,布局嵌套(布局内的布局)过多的问题(嵌套布局会增加绘制界面所需的时间)。它可以根据同级视图和父布局的约束条件为每个视图定义位置,类似于 RelativeLayout 所有视图都是根据兄弟视图和父级布局之间的关系来布局的,但是与 RelativeLayout 相比,它更加灵活,更易于使用

  • 约束布局常用属性
  • 参考线(GuideLine)
  • 链(Chains)
  • 关于view gone

2.11 线程中断

  • stop
  • interrupt
  • 标志位

2.12 VMC/MVP/MVVM

  • MVC(Model-View-Controller)
  • MVP(Model-View-Presenter)
  • MVVM(Model-View-ViewModel)

2.13 项目亮点及难点

结合项目描述

2.14 flutter与安卓通信

  • MethodChannel
  • BasicMessageChannel
  • EventChannel
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Calvin_zhou/article/details/127525933

智能推荐

Vue中引入字体并解决字体文件过大问题_vue 引入字体包体积过大-程序员宅基地

文章浏览阅读5.6k次。利用 CSS3 @font-face 规则指定名为"myFirstFont"的字体,并指定在哪里可以找到它的URL:@font-face{font-family: myFirstFont;src: url('Sansation_Light.ttf'), url('Sansation_Light.eot'); /* IE9 */}在main.js中全局引用文件import '@/styles/index.scss'解决字体文件过大问题Fontmin - 字体子集化方案_vue 引入字体包体积过大

转-- 定制PYNQ的overlay-程序员宅基地

文章浏览阅读551次。一、用HLS生成一个定制IP(加速器)(1)首先打开vivado hls,本人的版本是2017.2,点击创建一个新工程。(2)设置工程名和路径,顶层函数设置为add,创建一个新的C++程序,名字叫做adder.cpp,不用在testbench中添加文件。选择板子的时候搜索xc7z020clg400-1,这是PYNQ的板子号,选择完成。 (3)在左侧的..._定制pynq的overlay

rocketMQ中,消费者、消费者组、Topic、队列的关系_rocketmq topic和queue关系-程序员宅基地

文章浏览阅读2w次,点赞28次,收藏76次。初学roketMQ的同学可能会比较难以理解这四者之间的关系,这里我来理一下。1、消费者和消费者属于个体与群体的关系,非常容易理解,不赘述2、Topic是相当于一种消息类型,而队列queue则是属于某个Topic下的更细分的一种单元。举个例子。Topic代表老虎,是一种动物类型,而队列就相当于东北虎,是对老虎的更详细描述。3、在同一个消费者组下的消费者,不能同时消费同一个queue。4、一个消费者组下的消费者,可以同时消费同一个Topic下的不同队列的消息。5、不同消费者组下的消费者,可以同时._rocketmq topic和queue关系

mysql truncate某列_MySQL之删_delete-truncate-程序员宅基地

文章浏览阅读229次。MySQL增删改查之删_delete-truncate一、DELETE语句删除数据记录1、在单表中删除行语法:DELETE [IGNORE] FROM tbl_name[WHERE where_condition][ORDER BY ...][LIMIT row_count]①从表中删除满足WHERE条件的所有行;②没有WHERE条件,则删除表中的所有行基本格式:delete from wh..._mysql truncate 某行数据

【华为云技术分享】解密如何使用昇腾AI计算解决方案构建业务引擎_华为云升腾云服务器实例可以用于推理加速的是-程序员宅基地

文章浏览阅读2.2k次。摘要:昇腾AI计算解决方案以极致算力,端边云融合、全栈创新,开放生态的硬核实力。用户可以使用标准的Matrix接口实现业务引擎,对外释放昇腾AI加速能力。从卷积神经网络中的矩阵乘法(GEMM)说起说起AI业务,就不得不提最经典的AlexNet,AlexNet模型于2012年提出,其被认为是计算机视觉领域最有影响力的模型之一。AlexNet网络主要包含八层,前五层是卷积层,最后三层是全连接层。 配合pooling及norm运算,以下列出所有卷积层和全连接层的参数规模以及每层的浮点计算量,从图..._华为云升腾云服务器实例可以用于推理加速的是

【比赛合集】19场可报名的「创新应用」、「可视化」和「程序设计」大奖赛,任君挑选!_程序软件创新比赛-程序员宅基地

文章浏览阅读932次。实时聚合多平台的(Kaggle、天池…)和(Leetcode、牛客…)比赛。本账号同时会推送最新的比赛消息,欢迎关注!近期CompHub对进行中的比赛增加了的识别,你可以直接在CompHub中浏览当前可报名的比赛, 而不用进入比赛主页才知道比赛的报名状态。本账号将会不定期推送当前可报名的比赛,方便大家查阅。 enjoy it!上期推送了,本期推送「创新应用」、「可视化」和「程序设计」这三个类别当前可报名的大奖赛。更多比赛信息见或 点击文末以下信息仅供参考,以比赛官网为准。_程序软件创新比赛

随便推点

一个专注PR剪辑视频的PR模板网站PRmuban.com-程序员宅基地

文章浏览阅读1.7k次。一个专注PR剪辑视频的PR模板网站(PRmuban.com)提供PR模板,PR素材,PR转场特效,PR调色LUT预设,PR剪辑教程,PR模板网站,Pr字幕模板,pr片头模板,视频模板,视频素材,剪辑素材,抖音素材,免费下载,Premiere软件资源库,mogrt,pr插件免费下载网站官网直达:https://prmuban.com/...

vscode 配置 Latex 编译后自动清理多余文件(.log .out等文件)_latex aux会自动删除-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏10次。setting中配置: "latex-workshop.latex.autoClean.run": "onBuilt", //注意结尾是 t 不是 d "latex-workshop.latex.clean.fileTypes": [ "*.aux", "*.bbl", "*.blg", "*.idx", "*.ind", "*.lof"..._latex aux会自动删除

Spring Boot + Spring Data JPA 项目整合开发记录(持续更新)-程序员宅基地

文章浏览阅读113次。2019独角兽企业重金招聘Python工程师标准>>> ..._spring boot+spring data jpa+spring security+freemarker+vue+jquery

Android开发-Android开发环境搭建(Android Studio详细安装教程,适合新手)-程序员宅基地

文章浏览阅读4.9k次,点赞3次,收藏27次。01 Android开发工具Android StudioAndroid Studio是谷歌推出的一个Android集成开发工具,基于IntelliJ IDEA.类似Eclipse ADT, Android Studio提供了集成的Android开发工具用于开发和调试架构组成。基于Gradle的构建支持。Android专属的重构和快速修复。提示工具以捕获性能、可用性、版本兼容性等问题..._android studio模拟器安装教程

IIS安装和配置_iis安装配置步骤-程序员宅基地

文章浏览阅读6.5k次,点赞4次,收藏22次。IIS安装和配置_iis安装配置步骤

mongodb Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed :-程序员宅基地

文章浏览阅读8.8k次,点赞3次,收藏2次。mongodb启动报错: MongoDB shell version: 3.2.20 connecting to: test 2018-08-10T19:26:24.102+0800 W NETWORK [thread1] Failed to connect to 127.0.0.1:27017, in(checking socket for error after poll), reas..._error: couldn't connect to server 127.0.0.1:27017, connection attempt failed

推荐文章

热门文章

相关标签