你是否和我一样,也曾因为自己的学历低而烦恼?
首先申明我是一个大专生,很烂的一个学校,大学学Android,我什么都没学会,四级考到大三才过,可想我大学成绩有多差。其实我高中小学成绩可以,当年高考与二本线也就差几分,三本没去去了专科,虽然不后悔,但有深深的遗憾。
因为很多公司,尤其是知名公司招聘第一条就是本科以上学历。所以大多数情况下门都进不去的。所以本人绕了一个大大的圈子,历经四年才“真正”进入阿里,享受正式员工的福利待遇。
这些年的经历,本人深深感到身边圈子的重要,因为起点低,身边都是普通的人,自己的视野打不开,连努力方向都不知道。中途想改变,却茫然无力。最后只能一步步去更好的公司,与更优秀的人共事。终于花了四年光阴,极好的运气,赶上了别人的起点。
记得刚毕业的我找了几份工作,做的较长时间的一份工作实在江苏南京,一家普通软件公司APP产品运营。不算专职敲代码,做了半年,发现工资低,没有晋升空间,又没有技术傍身。因此又动了辞职的念头,开始了投递简历之旅。
终于接到了阿里的外包,优酷的工作机会。犹豫了很久,虽然是外包公司,但想着能去更好的公司,与更优秀的人共事。所以还是果断辞职去了。
刚开始的我一直加班,觉得很累,比起身体更劳累其实是心累!
学校的东西在公司根本不够用,写需求时比较吃力,尽管很努力地去想去写了,但是写出来的代码质量自己都觉得差,也被别人怼过几次了。每天压力都很大,很焦虑。
为了留下来,代码写不好,懂得又不多,只能经常向公司老员工请教,人生的发展,离不开贵人的相助。同组的高爷,当时就已经是阿里P8架构师,给了我很多帮助和鼓励,除了在工作中帮助我分析解决问题,还建议我多学习和注重能力提升。
结合高爷的建议,和自身的学习积淀,给大家分享一些学习心得:
关于Java
Java 是 Android App 开发默认的语言, Android Framework 也是默认使用 Java 语言,熟练掌握 Java 语言是 Android 开发者的必备技能。高爷同时还赠送了我几本书,《Java核心技术》、《Java并发编程的艺术》、《深入理解Java虚拟机》。至今翻看这些书都觉得获益匪浅,当然现在这些书我也都搜集到了PDF版本。需要的朋友可以自行前往免费下载。
下载地址:https://shimo.im/docs/Q6V8xPVxHpkrtRtD
关于kotlin
Google 几年前就开始走 “Kotlin First” 的路线,目前很多官方的文档和 Demo 都是使用 Kotlin 语言作为默认,Kotlin 的重要性不言而喻。
我算是第一波开始跟风学习和接触这项技术的人,现在阿里项目上也在使用Kotlin语言,也算赶上了好的时候。当然中间的学习过程,我也有从培训机构学习和借鉴了很多技术。
下载地址:https://shimo.im/docs/Q6V8xPVxHpkrtRtD
Android Studio
Android Studio IDE Overview
Android Studio 作为 Android 默认的开发者工具,目前的版本更新已经解决了诸多之前的性能问题,虽然目前对硬件资源的要求仍然比较高,但是一旦你接受了这个设定,真香预警!
AS 主要需要熟悉下面几点
- AS 快捷键
- AS 插件
- AS Profile (内存、CPU、IO、NetWork)
Project Structure — Java/Kotlin/Flutter, XML, .gradle files
熟悉各种项目的目录结构,资源文件、Gradle 文件
Android 基础知识
四大组件
这部分不必做过多的解释,下面列出的就是大家熟悉的 Android 四大组件,Android 开发的基础
- Activity — Activity Lifecycle, Tasks & Back Stack
- Service
- Broadcast Receiver
- Content Provider
Intents
- Types of Intent - Implicit, Explicit
- Intent Filter
Static User Interface
- View — Button, ImageView, TextView, EditText, and etc :这是开发中会遇到的常用的组件,许多复杂的布局都是用简单基础的 View 组合而成
- ViewGroup - LinearLayout, RelativeLayout, FrameLayout:三大传统布局,适用于不同的场合
- ConstraintLayout : Google 新推的布局,目前已经取代 RelativeLayout 成为默认的 App 布局,具体使用可以参考官方文档
Dynamic User Interface
- RecyclerView - 列表类的布局首选控件,性能相对 ListView 要好一些,功能也比 ListView 要多一些
- ViewPager
- Spinner
CustomView
Android 默认的布局很多时候都没法满足设计的需求,这时候就需要自定义 View,你需要掌握下面几个知识点的使用
- Canvas
- Bitmap
- Paint
UI Resources
相比 HardCode,使用资源文件会让代码的可修改性更高
- Drawables
- String
- Styles
Fragments
许多人提倡 App 使用 单 Activity + 多个 Fragment 的组合,可见 Fragment 在开发中的重要性,但是 Fragment 的管理又是一门技术,Fragment 的坑,只能在实际开发中慢慢填平了,不过下面的 Fragment 基础还是要牢固
- Fragment Lifecycle
- Fragment Manager
Support User Interface
这里列的同样是一些功能组件,需要知道这是什么东西,基本的用法
- ProgressBar - 进度条
- Dialogs - 弹框
- Toast & Snackbar - 提示
Storage
App 开发不免要和文件打交道,文件的读写、存储都是必不可少的,下面列出了几种 Android 中存储相关的知识点
- Shared Preferences - 适合存储字段
- File Systems - 文件存储
- Database — RoomDB - 数据库存储,RoomDB 是 Google 新推出的数据库解决方案(在 AndroidX 中),具体使用可以参考官方文档
Build
Android App 默认使用 Gradle 进行编译,关于 Gradle 的使用必须要熟悉,以及如何区分开发版本和 Release 版本,以及国内特有的多渠道打包技术、以及 ASM 等
- Gradle
- Debug / Release Configuration
- 多渠道打包
- ASM
Threading
理解 Thread 非常重要,Android App 只有一个主线程,其余的我们称之为工作线程,我们的很多工作需要再工作线程和主线程直接切换,如何高效创建和释放线程、线程池、线程间通信、Message-Looper-Handler 模型这些知识点都要了熟于心,另外进阶的话 Binder 通信也是需要掌握的知识
- Threads
- Handler / Looper / Message / MessageQueue
- AIDL / Binder
Debugging
这里列举了一些 Debug 的基本手段,实际开发中遇到具体问题的时候一般都会用到,不过有的可能入手难度要高一些,需要花时间去掌握。Debug 工具除了下面这几个还有很多
- Memory profiling - MAT,AS Memory Profile
- Logging - Log 包含非常丰富的信息,可以帮助我们还原现场
- Systrace - Systrace 工具可以查看一段时间内手机系统各个进程的运行状态,具体使用可以参考我博客的 Systrace 系列教程
- Exceptions - 各种异常,保证程序的健壮性
- Error Handling - Error 是必须要解决的问题,一般会导致 App 直接闪退,需要非常重视
Memory Leak
内存泄漏是一个很大的专题,包括 Java 内容泄漏和 Native 内存泄漏,涉及的知识点非常多,可以单独拿出来做一个大的知识栈。一般来说, Java 内存泄漏会比较好检测和修复,但是 Native 内存泄漏就会比较难。
- Detecting and Fixing Memory Leaks - 内存泄漏检测和修复,是一个比较大的工程,可以参考 LeakCanary、Matrix 等开源工具
- Context - 使用不当会造成该释放的对象没有释放造成内存泄漏
- Native Memory Leaks
3rd Party Library
经典的第三方类库,可以大幅节约我们的开发时间
- Image Loading - Glide, Picasso
- Dependency Injection - Dagger
- Networking - Fast Android Networking Library, Retrofit
- MultiThreading - RxJava, Coroutines
Data Format
常见的一些数据保存流格式
- JSON — GSON
- Flat Buffer
- Protocol Buffer
Android Jetpack
Jetpack 是 Google 推出的一套库、工具和指南,可帮助开发者更轻松地编写优质应用。这些组件可帮助您遵循最佳做法、让您摆脱编写样板代码的工作并简化复杂任务,以便您将精力集中放在所需的代码上。Jetpack 包含与平台 API 解除捆绑的 androidx.* 软件包库。这意味着,它可以提供向后兼容性,且比 Android 平台的更新频率更高,以此确保您始终可以获取最新且最好的 Jetpack 组件版本。
- Foundation Components — AppCompat, Android KTX, Multidex
- Architecture Components — LiveData, ViewModel, DataBinding, Paging, Work Manager, Navigation
- Behaviour Components - Download Manager, Media Playback, Notification, Permissions, Preference, Sharing, Slice
- UI Component - Animation & Transition, Android Auto, Emoji, Palette, Android TV, Android Wear
Android架构设计模式
- MVC架构设计模式:MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。
- MVP架构设计模式:MVC全名是Model View Persenter,MVP由MVC演变而来,是现在主流的开发模式。
- MVVM架构设计模式:MVVM全名是Model-View-ViewModel,它本质上就是MVC的改进版。
各种模型的主要目的都是是分离视图(View)和模型(Model),即将UI界面显示和业务逻辑进行分离。
下载地址:https://shimo.im/docs/Q6V8xPVxHpkrtRtD
Unit Testing
- Local Unit Testing
- Instrumentation Testing
Security
安全方面接触毕竟多的应该是加密、解密、混淆等,毕竟用户数据安全大于一切,不重视这个欧盟会教你做人
- Encrypt / Decrypt
- Proguard
- R8
音视频开发
音视频开发则需要从以下四个方面进行入门学习和提升。
1.多媒体系统
- FFmpeg
- 流媒体协议
- 音视频效果处理
下载地址:https://shimo.im/docs/Q6V8xPVxHpkrtRtD
专项技术
- App 瘦身
- MultiDex
- 插件化
- 推送技术
- Crash 统计
- 函数式编程
- 启动保护
- 在线热修复
- AOP
- React Native
- Hybrid
- SDK化
- 依赖注入
下载地址:https://shimo.im/docs/Q6V8xPVxHpkrtRtD
作为一个有进取心的 Android 开发者,拥有自己的技术栈和规划非常重要,技术栈确保你有足够的市场竞争力,从而形成护城河;技术规划则可以给你一个明确的学习目标。
喜欢的朋友,别忘了关注+点赞!2020我们一起努力前行吧!