This project is for Study.
- 初级工程师:阅读官方文档+练习官方Demo
- 技术要求
- 四大组件使用
- 如何布局
- 简单的自定义View
- 动画
- 书籍推荐
- 《第一行代码》
- 《疯狂Android》
- 技术要求
- 中级工程师:写文章要独立思考和有技术深度;阅读源码+自定义View+滑动冲突(View滑动原理)
-
技术要求
- AIDL:熟悉AIDL,理解其工作原理,懂transact和onTransact的区别;
- Binder:从Java层大概理解Binder的工作原理,懂Parcel对象的使用;
- 多进程:熟练掌握多进程的运行机制,懂Messenger、Socket等;
- 事件分发:弹性滑动、滑动冲突等;
- 玩转View:View的绘制原理、各种自定义View;
- 动画系列:熟悉View动画和属性动画的不同点,懂属性动画的工作原理;
- 懂性能优化、熟悉mat等工具
- 懂点常见的设计模式
-
推荐书籍
- 《Android开发艺术探索》
- 《Android群英传》
-
高级工程师:
- 技术要求
- 了解SystemServer的启动过程
- 了解主线程的消息循环模型
- 了解AMS和PMS的工作原理
- 能够回答问题”一个应用存在多少个Window?“
- 了解四大组件的大概工作流程
- Activity的启动模式以及异常情况下不同Activity的表现
- Service的onBind和onReBind的关联
- onServiceDisconnected(ComponentName className)和binderDied()的区别
- AsyncTask在不同版本上的表现细节
- 线程池的细节和参数配置
- 熟悉设计模式,有架构意识
- 书籍推荐
- 《Android 源码设计模式解析与实战》
- 《Android内核剖析》
- 技术要求
-
- 编码规范
- 版本控制
- 开发工具
- 签名打包
- Java
- 集合框架
- I/O流
- Android
- 四大组件
- 常用控件
- View绘制
- 事件分发机制
- 动画
- 进程间通信
- 网络
- 设计模式
- 应用架构
- 开源框架
- Android框架层
- Android系统架构解析
- Android Jetpack组件
- Android Jetpack架构组件(一)了解Android Jetpack
- Android Jetpack架构组件(二)Lifecycle使用篇
- Android Jetpack架构组件(三)Lifecycle原理篇
- Android Jetpack架构组件(四)LiveData使用篇
- Android Jetpack架构组件(五)LiveData原理篇
- Android Jetpack架构组件(六)ViewModel使用和源码篇
- Android Jetpack架构组件(七)Room使用篇
- Android Jetpack架构组件(八)WorkManager使用篇
- Android Jetpack架构组件(九)WorkManager源码篇
- 深入理解四大组件 (未完待续)
- 深入理解Context
- 多线程和Handler机制源码分析
- Android应用层
- 数据解析和泛型
- Git工具使用
- 开源框架源码分析
- 网络安全
- 性能优化
- 事件分发机制
- 自定义控件
- 动画
- 跨进程通信
- 其它篇
- Java枚举单例
- Java泛型
- Java集合框架
- Java并发知识
- 线程的实现本质上有几种方式
- Java线程的生命周期
- 生产者消费者模式有哪几种常见的实现方式?
- wait/notify/notifyAll常见面试题解析
- synchronized关键字的几种使用方式比较
- volatile关键字的理解
- 设计模式
- 算法
- 计算机基础
- 1 Java泛型深度解析以及面试题?
- 什么是泛型?使用泛型的好处?
- 什么是泛型擦除机制?
List<Object>, List<?>, List<String>,List原始类型
四者之间的区别?
- 2 Java注解的理解和应用场景?
- 3 线程的实现本质上有几种方式?
- 4 Java线程的生命周期
- 5 wait/notify/notifyAll常见面试题解析
- 6 synchronized关键字的几种使用方式比较
- 7 volatile关键字的理解
- 8 锁分哪几类?
- 9 CAS无锁编程的原理?有哪些问题?
当前的处理器基本都支持CAS()的指令,只不过每个厂家所实现的算法并不一样,每一个CAS操作过程都包含三个运算符:一个内存地址V,一个期望的值A和一个新值B,操作的时候如果这个地址上存放的值等于这个期望的值A,则将地址上的值赋为新值B,否则不做任何操作。 CAS的基本思路就是,如果这个地址上的值和期望的值相等,则给其赋予新值,否则不做任何事儿,但是要返回原值是多少。循环CAS就是在一个循环里不断的做cas操作,直到成功为止。 问题:1 ABA问题 ; 2 开销问题,长期的自旋不成功就会对CPU有消耗;3 3 只能保证一个共享变量的原子操作
- 10 ReentrantLock的实现原理。
线程可以重复进入任何一个它已经拥有的锁所同步着的代码块,synchronized、ReentrantLock都是可重入的锁。在实现上,就是线程每次获取锁时判定如果获得锁的线程是它自己时,简单将计数器累积即可,每 释放一次锁,进行计数器累减,直到计算器归零,表示线程已经彻底释放锁。底层则是利用了JUC中的AQS来实现的。
- 11 AQS原理
它是用来构建锁或者其他同步组件的基础框架,比如ReentrantLock、ReentrantReadWriteLock和CountDownLatch就是基于AQS实现的。它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。它是CLH队列锁的一种变体实现。它可以实现2种同步方式:独占式,共享式。 AQS的主要使用方式是继承,子类通过继承AQS并实现它的抽象方法来管理同步状态,同步器的设计基于模板方法模式,所以如果要实现我们自己的同步工具类就需要覆盖其中几个可重写的方法,如tryAcquire、tryReleaseShared等等。 这样设计的目的是同步组件(比如锁)是面向使用者的,它定义了使用者与同步组件交互的接口(比如可以允许两个线程并行访问),隐藏了实现细节;同步器面向的是锁的实现者,它简化了锁的实现方式,屏蔽了同步状态管理、线程的排队、等待与唤醒等底层操作。这样就很好地隔离了使用者和实现者所需关注的领域。 在内部,AQS维护一个共享资源state,通过内置的FIFO来完成获取资源线程的排队工作。该队列由一个一个的Node结点组成,每个Node结点维护一个prev引用和next引用,分别指向自己的前驱和后继结点,构成一个双端双向链表。
- 12 生产者消费者模式有哪几种常见的实现方式?
- 13 Java集合框架
- 14 HashMap数据结构
- 15 ConcurrentHashMap的原理
- 16 类加载机制
- 17 JVM结构和垃圾回收机制
- 18 I/O流
- 19 应用程序安装流程
- 20 设计模式的原则和23种设计模式了解
- 21 四种排序算法
- 22 Integer面试题解析
- 23 分享几个面试题
- 1 Activity生命周期
- 2 Fragment生命周期]
- 3 Android中几种数据存储方式?
- 4 Android跨进程通信的方式有哪些?
- 5 Android动画
- 6 Handler机制
- 7 View的绘制流程]
- 8 View的事件分发机制
- 9 内存泄漏和性能优化
- 10 Binder机制
- 11 SystemServer的启动过程
- 12 主线程的消息循环模型是什么?主线程为什么不会卡死?