快捷搜索:  as

2019初中级Android开发社招面试解答之性能优化

注:由于实际开拓与参考谜底会有所不合,再者怕误导大年夜家,以是这些口试题谜底照样自己去理解!口试官会针对简历中提到的常识点由浅入深提问,以是不要背谜底,多理解。

1.图片的三级缓存中,图片加载到内存中,假如内存快爆了,会发生什么?怎么处置惩罚?

参考回答:

首先我们要清楚图片的三级缓存是若何的

假如内存足够时不收受接收。内存不敷时就收受接收软引用工具

2.内存中假如加载一张500X500的png高清图片.应该是占用若干的内存?

参考回答:

不斟酌屏幕比的话:占用内存=500 * 500 * 4 = 1000000B ≈ 0.95MB

斟酌屏幕比的的话:占用内存= 宽度像素 x (inTargetDensity / inDensity) x 高度像素 x (inTargetDensity / inDensity)x 一个像素所占的内存字节大年夜小

inDensity表示目标图片的dpi(放在哪个资本文件夹下),inTargetDensity表示目标屏幕的dpi

3.WebView的机能优化 ?

参考回答:

一个加载网页的历程中,native、收集、后端处置惩罚、CPU都邑介入,各自都有需要的事情和依附关系;让他们互相并行处置惩罚而不是互相壅闭才可以让网页加载更快:

WebView初始化慢,可以在初始化同时先哀求数据,让后端和收集不要闲着。

常用 JS 本地化及延迟加载,应用第三方浏览内核

后端处置惩罚慢,可以让办事器分trunk输出,在后端谋略的同时前端也加载收集静态资本。

脚本履行慢,就让脚本在着末运行,不壅闭页面解析。

同时,合理的预加载、预缓存可以让加载速率的瓶颈更小。

WebView初始化慢,就随时初始化好一个WebView待用

DNS和链接慢,设法主见子复用客户端应用的域名和链接。

4.Bitmap若何处置惩罚大年夜图,如一张30M的大年夜图,若何预防OOM?

参考回答:避免OOM的问题就必要对大年夜图片的加载进行治理,主要经由过程缩放来减小图片的内存占用。

BitmapFactory供给的加载图片的四类措施(decodeFile、decodeResource、decodeStream、decodeByteArray)都支持BitmapFactory.Options参数,经由过程inSampleSize参数就可以很方便地对一个图片进行采样缩放

比如一张10241024的高清图片来说。那么它占领的内存为102410244,即4MB,假如inSampleSize为2,那么采样后的图片占用内存只有512512*4,即1MB(留意:根据最新的官方文档指出,inSampleSize的取值应该老是为2的指数,即1、2、4、8等等,假如外界输入不够为2的指数,系统也会默认选择最靠近2的指数代替,比如2)

综合斟酌。经由过程采样率即可有效加载图片,流程如下

将BitmapFactory.Options的inJustDecodeBounds参数设为true并加载图片

从BitmapFactory.Options中掏出图片的原始宽高信息,它们对应outWidth和outHeight参数

根据采样率的规则并结合目标View的所需大年夜小谋略出采样率inSampleSize

将BitmapFactory.Options的inJustDecodeBounds参数设为false,从新加载图片

5.内存收受接收机制与GC算法(各类算法的优毛病以及利用处景);GC道理机会以及GC工具

参考回答:

1.内存鉴定工具可收受接收有两种机制

引用计数算法:给工具中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用掉效时,计数器值就减1;任何时候计数器为0的工具便是弗成能再被应用的。然而在主流的Java虚拟机里未选用引用计数算法来治理内存,主要缘故原由是它难以办理工具之间互相轮回引用的问题,以是呈现了另一种工具存活鉴定算法。

可达性阐发法:经由过程一系列被称为『GCRoots』的工具作为肇端点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个工具到GC Roots没有任何引用链相连时,则证实此工具是弗成用的。此中可作为GC Roots的工具:虚拟机栈中引用的工具,主如果指栈帧中的本地变量*、本地措施栈中Native措施引用的工具、措施区中类静态属性引用的工具、措施区中常量引用的工具

2.GC收受接收算法有以下四种:

分代网络算法:是当前商业虚拟机都采纳的一种算法,根据工具存活周期的不合,将Java堆划分为新生代和老年代,并根据各个年代的特搜寻纳最适当的网络算法。

新生代:大年夜批工具逝世去,只有少量存活。应用『复制算法』,只需复制少量存活工具即可

复制算法:把可用内存按容量划分为大年夜小相等的两块,每次只应用此中的一块。当这一块的内存用尽后,把还存活着的工具『复制』到别的一块上面,再将这一块内存空间一次清理掉落。实现简单,运行高效。在工具存活率较高时就要进行较多的复制操作,效率将会变低

老年代:工具存活率高。应用『标记—清理算法』或者『标记—收拾算法』,只需标记较少的收受接收工具即可。

标记-清除算法:首先『标记』出所有必要收受接收的工具,然后统一『清除』所有被标记的工具。标记和清除两个历程的效率都不高,清除之后会孕育发生大年夜量不继续的内存碎片,空间碎片太多可能会导致今后在法度榜样运行历程中必要分配较大年夜工具时,无法找到足够的继续内存而不得不提前触发另一次垃圾网络动作。

标记-收拾算法:首先『标记』出所有必要收受接收的工具,然落后行『收拾』,使得存活的工具都向一端移动,着末直接清理掉落端界限以外的内存。标记收拾算法会将所有的存活工具移动到一端,并对不存活工具进行处置惩罚,是以其不会孕育发生内存碎片

6.内存泄露和内存溢出的差别 ?AS有什么对象可以检测内存泄露

参考回答:

内存溢出(out of memory):是指法度榜样在申请内存时,没有足够的内存空间供其应用,呈现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那便是内存溢出。

内存泄露(memory leak):是指法度榜样在申请内存后,无法开释已申请的内存空间,一次内存泄露迫害可以轻忽,但内存泄露聚积后果很严重,无论若干内存,迟早会被占光。memory leak会终极会导致out of memory!

查找内存透露可以应用Android Studio 自带的AndroidProfiler对象或MAT

7.机能优化,怎么包管利用启动不卡顿? 诟谇屏怎么处置惩罚?

8.强引用置为null,会不会被收受接收?

9.ListView跟RecyclerView的差别

10.ListView的adapter是什么adapter

11.LinearLayout、FrameLayout、RelativeLayout机能比较,为什么?

前几天熬得太晚了,扛不住要去睡觉了,必要后续谜底或者更多进修资料的可以加我的相助群925019412

您可能还会对下面的文章感兴趣: