写点什么

android 开发视频!Android 程序员最大的悲哀是什么?面试真题解析

发布于: 2021 年 02 月 26 日

Glide 缓存简介


Glide 的缓存设计可以说是非常先进的,考虑的场景也很周全。在缓存这一功能上,Glide 又将它分成了两个模块,一个是内存缓存,一个是硬盘缓存。


这两个缓存模块的作用各不相同,内存缓存的主要作用是防止应用重复将图片数据读取到内存当中,而硬盘缓存的主要作用是防止应用重复从网络或其他地方重复下载和读取数据。


内存缓存和硬盘缓存的相互结合才构成了 Glide 极佳的图片缓存效果,那么接下来我们就分别来分析一下这两种缓存的使用方法以及它们的实现原理。


网络:分层模型、TCP、UDP、HTTP、HTTPS


分层模型


  • 应用层:负责处理特定的应用程序细节,如 HTTP、FTP、DNS

  • 运输层:为两台主机提供端到端的基础通信,如 TCP、UDP

  • 网络层:控制分组传输、路由选择等,如 IP

  • 链路层:操作系统设备驱动程序、网卡相关接口


UDP


  • UDP 头结构:来源端口、目的端口、长度域、校验和

  • 特点:不可靠、无序、面向报文、速度快、轻量

  • 适用场景:适用于即时通讯、视频通话等

  • 应用:DHCP、DNS、QUCI、VXLAN、GTP-U、TFTP、SNMP


TCP


  • TCP 头结构:来源端口、目的端口、序号、确认序号、SYN/ACK 等状态位、窗口大小、校验和、紧急指针

  • 特点:面向字节流、有拥塞和流量控制、可靠、有序、速度慢、较重量,通过滑动窗口实现流量控制、用塞控制

  • 适用场景:文件传输、浏览器等

  • 应用:HTTP、HTTPS、RTMP、FTP、SMTP、POP3

  • 三次握手:


1\. C->S:SYN,seq=x(你能听到吗?)
复制代码


2\. S->C:SYN,seq=y,ack=x+1(我能听到,你能听到吗?)
复制代码


3\. C->S:ACK,seq=x+1,ack=y+1(我能听到,开始吧)
复制代码


复制代码


两方都要能确保:我说的话,你能听到;你说的话,我能听到。所以需要三次握手
复制代码


复制代码
复制代码
  • 四次挥手:


1\. C->S:FIN,seq=p(我说完了)
复制代码


2\. S->C:ACK,ack=p+1(我知道了,等一下,我可能还没说完)
复制代码


3\. S->C:FIN,seq=q,ACK,ack=p+1(我也说完了)
复制代码


4\. C->S:ACK,ack=q+1(我知道了,结束吧)
复制代码


复制代码


S 收到 C 结束的消息后 S 可能还没说完,没法立即回复结束标示,只能等说完后再告诉 C :我说完了
复制代码


复制代码
复制代码

HTTP


  • 超文本传输协议,明文传输,默认 80 端口

  • POST 和 GET:Get 参数放在 url 中;Post 参数放在 request Body 中

  • 访问网页过程:DNS 域名解析、TCP 三次握手建立连接、发起 HTTP 请求


HTTPS


  • 默认 443 端口,使用 SSL 协议对 HTTP 传输数据进行了加密,安全

  • 加密过程:Client/Server 通过非对称加密生成密钥,然后用这个密钥去对称加密传输数据


算法:数据结构、常用算法


数据结构


  • 数组、链表

  • 栈、队列

  • 散列表

  • 树、堆、图


常用算法


  • 排序

  • 双指针、滑动窗口、字符串

  • 递归、分治、二分

  • 回溯、贪心、动态规划


Java 基础:StringBuilder、泛型擦除、Exception、IO、容器


StringBuilder


  • StringBuffer 线程安全,StringBuilder 线程不安全

  • +实际上是用 StringBuilder 来实现的,所以非循环体可以直接用 +,循环体不行,因为会频繁创建 StringBuilder

  • String.concat 实质是 new String ,效率也低,耗时排序:StringBuilder < StringBuffer < concat < +


泛型擦除


  • 修饰成员变量等类结构相关的泛型不会被擦除

  • 容器类泛型会被擦除


Exception 和 Error


  • Exception 和 Error 都继承自 Throwable

  • Error 大部分是指不可恢复的错误状态,比如 OOM,所以也不需要捕获

  • Exception 分为 CheckedException 和 UnCheckedException


IO 、 NIO、 OKIO


  • IO 是面向流的,一次一个字节的处理,NIO 是面向缓冲区的,一次产生或消费一个数据块

  • IO 是阻塞的,NIO 是非阻塞的

  • NIO 支持内存映射方式

  • okio 相比 io 和 nio,api 更简单易用

  • okio 支持超时机制

  • okio 引入 ByteString 空间换时间提高性能

  • okio 采用 segment 机制进行内存共享,节省 copy 时间消耗


ArrayList、LinkedList


  • ArrayList

  • LinkedList


HashMap 、HashTable、HashSet


  • HashMap(允许 key/value 为 null)

  • HashTable(不允许 key/value 为 null)

  • HashSet


ArrayMap、SparseArray


  • ArrayMap

  • SparseArray


Concurrent 集合


  • ConcurrentHashMap


LRUCache 原理


  • 基于访问顺序排序的 LinkedHashMap 实现,最近访问的会排在最后


学习交流


如果你觉得自己学习效率低,缺乏正确的指导,可以加入资源丰富,学习氛围浓厚的技术圈一起学习交流吧







群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的 Android 交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。


35 岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35 岁后的你只会比周围的人更值钱。


用户头像

VX公众号:编程进阶路 2020.11.28 加入

还未添加个人简介

评论

发布
暂无评论
android开发视频!Android程序员最大的悲哀是什么?面试真题解析