阿里Android面试题

作者: 小鬼图样 | 来源:发表于2017-02-15 23:12 被阅读878次

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 阿里面试题锦集 - Android - 掘金前几天突然就经历了阿里android实习内推的电面,感...

  • 好文精读 - 收藏集 - 掘金

    android 阿里面试题锦集 - Android - 掘金前几天突然就经历了阿里android实习内推的电面,感...

  • Android面试总结

    整理一些常见的Android面试题(针对于2~3年开发经验中所遇到的问题)android阿里面试题锦集(点击查看)...

  • Android 面试题9

    2017下半年,一二线互联网公司Android面试题汇总 阿里巴巴 LRUCache原理 彻底解析Android缓...

  • Android面试题

    Android面试必备: (一)、Java面试题 (二)、Android面试题 (三)、Android高级面试题

  • 面试题

    关注的面试题文集 Android面试题整理 Android工程师面试题大全 Android 面试题总结之Andro...

  • Android面试总结二

    参考文章 40个Android面试题Java面试题集Android名企面试题及知识点整理Android面试题收集较...

  • Android 面试题(重点2)

    掘金官网Android面试题 Android 动画 Android 动画Android面试题 算法和数据结构 设计...

  • 裸面被残虐,阿里电面试题汇总

    裸面被残虐,阿里电面试题汇总 裸面被残虐,阿里电面试题汇总

  • 阿里Android面试题

    1 Android事件分发机制? 分为三层:Activity、ViewGroup、View。 1、如果事件不被中断...

网友评论

    本文标题:阿里Android面试题

    本文链接:https://www.haomeiwen.com/subject/fazqwttx.html