Android经典面试题大全[陆续完善中......]

来源:互联网 发布:新版本mac 启动输入法 编辑:程序博客网 时间:2024/05/16 00:30

From:http://blog.csdn.net/xiang_j2ee/article/details/7231415

1、Android中为什么要经常使用内部类?内部类特征:(1) 内部类与父类同生共死;(2) 内部成员变量之间,可以互相访问;(3) 内部成员变量可以访问到父类的一些类型;(4) 父类可以操作内部的一些东西所以:在Android中常常为了满足自身的需要,而又不需要太复杂的去编写它,所以使用内部类。同时在Android中经常在设置事件和多线程的时候使用匿名内部类。 2、版本控制中,SVN与GIT有什么区别?(1)GIT是分布式的,SVN不是;这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。GIT跟SVN一样有自己的集中式版本库或服务器。但GIT更倾向于被使用于分布式模式,也就是每个开发人员从中心版本库/服务器上chect out代码后会在自己的机器上克隆一个自己的版本库。可以这样说,如果你被困在一个不能连接网络的地方时,仍然能够提交文件,查看历史版本记录,创建项目分支等。当你突然遇到没有网络的环境时,这个将解决你的大麻烦。(2)GIT把内容按元数据方式存储,而SVN是按文件;所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。如果你把.git目录的体积大小跟.svn比较,你会发现它们差距很大。因为,.git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。(3)GIT分支和SVN的分支不同;分支在SVN中一点不特别,就是版本库中的另外的一个目录。如果你想知道是否合并了一个分支,你需要手工运行像这样的命令svn propget svn:mergeinfo,来确认代码是否被合并。所以,经常会发生有些分支被遗漏的情况。然而,处理GIT的分支却是相当的简单和有趣。你可以从同一个工作目录下快速的在几个分支间切换。你很容易发现未被合并的分支,你能简单而快捷的合并这些文件。(4)GIT没有一个全局的版本号,而SVN有;目前为止这是跟SVN相比GIT缺少的最大的一个特征。SVN的版本号实际是任何一个相应时间的源代码快照。(5)GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。 以上内容是从一些网站论坛找的观点,下面是自身总结:Git优势(对于SVN的优势):(1) 速度(用C写的,比SVN快,且分布式提交,快照,分支合并等都在本地执行,最后与主分支合并才联网提交)(2) 设计简单(3) 强有力的支持非线性开发(有的程序员建上千个分支),方便管理分支(4) 能够管理大型项目(如大型项目)关注两点:速度,和大容量 3、什么是Android?Android是手机操作系统,是Google的产品。 4、说说Android有哪些特性? Android应用程序基本特性(官方总结)1、.apk是android应用程序安装格式,.dex是android二进制执行文件格式2、Android操作系统是基于Linux的多用户操作系统,每一个应用程序都是使用不同的用户3、默认情况下,一个应用程序一个userid,系统设定,不需要手动去设定,针对这样的应用程序,该用户有权限进行所有操作4、每一个进程有自己的虚拟机实例,所以每个应用程序相对独立5、默认情况下,应用程序都有自己的linux进程,当资源不够的时候,系统会决定何时关闭它6、然而,也有例外: |-可以给两个应用程序共享同一个userid,让彼此之间共享资源 |-应用程序可以请求访问系统资源,比如通讯录,短信等,但需求安装被授权 5 、Android的系统架构的理解1、 Linux kernel开源,C开发;优化内存管理;有自己的进程和线程机制;驱动模型比较好;支持驱动模型加载。2、 HAL layer(硬件抽象层:负责核心驱动的沟通)Libraries、android Runtime使用C、C++类库层;定义接口与驱动打交道;建立一种与硬件的逻辑关系;定制额外的需求。3、 Application Framework该层使用JNI调用倒数第二层的核心类库,即调用C++程序4、 Application核心的应用程序,该层直接调用上层的java类库,非常方便 6、执行eclipse的Run或者debug时候,发生了什么事情?所有的操作都是有ADT控制1、 将项目所有的源代码编译成dex二进制文件2、 打包成APK3、 选择target设备,发布的地方(模拟器)4、 上传APK5、 安装APK6、 启动主activity 7、说说Activity,view ,window之间的关系 Activity在构造的时候new了一个Window与当前的上下文绑定,window是抽象类,通过phoneWindow来绑定自己定义的View,通过setContentView展示出来 8、掌上设备开发的局限性会制约我们的需求通常有哪些?1、 更低的处理器2、 有限的内存3、 有限的存储能力4、 小屏幕和低分辨率(HVGA、QVGA、WVGA)5、 数据传输的高成本6、 数据传输的低速度和高延迟7、 不稳定的数据连接8、 有限的电量 9、做手机开发经常需要思考哪些问题?1、 性能(更快和更灵敏)官网有答案2、 响应能力(拒绝ANR)|-什么是ANR:应用程序无响应 application no response|-何时会ANR:点击事件和按键事件5秒钟无响应;接收到消息后10秒钟没有处理返回|-处理准则:IO操作(File,Sql,Network)和复杂的运算(游戏)最好用异步3、 无缝:用户使用自然(与第三方程序的交互,前台后台的切换)4、 安全:对操作权限的考虑 10、什么构成了android应用程序?(六大件)1、 应用程序四大组件① Activity|-Activity是android应用程序的一个界面,可以通过这个界面查看联系人,打电话,玩游戏|-一个应用程序通常包含多个Activity|-Activity通过布局管理添加各种View组件|-通过setContentView(int)方法可以将试图呈现出来② Service|-Service运行在后台,负责处理一些用户看不到,并且会有持续时间的事情。如下载数据。|-Service不生成UI,是不可见的|-所有用户实现的Service必须继承系统的Service类,并且在配置文件中进行注册③ Content Provider|-数据在android当中是程序私有的|-Content Provider提供了多个程序间数据交互的机制|-Content Provider暴露出来一些标准的API来对数据进行操作④ Broadcast Receiver(广播消息)|-Broadcast Receiver负责对外部事件做出响应|-Broadcast Receiver不生成UI,是不可见的|-所有用户实现的Broadcast Receiver必须继承系统的Broadcast Receiver类,需要在程序中进行注册|-应用程序可以通过Context.sendBraodcast()将自己的intent广播出去。其他程序通过自身的Broadcast Receivers截获后进行事件处理 2、 重要对象Intent(四大组件中,三个组件[Activity/Service/Broadcast Receiver]都要Intent的支持)|-传递Intent启动一个Activity,startActivity,startActivityForResult|-传递Intent启动一个Service,startService,bindService|-通过Intent新加入一个广播,sendBroadcast,sendOrderedBroadcast(),sendStickyBroadcast()|-执行一个查询,ContentResolve的query() 3、 其他:Launcher(系统级应用程序)&Widget(小插件);Notification(提醒功能) 11、Manifest如何解析?1、 应用程序安装的时候,manifest信息会放到一张系统索引表里面2、 系统启动的时候,PackageManagerService读取Manifest信息3、 应用程序启动的时候,Launcher进行系统级判断,比如最小的SDK等4、 四大组件在需求的时候实例化操作 12、请说出Android进程5个等级1、Active Process @ 正处于Activity Resume()状态 @ 正处于与bound服务交互的状态 @ 正处于服务在前台运行的状态 @ Service生命周期函数正在被执行 @ BroadcastReceiver正在执行onReceive()方法2、Visible Process @ 当前进程不是焦点进程,Activity不在前段显示,但也没有完全隐蔽,能够看得见,比如弹出的对话框3、Started Service Process @ 正在运行的,不在上述两种状态的Service4、Backgroud Process @ 不可见状态的Activity,又没有任何相关Service运行的,系统有个后台进程列表,一般情况采取后进先出的原则释放后台进程资源5、Empty Process @ 没有运行任何Components的进程,保留在这个进程主要是为了缓存的需要 13、什么是Activity?修正上面部分观点:Activity不是界面,官方定义Activity是Android应用程序提供交互界面的一个重要主件,但本人认为也不太准确,至少不太全面;站在宏观一点的角度去看,Activity更像是个业务类,是承载应用程序界面及业务行为的类,包括UI,Service等等,类似我们耳熟能详的JavaBean。因为通过源码可知道,setContentView底层其实是window去实现的,也就是说,Activity控制Window类去展示View,而Window又是抽象类,所以有个PhoneWindow的类去实现它。

0 0