大家好,这一期呢,我们来说一下,安卓的面试问题。
第1道题, 什么是安卓?
安卓是一款开源的手机操作系统。它的内核是基于Linux的。
第2道题,什么是谷歌安卓SDK?
谷歌安卓SDK是一系列的工具集, 用来做安卓应用程序开发的。
其中也包含了图形界面工具,可以模拟安卓设备的运行, 也包含了相关的工具来测试和调试你的代码。
第3道题,什么是安卓的架构?
安卓的架构包含4个主要部件Linux内核,程序库,安卓框架和安卓应用。
第4道题,描述一下安卓框架。
安卓框架是安卓架构中的重要一环,是程序员用于编写安卓应用的基础,包含所有的类和方法,程序库等等。
第5道题,什么是AAPT?
AAPT是Android资产打包工具的缩写。这些工具允许程序员处理压缩兼容的文件,这其中包括创建, 解压还有查看里面的内容。
第6道题, 在Android生态中,模拟器有什么好处?
模拟器允许程序员在里面运行自己早期开发的代码。这样你就不需要在实际的设备上去运行还没有成型的程序。第一可以节省成本,第二防止设备被有些程序损坏。
第7道题,什么是activity creator?
Activity creator是在安卓集成环境中用来创建安卓工程的工具,它是由一些脚本构成的。
第8道题,描述一下activities。
Activity可以呈现给用户一个界面,用户可以输入数据,并且可以显示数据计算后的结果,当然activity也可以是隐藏性的。
第9道题,什么是intents?
Intent在安卓环境中可以向用户发出通知,同时用户也可以向intent做出自己的反馈。
第10道题,activities和services有什么区别?
Activities是可以随时被关闭的, 常见的情况就是用户不需要这个界面了,就直接可以把这个界面关掉。
而services就不一样,它是用来在程序的后台运行的。不管有没有activities的运行, services都可以独立的在后台运行。
第11道题, 一个安卓工程在文件结构上哪些项目是比较重要的?
Android的manifest xml。
build的xml。
bin文件夹。
src文件夹。
res文件夹。
assets文件夹。
第12道题,以xml为基础的布局有什么重要性?
Xml布局提供了统一的,标准性的uI设计格式。通常的ui可以使用xml布局来定义,当然也可以直接在其他代码中定义。
第13道题,什么是容器?
容器就是为了容纳多个子部件在里面,它可以包含子容器,它可以包含一个标签,一个成员变量,一个按钮等等。
第14道题,什么是orientation?
Orientation是指屏幕的布局,是横向布局还是纵向布局。
第15道题,安卓在移动市场中的重要性有哪些?
目前的移动市场中,安卓的市场份额是最大的, 超过了百分之80。
第16道题,安卓的不好的地方有哪些?
安卓第1个不好的地方就是厂商太多,版本太多,这样会导致一个兼容性的问题。
安卓第2个不好的地方是给程序员带来了很多的麻烦, 程序员不得不处理不同的版本的兼容,也需要处理不同的屏幕大小的兼容。
第17道题,什么是adb?
Adb是Android debug bridge的缩写。它允许你通过命令行的方式跟安卓手机进行交互。它的交互接口是通过以虚拟器的一个端口来进行的。
第18道题,Activity4个比较重要的阶段。
active, paused, stopped destroyed.
第19道题, 什么是anr?
Anr是application not responding的缩写。当一个界面,很长时间没有给用户反馈的时候,anr就会被触发。
第20道题, 说一下应用开发中权限设置的重要性。
权限主要是为了保护数据和代码, 有了这些权限的设定,程序员在开发程序的时候,可以指定哪些权限用户需要允许才能使用程序对应的功能。
第21道题,intent filter的功能是什么?
Intent filter可以指定信息的类别,每个组件在收到这种信息的时候,可以根据自身的信息类别定义来决定是否进行响应。
第22道题,列举出三个activity的关键状态对应。
整个周期, oncreate, ondestroy.
可见周期, onstart,onstop.
前台周期, onresume,onpause.
第23道题,什么时候onstop方法会被调用?
当activity的界面不被用户看到的时候。
第24道题, 如何避免anr?
主线程及ui线程要尽可能的少做事情, 以便确保反映时间。使用后台线程来处理比较耗时的任务。
第25道题,dalvik在安卓开发中有什么作用?
Dalvik就是安卓平台的虚拟机。在Android平台上,通过更好的内存管理, 你可以运行多个dalvik虚拟机。
第26道题,Android manifest xml是干什么的?
这个文件对于每个安卓应用工程都是必须的。它在应用的根目录下,它包含着整个程序运行的信息,安卓系统必须在程序运行之前知道这些信息。
第27道题, 列举一下通过Aidl创建一个绑定服务的步骤。
第1步是创建一个Aidl文件, 用来定义程序接口。
第2步是实现这些接口, 这其中包括扩展,抽象的stub类,同时要实现它的方法。
第3步是暴露这些接口, 以便客户端可以调用这些接口。
第28道题, 什么时候anr会出现?
当用户输入在5秒钟内没有反应的时候,Anr会出现。
当一个broadcast receiver在10秒钟之内还没有做完的时候,anr也会出现。
第29题,什么是aidl?
它是Android interface definition language的缩写。它定义了客户端与一个服务之间进行通讯的接口。这种通信可以是进程内的,也可以是跨进程的。因为一个进程无法访问另一个进程的内存空间,所以通过这种接口,我们可以实现两个进程之间的通信。
第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, resource externalization,notifications, content providers.
第35道题, 什么是sticky intent?
通过sendstickybroadcast方法,广播而来的就是一个sticky intent, 会在广播完了以后依然存在。
第36道题, 通常的bitmap跟nine patch image有什么区别?
通常来说nine patch image允许中间区域向两个坐标方向放大缩小, 边界上允许向一个坐标方向放大缩小, 4个角上不允许放大缩小。
第37道题,安卓中activity的加载模式有哪些?
Standard, Single Top, Single task, Single instance.
第38道题, 当屏幕旋转以后,activity会发生什么?
当屏幕旋转以后,当前的activity会被杀掉,然后会调用on restart方法,其他的跟启动一个activity的流程是一样的。
第39道题,如何防止在屏幕旋转以后数据被重置和重新加载?
最基本的方法是用view models和on save instance state来做。View models它是不会在activity重启的过程中发生改变的。是独立于activity的。on save instance state用来收集比较少量的用户界面数据。
第40道题, 有哪些方法在启动一个新activity的时候可以消除activity的后退栈状态?
第1种方法是使用flag activity clear Top.
第2种方法是使用flag activity clear task和flag activity new task.
第41道题,Flag activity clear task 和 flag activity clear top的区别是什么?
Flag activity clear task会清空所有的activities.它必须跟flag activity new task结合才能启动一个新的activity。
Flag activity clear Top会保留老activity中的一个, 清空其他所有的. 如果没有老activity,那么它就会启动一个新的。
第42道题, Content provider是干什么用的?
Content provider用来从一个应用中向另一个应用提供数据。
如果你想使用content provide的数据,那么你必须使用content resolver对象作为客户端。
第43道题, 如何访问content provider中的数据?
首先要确定你的安卓应用有读取的权限,然后使用get content resolver来获取content resolver对象,然后在这个对象上使用query方法。Query方法会返回一个cursor对象, 使用cursor对象你可以访问每一列每一行的数据。
第44道题, 谈一下services。
Services是用来执行一些比较耗时的任务。
有三种services。
一种是前台service。比如说你可以用来播放音乐。但是必须要给用户发送一个提示。
一种是后台service。从API26以后,推荐使用work manager来管理后台service。
一种是bound service。使用bind service可以创建bound service,提供了客户端服务器端进行交互的通信模式。
第45道题, Service和intent service的区别。
Service是安卓中所有service的基础类。
Intent service是service的扩展类。它运行在worker线程里面,客户端通过start service来发送请求, 当没有请求的时候,会终止自己。
第46道题, async task和线程的区别。
线程是为了执行一段比较耗时的操作,不能够用来更新界面上的改变。
async task主要是来做比较快速的操作, 同时可以更新界面。
第47道题, Handler是用来干什么的?
handler可以用来管理线程, 进行线程间的通信。它独立于activity之外运行。如果你需要在后周期性的执行操作, handler是一个非常好的方案。
第48道题, 什么是job scheduling?
job scheduling是一种让开发者只集中到工作本身不需要关心资源是如何分配的,这样系统就会帮你处理类似内存,电源和网络连接方面的调度。
第49道题, async task和activity的生命周期有什么关联?
两者没有关联。
第50道题, On trim memory 方法是用来干什么的?
当安卓系统决定要对内存进行调整的时候,这个方法会被调用。
当你实现component call backs 2 interface的时候, 如果你的程序被系统杀掉,这个方法就会被调用。
第51道题, aidl和messenger queue的区别?
aidl主要是用于进程间的通信。
Messenger queue主要是用于进程内的通信。
第52道题, Thread pool和独立的多个thread有什么区别?
线程的创建和销毁都是会消耗很多时间和资源的。如果你会频繁的创建线程的话,那最好的方法就是使用thread pool。
第53道题, 如何从后台的服务中更新前端的activity ui?
可以使用broadcast receiver.
第54道题, 什么是pending intent?
如果你希望一个操作,在未来的某个时间被触发,那么你就应该创建pending intent。
第55道题, 说一下fragment的生命周期。
On attach, on create, on create view, on activity created, on start, on resume, on pause, on stop, on destroy view, on destroy.
第56道题, 什么时候你应该用fragment而不是activity?
第1种情况是如果你的ui组件会被多个activity使用。
第2种情况是你的activity中会有多个试图,它们会像tab 那样显示。
第3种情况是你的activity重启以后你的数据依然会保留在某个地方。
第57道题,解释一下adding和replacing fragment的区别。
Replacing会去掉已经存在的fragment,然后加上一个新的, 如果你按back 按钮的话, 这个方法会调用on create view。
Adding不会去掉存在的fragment, 只会加上一个新的fragment, 如果你按back按钮的话,它不会调用on create view。
第58道题 为什么推荐用缺省构造函数来创建fragment?
原因是数据通过bundle传送,可以保证你不会丢失数据。
第59道题, 在你使用replacing添加一个fragment的时候,如何保证用户按回退按钮可以返回到上一个fragment?
在调用commit之前,首先调用add to back stack。
第60道题, 什么是retained fragment?
通过调用set retain instance,true来告诉系统,保留这个fragment.
第61道题, fragment pager adapter和fragment state pager adapter的区别是什么?
Fragment pager adapter的每一页会保存在内存里面。在翻页的时候试图会被重新创建,但是fragment不会被重新创建。
使用这个adapter会消耗大量的内存。使用detach方法来退掉这个fragment,而不是用remove。
Fragment state pager adapter 的每一页在不可见的时候都会被释放掉,只保存状态. 这样做适合处理大数据的显示。尤其是对于非常多的fragement页的时候,这种方法是首选。
第62道题,什么是loaders?
Loaders是在API11以后添加进来的用于加载来自数据源的数据的机制。会保留和缓存查询到的结果,并且能够防止重复查询。
第63道题, Dialog和dialog fragment的区别?
Dialog是独立于activity之外的试图界面。
Dialog fragment是依附于activity的。它包含一个dialog对象。
第64道题, Margin和padding的区别。
Margin是在容器外面,padding是在容器里面。
第65道题, 如何支持多屏幕尺寸?
使用灵活的布局。
使用可伸缩的nine patch bitmaps.
避免hard coded布局大小。
在资源布局中使用尺寸修饰符定义不同的布局。
第65道题, 什么是bitmap pooling?
就是用一个pool来管理多个bitmap对象。在使用的时候去pool里找,如果不存在就创建,如果存在了的话直接拿来用。
第66道题, 安卓中的权限保护等级是指什么?
正常等级。
危险等级。
签名等级。
签名或者系统等级。
第67道题, Shared preferences中commit和applied区别是什么?
Commit是同步的。
Apply是异步的。
第68道题, Recycler review是如何工作的?
recycler view 用来显示非常长的列表。
它使用on bind view方法来替换视图中的数据。
从而提高了速度,节省了内存。
第69道题, Recycler review跟listview的区别是什么?
Recycle review使用view holder的模式。而这在listview中不是必须的。
Recycler view可以支持纵向和横向的列表, 这个可以通过layout manager来实现。而list view只是竖向的列表。
动画效果方面recycler view更好。
第70道题, Mvc和mvp和mvvm的区别是什么。
Mvc也就是model,view, controller架构. 这种模式的最大问题是view跟controller, 耦合性非常强。这样第一会导致单元测试比较麻烦。View的一点改动会导致controller方面也必须做改动。
Mvp就是model view presenter架构。这种架构通过一个试图接口,使得单元测试非常容易。
Mvvm就是model view viewmodel架构. model部分负责数据和数据处理,商业逻辑方面。viewmodel部分负责获取model的数据,并且经过计算给view使用。可以提供view和model之间通过事件的方式传递消息。
第71道题, 什么是软件开发中的solid原则。
S就是single responsibility principle.
O就是open closed principle.
L就是liskov substitution principle.
I就是interface segregation principle.
D就是dependency inversion principle.
上面只是我个人对这个话题的一点心得体会,分享给大家,希望与大家讨论,共同提高,欢迎拍砖。