移动互联周考面试题 http://blog.csdn.net/w00w12l/article/details/8143591?locationNum=14&fps=1

简答题:(20分)

1 简述AsyncTask 原理

1、 AsyncTask的本质是一个静态的线程池,AsyncTask派生出的子类可以实现不同的异步任务,这些任务都是提交到静态的线程池中执行。

2、线程池中的工作线程执行doInBackground(mParams)方法执行异步任务

3、当任务状态改变之后,工作线程会向UI线程发送消息,AsyncTask内部的InternalHandler响应这些消息,并调用相关的回调函数

 

2 简述socket 通信原理

Socket原理,大致分为以下几个步骤。  服务器端的步骤如下。  

1)首先,在实用Socket之前,要首先初始化Socket,就是实用AfxSocketInit()函数。 2)在初始化完成以后,就可以建立服务端的Socket,然后实用该Sokcet开始侦听整个网络中的连接请求。  

3)当检测到来自客户端的连接请求时,向客户端发送收到连接请求的信息,并建立与客户端之间的连接。连接的过程中,在MFC的框架中会触发一个前面创建的服务端Socket的消息响应函数OnAccept(),我们将建立的连接的代码放到该响应函数里面,在建立连接的过程中,会产生一个新的Socket,我们使用找个Socket来进行数据的通信。  

4)在通信的过程中,服务器端的产生的新的Socket会通过一个消息响应函数OnReceive()来接受到达的数据。数据的发送可以使用Send()来完成 

5)当完成通信后,服务器关闭与客户端的Socket连接。  

客户端的步骤如下。  

1)同样的,初始化Socket,并建立客户端的Socket,确定要连接的服务器的主机名和端口。  

2)发送连接请求到服务器(MFC中使用Connect()),并等待服务器的回馈信息。  

3)连接成功后,与服务器进行数据的交互。 

4)数据的读取同服务端一样,也是通过OnReceive()来完成的,数据的发送通过Send()即可。  

5)数据处理完毕后,关闭自身的Socket连接。 

这就是网络Socket的原理的简单介绍,大家有什么疑问可以提出来,另外,在服务器端建立Socket连接的过程中,如何支持并发的最大数量,以及服务器端的负载问题,大家可以多加研究一下。

3 简述HttpURLConnection和HttpClient之间的区别

HttpClient
Apache公司提供的库,提供高效的、最新的、功能丰富的支持HTTP协议工具包,支持HTTP协议最新的版本和建议,是个很不错的开源框架,封装了http的请求,参数,内容体,响应等,拥有众多API

•HttpURLConnection
Sun公司提供的库,也是Java的标准类库java.net中的一员,但这个类什么都没封装,用起来很原始,若需要高级功能,则会显得不太方便,比如重访问的自定义,会话和cookie等一些高级功能。

功能用法对比
从功能上对比,HttpClient库要丰富很多,提供了很多工具,封装了http的请求头,参数,内容体,响应,还有一些高级功能,代理、COOKIE、鉴权、压缩、连接池的处理。
•HttpClient高级功能代码写起来比较复杂,对开发人员的要求会高一些,而HttpURLConnection对大部分工作进行了包装,屏蔽了不需要的细节,适合开发人员直接调用。
另外,HttpURLConnection2.3版本增加了一些HTTPS方面的改进,4.0版本增加一些响应的缓存。

性能对比
•HttpUrlConnection直接支持GZIP压缩;HttpClient也支持,但要自己写代码处理。
•HttpUrlConnection直接支持系统级连接池,即打开的连接不会直接关闭,在一段时间内所有程序可共用;HttpClient当然也能做到,但毕竟不如官方直接系统底层支持好。
•HttpUrlConnection直接在系统层面做了缓存策略处理(4.0版本以上),加快了重复请求的速度。
 从发展的眼光来看HttpUrlConnection比较有前途一些

 

 

4 简述ImageLoader包含几级缓存,及区别

1、内存缓存 优先加载,速度最快
2、本地缓存 次优先加载 速度稍快

3、网络缓存 最后加载 速度由网络速度决定(浪费流量)

你可能感兴趣的:(移动互联周考面试题 http://blog.csdn.net/w00w12l/article/details/8143591?locationNum=14&fps=1)