热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

android机试题,11道Android机能优化面试题【附答案】_WEB前端开发

由于现实开发与参考答案会有所差别,再者怕误导人人,所以这些面试题答案照样自身去明白!面试官会针对简历中提到的知识点由浅入深发问࿰

由于现实开发与参考答案会有所差别,再者怕误导人人,所以这些面试题答案照样自身去明白!面试官会针对简历中提到的知识点由浅入深发问,所以不要背答案,多明白。

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

参考回覆:

起首我们要清晰图片的三级缓存是怎样的

66a1b80715baf86150f28cc654005fc1.png

假如内存充足时不接纳。内存不够时就接纳软援用对象

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

参考回覆:

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

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

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

5ad5ee905e1a8a64dd3c578e8f2e7843.png

3、WebView的机能优化 ?

参考回覆:

一个加载网页的历程当中,native、网络、后端处置惩罚、CPU都邑介入,各自都有必要的工作和依靠关联;让他们互相并行处置惩罚而不是互相壅塞才够让网页加载更快:

WebView初始化慢,能够在初始化同时先请求数据,让后端和网络不要闲着。

经常运用 JS 当地化及耽误加载,运用第三方阅读内核

后端处置惩罚慢,能够让效劳器分trunk输出,在后端盘算的同时前端也加载网络静态资本。

剧本实行慢,就让剧本在末了运转,不壅塞页面剖析。

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

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

DNS和链接慢,想办法复用客户端运用的域名和链接。

f7b62e78d2901ea9659815e5585304f5.png

4、Bitmap怎样处置惩罚大图,如一张30M的大图,怎样防备OOM?

参考回覆:防止OOM的问题就须要对大图片的加载举行治理,重要经由历程缩放来减小图片的内存占用。

BitmapFactory供应的加载图片的四类要领(decodeFile、decodeResource、decodeStream、decodeByteArray)都支撑BitmapFactory.Options参数,经由历程inSampleSize参数就能够很方便地对一个图片举行采样缩放

比方一张10241024的高清图片来讲。那末它占领的内存为102410244,即4MB,假如inSampleSize为2,那末采样后的图片占用内存只要5125124,即1MB(注重:依据最新的官方文档指出,inSampleSize的取值应当老是为2的指数,即1、2、4、8等等,假如外界输入不足为2的指数,体系也会默许挑选最接近2的指数替代,比方2*)

综合斟酌。经由历程采样率即可有用加载图片,流程以下

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

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

依据采样率的划定规矩并连系目标View的所需大小盘算出采样率inSampleSize

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

4c1b30cc258611270d77a91fe4858684.png

5、内存接纳机制与GC算法(种种算法的优缺点以及运用场景);GC道理机遇以及GC对象

参考回覆:

内存剖断对象可接纳有两种机制:

援用计数算法:给对象中增加一个援用计数器,每当有一个处所援用它时,计数器值就加1;当援用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被运用的。然而在主流的Java虚拟机里未选用援用计数算法来治理内存,重要缘由是它难以解决对象之间互相轮回援用的问题,所以涌现了另一种对象存活剖断算法。

可达性分析法:经由历程一系列被称为『GCRoots』的对象作为起始点,从这些节点入手下手向下搜刮,搜刮所走过的途径称为援用链,当一个对象到GC Roots没有任何援用链相连时,则证实此对象是不可用的。个中可作为GC Roots的对象:虚拟机栈中援用的对象,重如果指栈帧中的当地变量、当地要领栈中Native要领援用的对象、要领区中类静态属性援用的对象、要领区中常量*援用的对象

GC接纳算法有以下四种:

分代网络算法:是当前贸易虚拟机都采纳的一种算法,依据对象存活周期的差别,将Java堆划分为新生代和老年代,并依据各个年代的特性采纳最恰当的网络算法。

新生代:多量对象死去,只要少许存活。运用『复制算法』,只需复制少许存活对象即可。

复制算法:把可用内存按容量划分为大小相称的两块,每次只运用个中的一块。当这一块的内存用尽后,把还存在世的对象『复制』到别的一块上面,再将这一块内存空间一次清算掉。完成简朴,运转高效。在对象存活率较高时就要举行较多的复制操纵,效力将会变低

老年代:对象存活率高。运用『标记—清算算法』或许『标记—整顿算法』,只需标记较少的接纳对象即可。

标记-消灭算法:起首『标记』出一切须要接纳的对象,然后一致『消灭』一切被标记的对象。标记和消灭两个历程的效力都不高,消灭之后会发生大批不一连的内存碎片,空间碎片太多可能会致使今后在程序运转历程当中须要分派较大对象时,没法找到充足的一连内存而不能不提早触发另一次垃圾网络行动。

标记-整顿算法:起首『标记』出一切须要接纳的对象,然后举行『整顿』,使得存活的对象都向一端挪动,末了直接清算掉端边境之外的内存。标记整顿算法会将一切的存活对象挪动到一端,并对不存活对象举行处置惩罚,因而其不会发生内存碎片

6、内存走漏和内存溢出的区分 ?AS有什么东西能够检测内存走漏

参考回覆:

内存溢出(out of memory):是指程序在请求内存时,没有充足的内存空间供其运用,涌现out of memory;比方请求了一个integer,但给它存了long才存下的数,那就是内存溢出。

内存走漏(memory leak):是指程序在请求内存后,没法开释已请求的内存空间,一次内存走漏伤害能够疏忽,但内存走漏聚集结果很严峻,不管若干内存,早晚会被占光。memory leak会最终会致使out of memory!

查找内存走漏能够运用Android Studio 自带的AndroidProfiler东西或MAT

7、机能优化,怎样保证运用启动不卡顿? 黑白屏怎样处置惩罚?

参考回覆:

运用启动速率,取决于你在application内里时刻做了什么事情,比方你集成了很多sdk,而且sdk的init操纵都须要在主线程里完成所以会有卡顿的觉得。在非必要的情况下能够把加载延后或则开启子线程处置惩罚

别的,影响界面卡顿的两大要素,分别是界面绘制和数据处置惩罚。

规划优化(运用include,merge标签,庞杂规划引荐运用ConstraintLayout等)

onCreate() 中不实行耗时操纵 把页面显现的 View 细分一下,放在 AsyncTask 里逐渐显现,用 Handler 更好。如许用户的看到的就是有条理有步骤的一个个的 View 的展示,不会是先看到一个黑屏,然后一下显现一切 View。最好做成动画,结果更天然。

应用多线程的目标就是只管的削减 onCreate() 和 onReume() 的时候,使得用户能尽快看到页面,操纵页面。

削减主线程壅塞时候。

进步 Adapter 和 AdapterView 的效力。

黑白屏发生缘由:当我们在启动一个运用时,体系会去搜检是不是已存在如许一个历程,假如不存在,体系的效劳会先搜检startActivity中的intent的信息,然后在去建立历程,末了启动Acitivy,即冷启动。而启动涌现白黑屏的问题,就是在这段时候内发生的。体系在绘制页面加载规划之前,起首会初始化窗口(Window),而在举行这一步操纵时,体系会依据我们设置的Theme来指定它的Theme 主题色彩,我们在Style中的设置就决议了显现的是白屏照样黑屏。

windowIsTranslucent和windowNoTitle,将这两个属性都设置成true (会有显著的卡顿体验,不引荐)

假如启动页只是是一张图片,那末为启动页专注设置一个新的主题,设置主题的android:windowBackground属性为启动页背景图即可

运用layer-list制造一张图片launcher_layer.xml,将其设置为启动页专注主题的背景,并将其设置为启动页规划的背景。

8、强援用置为null,会不会被接纳?

参考回覆:

不会马上开释对象占用的内存。 假如对象的援用被置为null,只是断开了当前线程栈帧中对该对象的援用关联,而 垃圾网络器是运转在背景的线程,只要当用户线程运转到平安点(safe point)或许平安地区才会扫描对象援用关联,扫描到对象没有被援用则会标记对象,这时刻依然不会马上开释该对象内存,由于有些对象是可恢复的(在 finalize要领中恢复援用 )。只要肯定了对象没法恢复援用的时刻才会消灭对象内存。

9、ListView跟RecyclerView的区分

参考回覆:

动画区分:

在RecyclerView中,内置有很多动画API,比方:notifyItemChanged(), notifyDataInserted(), notifyItemMoved()等等;假如须要自定义动画结果,能够经由历程完成(RecyclerView.ItemAnimator类)完成自定义动画结果,然后挪用RecyclerView.setItemAnimator();

然则ListView并没有完成动画结果,但我们能够在Adapter自身完成item的动画结果;

革新区分:

ListView中平常革新数据是用全局革新notifyDataSetChanged(),如许一来就会异常斲丧资本;自身没法完成部分革新,然则假如要在ListView完成部分革新,依然是能够完成的,当一个item数据革新时,我们能够在Adapter中,完成一个onItemChanged()要领,在要领内里获取到这个item的position(能够经由历程getFirstVisiblePosition()),然后挪用getView()要领来革新这个item的数据;

RecyclerView中能够完成部分革新,比方:notifyItemChanged();

缓存区分:

RecyclerView比ListView多两级缓存,支撑多个离ItemView缓存,支撑开发者自定义缓存处置惩罚逻辑,支撑一切RecyclerView共用同一个RecyclerViewPool(缓存池)。

ListView和RecyclerView缓存机制基础一致,但缓存运用差别

10、ListView的adapter是什么adapter

参考回覆:

c980bc07b3ed17c551eeea41c3d10be0.png

BaseAdapter:抽象类,现实开发中我们会继续这个类而且重写相干要领,用得最多的一个适配器!

ArrayAdapter:支撑泛型操纵,最简朴的一个适配器,只能展示一行笔墨〜

SimpleAdapter:一样具有优越扩展性的一个适配器,能够自定义多种结果!

SimpleCursorAdapter:用于显现简朴文本范例的listView,平常在数据库那边会用到,不过有点过期,不引荐运用!

11、LinearLayout、FrameLayout、RelativeLayout机能对照,为何?

参考回覆:

RelativeLayout会让子View挪用2次onMeasure,LinearLayout 在有weight时,也会挪用子 View 2次onMeasure

RelativeLayout的子View假如高度和RelativeLayout差别,则会激发效力问题,当子View很庞杂时,这个问题会越发严峻。假如能够,只管运用padding替代margin。

在不影响层级深度的情况下,运用LinearLayout和FrameLayout而不是RelativeLayout。

以上就是11道Android机能优化面试题【附答案】的细致内容,更多请关注ki4网别的相干文章!

收藏 | 0



推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 本文由编程笔记#小编整理,主要介绍了关于数论相关的知识,包括数论的算法和百度百科的链接。文章还介绍了欧几里得算法、辗转相除法、gcd、lcm和扩展欧几里得算法的使用方法。此外,文章还提到了数论在求解不定方程、模线性方程和乘法逆元方面的应用。摘要长度:184字。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
author-avatar
俺是糊涂人一个
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有