安卓面试的准备:三
书接上文,感谢感谢大佬启立豆的整理:
https://blog.csdn.net/huangqili1314/article/details/79824830
(内容好多好难过....流下了无知的泪水...)
这篇是存储与网络:
存储
(4.1)描述一下你知道的数据存储方式
有五种数据存储方式,File,IO,SQLite,SharedPreferences和网络存储。
(4.2)SharedPreferences的应用场景,核心原理是什么
SharedPreferences是一种轻量化的存储方式,通过创建一个xml文件并保存需要数据的键值对来进行存储。内容少,重复使用次数多的时候使用ShraedPreferences会更有效率
(4.3)SharedPreferences是线程安全的吗?
去源码看看有没有同步锁就知道了,答案是线程安全的。
(4.4)描述一下图片存储在本地的方式
图片保存在本地通过使用IO流来保存到本地,但是为了让相册能够及时的刷新需要在保存成功的同时发送广播让相册进行刷新。
(4.5)sqlite升级,增加字段的语句
sqlite升级的本质是把旧的表重命名,然后创建一个新的同名的表,并把旧的表的内容插入到新表当中去。完成后把旧表删除即可。
所以所使用的语句就是重命名的语句,创建的语句,和插入的语句insert
(4.6)数据库框架对比和源码分析
https://blog.csdn.net/u012702547/article/details/52226163
https://www.jianshu.com/p/c4e9288d2ce6
(4.7)数据库的优化
https://www.jianshu.com/p/3b4452fc1bbd
(4.8)数据库数据迁移问题
https://www.cnblogs.com/awkflf11/p/6033074.html
网络
(5.1)描述一次网络请求的流程
从客户端发起需要与服务端进行网络请求的请求,通过3次握手后与服务端成功连接后,即可进行网络通讯。网络通信结束时,从客户端发起网络结束的请求,通过四次挥手之后,结束网络连接。从而结束网络请求。
(5.2)HTTP报文结构
请求的HTTP报文结构是,请求行,请求头,空行,请求主体。
回调的HTTP报文结构是,状态行,响应行,空行,主体内容组成。
(5.3)HttpClient和HttpURLConnection的形式,双方的功能很相似,主要的区分点在于HttpClient与URLConnection都是安卓的网络请求内容。HttpURLConnection更加轻量化,使用更加便捷。且HttpClient会有版本限制,安卓系统过多的迭代使得HttpClient的性能不能很好的保证,从而使用HttpURLConnection进行代替
(5.4)Volley,okhttp,retrofit之间的区别和核心原理和使用场景
(5.5)描述一下https
https是拥有安全协议通讯的http, 因为http之间的通信容易造成泄漏,https是为了让网络通信更加的安全而使用的一种协议,其本身主体与HTTP相同。只不过在交互时加入SSL证书以保证通信安全。
(5.6)https中哪里用了对称加密,哪里用了非对称加密,对加密算法(如RSA)等是否有了解?
https中,客户端和服务端的交互使用了对称加密,为的是使得双方的交互内容不会那么容易泄漏。而加密这个加密过程就使用了非对称加密,为的是保证加密双方之间的加密不会被泄漏而产生的。
(5.7)说一下三次握手,四次挥手的具体细节
从客户端发起与服务端的联系,这是第一次握手,服务端确认并发起是否确认发起联系,这是第二次握手,客户端确认发起联系,这是第三次握手。
从客户端发起中断与服务端的联系,这是第一次挥手;服务器确认之后发出收到的指令,这是第二次挥手;服务器发出询问时候确认中断的询问,这是第三次挥手;服务端发出确认关闭连接,这是第四次挥手。随后服务端关闭,而服务端在等待了2MLS后没有回调,也会关闭
(5.8)描述一下socket是什么东西
socket是一个基于TCP或UDP的抽象层,与接口相似,提供调用TCP或UDP的接口。服务端通过socket连接TCP或UDP连接服务端,服务端通过TCP或UDP连接到socket获取服务端的信息。
(5.9)从网络加载一个10M的图片,说下注意事项
一次性加载10M的图片在设备上很容易造成OOM的出错,所以需要压缩整个图片用于预览,而剩余 的内容要存在缓存中。需要的部分进行展示,不需要的部分保存到缓存中。
(5.10)TCP与UDP的区别
TCP与UDP最大的区别就是,UDP只会管发送,不管对方接不接收得到。而TCP则会根据接收方的反馈进行更修正或者重发,比如说包顺序不对,或者包丢失等情况。
(5.11)client如何确定自己发送的消息被server收到?
service会有回调,可以通过回调确认信息是否成功发送并被对方接受到。
(5.12)WebSocket与socket的区别
https://blog.csdn.net/wwd0501/article/details/54582912
(5.13)网络请求缓存处理,okhttp如何处理网络缓存的
看源码,看缓存策略
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0326/2643.html
(5.14)自己去设计网络请求框架,怎么做?(随便套个开源框架的原理)
就套okhttp的,被google承认并使用的框架,准没错。
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0326/2643.html
更多的资料全在原地址中,请多查看原文大佬的总结及前人的经验
另外如果我说的地方有什么不对的请大家留言,本人非常的菜,大家的指点能够让我更加理解开发的知识点。请不要含蓄,谢谢
安卓面试的准备一:https://www.jianshu.com/p/0a12b61a8f6d
安卓面试的准备二:https://www.jianshu.com/p/4459a9b6bba3