源码先锋

源码先锋

​安卓技术面试71题(附带答案讲解)

admin 101 197

大家好,这一期呢,我们来说一下,安卓的面试问题。

第1道题,什么是安卓?

安卓是一款开源的手机操作系统。它的内核是基于Linux的。

第2道题,什么是谷歌安卓SDK?

谷歌安卓SDK是一系列的工具集,用来做安卓应用程序开发的。

其中也包含了图形界面工具,可以模拟安卓设备的运行,也包含了相关的工具来测试和调试你的代码。

第3道题,什么是安卓的架构?

安卓的架构包含4个主要部件Linux内核,程序库,安卓框架和安卓应用。

第4道题,描述一下安卓框架。

安卓框架是安卓架构中的重要一环,是程序员用于编写安卓应用的基础,包含所有的类和方法,程序库等等。

第5道题,什么是AAPT?

AAPT是Android资产打包工具的缩写。这些工具允许程序员处理压缩兼容的文件,这其中包括创建,解压还有查看里面的内容。

第6道题,在Android生态中,模拟器有什么好处?

模拟器允许程序员在里面运行自己早期开发的代码。这样你就不需要在实际的设备上去运行还没有成型的程序。第一可以节省成本,第二防止设备被有些程序损坏。

第7道题,什么是activitycreator?

Activitycreator是在安卓集成环境中用来创建安卓工程的工具,它是由一些脚本构成的。

第8道题,描述一下activities。

Activity可以呈现给用户一个界面,用户可以输入数据,并且可以显示数据计算后的结果,当然activity也可以是隐藏性的。

第9道题,什么是intents?

第10道题,activities和services有什么区别?

Activities是可以随时被关闭的,常见的情况就是用户不需要这个界面了,就直接可以把这个界面关掉。

而services就不一样,它是用来在程序的后台运行的。不管有没有activities的运行,services都可以独立的在后台运行。

第11道题,一个安卓工程在文件结构上哪些项目是比较重要的?

Android的manifestxml。

build的xml。

bin文件夹。

src文件夹。

res文件夹。

assets文件夹。

第12道题,以xml为基础的布局有什么重要性?

Xml布局提供了统一的,标准性的uI设计格式。通常的ui可以使用xml布局来定义,当然也可以直接在其他代码中定义。

第13道题,什么是容器?

容器就是为了容纳多个子部件在里面,它可以包含子容器,它可以包含一个标签,一个成员变量,一个按钮等等。

第14道题,什么是orientation?

Orientation是指屏幕的布局,是横向布局还是纵向布局。

第15道题,安卓在移动市场中的重要性有哪些?

目前的移动市场中,安卓的市场份额是最大的,超过了百分之80。

第16道题,安卓的不好的地方有哪些?

安卓第1个不好的地方就是厂商太多,版本太多,这样会导致一个兼容性的问题。

安卓第2个不好的地方是给程序员带来了很多的麻烦,程序员不得不处理不同的版本的兼容,也需要处理不同的屏幕大小的兼容。

第17道题,什么是adb?

Adb是Androiddebugbridge的缩写。它允许你通过命令行的方式跟安卓手机进行交互。它的交互接口是通过以虚拟器的一个端口来进行的。

第18道题,Activity4个比较重要的阶段。

active,paused,stoppeddestroyed.

第19道题,什么是anr?

第20道题,说一下应用开发中权限设置的重要性。

权限主要是为了保护数据和代码,有了这些权限的设定,程序员在开发程序的时候,可以指定哪些权限用户需要允许才能使用程序对应的功能。

第21道题,intentfilter的功能是什么?

Intentfilter可以指定信息的类别,每个组件在收到这种信息的时候,可以根据自身的信息类别定义来决定是否进行响应。

第22道题,列举出三个activity的关键状态对应。

整个周期,oncreate,ondestroy.

可见周期,onstart,onstop.

前台周期,onresume,onpause.

第23道题,什么时候onstop方法会被调用?

当activity的界面不被用户看到的时候。

第24道题,如何避免anr?

主线程及ui线程要尽可能的少做事情,以便确保反映时间。使用后台线程来处理比较耗时的任务。

第25道题,dalvik在安卓开发中有什么作用?

Dalvik就是安卓平台的虚拟机。在Android平台上,通过更好的内存管理,你可以运行多个dalvik虚拟机。

第26道题,Androidmanifestxml是干什么的?

这个文件对于每个安卓应用工程都是必须的。它在应用的根目录下,它包含着整个程序运行的信息,安卓系统必须在程序运行之前知道这些信息。

第27道题,列举一下通过Aidl创建一个绑定服务的步骤。

第1步是创建一个Aidl文件,用来定义程序接口。

第2步是实现这些接口,这其中包括扩展,抽象的stub类,同时要实现它的方法。

第3步是暴露这些接口,以便客户端可以调用这些接口。

第28道题,什么时候anr会出现?

当用户输入在5秒钟内没有反应的时候,Anr会出现。

当一个broadcastreceiver在10秒钟之内还没有做完的时候,anr也会出现。

第29题,什么是aidl?

它是Androidinterfacedefinitionlanguage的缩写。它定义了客户端与一个服务之间进行通讯的接口。这种通信可以是进程内的,也可以是跨进程的。因为一个进程无法访问另一个进程的内存空间,所以通过这种接口,我们可以实现两个进程之间的通信。

第30题,Aidl支持哪些数据类型?

string

charSequence

List

Map

int,long,char,boolean

第31题,什么是fragment?

Fragment是activity的一部分。在一个activity中,你可以包含多个fragment。Fragment最大好处是可重用的。

第32题,什么是可见的activity?

可见的activity是指它在一个对话框框的后面,用户可以看到它,但它并不在最前台。

第33题,删掉一个前端的activity的最好时机是什么?

当一个前端的activity占有太多的内存的时候,最好的时机把它杀掉。

第34题,在安卓应用架构中最核心的组件有哪些?

Services,intent,resourceexternalization,notifications,contentproviders.

第35道题,什么是stickyintent?

通过sstickybroadcast方法,广播而来的就是一个stickyintent,会在广播完了以后依然存在。

第36道题,通常的bitmap跟ninepatchimage有什么区别?

通常来说ninepatchimage允许中间区域向两个坐标方向放大缩小,边界上允许向一个坐标方向放大缩小,4个角上不允许放大缩小。

第37道题,安卓中activity的加载模式有哪些?

Standard,SingleTop,Singletask,Singleinstance.

第38道题,当屏幕旋转以后,activity会发生什么?

当屏幕旋转以后,当前的activity会被杀掉,然后会调用onrestart方法,其他的跟启动一个activity的流程是一样的。

第39道题,如何防止在屏幕旋转以后数据被重置和重新加载?

最基本的方法是用viewmodels和onsaveinstancestate来做。Viewmodels它是不会在activity重启的过程中发生改变的。是独立于activity的。onsaveinstancestate用来收集比较少量的用户界面数据。

第40道题,有哪些方法在启动一个新activity的时候可以消除activity的后退栈状态?

第1种方法是使用flagactivityclearTop.

第2种方法是使用flagactivitycleartask和flagactivitynewtask.

第41道题,Flagactivitycleartask和flagactivitycleartop的区别是什么?

Flagactivitycleartask会清空所有的activities.它必须跟flagactivitynewtask结合才能启动一个新的activity。

FlagactivityclearTop会保留老activity中的一个,清空其他所有的.如果没有老activity,那么它就会启动一个新的。

第42道题,Contentprovider是干什么用的?

Contentprovider用来从一个应用中向另一个应用提供数据。

如果你想使用contentprovide的数据,那么你必须使用contentresolver对象作为客户端。

第43道题,如何访问contentprovider中的数据?

首先要确定你的安卓应用有读取的权限,然后使用getcontentresolver来获取contentresolver对象,然后在这个对象上使用query方法。Query方法会返回一个cursor对象,使用cursor对象你可以访问每一列每一行的数据。

第44道题,谈一下services。

Services是用来执行一些比较耗时的任务。

有三种services。

一种是前台service。比如说你可以用来播放音乐。但是必须要给用户发送一个提示。

一种是后台service。从API26以后,推荐使用workmanager来管理后台service。

一种是boundservice。使用bindservice可以创建boundservice,提供了客户端服务器端进行交互的通信模式。

第45道题,Service和intentservice的区别。

Service是安卓中所有service的基础类。

Intentservice是service的扩展类。它运行在worker线程里面,客户端通过startservice来发送请求,当没有请求的时候,会终止自己。

第46道题,asynctask和线程的区别。

线程是为了执行一段比较耗时的操作,不能够用来更新界面上的改变。

asynctask主要是来做比较快速的操作,同时可以更新界面。

第47道题,Handler是用来干什么的?

handler可以用来管理线程,进行线程间的通信。它独立于activity之外运行。如果你需要在后周期性的执行操作,handler是一个非常好的方案。

第48道题,什么是jobscheduling?

jobscheduling是一种让开发者只集中到工作本身不需要关心资源是如何分配的,这样系统就会帮你处理类似内存,电源和网络连接方面的调度。

第49道题,asynctask和activity的生命周期有什么关联?

两者没有关联。

第50道题,Ontrimmemory方法是用来干什么的?

当安卓系统决定要对内存进行调整的时候,这个方法会被调用。

当你实现componentcallbacks2interface的时候,如果你的程序被系统杀掉,这个方法就会被调用。

第51道题,aidl和messengerqueue的区别?

aidl主要是用于进程间的通信。

Messengerqueue主要是用于进程内的通信。

第52道题,Threadpool和独立的多个thread有什么区别?

线程的创建和销毁都是会消耗很多时间和资源的。如果你会频繁的创建线程的话,那最好的方法就是使用threadpool。

第53道题,如何从后台的服务中更新前端的activityui?

可以使用broadcastreceiver.

第54道题,什么是pingintent?

如果你希望一个操作,在未来的某个时间被触发,那么你就应该创建pingintent。

第55道题,说一下fragment的生命周期。

Onattach,oncreate,oncreateview,onactivitycreated,onstart,onresume,onpause,onstop,ondestroyview,ondestroy.

第56道题,什么时候你应该用fragment而不是activity?

第1种情况是如果你的ui组件会被多个activity使用。

第2种情况是你的activity中会有多个试图,它们会像tab那样显示。

第3种情况是你的activity重启以后你的数据依然会保留在某个地方。

第57道题,解释一下adding和replacingfragment的区别。

Replacing会去掉已经存在的fragment,然后加上一个新的,如果你按back按钮的话,这个方法会调用oncreateview。

Adding不会去掉存在的fragment,只会加上一个新的fragment,如果你按back按钮的话,它不会调用oncreateview。

第58道题为什么推荐用缺省构造函数来创建fragment?

原因是数据通过bundle传送,可以保证你不会丢失数据。

第59道题,在你使用replacing添加一个fragment的时候,如何保证用户按回退按钮可以返回到上一个fragment?

在调用commit之前,首先调用addtobackstack。

第60道题,什么是retainedfragment?

通过调用setretaininstance,true来告诉系统,保留这个fragment.

第61道题,fragmentpageradapter和fragmentstatepageradapter的区别是什么?

Fragmentpageradapter的每一页会保存在内存里面。在翻页的时候试图会被重新创建,但是fragment不会被重新创建。

使用这个adapter会消耗大量的内存。使用detach方法来退掉这个fragment,而不是用remove。

Fragmentstatepageradapter的每一页在不可见的时候都会被释放掉,只保存状态.这样做适合处理大数据的显示。尤其是对于非常多的fragement页的时候,这种方法是首选。

第62道题,什么是loaders?

Loaders是在API11以后添加进来的用于加载来自数据源的数据的机制。会保留和缓存查询到的结果,并且能够防止重复查询。

第63道题,Dialog和dialogfragment的区别?

Dialog是独立于activity之外的试图界面。

Dialogfragment是依附于activity的。它包含一个dialog对象。

第64道题,Margin和padding的区别。

Margin是在容器外面,padding是在容器里面。

第65道题,如何支持多屏幕尺寸?

使用灵活的布局。

使用可伸缩的ninepatchbitmaps.

避免hardcoded布局大小。

在资源布局中使用尺寸修饰符定义不同的布局。

第65道题,什么是bitmappooling?

就是用一个pool来管理多个bitmap对象。在使用的时候去pool里找,如果不存在就创建,如果存在了的话直接拿来用。

第66道题,安卓中的权限保护等级是指什么?

正常等级。

危险等级。

签名等级。

签名或者系统等级。

第67道题,Sharedpreferences中commit和applied区别是什么?

Commit是同步的。

Apply是异步的。

第68道题,Recyclerreview是如何工作的?

recyclerview用来显示非常长的列表。

它使用onbindview方法来替换视图中的数据。

从而提高了速度,节省了内存。

第69道题,Recyclerreview跟listview的区别是什么?

Recyclereview使用viewholder的模式。而这在listview中不是必须的。

Recyclerview可以支持纵向和横向的列表,这个可以通过layoutmanager来实现。而listview只是竖向的列表。

动画效果方面recyclerview更好。

第70道题,Mvc和mvp和mvvm的区别是什么。

Mvc也就是model,view,controller架构.这种模式的最大问题是view跟controller,耦合性非常强。这样第一会导致单元测试比较麻烦。View的一点改动会导致controller方面也必须做改动。

Mvp就是modelviewpresenter架构。这种架构通过一个试图接口,使得单元测试非常容易。

Mvvm就是modelviewviewmodel架构.model部分负责数据和数据处理,商业逻辑方面。viewmodel部分负责获取model的数据,并且经过计算给view使用。可以提供view和model之间通过事件的方式传递消息。

第71道题,什么是软件开发中的solid原则。

S就是singleresponsibilityprinciple.

O就是openclosedprinciple.

L就是liskovsubstitutionprinciple.

I就是interfacesegregationprinciple.

D就是depencyinversionprinciple.

上面只是我个人对这个话题的一点心得体会,分享给大家,希望与大家讨论,共同提高,欢迎拍砖。