面试笔记

2022-03-17  本文已影响0人  yqianqiao

面试笔记

一、Okhttp

拦截器 作用
应用拦截器 拿到的是原始请求,可以添加一些自定义header、通用参数、参数加密、网关接入等等
RetryAndFollowUpInterceptor 处理错误重试和重定向
BridgeInterceptor 应用层和网络层的桥接拦截器,主要工作是为请求添加cookie、添加固定的header,比如Host、Content-Length、Content-Type、User-Agent等等,然后保存响应结果的cookie,如果响应使用gzip压缩过,则还需要进行解压。
CacheInterceptor 缓存拦截器,如果命中缓存则不会发起网络请求。
ConnectInterceptor 连接拦截器,内部会维护一个连接池,负责连接复用、创建连接(三次握手等等)、释放连接以及创建连接上的socket流。
networkInterceptors(网络拦截器) 用户自定义拦截器,通常用于监控网络层的数据传输。
CallServerInterceptor 请求拦截器,在前置准备工作完成后,真正发起了网络请求。

设计模式:

  1. 构建者模式:OkHttpClientRequest的构建都用到了构建者模式

  2. 外观模式: OkHttp使用了外观模式,将整个系统的复杂性给隐藏起来,将子系统接口通过一个客户端OkHttpClient统一暴露出来

  3. 责任链模式: OKHttp的核心就是责任链模式,通过5个默认拦截器构成的责任链完成请求的配置

  4. 享元模式: 享元模式的核心即池中复用,OKHttp复用TCP连接时用到了连接池,同时在异步请求中也用到了线程池

二、Retrofit

img

三、handler

问题:

  1. 为什么不同handler能找到自己对应的方法?

    答:因为在发送消息的时候,会把handler本身赋值给Message,在Looper里面取得时候会调用msg.target.dispatchMessage(msg)方法,而线程切换本质就是看looper在哪个线程启动的

四、LiveData 粘性事件:即发射的事件如果早于注册,那么注册之后依然可以接收到的事件称为粘性事件

解决:通过反射mLastVersion>=mVersion修改,使它俩值相等,就不会触发onChanged回调了

五、view的绘制流程

activity.setContentView()->AppCompatDelegateImpl.setContentView()->PhoneWindow.installDecor()创建DecorView,设置标题主题等,添加默认布局

四、协程 定义:

上一篇下一篇

猜你喜欢

热点阅读