阿里Android面试题

1 Android事件分发机制?

分为三层:Activity、ViewGroup、View。

1、如果事件不被中断,整个事件流向是一个类U型图。

2、dispatchTouchEvent 和 onTouchEvent 一旦return true,事件就停止传递了。

3、dispatchTouchEvent 和 onTouchEvent return false的时候事件都回传给父控件的onTouchEvent处理。

4.Intercept 的意思就拦截,每个ViewGroup每次在做分发的时候,问一问拦截器要不要拦截(也就是问问自己这个事件要不要自己来处理)如果要自己处理那就在onInterceptTouchEvent方法中 return true就会交给自己的onTouchEvent的处理,如果不拦截就是继续往子控件往下传。

ACTION_MOVE和ACTION_UP在传递的过程中并不是和ACTION_DOWN 一样,你在执行ACTION_DOWN的时候返回了false,后面一系列其它的action就不会再得到执行了。简单的说,就是当dispatchTouchEvent在进行事件分发的时候,只有前一个事件(如ACTION_DOWN)返回true,才会收到ACTION_MOVE和ACTION_UP的事件。

如果在某个控件的dispatchTouchEvent 返回true消费终结事件,那么收到ACTION_DOWN 的函数也能收到 ACTION_MOVE和ACTION_UP。

对于ACTION_MOVE、ACTION_UP总结:ACTION_DOWN事件在哪个控件消费了(return true), 那么ACTION_MOVE和ACTION_UP就会从上往下(通过dispatchTouchEvent)做事件分发往下传,就只会传到这个控件,不会继续往下传,如果ACTION_DOWN事件是在dispatchTouchEvent消费,那么事件到此为止停止传递,如果ACTION_DOWN事件是在onTouchEvent消费的,那么会把ACTION_MOVE或ACTION_UP事件传给该控件的onTouchEvent处理并结束传递。


三级缓存底层实现

什么是三级缓存

网络缓存, 不优先加载, 速度慢,浪费流量

本地缓存, 次优先加载, 速度快

内存缓存, 优先加载, 速度最快

三级缓存原理

首次加载 Android App 时,肯定要通过网络交互来获取图片,之后我们可以将图片保存至本地SD卡和内存中

之后运行 App 时,优先访问内存中的图片缓存,若内存中没有,则加载本地SD卡中的图片

总之,只在初次访问新内容时,才通过网络获取图片资源

内存缓存实现方法

通过HashMap键值对的方式保存图片,key为地址,value为图片对象,但因是强引用对象,很容易造成内存溢出,可以尝试SoftReference软引用对象

通过HashMap>SoftReference 为软引用对象(GC垃圾回收会自动回收软引用对象),但在Android2.3+后,系统会优先考虑回收弱引用对象,官方提出使用LruCache

通过LruCacheleast recentlly use 最少最近使用算法

会将内存控制在一定的大小内, 超出最大值时会自动回收, 这个最大值开发者自己定


HashMap底层实现,hashCode如何对应bucket?

HashMap是基于哈希表实现的,每一个元素都是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阈值)时,同样会自动增长。

HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。

HashMap实现了Serializable接口,因此它支持序列化,实现了Cloneable接口,能被克隆。


tcp和udp的区别,tcp如何保证可靠的,丢包如何处理?

TCP与UDP的区别

TCP面向有链接的通信服务  UDP面向无连接的通信服务

TCP提供可靠的通信传输      UDP不可靠,会丢包

TCP保证数据顺序                 UDP不保证

TCP数据无边界                     UDP有边界

TCP速度快                           UDP速度慢

TCP面向字节流                    UDP面向报文

TCP一对一                            UDP可以一对一,一对多

TCP报头至少20字节             UDP报头8字节

TCP有流量控制,拥塞控制    UDP没有

为什么UDP比TCP快

TCP需要三次握手

TCP有拥塞控制,控制流量等机制

为什么TCP比UDP可靠

TCP是面向有连接的,建立连接之后才发送数据;而UDP则不管对方存不存在都会发送数据。

TCP有确认机制,接收端每收到一个正确包都会回应给发送端。超时或者数据包不完整的话发送端会重传。UDP没有。因此可能丢包。

你可能感兴趣的:(阿里Android面试题)