# 墨迹天气

  1. 自己说项目经历,说一下在项目中遇到的难点并且怎么解决的

  2. 职业规划是什么,为什么选择做移动端

  3. 自定义 View 的流程

  4. onMeasure()onLayout()onDraw()

  5. 事件分发机制有了解吗

    Android 事件分发总是遵循 Activity => ViewGroup => View 的传递顺序;

    三个与事件分发机制有关的方法:

    • dispatchTouchEvent():事件分发
    • onTouchEvent():事件处理
    • onInterceptTouchEvent():事件拦截

    dispatchTouchEvent()是负责事件分发的。当点击事件发生后,事件首先会传递给当前的 Activity,然后会调用 Activity 的dispatchTouchEvent()方法。

    onTouch()执行总优先于onClick()

  6. 点击一个 Button,发起网络请求,将获取到的数据展示到页面上,怎么优化它的速度/流程?

    从点击按钮出现点击时间,开启子线程发起网络请求,这是一个优化点。

    请求到的数据如何显示在页面上,这是一个优化点,例如三级缓存机制。

  7. Handler 的消息传递机制

  8. MessageQueue 中是以什么样的策略去存储消息的

    MessageQueue 实际上是以单链表的形式存储 Handler 发送过来的消息,有利于插入、删除的操作,主要有两个操作:

    • 通过enqueueMessage(Message msg, long when)向队列插入一个消息
    • 通过next()从无限循环队列中取出消息,并从消息队列中删除。
  9. 进程调度策略

  10. 内存泄露有了解吗?怎么样去处理内存泄漏

    内存泄漏:程序申请的内存空间,在使用完毕后未释放,一直占据内存单元。

    我们创建了一个对象,会在堆内存中给这个对象申请一块内存空间,假如调用了一次或者几次,之后就没有再调用,但仍然占据着内存。

    Java 可以使用垃圾回收机制。

  11. 三级缓存机制

  12. 有了解 Glide 框架中的最少未使用机制 Lru 算法吗?

  13. 怎么设计一个数据结构去实现 Lru 算法

  14. RxJava 里的操作符,如果是进行多个网络请求,用哪个操作符

    RxJava 操作符zip():使用一个函数组合多个 Observable 发射的数据集合,然后再发射这个结果。

    通过Observable.zip()方法把多个 Observable 组合成新的 Observable。

  15. 了解哪些设计模式

  16. 介绍一下快速排序算法,还了解哪些排序算法