共计 3086 个字符,预计需要花费 8 分钟才能阅读完成。
前言
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 体系有须要的能够评论 + 私信我【体系】支付。