Android题目笔记(四)

来源:互联网 发布:最优化计算方法专业 编辑:程序博客网 时间:2024/06/14 07:57

1.简述tcp四次挥手?

参考:TCP的三次握手(建立连接)和四次挥手(关闭连接)
三次握手
①第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。
②第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。
③第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。

四次挥手:
第一阶段 客户机发送完数据之后,向服务器发送一个FIN数据段,序列号为i;
①.服务器收到FIN(i)后,返回确认段ACK,序列号为i+1,关闭服务器读通道;
②.客户机收到ACK(i+1)后,关闭客户机写通道;
(此时,客户机仍能通过读通道读取服务器的数据,服务器仍能通过写通道写数据)
第二阶段 服务器发送完数据之后,向客户机发送一个FIN数据段,序列号为j;
③.客户机收到FIN(j)后,返回确认段ACK,序列号为j+1,关闭客户机读通道;
④.服务器收到ACK(j+1)后,关闭服务器写通道。

2.threadlocal原理

参考:彻底理解ThreadLocal
每个线程中都有一个独立的ThreadLocalMap副本,它所存储的值,只能被当前线程读取和修改。ThreadLocal类通过操作每一个线程特有的ThreadLocalMap副本,从而实现了变量访问在不同线程中的隔离。

    public void set(T value) {         Thread t = Thread.currentThread();         ThreadLocalMap map = getMap(t);         if (map != null)             map.set(this, value);         else             createMap(t, value);     }  

当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。

3.用IDE如何分析内存泄漏?

参考:基于Android Studio的内存泄漏检测与解决全攻略

4.线程死锁的4个条件?

参考:死锁的四个必要条件
①互斥条件:资源是独占的且排他使用,进程互斥使用资源,即任意时刻一个资源只能给一个进程使用,其他进程若申请一个资源,而该资源被另一进程占有时,则申请者等待直到资源被占有者释放。
②不可剥夺条件:进程所获得的资源在未使用完毕之前,不被其他进程强行剥夺,而只能由获得该资源的进程资源释放。
③请求和保持条件:进程每次申请它所需要的一部分资源,在申请新的资源的同时,继续占用已分配到的资源。
④循环等待条件:在发生死锁时必然存在一个进程等待队列{P1,P2,…,Pn},其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路,环路中每一个进程所占有的资源同时被另一个申请,也就是前一个进程占有后一个进程所深情地资源。
以上给出了导致死锁的四个必要条件,只要系统发生死锁则以上四个条件至少有一个成立。事实上循环等待的成立蕴含了前三个条件的成立,似乎没有必要列出然而考虑这些条件对死锁的预防是有利的,因为可以通过破坏四个条件中的任何一个来预防死锁的发生。

5.差值器&估值器

参考:Android 动画:你真的会使用插值器与估值器吗?(含详细实例教学)
插值器(Interpolator)决定 值 的变化规律(匀速、加速等),即决定的是变化趋势;
估值器(TypeEvaluator)决定具体变化数值,属性动画特有的属性。

6.简述Activity启动全部过程?

参考:【凯子哥带你学Framework】Activity启动过程全解析

7.okhttp源码?

参考:OKHttp源码解析

8.RxJava简介及其源码解读?

使用教程 给初学者的RxJava2.0教程(一) 这是一个系列的,图本并茂,推荐。

9.性能优化如何分析systrace?

参考:android核心技术之性能分析工具Systrace
查看红色的Frames 的alert信息。

10.广播的分类?

参考:Android总结篇系列:Android广播机制
①Normal Broadcast:普通广播。无序,可以加权限。
②System Broadcast: 系统广播。系统自动发出。
③Ordered broadcast:有序广播。priority属性值从大到小排序,对于具有相同的priority的动态广播和静态广播,动态广播会排在前面。先接收到的可以对此有序广播进行截断或者修改。
④Sticky Broadcast:粘性广播(在 android 5.0/api 21中deprecated,不再推荐使用,相应的还有粘性有序广播,同样已经deprecated)。特点是Intent会一直保留到广播事件结束。
⑤Local Broadcast:App应用内广播,安全性更高,更加高效。

参考文章–>https://mp.weixin.qq.com/s/sN_i_IaLUpFBbX9UHIX4NA

原创粉丝点击