亲身面试经历技术总结帖

来源:互联网 发布:js object 移除属性 编辑:程序博客网 时间:2024/04/30 11:10

面试必问:


线程及线程管理;

线程同步;

异步加载;

view的绘制和自定义;

activity的启动模式;

Fragment的应用;

网络编程,socket、http、蓝牙;

MVC设计模式;

Activity的生命周期及描述;

Bitmap的应用和释放;






一、Activity的生命周期及描述;

这个问题都小儿科了,只要你记住那几个方法,知道每个方法的作用就ok了。

二、MVC的作用及描述:

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范;

  • Model(模型)表示应用程序核心(比如数据库记录列表)。
  • View(视图)显示数据(数据库记录)。
  • Controller(控制器)处理输入(写入数据库记录)。

    优点:耦合性低、重用性高

三、ANR是什么?如果出现ANR,你会怎么处理?

说真的,做android的应该知道ANR这个术语,可面试的时候当时我就大脑一片空白,完全没搜索出来,后来面试人员一提示,立马想起来了;我的回答是:是操作程序占用时间过长或者主线程被阻塞引起的ANR,解决办法是把占用时间长的操作进行多线程处理或者进行异步操作处理,本人觉得还是基本正确的,至少是面试官希望听到的结果,下边呈现技术大牛们的详细解释。

在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。所以一个流畅的合理的应用程序中不能出现anr,而让用户每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样系统不会显示ANR给用户。

默认情况下,在android中Activity的最长执行时间是5秒,BroadcastReceiver的最长执行时间则是10秒。

ANR的常见类型

ANR一般有三种类型:

1KeyDispatchTimeout(5 seconds) --主要类型

按键或触摸事件在特定时间内无响应

2BroadcastTimeout(10 seconds)

BroadcastReceiver在特定时间内无法处理完成

3ServiceTimeout(20 seconds) --小概率类型

Service在特定的时间内无法处理完成

三:KeyDispatchTimeout

A key or touch event was not dispatched within the specified time(按键或触摸事件在特定时间内无响应)

具体的超时时间的定义在framework下的ActivityManagerService.java


为什么会超时呢?

超时时间的计数一般是从按键分发给app开始。超时的原因一般有两种

(1)当前的事件没有机会得到处理(即UI线程正在处理前一个事件,没有及时的完成或者looper被某种原因阻塞住了)

(2)当前的事件正在处理,但没有及时完成


如何避免KeyDispatchTimeout

1UI线程尽量只做跟UI相关的工作

2:耗时的工作(比如数据库操作,I/O,连接网络或者别的有可能阻碍UI线程的操作)把它放入单独的线程处理

3:尽量用Handler来处理UIthread和别的thread之间的交互


说了那么多的UI线程,那么哪些属于UI线程呢?

UI线程主要包括如下:

  1. Activity:onCreate(), onResume(), onDestroy(), onKeyDown(), onClick(),etc

  2. AsyncTask: onPreExecute(), onProgressUpdate(), onPostExecute(), onCancel,etc

  3. Mainthread handler: handleMessage(), post*(runnable r), etc

  4. other

喜欢探索的学究们可以看看这个研究过程:http://www.cnblogs.com/wanqieddy/archive/2012/05/04/2482661.html


四、说说线程的使用和管理:

我的回答:使用线程有两种方法,一种是实现Runnable接口,另一种是继承Thread的类,线程管理的话,目前我能用到的就是线程池,对线程进行归类和管理,一旦线程组完成任务,就及时关掉。 至于具体的准确回答,大家自行搜索吧,答案太多,不好贴!


五、谈谈http协议get与post的区别:

我只是记得两者一个是加密,一个是不加密,今天也一并查询整理一下,稍后见链接

http://blog.csdn.net/android_xiaozhou/article/details/22327539


六、SharePreference的实现原理和机制,是否可以限制文件的格式和命名,用什么方法可以实现?

其实对于这个问题,我完全不知道该怎么去回答,只是说了一些SharePreference属于一种轻量级存储机制,可以把内容存储到本地,一般是存储应用的一些设置信息,文件默认的格式是什么我也忘记了,其实根本没有回答到正题上。

先普及一下,我认为很多面试官都会问吧

Android有四种存储方式:


SharePreference
     轻量级键-值方式存储,以XML文件方式保存。
文件              采用java.io.*库所提供有I/O接口,读写文件。
SQLit数据库       SQLite是轻量级嵌入式内置数据库。
ContentProvider   ContentProvider可为数据封装,为多个应用共享


正解:SharePreference对简单的基本类型数据,以键值对(key-value)的方式进行的存储,就这么简单哈,人人都知道,当时就没想起来;

Shared Preferences  处理数据有3种模式 MODE_PRIVATE 是 preferences 的操作模式。这是默认的模式,代表只有创建这个 preferences 的程序才能访问这个 preferences。其他两个模式是MODE_WORLD_READABL和 MODE_WORLD_WRITEABLE。MODE_WORLD_READABLE 表示其他程序对这个SharedPreferences 只有只读权限。MODE_WORLD_WRITEABLE 则是其他程序同时拥有读写权限。

至于限制文件名称的这个方法,持续寻觅中,大家知道的告诉我哈


七、有没有涉及过android,word或者pdf文档的读取?

我会告诉你我从来没涉及过这方面的么?我只会读取txt文本的内容。这方面的技术我学习再总结一下,发一篇单独的贴子,会贴过来连接的。






0 0
原创粉丝点击