- 背景:吾日三省吾身,作为一个终生学习的职业,心累啊。要时常了解自己的情况让自己心塞,针对性的抓紧时间给自己充电,提高工作效率,避免加班加点然后猝死。
目标制定前先对现有的能力进行评估。然后进行制定。
我个人的认知有可能是错的,希望大家能指正。
- java方面:
- java方面:理解并能用集合类型(map、list、set、HashSet、HashMap、Iterator)
- List(有序、可重复)
- List关注的是索引,拥有一系列和索引相关的方法,查询速度快。往list集合里插入或删除数据时,会伴随着后面数据的移动,所有插入删除数据速度慢。
- Set(无序、不能重复)
- Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。
- Queue(先进先出FIFO)
- 访问元素(poll)操作会返回队列头部的元素,队列不允许随机访问队列中的元素。
- Map(键值对、键唯一、值不唯一)key可以为null,但是只能一个
- Map集合中存储的是键值对,键不能重复,值可以重复。根据键得到值,对map集合遍历时先得到键的set集合,对set集合进行遍历,得到相应的值。
- List(有序、可重复)
Collection
List
ArrayList
Vector
LinkedList
Set
HashSet
LinkedHashSet (按照插入顺序存放的,不重复的)
SortedSet
TreeSet
Queue
LinkedList
Map
hashMap
weakhashMap
SortedMap
TreeMap
Map.Entry
Iterator
ListIterator
Enumeration 最早的输出的接口
是否有序 | 是否允许重复 | 特点 | ||
collection | ||||
List | list都是 | 是 | 是链表实现 | |
ArrayList | 有序 | 是 | 本质是用数组实现的,动态数组,它的容量能动态增长,经常用在增删操作较少而查询操作较多的情况下,线程异步的,是不安全的。 | |
Vector | 有序 | 是 | 本质是用数组实现的,vector是线程同步的,所以它也是线程安全的,基本都是使用ArrayList而不是Vector | |
| LinkedList | 有序 | 是 | 基于双链表实现的,移动一个指定位置的数据时其它元素不移动。经常用在增删操作较多而查询操作很少的情况下, |
Set | 无序 | 否 | 线性结构,值不能重复。 | |
HashSet | 无序 | 否 | 底层通过HashMap实现的,是set的hash实现,简单理解就是将HashMap的key放进HashSet中对象,通过key的唯一性去重, | |
LinkedHashSet | 否 | 继承于 HashSet、又基于 LinkedHashMap 来实现的,底层使用 LinkedHashMap 来保存所有元素,它继承于 HashSet,其所有的方法操作上又与 HashSet 相同 | ||
SortedSet | 否 | |||
TreeSet | 有序 | 否 | 二叉排序树 | |
Queue | ||||
LinkedList | 双链表实现的 | |||
Map | 否 | key唯一value可以重复 | ||
HashMap | 否 | 同key,kay可以为null,只能一个 | 哈希表,通过链表的数组实现的。根据键的HashCode值存储数据,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。因为键对象不可以重复,所以HashMap最多只允许一条记录的键为Null,允许多条记录的值为Null,是非同步的。HashMap效率高于HashTable | |
weakhashMap | ||||
SortedMap | ||||
TreeMap | 是 | 二叉排序树,能够把它保存的记录根据键排序,默认是按键值的升序排序(自然顺序),也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。不允许key值为空,非同步的。 | ||
LinkedHashMap | 在哈希表的基础上又构成了双向链接列表,保存了记录的插入顺序,在用Iteraor遍历LinkedHashMap时,先得到的记录肯定是先插入的,在遍历的时候会比HashMap慢,有HashMap的全部特性。 | |||
Hashtable | 同map,key不能为null | 与HashMap相同的存储机制,线程安全的,线程安全是通过Sychronize实现。 | ||
Map.Entry | 集合中每个对象都是底层map中一个特定的键值对 | |||
Iterator | 所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,只能正向遍历 | |||
ListIterator | 双向列表的遍历,继承与iterator | |||
Enumeration | ||||
涉及到源码的参考:https://blog.youkuaiyun.com/wushiwude/article/details/76041751
HashMap实现原理、算法、数据结构:http://www.cnblogs.com/xwdreamer/archive/2012/05/14/2499339.html
java的数据结构和算法:https://www.cnblogs.com/ysocean/p/7889153.html
spark常用的调优:http://www.mamicode.com/info-detail-2164217.html
- 大数据方面
- scala的常用语法,akka框架
- sparksql的常用算子以及语法
- 大数据集群的搭建(散搭,包含hadoop、flum、kafka、hive、spark、zookeeper、)
- 了解hdfs集群的4个配置文件,能去官网找对应的配置更改、优化。
- 常用组件的使用
- hive:用过java和spark书写过udf函数,用java写过udtf函数,了解udaf函数,研究很透彻。
- 实现过通过post请求接受日志数据,写入到flum,然后flum往kafka传输,通过hdfs和es消费kafka数据。
- 实现过通过sqoop接收postgre数据落地到hdfs、java或者spark解析日志数据落地到hdfs,然后搭建相对应的数仓(ods层、dw层、数据集市)
- 负责tableau的维护
- 了解常用的linux命令
- 目前概括总结:能干活会用这些东西,但是每一块的深度不够。具体表现如下。
- 诸如当数据量大的时候数据库做了访问限制,sqoop抽取不过来怎么办(索引不是那么容易按照你想的来建立的),
- 比如flum主键source写入的速度高于slink写出的速度怎么弄、如何优化。
- hadoop集群里面很多配置会引发很多问题,如何解决。
- 比如kafka里面如何进行一定的逻辑运算(目前只会原样生产,原样给其他组件消费,用spark消费可以处理。)。
- 对于日志处理的组合ELK(Elasticsearch , Logstash, Kibana),只是能用用,但是如何在es建立好标签库,涉及到es的编码部分、如自定义标签没有涉及到、主要是没干过。没有自己搭建过ELK,没有实际开发过。只连接过通过主题和标签获取数据。
- 对于数据仓库方面工作经验不够、涉及到框架等全局把控的能力不行。这个需要时间积累。
- 对于开发语言java只停留在基础阶段深度不够诸如设计模式(只知道工厂模式、单例模式)很长时间没用也忘记了,常用的算法也忘记了,没有做过大型项目、有关反射、高并发、多线程方面虽然有一定的了解,但是有关的实际问题并解决过。
- 对于开发语言scala深度不够只看过基本的用法,看了下akka对于多线程方面的处理。实际并没有开发项目,小demo不算。
- 对于spark虽然了解过一些优化也了解一定的原理,但是并没有源码级别的了解。很多优化其实并没有用到和处理过。
- 目前想学习python,并没有相对好的环境和效率学习。
- 对于算法方面诸如贝叶斯、逻辑回归之前虽然看过、但并没有用过,也忘记了。不是很会
- 对于linux系统,虽然了解常用的一些命令也看过鸟叔的书,但实际上对于内核或者更深层次的东西并不了解,不够深入。忘记的也很快。
- 对于组件hbase了解一部分,实际运用的少。容易忘记。
- 代码积累量不够。
- 目标定制
- 看完java核心思想这本书(限期3个月)。
- 搭建ELK集群(限期一周)
- 学完python3的基础用法并用python3写一个爬虫,并整理好相对应的博客。(限期一个月)
- 每天一部视频。(时间很长的可以分段)
- 每天逛逛一些相关的网页,浏览相关的组件的优化或者解决方案。(每周至少三次)
- 为了老命每天晚上11点半前上床,12点前睡觉。每周运动一下。防止被产品反杀。
- 每天坚持code。不论是验证某些东西还是demo
优先级暂时就由序号排列。