热门标签 | 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



推荐阅读
  • 初识java关于JDK、JRE、JVM 了解一下 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的步骤和方法
    本文介绍了在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的详细步骤和方法。首先需要下载最新的Java SE Development Kit 9发行版,然后按照给出的Shell命令行方式进行安装。详细的步骤和方法请参考正文内容。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • Mono为何能跨平台
    概念JIT编译(JITcompilation),运行时需要代码时,将Microsoft中间语言(MSIL)转换为机器码的编译。CLR(CommonLa ... [详细]
  • POCOCLibraies属于功能广泛、轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台、工业自动化等领域。POCOCLibrai ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • 这个问题困扰了我两天,卸载Dr.COM客户端(我们学校上网要装这个客户端登陆服务器,以后只能在网页里输入用户名和密码了),问题解决了。问题的现象:在实验室机台式机上安装openfire和sp ... [详细]
  • webui之常用js操作(webui界面是什么)
    本文目录一览:1、web前端开发需要掌握的几个必备技术 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了预加载多个本地WebView相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 唱唱反调:风口上的技术不要盲目追
      对于前端领域的开发者来说,“学不动了”虽然更多是一种调侃,但也真实地反映出了他们面对频繁出新的前端技术时又爱又恨的心情。在经历了移动互联网的大爆发后,前端领域的边界不 ... [详细]
  • H5前端开发_金三银四,H5前端开发如何用性能优化征服前端面试官?
    本文由编程笔记#小编为大家整理,主要介绍了金三银四,H5前端开发如何用性能优化征服前端面试官?相关的知识,希望对你有一定的参考价值。许多Web性能优化都是无效的,问题出在哪 ... [详细]
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社区 版权所有