学习资料链接

RxJava

参考文章
中文文档
Flowable
RxLifecycle
面试题

  • 内部线程切换原理
  • 操作符有哪些
  • 如何解决内存泄漏
  • RxJava 中 Observable、Flowable、Single、Maybe、Completable 使用时如何选择?
  • 为什么 subscribeOn() 只有第一次切换有效
  • 操作符 map 和 flatmap 的区别?

Okhttp

Okhttp官网

1. 拦截器顺序?

自定义拦截器——>RetryAndFollowUpInterceptor——>BridgeInterceptor——>CacheInterceptor——>ConnectInterceptor

——>NetworkInterceptors——>CallServerInterceptor

2. 网络拦截器和普通拦截器有什么区别?

网络拦截器:

  • 网络拦截器可以操作重定向和失败重连的返回值

  • 取缓存中的数据就不会去执行Chain.proceed().所以就不能执行网络拦截器

  • 通过网络拦截器可以观察到所有通过网络传输的数据

  • 请求服务连接的拦截器先于网络拦截器执行,所以在进行网络拦截器执行时,就可以看到Request中服务器请求连接信息,因为应用拦截器是获取不到对应的连接信息的。

普通拦截器:

  • 应用拦截器只会调用一次,即使数据来源于缓存

  • 不需要关心是否重定向或者失败重连

  • 只考虑应用的初始意图,不去考虑Okhhtp注入的Header比如:if-None-Match,意思就是不管其他外在因素只考虑最终的返回结果

  • 应用拦截器可以决定是否执行其他的拦截器,通过Chain.proceed().

  • 可以执行多次调用其他拦截器,通过Chain.proceed().

3. 它的线程池是怎样的?如何管理的?

  • 核心线程:0

  • 非核心线程:Int.MAX_VALUE

  • Keeplive:60s

4. 缓存实现

Okhttp缓存

1、如果在 OKHttpClient 中配置了 cache,则从缓存中获取,但是不保证就存在

2、拿到当前请求,缓存拿到缓存策略对象

3、缓存检测

4、禁止使用网络(根据缓存策略),缓存又无效,直接返回

5、缓存有效,不使用网络

6、缓存无效,执行下一个拦截器

7、本地有缓存,根具条件选择使用哪个响应

8、使用网络响应

9、 缓存到本地

6. 连接池

  • 通过 ConnectInterceptor 拦截器实现连接操作,Recall的initExchange方法寻找一个可用的连接

  • ConnectionPool代理类RealConnectionPool控制所有的连接操作,默认最大连接数5个,默认保活时间5分钟

7.Http连接保活

http长连接

TCP

TCP总结大全

跟着动画来学习TCP三次握手和四次挥手

TCP面试题

TCP滑动窗口

理解TCP序列号(Sequence Number)和确认号(Acknowledgment Number)

  • TCP如何保证数据包的顺序

    1. 发送机在每次发送数据时,会给每个数据包分配一个序列号,并在特定的时间内等待接收机对发送机分配序列号的确认。

    2. 发送机将已经发送的数据存储在缓存中,如果特定时间内没有收到接收机对发送机分配序列号的确认,则重复发送此数据包,如果在定时器超时之前收到确认,则将数据包占用的缓存释放。

    3. 接收机收到数据包后按照序列号将数据包按顺序重组,并传给上层使用。

  • TCP如何实现可靠性传输?

    1.应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据长度将保持不变。由TCP传递给IP的信息单位称为报文段或段(segment)。

    2.当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。当TCP收到发自TCP连接另一端的数据,它将发送一个确认。TCP有延迟确认的功能,在此功能没有打开,则是立即确认。功能打开,则由定时器触发确认时间点。

    3.TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发)。

    4.既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。

    5.既然IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。[2]

    6.TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。

  • 如果TCP传输过程中服务器挂了会发生什么

    1. 服务器主机崩溃

      模拟操作:当客户端和服务器成功连接之后,拔掉服务器的网线,此时从客户端发送数据分节。这样同时也模拟了客户端发送的数据不可达服务端的情景(即建立连接后某些中间路由器不工作)。

      产生后果:客户端会持续重传未收到确认的数据分节(TCP软件负责),持续一段时间后仍未收到确认则放弃(通常是9分钟)。如果是服务器崩溃则本机TCP软件会向用户进程显示套接字错误并置错误码,如果是中间路由器判定服务器主机不可达则会返回一个ICMP消息,那么TCP软件收到该ICMP消息会向用户进程显示套接子错误并置错误码。我们可以通过错误码来判断到底是哪种错误。

    2. 服务器崩溃后重启

      模拟操作:当客户端和服务器成功连接之后,拔掉服务器的网线,然后将该服务器关机重启。再重新插上网线。

      产生后果:当服务器崩溃后重启时,它已经丢失了崩溃前所有的连接信息,因此服务器对于所收到的客户数据分节响应一个RST分节。客户端的TCP软件收到RST分节之后会向 用户进程显示套接字错误并置错误码。

    3. 服务器主机关机

      Unix系统关机时,init进程通常会给所有的进程发送SIGTERM信号,等待一段时间后如果还有一些进程仍在运行,init进程会发送SIGKILL信号强行终止。当服务器进程被终止时,其所有打开的文件描述符被关闭,会发送FIN分节给对端。设计良好的客户程序可以立即监视该种情况的发生。

Http/Https

参考文章

Http面试题

  • 现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开?

    答:现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开? 在 HTTP/1.0 中,一个服务器在发送完一个 HTTP 响应后,会断开 TCP 链接。但是这样每次请求都会重新建立和断开 TCP 连接,代价过大。所以虽然标准中没有设定,某些服务器对 Connection: keep-alive 的 Header 进行了支持。意思是说,完成这个 HTTP 请求之后,不要断开 HTTP 请求使用的 TCP 连接。这样的好处是连接可以被重新使用,之后发送 HTTP 请求的时候不需要重新建立 TCP 连接,以及如果维持连接,那么 SSL 的开销也可以避免

  • 一个 TCP 连接可以对应几个 HTTP 请求?

    答:一个 TCP 连接是可以发送多个 HTTP 请求的。

  • 一个 TCP 连接中 HTTP 请求发送可以一起发送么(比如一起发三个请求,再三个响应一起接收)?

    答:HTTP/1.1 存在一个问题,单个 TCP 连接在同一时刻只能处理一个请求,意思是说:两个请求的生命周期不能重叠,任意两个 HTTP 请求从开始到结束的时间在同一个 TCP 连接里不能重叠。

    虽然 HTTP/1.1 规范中规定了 Pipelining 来试图解决这个问题,但是这个功能在浏览器中默认是关闭的。

    HTTP2 提供了 Multiplexing 多路传输特性,可以在一个 TCP 连接中同时完成多个 HTTP 请求。

  • 为什么有的时候刷新页面不需要重新建立 SSL 连接?

    答:TCP 连接有的时候会被浏览器和服务端维持一段时间。TCP 不需要重新建立,SSL 自然也会用之前的。

  • 浏览器对同一 Host 建立 TCP 连接到数量有没有限制?

    答:有。Chrome 最多允许对同一个 Host 建立六个 TCP 连接。不同的浏览器有一些区别。

Retrofit

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容