现在的人自我意识越来越强,专注做自己的事不太会在意别人的眼光,不管别人如何评价路,毕竟脚下的路是自己在走。
最近有位网友在职场论坛上发帖,说看见地铁上有一程序员大哥在写代码,并且配上了一张照片。
从照片中可以看出,一位男子坐在靠地铁栏杆的地方,把包放在腿上,垫着电脑,噼噼啪啪的在工作,地铁上人不多,显然不是高峰期,他工作的状态很专注。
没想到程序员的这个举动却被路人吐槽说:“有什么好装的”,地铁里手机信号都不好,如果遇到紧急的bug,早就下车找地方去修改了,还用在地铁里干。
但这个网友的帖子立刻引来其他网友的回怼,说写代码根本不用网络而且地铁的网络现在也很好,就是因为他觉得写代码是一个很高大上的事情,所以才会觉得程序员在装。
其实在程序员看来这就是他的工作,是因为工作太多,进度太赶,实在忙不过来,或者因为在下班的路上,突然有了灵感才在地铁里干活。
也有网友说,不管他是不是装,他都是在工努力工作,对于这种抓紧分分秒秒都在拼搏的年轻人,我们应该对他心生敬意,而不是冷嘲热讽。
如果一个人在地铁里背英文单词,是不是也会被人讽刺装呢,但是有很多人就是这样不断充实自己,才让自己变得更优秀。
也有人说他不是在装,没有从事过这个行业的人不了解,真的是太忙了,地铁里不干,可能回家就要多干一小时,利用地铁的时间多干一点,那么回家就可以多休息一会。
分享读者
作为一名Android开发,与其整天996,拼命加班,不妨正视自己的缺点和不足,构建一个属于自己的知识体系,提升工作效率。
同时也能够让我们学到的知识体系化.让自己清楚哪块是自己的知识盲区,哪块已经构建起根基.然后根据实际情况,有针对性的进行模块学习.让自己成为一个合格的Android工程师.
我们平时看博客或者学知识,学到的东西比较零散,没有独立的知识模块概念,而且学了之后很容易忘.于是我建立了一个自己的笔记仓库 (一个我长期维护的笔记仓库,感兴趣的可以点个star~你的star是我写作的巨大大大大的动力),将平时学到的东西都归类然后放里面,需要的时候呢也方便复习.过了段时间,我觉得这样还是不够好,于是我最近花了点时间,整理了一下Android中的常见知识,画了一张思维导图.更清晰地认识自己的知识边界到底在哪里,哪些东西还不足.
此知识体系呢只是一个参考,大家可以根据自己的实际情况进行针对性学习,然后进行查漏补缺,提升自己~
1. 计算机基础
1.1 计算机网络
1.1.1 计算机网络概述
-
网络七层协议
-
TCP/IP四层模型
-
底层协议
-
底层设备
1.1.2 应用层
-
HTTP协议(⭐⭐⭐)
-
DHCP协议(⭐⭐⭐)
-
NAT
1.1.3 传输层(⭐⭐⭐)
-
TCP协议
-
UDP协议
1.1.4 网络层
-
IP协议
-
ICMP协议
1.2 操作系统(⭐⭐⭐)
1.2.1 操作系统基本功能
-
进程管理
-
作业管理/文件管理
-
存储管理/设备管理
1.2.2 Linux系统
-
内存管理
-
进程管理
-
文件系统
-
常见命令操作
1.2.3 补充
-
自旋锁/互斥锁/读写锁/条件变量/共享文件
-
消息队列/管道/信号量
-
操作系统的用户态与内核态
-
上下文切换成本
-
进程,线程与协程
2. Java基础(⭐⭐⭐)
2.1 集合原理
-
ArrayList
-
Vector
-
Stack
-
LinkedList
-
HashMap
-
Hashtable
-
TreeMap
-
LinkedHashMap
-
HashSet
-
TreeSet
-
CopyOnWriteArrayList
-
ConcurrentHashMap
-
LinkedBlockingQueue
-
SynchronousQueue
-
SparseArray
-
ArrayMap
2.2 其他
-
面向对象
-
设计模式
-
反射
-
泛型
-
注解
3. Java并发
3.1 线程基础
-
实现多线程
-
启动线程
-
停止线程
-
线程的6种状态
-
各种各样的锁
-
悲观锁和乐观锁
-
共享锁和独占锁
-
公平锁和非公平锁
-
可重入锁和非可重入锁
-
可中断锁和非可中断锁
-
自旋锁和非自旋锁
-
偏斜锁/轻量级锁/重量级锁
-
JVM对synchronized锁的优化
-
-
wait/notify/sleep/join等重要方法
-
守护线程,优先级等属性
-
线程安全
-
Future获取运行结果
-
Fork/Join模式
-
CountDownLatch
-
CyclicBarrier
-
Semaphore
-
Condition
-
Phaser
-
重排序
-
原子性
-
内存可见性
-
CAS原理
-
AQS框架
3.2 其他
3.2.1 并发容器
-
Vector/Hashtable
-
ConcurrentHashMap
-
CopyOnWriteArrayList
-
阻塞队列
-
非阻塞队列
-
ConcurrentSkipListMap
3.2.2 atomic包,6种原子类
-
分类
-
原子类与锁
-
原子类与volatile
3.2.3 ThreadLocal
-
使用场景
-
原理
3.3.4 线程池
-
优点
-
参数
-
分类
-
执行任务流程
-
拒绝策略
-
正确关闭线程池
-
线程池复用原理
4. JVM虚拟机
-
内存区域
-
内存模型
-
内存分配回收策略
-
Java对象的创建、内存布局和访问定位
-
GC: 引用计数及可达性分析,垃圾回收算法,G1及ZGC
-
类加载机制
-
双亲委派模型
-
编译器优化: 方法内联,逃逸分析
-
虚拟机相关: HotSpot及JIT,Dalvik,ART及AOT
-
JVM执行方法
-
JVM实现反射
-
JVM实现泛型
-
JVM实现异常
-
JVM实现注解
5. 数据结构与算法
5.1 数据结构
-
栈
-
队列
-
数组
-
链表
-
Hash表
-
二叉树
-
基础排序算法
-
字符串操作
5.2 算法
-
分治算法
-
动态规划
-
贪心算法
-
分支限界法
5.3 刷题
6. Android基础
6.1 核心知识点
6.1.1 四大组件
-
Activity
-
Service
-
BroadcastReceiver
-
ContentProvider
6.1.2 布局和控件
-
RelativeLayout
-
FrameLayout
-
LinearLayout
-
ConstraintLayout
-
Button
-
TextView
-
RecyclerView
-
…
6.1.3 自定义View/ViewGroup
-
onMeasure
-
onLayout
-
onDraw
-
onTouchEvent
-
dispatchTouchEvent
-
自定义属性
6.1.4 动画和手势
-
View动画
-
属性动画
-
layoutAnimation视图动画
-
手势检测(GestureDetector)
-
缩放手势检测(ScaleGestureDecetor)
6.1.5 网络
-
请求网络
-
解析数据
6.1.6 图片加载
-
本地图片
-
网络图片
-
压缩图片
-
多图列表
-
DiskLruCache
6.1.7 Handler
-
Looper
-
Message
-
MessageQueue
-
内存泄漏
-
ThreadLocal
6.1.8 Android各版本新特性
-
Android5.0
-
Android6.0
-
Android7.0
-
Android8.0(O)
-
Android9.0§
-
Android10.0(Q)
-
Android11.0®
6.1.9 其他
-
adb常用命令
-
文件和数据库
-
异步线程池
-
Resources
6.2 开源库使用
-
Retrofit/OKhttp
-
RxJava
-
Glide
-
注解框架
-
Jetpack
6.3 性能优化
6.3.1 快-流畅的体验
-
布局优化
-
绘制优化
-
内存优化
-
启动优化
-
其他
6.3.2 稳-稳定
-
避免内存泄露
-
避免崩溃
6.3.3 省-省电/流量
-
使用JobScheduler调度任务
-
使用懒惰法则
6.3.4 小-安装包小
-
apk构成
-
包体优化
7. Android进阶
7.1 核心知识点
7.1.1 多进程
-
Binder
-
AIDL
-
Messenger
7.1.2 Activity难点
-
onSaveInstanceState()和onRestoreInstanceState()
-
intent-filter匹配规则
-
生命周期
-
启动模式
-
Activity启动过程
-
App启动过程
7.1.3 Service难点
-
startService流程
-
bindService流程
7.1.4 BroadcastReceiver难点
- 注册/发送/接收工作原理
7.1.5 ContentProvider难点
- ContentProvider启动过程
7.1.6
-
View绘制
-
事件分发
-
消息队列
-
AsyncTask原理
-
RemoteViews
-
Window和ViewRootImpl
7.2 开源库原理
-
OkHttp
-
Retrofit
-
RxJava
-
Glide
-
LeakCanary
-
GreenDao
-
ARouter
7.3 Gradle
-
编译
-
混淆
-
签名
-
Groovy
-
Gradle构建流程
-
GradlePlugin
-
Gradle构建优化
-
App构建过程
-
差异化打包
7.4 初级架构
-
设计模式
-
MVC,MVP,MVVM
7.5 JNI
-
JNI基础
-
NDK基础
7.6 动态化
7.6.1 前置知识
-
Android打包流程
-
Java字节码
-
GradlePlugin
-
TransformAPI
-
ASM
7.6.2 热修复:nuwa&Tinker
-
经典-64k问题
-
dex分包
-
MultiDex优化
-
findClass原理
-
QQ空间热补丁方案
-
Nuwa应用层实现
-
NuwaGradle
7.6.3 插件化:VirtualAPK
-
加载类
-
资源访问
-
生命周期管理
7.7 编译插桩
-
AOP
-
ASM
7.8 Framework
7.8.1 系统服务
-
Zygote启动
-
Android系统启动
-
ServiceManager启动及工作原理
7.8.2 应用进程
-
启动流程
-
启用Binder机制
-
Application初始化流程
-
Context
7.8.3 UI体系
-
显示原理
-
UI线程启动
-
屏幕刷新机制
-
surface
-
vsync
7.8.4 进程通信
-
Binder
-
IPC通信流程
-
Binder对象跨进程传递
-
OneWay机制
7.8.5 线程通信
-
消息队列
-
消息传递机制
-
Handler消息延迟实现
-
IdleHandler原理
-
消息屏障
-
ThreadLocal原理
7.8.6 其他
-
跨进程传递大图片
-
四大组件启动原理
8. 领域专家
8.1 性能优化方向
-
稳定性优化
-
启动速度优化
-
绘制优化
-
内存优化
-
包体积优化
-
网络优化
-
IO优化
-
存储优化
-
耗电优化
8.2 基础架构方向
-
Android工程实践
-
Gradle自动化构建
-
编译插桩技术
-
Android架构
-
Android热修复
-
Android插件化
-
Android核心源码
8.3 NDK、音视频
-
C
-
C++
-
JNI基础
-
编译原理与语法基础
-
Linux基础
-
热修复
-
Gif图实现
-
音视频基础
-
ffmpeg
-
WebRTC
-
opengl
-
vulkan
-
opencv
8.4 大前端
8.4.1 前端基础
-
HTML
-
CSS
-
JavaScript
8.4.2 Flutter(⭐⭐)
-
Dart入门
-
Flutter入门
-
开发
-
工程管理
-
线上运维
-
发布
-
测试调试
8.4.3 其他
-
ReactNative
-
小程序
-
性能优化
9. 其他Android相关
9.1 Koltin(⭐⭐)
9.1.1 基础部分
-
内置类型
-
类型初步
-
表达算式
-
函数进阶
-
类型进阶
9.1.2 高级部分
-
泛型
-
反射
-
注解
-
协程
本文在开源项目:https://github.com/Android-Alvin/Android-LearningNotes 中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…