Android面试题汇总(五)

1、请谈谈你对 MVC 和 MVP 的理解?

1、MVC是最常用的软件开发架构,MVC代表Model(数据模型)、View(XML)、Controller(Activity)优点是开发效率快,但是随着项目的增大Controller的业务逻辑代码增多会造成臃肿的情况,后期不便维护,所以适合小项目的开发

2、MVP,MVP代表Model(数据模型)、View(Activity+XML)、Presenter(P层,业务逻封装),是对于MVC的控制器臃肿问题的优化,抽离Activity中的业务从而减轻Activity的负担。例如把网络请求的代码放在P然后数据子在回调给Activity那么Activity里面就只是管理View了。MVP适合中大型的项目,代码结构清晰。

2、分别介绍下你所知道的 Android 中几种存储方式?

1、网络存储:一般就是通过网络请求获取服务器的数据

2、sqllite:本地数据库的存储,可以存储大量不经常改变的数据

3、ContentProvider:安卓的四大组件之一,实现跨应用的数据共享

4、文件存储:本地文件存储

5、SharePreference:不敏感的数据存储方式,不支持数据的频繁读写,频繁读写会造成数据错乱

3、谈谈你是如何适配更多机型的?

1、dp原生适配的方案

2、dimen基于px生成不同尺寸分辨率的文件夹适配

3、smallestWidth基于dp生成不同宽度屏幕的文件夹,忽略高度

4、今日头条的适配方案,AutoSize 百分比适配

4、请谈谈你是如何进行多渠道打包的?

1、在Gradle中配置productFlaver

2、使用360加固进行多渠道配置

3、使用第三方美团walle

5、MVP 中你是如何处理 Presenter 层以防止内存泄漏的?

因为Activity中使用Presenter然后会把自己作为View对象传递给P层,然后P层持有View的引用,当Activity销毁的时候没有回收所以会出现内存泄漏的问题

方法:

1、Activity在onDestory()方法中调用P中的方法把View设置为null 

2、使用LifeCycle

6、有没有遇到 64k 问题,应该如何解决?

出现64K的原因是因为项目中定义的方法数量过大

解决方法:

1、引入multidex依赖,然后开启MultiDexEnabled=true

2、Application中继承MultiDexApplication或者初始化的时候调用MultiDex.install()

3、去掉没有用的依赖,减轻方法数量

7、如何优化 Gradle 的构建速度?

1、优化硬件设备:16G内存+SSD硬盘,高配CPU

2、gradle.properties中配置更大的内存

3、第一次下载依赖后设置离线模式,再次添加依赖的时候把离线模式在关闭

4、依赖第三方的时候尽量不要使用+号,否则每次编译都会去远程获取最新的依赖

8、如何获取 Android 设备唯一 ID?

IMEI->MAC地址->ANDROID_ID->随机生成UUID。依次获取获取到什么使用什么

9、谈一谈 Android P 禁用 HTTP 协议对我们开发有什么影响?

导致Http的请求无效了,http的图片展示不出来了。

最直接的解决方案: 1、让后台换链接   2、target 设置在27及以下。

10、什么是 MVVM?你是如何将其应用于具体项目中的?

首先MVVM是一种架构思想。他的主要思想是视图层和model层更加解耦。model层改变直接会体现到View层,View层的变动也会体现到Model层。Android目前的双向绑定是由databinding实现的

11、假如让你实现断点上传功能,你认为应该怎样去做?

首先将文件分成块,然后把总的大文件和分块的小文件所有的信息传给后台,后台判断是否上传过。

1、如果已经上传成功则直接返回

2、如果没有上传过,客户端单行或者并行上传,全部上传完毕通知服务器合并文件

3、如果没有完全上传完,返回客户端没有上传的切片,客户端把没有上传的进行重新上传。或者返回了上传的大小,则客户端在指定的位置进行流的上传

12、webp 和 svg 格式的图片各自有什么特点?应该如何在 Android 中使用?

1、svg是矢量图,他是有直线和曲线绘制的方法构成的。他不会出现像素点,在放大的时候不会失真,最适合做企业的Logo

2、webP是谷歌开发的一种新的图片客户,支持有损和无损压缩的

13、如何绕过 Android 9.0 针对反射的限制?

双重反射,即利用反射调用反射API,这个时候系统进行栈回溯,发现直接调用者是反射API,反射API也是系统API,就直接通过了

14、为什么要将项目迁移到 AndroidX?如何进行迁移?

因为Support-v4或者v7也行不在继续维护,如果使用新版本可能会有兼容性问题,因为直接架构设计的问题,所以AndroidX就诞生,里面不仅优化了代码性能而且还提供了全新的API组件功能特别强大

迁移:收件将Android Studio和gradle升级到对应的版本,然后AS的菜单栏可以点击合并到AndroidX 但是可能会出现兼容问题需要手动处理

15、你了解过哪些Android屏幕适配方面的技巧?

1、使用autoSize三方通过改变手机的像素密度density,可以实现百分比适配,这样所有的手机显示很设计图一致的

2、使用约束布局减少布局的层级,但是简单的可以使用LinearLayout或者RelativeLayout这样更节省内存的开销

3、开发的时候可以使用最小机型来测试,可以避免很多小屏幕手机的不适配问题

你可能感兴趣的:(android)