Android面试整理(4)-网络和安全机制

1、网络框架对比和源码分析

Volley

特点:

  • 基于 HttpURLConnection
  • 封装 Url 图片加载框架,支持图片加载
  • 有缓存
  • Activity 和生命周期的联动,Activity 结束时取消在此 Activity 中调用的所有网络请求
    场景:
  • 适合传输量小,数据请求频繁的的场景
  • 不能进行大量数据操作,如上传下载,因为 Volley 的 Request 和 Response 放到 byte[]中

OkHttp

特点:

  • 基于 NIO 和 Okio,请求处理速度更快
  • IO 是阻塞式;NIO 是非阻塞式;Okio (Square)基于二者的更高效的数据流库IO 面向流 Steam,NIO 面向缓冲区 Buffer IO 阻塞,NIO 非阻塞NIO 情况下,一个线程可以处理多个通道的读取和写入,更充分的利用线程资源。

适用场景

  • IO 适合于链接数量不大,但是每个链接需要发送/接收的数据量很大,需要长时间连续处理;
  • NIO 更适合于同时存在海量链接,但是每个链接单次发送/接收的数据量较小的情形.比如聊天服务器.海量链接但是单个链接单次数据较小
  • “Accept-Encoding”,“gzip” “Content-Encoding”,“gzip” Content-Encoding: gzip:表明 body 是 gzip 过的数据
  • Content-Length:117:表示 body gzip 压缩后的数据大小,便于客户端使用。
  • Transfer-Encoding: chunked:分块传输编码复制代码

Retrofit

特点:

  • 基于 OkHttp
  • 通过注解配置请求
  • 性能最好,处理最快
  • 解析数据需要使用统一的 Convert  易与其他框架 RxJava 联合使用

场景:

  • 优先使用,项目中由 RxJava ,后台 API 遵循 Restful 风格

2、自己去设计网络请求框架,怎么做?

https://github.com/sucese/android-open-framework-analysis/blob/master/doc/Android%E5%BC%80%E6%BA%90%E6%A1%86%E6%9E%B6%E6%BA%90%E7%A0%81%E9%89%B4%E8%B5%8F%EF%BC%9AOkhttp.md

3、网络请求缓存处理,okhttp 如何处理网络缓存的

CacheInterceptor
OKHttp3(支持 Retrofit)的网络数据缓存 Interceptor 拦截器

读取候选缓存。
创建缓存策略,强制缓存、对比缓存等。
根据策略,不使用网络,又没有缓存的直接报错,并返回错误码 504。
根据策略,不使用网络,有缓存的直接返回。
前面两个都没有返回,继续执行下一个 Interceptor,即 ConnectInterceptor。
接收到网络结果,如果响应 code 式 304,则使用缓存,返回缓存结果。
读取网络结果。
对数据进行缓存。
返回网络读取的结果。
Android面试整理(4)-网络和安全机制

4、从网络加载一个 10M 的图片,说**意事项

https://www..com/article/15181494878/

Bitmap.Options inJustDecodeBounds inSampleSize
ARGB_4444 RGB_565
补图
分块加载
使用 LruCache
sizeOf()、entryRemoved()
手势处理
ScaleGestureDetector GestureDetector
前者用于处理缩放手势,后者用于处理其余手势,如移动,快速滑动,点击,双
击,长按等。
ScaleGestureDetector 专门处理缩放手势,其比较重要的方法是
onScale(ScaleGestureDetector detector),当缩放时会不停地回调这个方法,需要
注意的一点是 detector.getScaleFactor()获取到的缩放比例是相对上一次的

5、TCP 的 3 次握手和四次挥手

https://blog.csdn.net/whuslei/article/details/6667471

6、TCP 与 UDP 的区别

https://blog.fundebug.com/2019/03/22/differences-of-tcp-and-udp/

7、TCP 与 UDP 的应用

https://www.cnblogs.com/liangyc/p/11628208.html

8、HTTP 协议

https://hit-alibaba.github.io/interview/basic/network/HTTP.html

https://juejin.im/post/6844903591883309063

9、HTTP1.0 与 2.0 的区别

https://juejin.im/entry/6844903489596833800

10、HTTP 报文结构

https://zhuanlan.zhihu.com/p/44938050

11、HTTP 与 HTTPS 的区别以及如何实现安全性

https://blog.fundebug.com/2019/04/26/why-is-https-more-secure-than-http/

12、如何验证证书的合法性?

https://yiqingfeng.github.io/2019/04/01/https%E8%AF%81%E4%B9%A6%E5%90%88%E6%B3%95%E6%80%A7/

13、https 中哪里用了对称加密,哪里用了非对称加密,对加密法(如 RSA)等是否有了解?

理解 HTTPS 工作原理
https://www.cnblogs.com/xishuai/p/https-ca.html

加密解密算法介绍
https://segmentfault.com/a/1190000017346458

AES加密算法的详细介绍与实现
https://blog.csdn.net/qq_28205153/article/details/55798628

一文搞懂 RSA 算法
https://zhuanlan.zhihu.com/p/44185847

漫画:什么是MD5算法?
https://juejin.im/entry/6844903501743521800

SHA算法
https://www.cnblogs.com/foxclever/p/8282366.html

加密算法原理分析(MD5、SHA-256)
https://juejin.im/post/6844903850160160781

14、client 如何确定自己发送的消息被 server 收到?

增加 ACK
加入QoS

15、谈谈你对 WebSocket 的理解

看完让你理解WebSocket原理
https://blog.csdn.net/jing_80/article/details/82111423

WebSocket的理解
https://www.jianshu.com/p/c08cc2b21496

16、WebSocket 与 Socket 的区别

1、WebSocket 与 Socket 的区别
https://juejin.im/post/6844903805797007374

为了解决 Web 端即时通讯的需求就出现了 WebSocket

WebSocket 与 Socket 的区别
Socket 是传输控制层的接口。用户可以通过 Socket 来操作底层 TCP/IP 协议族通信。
WebSocket 是一个完整应用层协议。
Socket 更灵活,WebSocket 更易用。
两者都能做即时通讯

2、WebSocket和Socket的区别
https://www.jianshu.com/p/59b5594ffbb0
ARPANET(Advanced Research Projects Agency)
最早的时候一个 Socket 指的是一个 40 位的数字(RFC33 中说明了此用法,但在 RFC36 中并
没有明确地说使用 40 位数字来标识一个地址),其中前 32 为指向的地址(socket number,
大致相当于 IP),后 8 位为发送数据的源(link,大致相当于端口号)
后来(RFC433,Socket Number List)socket number 被明确地定义为一个 40 位的数
字,其中后 8 位被用来制定某个特定的应用使用(比如 1 是 Telnet)。复制代码
Hixie(Ian Hickson),他是 WHATWG 组织的发言人,曾供职于 Netscape、Opera、
Google。Hixie 说了一句「我看 WebSocket 这个名字就很适合嘛」。mcarte(r Michael
Carter )在 Comet Daily 中发表了文章 Independence Day: HTML5 WebSocket
Liberates Comet From Hacks,后来随着各大浏览器对 WebSocket 的支持,它变成
了实际的标准,IETF 也沿用了这个名字

3、刨根问底HTTP和WebSocket协议
https://www.jianshu.com/p/0e5b946880b4
Meteor
HTTP 和 WebSocket 协议的 RFC 文档(RFC2616 和 RFC6455)
HTTP1.1 的连接默认使用持续连接(persistent connection),持续连接指的是,
有时是客户端会需要在短时间内向服务端请求大量的相关的资源,如果不是持续
连接,那么每个资源都要建立一个新的连接,HTTP 底层使用的是 TCP,那么每
次都要使用三次握手建立 TCP 连接,将造成极大的资源浪费。
持续连接可以带来很多的好处:
使用更少的 TCP 连接,对通信各方的压力更小。 可以使用管道(pipeline)来传
输信息,这样请求方不需要等待结果就可以发送下一条信息,对于单个的 TCP
的使用更充分。 流量更小 顺序请求的延时更小。 不需要重新建立 TCP 连接就
可以传送 error,关闭连接等信息。

4、刨根问底HTTP和WebSocket协议(二)
https://www.jianshu.com/p/f666da1b1835

5、WebSocket、Socket、TCP、HTTP区别
https://www.cnblogs.com/jiangzhaowei/p/8781635.html

17、谈谈你对安卓签名的理解

5分钟理解安卓签名
http://www.mamicode.com/info-detail-2837917.html
APK数字签名详解介绍
https://www.jianshu.com/p/24af47abc4e5

18、请解释安卓为啥要加签名机制?

为什么要签名

  • 发送者的身份认证:
  • 保证信息传输的完整性:
  • 防止交易中的抵赖发生:

给 apk 签名可以带来以下好处

  • 应用程序升级:
  • 应用程序模块化:
  • 代码或者数据共享:
    添加链接描述
    签名的说明
  • 所有的应用程序都必须有数字证书:
  • Android 程序包使用的数字证书可以是自签名的:
  • 使用一个合适的私钥生成的数字证书来给程序签名:
  • 数字证书都是有有效期的:

19、视频加密传输

Android 视频文件加密
https://blog.csdn.net/qq_24636637/article/details/50524243

20、App 是如何沙箱化,为什么要这么做?

https://www.kanzhun.com/jiaocheng/244591.html

21、权限管理系统(底层的权限是如何进行 grant的)?

动态权限、安全
https://www.jianshu.com/p/2ed3cbc4d88b