不平凡的一年,不平凡的经历
2020 年最后一个月了!2020 年已经进入倒计时,此刻,要感谢这一年努力的自己。
2020 年其实是比较特殊的一年,回看这一年全国全世界的经历都是以往年份的几倍考验或几十倍的考验,对于我们个人来说又何尝不是极大的考验。
今天这篇文章就是想跟大家分享我这一年的真实经历,就在前两个月我已经是某大厂的高级 Android 工程师了。
“忙过了「双十一」,又开始了「双十二」,接下来还有「双旦」……”,虽然我经常跟朋友吐槽自己996,甚至经常 007,但内心却是开心和满足的,因为每次给父母打电话说自己在这家公司和拿到多少多少工资的时候,父母是自豪的。
一开始不在大厂,也总酸那些 996 的朋友,你们这哪还有生活啊,难怪没有女朋友。但其实内心是羡慕嫉妒的,我也想进大厂,大厂意味着高薪,趁年轻就应该享受这样的「福报」。
我今年也 30 了,普通本科生,而立之年的我之前过得不是很顺利,上半年不到 3 个月他经历了两次离职……
第一次是年初自己待了好几年的公司赶上了疫情,组织架构调整,进行了人员优化,业务线被解散,被裁员。
第二次是被裁员后,草草地面试,进入了一家外包公司。进去之后,感受非常不好,感觉跟公司正式员工有着明显的差别,不光薪资待遇方面,包括部门开会以及通知也是分开的。感觉自己每天都是在搬砖,工作都是一些边缘化的内容,自己考虑到没有什么实质性地成长,裸辞了。
裸辞其实是不喜欢骑驴找马,但裸辞后又正值疫情,找工作也比较难。好在这些年有一些积蓄能撑过这一段,抗住生活的压力。
这段时间感觉自己走到了人生谷底,年龄上没有一点优势,专业技能也一直在原地踏步,感觉整个职业生涯都要结束了。
但转念一想,不能就这么放弃,自己还是想精进下技术能力,在技术的道路上再走得远一点。不能丢人,不能在同学和家人面前抬不起头来。
于是开始了学习之路,之前工作中总是遇到问题去搜索解决办法,解决完了就完事儿了,也没有系统化地学习提升过。趁这个时候有时间,就想静下心来好好提升下。
现在我已经入职了某大厂,刚忙完双十一的活动,开启了人生新篇章。
跟他聊起来说当时为啥就下定决心不找工作静下心来学习,很多人其实也很难有这份勇气,他说其实是因为这几点:
- 不逼自己一把,不知道自己极限在哪,这大概就是置死地而后生吧
- 以前的工作中没有机会经历完整的大型开发项目,能力也自然得不到提升和突破
这一年我是如何学习的?
学习内容都整合成了一个文档,因为内容实在是太多了,接下来只给大家放一个我大概学习的一个内容和方向:
学习大纲:
- Handler
- Activity
- Fragment
- Service
- Android 布局优化
- BroadcastReceiver
- AsyncTask
- 事件分发机制
- View 绘制流程
- Binder,多进程,AIDL
- AMS,WMS,PMS
- ANR
- 内存相关
- 屏幕适配
- 缓存机制
- 性能优化
- MVC,MVP,MVVM
- Gradle
- RxJava
- OKHTTP 和 Retrofit
- Glide
一、Handler 相关知识
- Handler,Looper,Message之间的关系
- Messagequeue 的数据结构
- 如何在子线程中创建 Handler
- Handler post 的方法及原理
- Android 消息机制的原理及源码解析
- Android Handler 消息机制
- Android 消息机制
- .........
二、Activity 相关
- 启动模式以及使用场景
- onNewIntent()和 onConfigurationChanged()
- onSaveInstanceState()和 onRestoreInstanceState()
- Activity 的启动原理
- .........
三、Fragment
- Fragment 生命周期和 Activity 对比
- Fragment 之间如何进行通信
- Fragment 的 startActivityForResult
- Fragment 重叠问题
- .........
四、Service 相关
- 进程保活
- Service 的运行线程(生命周期方法全部在主线程)
- Service 启动方式以及如何停止
- ServiceConnection 里面的回调方法运行在哪个线程?
- .........
五、Android 布局优化之 ViewStub、 include、merge
- 什么情况下使用 ViewStub、include、merge?
- 他们的原理是什么?
- .........
六、BroadcastReceiver 相关
- 注册方式,优先级
- 广播类型,区别
- 广播的使用场景,原理
- .........
七、AsyncTask 相关
- AsyncTask 是串行还是并行执行?
- AsyncTask 随着安卓版本的变迁
- .........
八、Android 事件分发机制
- onTouch 和 onTouchEvent 区别,调用顺序
- dispatchTouchEvent , onTouchEvent , onInterceptTouchEvent 方法顺序以及使用场景
- 滑动冲突,如何解决
- .........
九、Android View 绘制流程
- 简述 View 绘制流程
- onMeasure, onlayout, ondraw 方法中需要注意的点
- 如何进行自定义 View
- view 重绘机制
- .........
十、Android Window、Activity、 DecorView 以及 ViewRoo
- 职能简介
- DecorView 的创建
- DecorView 的显示
- .........
十一、Android 的核心 Binder 多进 程 AIDL
- 常见的 IPC 机制以及使用场景
- 为什么安卓要用 binder 进行跨进程传输
- 多进程带来的问题
- .........
十二、Android 高级必备 : AMS,WMS,PMS
- AMS,WMS,PMS 全解析
- Android 解析 ActivityManagerService:AMS 启动流程 和 AMS 家族
- WindowManagerService 启动过程解析
- PMS 启动流程解析
- .........
十三、Android ANR
- 为什么会发生 ANR?
- 如何定位 ANR?
- 如何避免 ANR?
- .........
十四、Android 内存相关
- 什么情况下会内存泄漏?
- 如何防止内存泄漏?
- .........
十五、Android 屏幕适配
- 屏幕适配相关名词解析
- 现在流行的屏幕适配方式
- .........
十六、Android 缓存机制
- LruCache 使用极其原理
- Android 中的缓存策略
- LruCache 的使用
- .........
十七、Android 性能优化
- 如何进行 内存 cpu 耗电 的定位以及优化
- 性能优化经常使用的方法
- 如何避免 UI 卡顿
- .........
十八、Android MVC、MVP、MVVM
- MVC 眼花缭乱设计图
- MVC 三层之间的关系
- MVC sample
- MVP 说明
- MVP Sample
- MVVM 与 DataBinding 的关系
- DataBinding 简介
- MVVM Sample
- .........
十九、Android Gradle 知识
- task 撰写
- task 实战
- 撰写 plugin
- .........
二十、RxJava
- 操作符
- 线程调度
- backpressure
- hook
- 测试
- 传统观察者模式
- RxJava 中观察者模式
- .........
二十一、OKHTTP 和 Retrofit
- 概述
- 使用教程
- 封装
- 整合 Gson
- Retrofit 的基本使用
- Retrofit.create 方法分析
- ServiceMethod 的职责以及 loadServiceMethod 分析
- OkHttpCall
- .........
二十二、最流行图片加载库: Glide
- 加载图片
- 缓存 Key
- 内存缓存
- 硬盘缓存
- 回调的源码实现
- into()方法
- 图片变换的基本用法
- 自定义模块的基本用法
- 更改 Glide 配置
- 替换通讯组件
- 缓存机制
- .........
最后
如果你不知道怎么学习,我这里给大家提供一个方向,进行体系化的学习!
除了上面的学习路线,还给大家整理了一份Android进阶学习资料,主要为安卓相关知识点及面试资料为主,在这个PDF中,通过详解各大互联网公司的 Android 常见面试题为主线,从面试的角度带你介绍必备知识点,以及该知识点在项目中的实际应用。
帮你在现在的基础上,重新梳理和建立 Android 开发的知识体系。无论是你短期内想提升 Android 内功实力,突破自己工作中的能力瓶颈,还是准备参加 Android 面试,都会在这个PDF中有所收获。一些基础不好的,这里也有一份安卓基础资料包,帮助巩固基础。
以下是这份PDF主要内容:
- Android 核心技术:介绍 Android 开发中常用的核心技术,比如自定义 View、Handler,以及一些开源框架的原理实现,来夯实你的底层能力。只有底层能力足够出色,之后的进阶之路才会更加轻松。
- 常见问题剖析:介绍一些项目中常见的疑难问题,使你能够对现有项目做出合理的重构优化。
知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结。
以上内容均放在了开源项目:【github】 中已收录,里面包含不同方向的自学Android路线、面试题集合/面经、及系列技术文章等,资源持续更新中...
学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!