\- 熟练掌握 Android应用开发,并能独立负责应用程序的开发和维护。
\- 熟练掌握kotlin,熟练使用函数式编程和协程,并有实际项目经验。
\- 熟练掌握Java语言技术,熟悉常用的设计模式,了解泛型,反射,动态代理,自定义注解以及泛型等并能将其应用到项目中,具备扎实的编程基础。
\- 熟练掌握JVM概念,了解常用的性能监控框架原理如:LeakCanary,Koom,Blockcanary,Matrix等,有一定的性能优化经验。
\- 对java内存模型有深刻的理解,熟悉并发编程(synchronized,volatile, CAS,java.util.concurrent.locks.* 等),对线程切换和线程池使用有深入了解并能融入项目中。
\- 熟练掌握Android Framework层原理,深入了解Android的启动,屏幕刷新机制,Handler,IPC通信等原理。
\- 深入了解响应式编程,对rxjava操作符的包裹流程、订阅、分发、线程切换有深入的了解;熟练使用Glide,深入了解其请求生命周期监听机制,缓存机制,有结合Okhttp对其扩展改造的经验;熟练掌握基于retrofit+okhttp3的网络框架及源码流程;熟练掌握ARouter的使用及源码执行流程。
\- 有一定的架构设计能力,能独立完成网络框架以及常用MVP架构、MVVM架构的设计及使用。
\- 熟练掌握组件化开发,掌握多种组件间路由跳转方式,如Arouter,基于Scheme的隐式跳转,基于AutoService的接口下沉等。
# SDK 公共库
### 项目介绍
- SDK共4.5亿+日活.而公共库为这6大SDK提供线上APM监控,看护,进程间数据通信,数据采集,线程调度,日志上传热动态业务执行,系统API调用合规等通用能力.以此来提升各个业务SDK的维护性和核心业务的拓展.
### 技术要点
- **MPF文件级缓存框架及API调用桥接层设计 :** 为了提升产品的合规能力,降低敏感API的调用频率.开发及维护了数据API调用的桥接层实现对各个SDK及动态业务对API调用频次的控制,基于ByteBuffer对原有的SP框架进行改造,同时使用文件锁来保证进程间的同步, 在保证线程安全的场景下,使用读写锁分离的方式提高数据读取的效率;读写效率较与原有SP框架提升近7倍.在API的调用上基于面向对象思想,自顶向下设计.提高了整套框架的可扩展性和灵活性.
- **自建IPC通信及看护拉活能力:** 为了实现集成我们SDK的APP相互间的看护能力.项目基于nio的socket通信建立进程间的全双工通信通道,实现APP间的心跳监听.当监听到目标APP被杀时, 尝试通过启动Activity的方式去拉起目标APP. 拉活成功后,为了实现跨APP间的消息透传, 基于aidl封装了IPC通信框架,以实现APP间跨进程的消息互传.
- **动态下发能力**: 为了扩展项目的动态下发能力.基于java反射自建编译器和解析器.绕开google对dexloader.load()热更能力的限制,基于自有脚本语言对动态任务进行编码,投放.基于线上的解析器执行下发的动态任务.提升流量的利用率.
- **稳定性建设能力:** 为了提高各个业务对线程使用的利用率以及减少线程滥用的问题.设计及开发了线程管理模块对业务中的任务执行进行统一调度,提升线程的利用率,规避线程滥用的问题; 为了提升SDK业务的健壮性,整合了一套线下及线上的性能监控框架,涵盖线下CPU占用监控,主线程耗时监控,以及内存占用监控以及线上线程及内存占用监控和异常监控上报的能力, 及时感知业务在线上的异常.
- **逆向能力:** 为了提升产品优势,通过反编译,xpose等手段逆向竞品SDK,分析其业务流程和实现方式,对比差异,输出优化方案.
## 彩贝壳客户端
### 项目介绍:
- 旗下彩贝壳App是一款本地生活类亲子领域具有40W+DAU 且合作商户已覆盖儿童游乐、社会餐饮、星级酒店、景区景点、亲子采摘、启蒙教育等多领域的社区电商类APP。APP采用预约打卡制度,用户可以根据其他用户分享的POI玩法或者运营推荐的软文和自身需要来购买且预约公司从合作商户中采购的低价闲时库存的生活类产品。在为用户提供低价品质商品的同时,提高了合作商户的闲时库存的利用率。
### 技术要点:
- **基于coroutine+retrofit+okhttp+的架构**:为了提升留存,升级用户的体验等,对App的主页,直播列表页,UGC详情页等页面进行了改版,升级相关ui交互体验。 业务逻辑采用viewmodel+livedata+databinding 充分解耦;基础功能组件打成AAR包并使用maven维护版本;重写ObservableWrapper防止数据倒灌并扩展liveDataBus实现粘性和非粘性事件的分发;结合flow完成线程的切换以及事件流的转发。
- **性能优化:** 随着日活不断提升,为提升APP的稳定性和性能;调研完善公司的线上APM方案,选择相关方案完善落地APP native以及java层的内存泄漏监控;FPS帧率监控等模块的功能,及时发现APP的缺陷。采用上个项目中的启动优化方案对sdk的初始化进行优化;通过APT根据xml文件编译生成对应的View对象,以达到通过new对象的形式替换反射构造View对象。提升view通过LayoutInflator将xml文件IO及反射转换成View对象时的速度;为了实现内存泄漏监控的同时不影响用户体验,采用内存阈值监控来触发镜像采集,为避免Dump Hprof文件时的线程卡顿,利用系统内核COW机制,每次dump内存镜像前先挂起住进程,然后fork子进程来执行dump操作;通过setMessageLogging的方式计算messge执行耗时,当超过阈值时,打印堆栈和cpu信息,通过堆栈和SystemTrace分析找到卡顿原因,及时优化长耗时的任务;利用享元模式提高对象的复用性,优化内存等。
- **WebviewActivity重构**:为了降低APP的因webview导致的crash,独立WebviewActivity进程,基于aidl封装了IPC通信框架,实现js在webview所在的进程与主进程之间