我不是一个聪明的、勤奋的、从头到尾目标清晰的程序员,但只要步履不停,时间就会带来答案。
附上我这5年的总结,希望可以给你带来一些继续成长的动力。
知识体系的建立这5年不夸张地说很大一部分时间我都在构建自己的知识体系,一开始是Android开发相关的知识、技术,后来慢慢扩充为前后端都有涉猎,后面打算慢慢拓展到自己的兴趣爱好。

现在构建自己的知识体系已经成为了日常的一个习惯,但当时这个行为还不能称为“构建知识体系”,因为那会自己就是工作闲,跟风写一些技术文啊、创建GitHub什么的,当时那些内容也基本上到处拼凑而成的。
事情出现转机是我在GitHub上看到一个能够被优化的项目,我将它优化好并发布了出去,我现在还记得当时的那个成就感,后来我就经常这样做,久而久之这件闲来无事而做的事情让我变得越来越爱思考和总结,那些被解决过的问题和总结到的方法再加上原有的基础就构成了我知识体系的雏形:
必备基础技能:Java泛型+注解+并发编程+数据传输与序列化+Java虚拟机原理+反射与类加载+动态代理+高效IOAndroid高级UI与FrameWork源码:高级UI+Framework内核解析+Android组件内核+数据持久化性能调优:设计思想与代码质量优化+程序性能优化+开发效率优化开源框架设计思想:热修复设计+插件化框架解读+组件化框架设计+图片加载框架+网络访问框架设计+RXJava响应式编程框架设计+IOC架构设计+Android架构组件JetpackNDK模块开发:NDK基础知识体系+底层图片处理+音视频开发微信小程序:小程序介绍+UI开发+API操作+微信对接Hybrid 开发与Flutter:Html5项目实战+Flutter进阶知识体系的扩充程序员需要不断学习这毋庸置疑,过去这五年我基本上摸遍了Android的整个体系,可以说没有拖程序员学习的后腿吧。
Android体系:
一、Java语言基础
整型与浮点型范围Java控制可见性的4个访问修饰符接口与抽象类class面向对象容器多线程IO正则表达式按日历计算年龄注解使用与简单说明Java使用加密算法二、Kotlin语言基础
Kotlin系列简介新建项目概念介绍常用写法lambda高阶函数扩展函数协程三、Android技术栈
ActivitySeverce服务Broadcast广播机制Fragmentres应用资源权限TectView显示文字EditText用户输入Button按钮ImageView图片显示Layout布局DrawerLayout侧滑栏RecyclerView显示列表多线程IO操作存储NetWork网络ProgressBar进度条View自定义View动画WebViewStatusBarCamera相机MediaBlutooth蓝牙WiFi连接获取手机当前角度launcherAIDLzipBinderNotfication通知PackageManagerRTFSC设计模式第三方库Android Studio模块化GradleNDK调试四、Android Jetpack全家桶
在Fragment之间共享数据ViewModelProviders示例datebindingLiveData事件传送LifeCycle生命周期WorkManagerViewModel数据库Paging五、数据结构与算法
1.哈希
Java中的HashMap的工作原理是什么?什么是Hashmap?如何构造一致性哈希算法hashCode() 和equals() 方法的重要性体现在什么地方?Object作为HashMap的key的话,对Object有什么要求吗?hashset 存的数是有序的吗?2.二叉树
求二叉树的最大深度求二叉树的最小深度求二叉树中节点的个数求二叉树中叶子节点的个数求二叉树中第k层节点的个数判断二叉树是否是平衡二叉树判断二叉树是否是完全二叉树两个二叉树是否完全相同两个二叉树是否互为镜像翻转二叉树or镜像二叉树求两个二叉树的最低公共祖先节点二叉树的前序遍历二叉树的中序遍历二叉树的后序遍历前序遍历和后序遍历构造二叉树在二叉树中插入节点输入一个二叉树和一个整数,打印出二叉树中节点值的和等于输入整数所有的路径二叉树的搜索区间二叉树的层次遍历二叉树内两个节点的最长距离不同的二叉树判断二叉树是否是合法的二叉查找树(BST)3.链表
谈一谈,bucket如果⽤链表存储,它的缺点是什么?有一个链表,奇数位升序偶数位降序,如何将链表变成升序?如何反转单链表现在有一个单向链表,谈一谈,如何判断链表中是否出现了环随机链表的复制4.数组
写一个算法,可以将一个二维数组顺时针旋转90度一个数组,除一个元素外其它都是两两相等,求那个元素?找出数组中和为S的一对组合,找出一组就行求一个数组中连续子向量的最大和寻找一数组中前K个最大的数5.排序
用Java写一·个冒泡排序?排序都有哪几种方法?请列举出来归并排序的原理是什么?堆排序的原理是什么?如何得到一个数据流中的中位数?你知道哪些排序算法,这些算法的时间复杂度分别是多少,解释一下快排?6.堆与栈
内存中的栈(stack)、堆(heap) 和静态区(static area) 的用法heap和stack有什么区别最小的k个数滑动窗口最大值丑数前K个高频元素有效的括号最小栈柱状图中最大的矩形7.高级算法
LRU算法的实现原理为什么要设计后缀表达式,有什么好处?设计一个算法,用来压缩一段URLid全局唯一且自增,如何实现?最后一个单词的长度8.动态规划
斐波那契数列不同路径爬楼梯零钱兑换打家劫舍编辑距离...
Android体系是很大的,虽说我摸了一遍但很多还停留在了解层面,未来还是不断学习的过程,在学习过程中对知识体系进行相应的补充,迟早有一天Android体系就成了自己的知识体系。
这听起来也许不太现实啊,因为很多东西在工作中暂时用不到或者永远用不到,所以扩充知识体系的前提是要把重点内容学精、学深。
在增加自己开发领域技术的同时,也要开拓自己的眼界。互联网是个发展极快的行业,我们独守某种技术的话,随着年龄增长和行业发展很容易被市场淘汰,所以我有一直关注新行业动态的习惯,了解一些新兴技术,虽然极大可能我不会去深入,但只要知道他们的存在我就会心安一些。
下一个5年计划是什么?我曾经有看到过一个在职业规划方面很经典的问题:想象一下五年后的你、十年后...的你什么样子?
虽然我也问过我自己,但很难说具体,远期目标有时候会让我产生自我怀疑和懈怠,所以我更倾向于明确短期的、具体的目标,比如坚持日更文章,完成难度小但可以给我带来成就感,这个成就感还可以累积。
所以如果你也觉得远大的目标不切实际的话,可以尝试着先定每天的目标、每周的目标,拆解成相应的容易完成的计划。
比如你要学Android,先从Java基础开始,或者你要面试Android开发,可以每天刷几道或者几个小时的题,当你把这一步步走实了,原来很大的目标就会变得越来越小。
我相信只要不停止思考总结、不停止去获得一些进步,下一个5年仍旧是可以拿来“吹嘘”的哈哈哈。
文末我是毕业于一所双非普通院校的目前有五年经验的Android开发,目前正在创造自己的下一个不留遗憾的五年,希望和大家共同进步。
如果以上内容对你有所帮助的话点个赞吧。
以上提到的知识体系、Android体系有需要的可以评论+私信我【体系】领取。