一个Android开发程序员的五年总结

前言

5年前的我肯定想不到5年后的我是一个如此井井有条、热爱学习、对于自己的工作可以做到稳如老狗、不断输出的程度。

我不是一个聪明的、勤奋的、从头到尾目标清晰的程序员,但只要步履不停,时间就会带来答案。

附上我这5年的总结,希望可以给你带来一些继续成长的动力。

知识体系的建立

这5年不夸张地说很大一部分时间我都在构建自己的知识体系,一开始是Android开发相关的知识、技术,后来慢慢扩充为前后端都有涉猎,后面打算慢慢拓展到自己的兴趣爱好。

现在构建自己的知识体系已经成为了日常的一个习惯,但当时这个行为还不能称为“构建知识体系”,因为那会自己就是工作闲,跟风写一些技术文啊、创建GitHub什么的,当时那些内容也基本上到处拼凑而成的。

事情出现转机是我在GitHub上看到一个能够被优化的项目,我将它优化好并发布了出去,我现在还记得当时的那个成就感,后来我就经常这样做,久而久之这件闲来无事而做的事情让我变得越来越爱思考和总结,那些被解决过的问题和总结到的方法再加上原有的基础就构成了我知识体系的雏形:

  • 必备基础技能:Java泛型+注解+并发编程+数据传输与序列化+Java虚拟机原理+反射与类加载+动态代理+高效IO
  • Android高级UI与FrameWork源码:高级UI+Framework内核解析+Android组件内核+数据持久化
  • 性能调优:设计思想与代码质量优化+程序性能优化+开发效率优化
  • 开源框架设计思想:热修复设计+插件化框架解读+组件化框架设计+图片加载框架+网络访问框架设计+RXJava响应式编程框架设计+IOC架构设计+Android架构组件Jetpack
  • NDK模块开发:NDK基础知识体系+底层图片处理+音视频开发
  • 微信小程序:小程序介绍+UI开发+API操作+微信对接
  • Hybrid 开发与Flutter:Html5项目实战+Flutter进阶

知识体系的扩充

程序员需要不断学习这毋庸置疑,过去这五年我基本上摸遍了Android的整个体系,可以说没有拖程序员学习的后腿吧。

Android体系

一、Java语言基础

  • 整型与浮点型范围
  • Java控制可见性的4个访问修饰符
  • 接口与抽象类
  • class
  • 面向对象
  • 容器
  • 多线程
  • IO
  • 正则表达式
  • 按日历计算年龄
  • 注解使用与简单说明
  • Java使用加密算法

二、Kotlin语言基础

  • Kotlin系列简介
  • 新建项目
  • 概念介绍
  • 常用写法
  • lambda
  • 高阶函数
  • 扩展函数
  • 协程

三、Android技术栈

  • Activity
  • Severce服务
  • Broadcast广播机制
  • Fragment
  • res应用资源
  • 权限
  • TectView显示文字
  • EditText用户输入
  • Button按钮
  • ImageView图片显示
  • Layout布局
  • DrawerLayout侧滑栏
  • RecyclerView显示列表
  • 多线程
  • IO操作
  • 存储
  • NetWork网络
  • ProgressBar进度条
  • View
  • 自定义View
  • 动画
  • WebView
  • StatusBar
  • Camera相机
  • Media
  • Blutooth蓝牙
  • WiFi连接
  • 获取手机当前角度
  • launcher
  • AIDL
  • zip
  • Binder
  • Notfication通知
  • PackageManager
  • RTFSC
  • 设计模式
  • 第三方库
  • Android Studio
  • 模块化
  • Gradle
  • NDK
  • 调试

四、Android Jetpack全家桶

  • 在Fragment之间共享数据
  • ViewModelProviders示例
  • datebinding
  • LiveData事件传送
  • LifeCycle生命周期
  • WorkManager
  • ViewModel
  • 数据库
  • 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算法的实现原理
  • 为什么要设计后缀表达式,有什么好处?
  • 设计一个算法,用来压缩一段URL
  • id全局唯一且自增,如何实现?
  • 最后一个单词的长度

8.动态规划

  • 斐波那契数列
  • 不同路径
  • 爬楼梯
  • 零钱兑换
  • 打家劫舍
  • 编辑距离

...

Android体系是很大的,虽说我摸了一遍但很多还停留在了解层面,未来还是不断学习的过程,在学习过程中对知识体系进行相应的补充,迟早有一天Android体系就成了自己的知识体系。

这听起来也许不太现实啊,因为很多东西在工作中暂时用不到或者永远用不到,所以扩充知识体系的前提是要把重点内容学精、学深

在增加自己开发领域技术的同时,也要开拓自己的眼界。互联网是个发展极快的行业,我们独守某种技术的话,随着年龄增长和行业发展很容易被市场淘汰,所以我有一直关注新行业动态的习惯,了解一些新兴技术,虽然极大可能我不会去深入,但只要知道他们的存在我就会心安一些。

下一个5年计划是什么?

我曾经有看到过一个在职业规划方面很经典的问题:想象一下五年后的你、十年后...的你什么样子?

虽然我也问过我自己,但很难说具体,远期目标有时候会让我产生自我怀疑和懈怠,所以我更倾向于明确短期的、具体的目标,比如坚持日更文章,完成难度小但可以给我带来成就感,这个成就感还可以累积。

所以如果你也觉得远大的目标不切实际的话,可以尝试着先定每天的目标、每周的目标,拆解成相应的容易完成的计划。

比如你要学Android,先从Java基础开始,或者你要面试Android开发,可以每天刷几道或者几个小时的题,当你把这一步步走实了,原来很大的目标就会变得越来越小。

我相信只要不停止思考总结、不停止去获得一些进步,下一个5年仍旧是可以拿来“吹嘘”的哈哈哈。

文末

我是毕业于一所双非普通院校的目前有五年经验的Android开发,目前正在创造自己的下一个不留遗憾的五年,希望和大家共同进步。

如果以上内容对你有所帮助的话点个赞吧。

以上提到的知识体系、Android体系有需要的可以评论+私信我【体系】领取。

你可能感兴趣的:(android程序员)