网络和安全机制
- 1、网络框架对比和源码分析
- 2、自己去设计网络请求框架,怎么做?
- 3、网络请求缓存处理,okhttp 如何处理网络缓存的
- 4、从网络加载一个 10M 的图片,说下注意事项
- 5、TCP 的 3 次握手和四次挥手
- 6、TCP 与 UDP 的区别
- 7、TCP 与 UDP 的应用
- 8、HTTP 协议
- 9、HTTP1.0 与 2.0 的区别
- 10、HTTP 报文结构
- 11、HTTP 与 HTTPS 的区别以及如何实现安全性
- 12、如何验证证书的合法性?
- 13、https 中哪里用了对称加密,哪里用了非对称加密,对加密法(如 RSA)等是否有了解?
- 14、client 如何确定自己发送的消息被 server 收到?
- 15、谈谈你对 WebSocket 的理解
- 16、WebSocket 与 Socket 的区别
- 17、谈谈你对安卓签名的理解
- 18、请解释安卓为啥要加签名机制?
- 19、视频加密传输
- 20、App 是如何沙箱化,为什么要这么做?
- 21、权限管理系统(底层的权限是如何进行 grant的)?
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、自己去设计网络请求框架,怎么做?
3、网络请求缓存处理,okhttp 如何处理网络缓存的
CacheInterceptor
OKHttp3(支持 Retrofit)的网络数据缓存 Interceptor 拦截器
读取候选缓存。
创建缓存策略,强制缓存、对比缓存等。
根据策略,不使用网络,又没有缓存的直接报错,并返回错误码 504。
根据策略,不使用网络,有缓存的直接返回。
前面两个都没有返回,继续执行下一个 Interceptor,即 ConnectInterceptor。
接收到网络结果,如果响应 code 式 304,则使用缓存,返回缓存结果。
读取网络结果。
对数据进行缓存。
返回网络读取的结果。
4、从网络加载一个 10M 的图片,说下注意事项
https://www.pianshen.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.youkuaiyun.com/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.youkuaiyun.com/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.youkuaiyun.com/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.youkuaiyun.com/qq_24636637/article/details/50524243
20、App 是如何沙箱化,为什么要这么做?
https://www.kanzhun.com/jiaocheng/244591.html