努力打造一份系统、全面的安卓开发者进阶指南
2018年4月6日星期五
今天晚上八点和小伙伴们开了个小会,主要内容是下面三点:
- 认识到学习数据结构、算法的作用
- 确定学习内容(重点在于掌握数据结构及算法的使用场景)
- 负责人认领知识点
学习目的主要是掌握使用场景,然后具备自己写简单数据结构的代码能力。
首先是学习数据结构和算法的作用,有的小伙伴可能觉得这些知识面试问的概率也不大、工作中也没怎么用到,学这个没什么用,不如学点经常用到的。
对此我推荐大家去看下这个链接:
大概总结一下,数据结构和算法其实是开发者编程中需要用到的思想和工具,程序员学习数据结构算法和修理工学习扳手、螺丝刀如何使用及用处是一个目的,都是为了在将来遇到问题时,可以第一时间选择对正确解决思路和工具。
对数据结构、算法有所掌握的开发者,可以在存储数据时,知道根据这个数据的特点选择合适的存储结构(经常随机访问的用数组、容量不可知的选链表、先入先出的选队列、先入后出选栈等等);在遇到数据需要处理(排序、查找、修改等)时,也知道该选择哪种处理方法更高效。这在编程过程中是相当重要的基础,这也是大学为什么要开设这门基础课程的原因之一。
通常来说,了解常用数据结构和算法的开发者,写出的代码要比不了解的人写的性能高出许多,这也是很多公司面试要考察这个能力的原因。
总结一下:学习数据结构算法可以提升开发者的编程思维、代码性能和效率。
吸取前面学习 Java 基础知识点推进缓慢的经验,我们更换了学习方式,改成了“共同学习、一人编辑”的模式。
一起学,2天一个知识点,学了多少算多少,指定一个负责人,这个人需要多查一些,把大家提交的汇总到一起,然后丰富为一篇文章。
学习流程总结一下,分四步:
- 负责人在知识点学习期间多带节奏,提醒小伙伴们学习
- 两天内所有人给负责人私发自己的学习收获
- 负责人在知识点第二天晚上把大家发给他的发到群里,最好编辑到一个文件里,让大家看看小伙伴都写了点啥
- 负责人尽快整理大家发给自己的总结,加上自己的理解,编辑成文章提交到 github
每个知识点尽可能的多总结,最好围绕着 是什么、怎么实现的、有什么使用场景
20180408开始
- 数组和链表(使用场景及 反转链表)
- 张拭心负责
- 第一周先熟悉节奏,多提醒小伙伴,周日截止收集
- 成果:从数组链表谈到操作系统
- 散列表(哈希表)的性能、使用场景
- 知北游负责
- 栈(使用场景及 2 个栈实现队列)
- Alex_赵
- 队列( 使用场景、2 个队列实现栈)
- Milo
- 汉诺塔的代码实现
- 二叉树的实现、遍历和查找,使用场景
- Cloud
- 几种特殊的二叉树特点及使用场景:完全二叉树、平衡二叉树、二叉查找树
- Struggle
- 对 B- B+ 树有基本的认识,使用场景
- 张拭心
- 红黑树有基本认识,使用场景
- 堆的实现、使用场景
- 冒泡排序的场景及改进,时间复杂度
- 桶排序
- 麦田哥
- 快速排序
- 杨哲
- 插入排序
- 金鑫
- 归并排序
- 杨哲
- 二分查找的实现、场景、时间复杂度
- 麦田哥
- 分块查找
- 图的两种遍历算法有基本了解,使用场景及效率对比
- ZHL
- 字符串的匹配算法(主要学 KMP)
- Anonymous
- 在 10亿 个数中找到最大的一万个数
- Wustor
- 那些排序算法我们不求能写出来,只求大家一起把它的思想总结一下,然后记住什么时候使用和时间复杂度就好
- 主要是过一遍对思路有个大致印象
- 无法保证每个人学到的一样,这么多人聚在一起主要是为了有个氛围,学的快的提前看看下一个,学的慢的先有个印象,有精力了再多看看,不会的先百度,然后再群里问问
- 大家最好有点紧迫感,给自己多立点 deadline,逼逼自己
- 第一个知识点可以先多给几天,后边的一直准备着
- 好的,第一个知识点我们下周日截止,刚开始为了让大家先适应,大家看完了第一个就顺着往下多看看
其实我做这个也是为了让自己有事干,不然没事总不知道干啥,就去打游戏刷手机了。
希望大家不要当做负担,在自己刷新闻或者刷抖音之前,先想想最近的知识点看了没有,每天都整理一点,长期积累下来会让你吃惊的。