Android面试遇到OKhttp题,如何应对面试官送来的“ 火箭材料”
作者:一碗阳春面
慢慢的又迎来了面试旺季,在如今的Android开发岗位,OKhttp面试题是必问环节,会使用但不能优雅的回答,着实让我们很难堪!
我在去年的一场面试中;很尴尬,我自信以为自己会使用OKhttp,就万事大吉。没有刷OKhttp的题纲的我,结果被,面试官狠狠“打脸”。在他的脸上仿佛写着“傻子”二字,对我就是那个傻子!
事到如今的我确实成熟许多,遭遇这等耻辱的我;对于面试我是查缺补漏。自己会的不会的都一 一刷一遍,只分孰轻孰重!( 后来收到很多offer,果然我是个天才QaQ )
本文接下只讲关于Android OKhttp面试题分享;大家可用心观看。解答心中疑惑???
OKhttp面试题
1、OKHttp 请求的整体流程是怎样的?
- 通过建造者模式构建 OKHttpClient 与 Request
- OKHttpClient 通过 newCall 发起一个新的请求
- 通过分发器维护请求队列与线程池,完成请求调配
- 通过五大默认拦截器完成请求重试,缓存处理,建立连接等一系列操作
- 得到网络请求结果
2、OKHttp有哪些拦截器,分别起什么作用
1、addInterceptor(Interceptor)
这是由开发者设置的,会按照开发者的要求,在所有的拦截器处理之前进行最早的拦截处理,比如一些公共参数,Header都可以在这里添加。
2、RetryAndFollowUpInterceptor
这里会对连接做一些初始化工作,以及请求失败的充实工作,重定向的后续请求工作。跟他的名字一样,就是做重试工作还有一些连接跟踪工作。
3、BridgeInterceptor
这里会为用户构建一个能够进行网络访问的请求,同时后续工作将网络请求回来的响应Response转化为用户可用的Response,比如添加文件类型,content-length计算添加,gzip解包。
4、CacheInterceptor
这里主要是处理cache相关处理,会根据OkHttpClient对象的配置以及缓存策略对请求值进行缓存,而且如果本地有了可⽤的Cache,就可以在没有网络交互的情况下就返回缓存结果。
5、ConnectInterceptor
这里主要就是负责建立连接了,会建立TCP连接或者TLS连接,以及负责编码解码的HttpCodec
6、networkInterceptors
这里也是开发者自己设置的,所以本质上和第一个拦截器差不多,但是由于位置不同,所以用处也不同。这个位置添加的拦截器可以看到请求和响应的数据了,所以可以做一些网络调试。
7、CallServerInterceptor
这里就是进行网络数据的请求和响应了,也就是实际的网络I/O操作,通过socket读写数据。
3、OkHttp的使用
1、创建OkHttpClient对象:OkHttpClient client = new OkHttpClient();
2、创建网络请求:Request request = new Request.Builder() .url(“ http:// sethfeng.github.io/inde x.html ”) .build();
3、得到Call对象:Call call = client.newCall(request); //实际创建的是一个RealCall对象,RealCall中有一个对client对象的引用
4、发送请求,获取返回的数据 发送同步请求:Response response = call.excute(); 发送异步请求:
call.enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {