十年磨一剑:站在面试官角度聊聊现下大环境面试,“野生”程序员现阶段面试问题 & 学习误区

3. Hook

**Hook 的选择点:**静态变量和单例,因为一旦创建对象,它们不容易变化,非常容易定位。

Hook 过程:

  • 寻找 Hook 点,原则是静态变量或者单例对象,尽量 Hook public 的对象和方法。

  • 选择合适的代理方式,如果是接口可以用动态代理。

  • 偷梁换柱——用代理对象替换原始对象。

  • 多数插件化 也使用的 Hook技术

4. 内存泄漏

  • 构造单例的时候尽量别用Activity的引用;

  • 静态引用时注意应用对象的置空或者少用静态引用;

  • 使用静态内部类+软引用代替非静态内部类;

  • 及时取消广播或者观察者注册;耗时任务、属性动画在Activity销毁时记得cancel;

  • 文件流、Cursor等资源及时关闭;

  • Activity销毁时WebView的移除和销毁。

5. View

  • Window WindowManager WMS

  • View 工作流程

  • View.post

6. 动画

**帧动画 :**AnimationDrawable 实现,在资源文件中存放多张图片,占用内存多,容易OOM。

**补间动画 :**作用对象只限于 View 视觉改变,并没有改变View 的 xy 坐标,支持 平移、缩放、旋转、透明度,但是移动后,响应时间的位置还在 原处,补间动画在执行的时候,直接导致了 View 执行 onDraw() 方法。补间动画的核心本质就是在一定的持续时间内,不断改变 Matrix 变换,并且不断刷新的过程。

**属性动画 :**ObjectAnimator、ValuetAnimator、AnimatorSet 可以是任何View,动画选择也比较多,其中包含 差速器,可以控制动画速度,节奏。类型估值器 可以根据当前属性改变的百分比计算改变后的属性值 。因为ViewGroup 在 getTransformedMotionEvent方法中通过子 View 的 hasIdentityMatrix() 来判断子 View 是否经过位移之类的属性动画。调用子 View 的 getInverseMatrix() 做「反平移」操作,然后判断处理后的触摸点是否在子 View 的边界范围内。

提升动画 可以打开 硬件加速,使GPU 承担一部分CPU的工作。

7. Android 进程通讯方式

  • bundle

  • ContentProvider

  • 文件

  • Broadcast

  • AIDL

  • Messager

  • Socket

8. Android 线程通信

  • Handler线程间通信

  • Handler 同步屏障机制

  • Looper.loop 为什么不会卡死

  • Messaage复用

你可能感兴趣的:(程序员,面试,学习,职场和发展)