实践出真知!手把手教你写Android项目文档,深度好文
时间:2023-02-20 09:30:00
前言
我今年38岁,失业前是南方二线城市某知名互联网公司的部门技术主管,婚姻幸福,膝下有一儿一女,组成一个好字,房子车子:有一辆十几万的汽车,一套月供八千的房子,妻子全职在家带娃,家里的一切开销全部指望我的那点工资,从没有想过失业会降临到我的头上,当我把这个消息告诉母亲的时候,妈妈哭了:这么好的工作怎么说没了,我以为你会在那里干一辈子。妻子说:有了你的技术能力,你总会找到一份好工作,不要悲伤和气馁。妻子说:有了你的技术能力,总会找到好工作,不要难过气馁。
就这样,我毫无准备地踏上了再求职的过程。虽然我对自己的能力还是有信心的,但我还是分三条腿走路,以保证最终的成功率。
① 投递行业Top3大公司,因为之前的简历很好,在提交了一些简历后,总是可以收到面试通知,每次也可以聊天,然后让我回去等通知,等待,但没有就业通知。
② Top碰壁后,我降低了期望,投递了小互联网和初创公司,又遭遇了HR各种挑刺嫌弃,说是太老了,公司养不起像我这样的高薪人。
③ 由于行业属性,我另一条路是找熟人内推,这个取得的效果最好,但唯一一点就是薪资福利、岗位职责等不符合我的心意。
从初中到高级,移动程序员的高级宝典
想成为一名优秀的人Android开发,你需要一个完整的 在这里,让我们一起成长为我们想要的。
下面我们就去吧 Android 例如,从硬技能和软技能两个方面,梳理移动终端程序员在大前端趋势下从初级到高级所需的技能点,并推荐一些实用的书籍和材料。
(一) 硬技能:专业技术知识
1. Java / Kotlin开发语言
(1) Java
**常用数据结构:**ArrayList、Vector、CopyOnWriteArrayList、HaspMap、ConcurrentHashMap、HashTable 等待使用场景。
JVM 虚拟机包括 Java 内存管理,GC 垃圾回收机制,类别加载机制。推荐书籍:深入理解 Java 虚拟机 JVM 高级特性与***实践》。
**多线程编程,**线程同步包括线程池、锁定机制 。推荐书籍:《Java 并发编程实战和《Java 多线程编程核心技术。
AOP 编程实现,包括 JDK 实现动态代理,ASM 直接操作字节码,CGLIB 实现,其原理封装了 ASM,使用更方便。
Javassist:在字节码加载前直接修改切入法和注解处理器 APT,这在 Android 例如,中开源较多,如 DataBinding , ButterKnife, EventBus3 等等。
异常处理 Exception,包括异常检查和异常处理。
IO 流相关,包括堵塞型 IO 和非堵塞型 IO。
Java 一些高性特级,比如反射、代理、泛型、枚举、正则表达式等等;同时了解一下 jdk1.8,1.9,1.10 等新特点。相关书籍较多,推荐**《Thinking in Java》和《Effective Java》**。
(2) Kotlin
Kotlin 是一个基于 JVM 新编程语言,在 Google IO 2017 中被 Google 宣布成为 Android 语言的发语言。
Kotlin 有哪些优点?
**①简洁性: **样板代码的数量大大降低,提供了大量的标准函数。
**②安全性:**避免空指针异常等错误。
**③互操作性:**充分利用 JVM、Android 现有的浏览器库。
**④工具友好: **可用任何 Java IDE 或者用命令行构建。
在 Kotlin 中要建立函数编程思想。将函数理解为一个值到另一个值的映射关系,并以函数为单元处理每个业务逻辑。函数可以作为参数或返回值。 Kotlin 提供的标准函数,如 let、run、with、apply、also、 Lambda 表达式。尽量使用闭包和高阶函数。
Kotlin 另一个突出特点是协程,为设计异步、非阻塞的程序提供了强大的范式。协程是一种轻量级的线程,它提供避免阻塞且更廉价可控的操作: 悬挂协程。将复杂的异步操作放入底层数据库中,可以按顺序表达程序逻辑,以简化异步编程。
简单说下 Kotlin/Native,其设计的初衷是支持非 JVM 虚拟机平台环境编程,如 iOS、同时支持和支持嵌入式平台 C 互操作。推荐书籍: 《Kotlin 实战》。
2. Android 进阶技术点
进程相关,包括 App 过程原理及 AIDL 原理。
性能优化,包括:内存,cpu,耗电量、网络要求、UI 使用布局、线程、数据库等优化方法和优化工具。
Android 源码相关,包括:Binder 机制,Activity 启动流程,Handler 原理,AMS ,PMS,WMS 原理,View 绘制过程,Touch 事件传递机制等。
编译包装过程,从 java/kotlin 最终形成源代码 APK 的过程。
实现热修复的原理,目前,热修复框架种类繁多,包括底层替换、类加载和 Instant Run 方案。
逆向工程原理,主要是为了预防 apk 被反编译破解和理解 apk 加固方案。
插件化,目前也有很多方案,实现了主流技术 Hook 方式,注册 Activity 占坑,用占坑 Activity 通过 AMS 验证,恢复插件 Activity,其它组件的原理大致相似。
NDK 开发,调用 JNI 以及回调 Java 的方式。
自定义控件,需要注意 onMeasure,onLayout,onDraw 调用时间,以及 Touch 事件分发机制。
动画 View Animation,视图动画很早 Android 它已经在版本系统中提供,只能用 View 的动画。
属性动画 Property Animation,只对 3.0 上述版本可以设置为任何版本 Object,包括尚未渲染到屏幕上的对象。这种动画是可扩展的,可以定制任何类型和属性。
Webview 中 Native JS 交互,常用的 JSBridge 等。
Gradle 的特性以及 DSL 语法,比如 Gradle Transform API 允许使用第三方插件 class 文件转为 dex 操作编译文件前 class 文件。利用这一特性,我们可以在代码编译阶段注入或修改代码,这也是许多埋点技术和热修复技术的基础。
**安全性:**HTTPS 通信原理、数据加密方法包括 MD5,RSA 等,webview 安全、代码混淆、数据验证、组件通信安全、服务器通信。
CI 持续集成:Jenkins ,Gitlab CI 构建持续集成开发工具。
Sersor 传感器:包括陀螺仪、加速传感器、方向传感器、重力传感器、光传感器等。
Android 开发国际化。
ART 和 Dalvik 虚拟机的区别,主要是 AOT,Ahead-Of-Time 预编译。
熟悉 DEX 文件结构。
单元测试:JUnit4,AndroidJUnitRunner,Mockito 使用框架。
自动化测试:Monkey / Monkey Runner ,Espresso ,UI Automator 等。
掌握模块化开发模式:注意层与模块之间的跳转通信。
代码重构能力,推荐书籍:重构改进现有代码的设计
Google 动态化框架 App Bundles。
Jetpack,Google 新一代组件、工具和架构指导旨在加快 Android 应用开发速度。Jetpack 主要分为 4 部分:
移动端程序员在大前端趋势下应该很酷?些进阶技能助你逆袭
Android开发常用的第三方库:
响应式编程:RxJava、RxAndroid,Google 的Agera
网络库:包括Retrofit,OkHttp,Volley
图片:Fresco,Gilde,Picasso
依赖注入:Dagger2
数据库:Realm,ORMLite,GreenDAO,ObjectBox
数据总线:EventBus,otto
内存泄漏检测工具 LeakCanary 等
各个技能点如果详细拓展开,会形成相当庞杂的一张知识图谱,建议大家自行梳理总结消化。
3. OOAD 和设计模式
在架构设计方面,首先要掌握的就是面向对象的开发和设计。具体知识点包括:
**面向对象三大特性:**封装,继承,多态。
五大基本原则(SOLID 原则),单一职责原则,开放封闭原则,里氏替换原则,依赖倒置原则,接口分离原则。
23 种设计模式:常用的有工厂、单例、适配器、桥接、组合、代理、命令、观察者、策略、状态模式等等。
4. APP架构设计
包括 MVC、MVP、MVVM、MVI、VIPER、Clean Architecture、Flux。目前除了 MVC 外 MVP 和MVVM 用得比较多,具体的架构设计还要结合业务去考虑。
(二) 软技能
人在职场,行走江湖,想进阶高级程序员光有技术深度是不够的,还需要掌握众多软技能,注意综合职业素养的磨练。有很多人一开始重视程度不足,在职场后半段的上升过程中,容易遇到瓶颈。
下面是我个人总结出的高级程序员必备软技能,供大家参考。
**1. 快速学习能力:**包括技术深度和广度,能够不断探究新技术,不断学习。
**2. 沟通能力:**加强表达、阅读、编写能力,即使在技术发达的今天也绝不会过时。因为任何方式的沟通在企业内部都是非常有必要的。
**3. 团队协作能力:**开发人员很容易陷入孤立的人际交往状态,但开发工作永远都不可能是一个人完成,只有成员真正能融入团队内,顺利与其他同事沟通合作,才能体现出其真正的价值,被列为未来职位晋升候选人的几率也更大。
**4. 时间管理能力:**可以参考时间管理「四象限法则」,有重点地把精力和时间集中用于处理重要但不紧急的工作,这样可以做到未雨绸缪。
大前端趋势下移动端程序员要凉?这些进阶技能助你逆袭
**5. 影响力:**一方面是业务影响力,另一方面是技术影响力。其中,提高技术影响力的方式包括:多参与技术分享,把积累的知识进行总结和传播;参加技术方案评审,把技术经验分享出去;帮助新同学解决技术问题;在博客、Github、StackOverflow 等平台上对外分享。
6. 文档编写能力:
代码注释。很多程序员很少写注释,或者注释过多,都是不合适的。多参考开源项目的注释规范。
编写技术设计文档。包括流程图,类图,功能时序图等等。
最后
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
上面分享的腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。
【Android学习PDF+学习视频+面试文档+知识点笔记】
【Android思维脑图(技能树)】
知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。
【Android高级架构视频学习资源】
A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)】
【Android思维脑图(技能树)】
知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。
[外链图片转存中…(img-46gCTkyr-1613913669721)]
【Android高级架构视频学习资源】
**Android部分精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!