2019计划
激励左耳朵耗子
目标
- 掌握tensorflow的使用
- 掌握Python以及常用库(numpy,matplotlib,pandas)的使用
- 掌握常用机器学习算法(SVM,AdaBoost,LightGBM)的使用以及理论
- 掌握深度学习常用算法应用和理论
- 掌握英语单词5000个,提高自己的英语发音
- spark大数据分析技术
- linux相关技术
- Java相关技术
具体实现
今天看了一篇虎扑上面<非CS专业转行机器学习/人工智能阶段性成功,分享一点个人经验吧>的帖子,感触比较多,摘一点帖子里面的内容,为之后的学习提供一定的建议。
楼主的情况是没有人工智能基础的,为了找到人工智能的工作准备了两年时间。
编程:掌握一门语言,要达到非常熟悉的阶段。
数据结构:掌握常用的数据结构,多做leetcode上面的编程题目,至少要刷一下easy和medium模式的题目,写的时候考虑test case
机器学习:
1. andrew ng的machine learning,仔细看课件和习题
2. hands on machine learning with scikit-learn and tensorflow,并且在pythhon中实践还有课后习题
3. bishop的pattern recognition and machine learning
4. 李彦宏的机器学习和深度学习(自己加的)
5. 李航的统计机器学习(自己加的)
Java相关技术
参考了v2ex 或者github
这里做了一个思维导图
下面进行思维导图的一些解释。同时对这些技能点进行查漏补缺,同时也会在之后的过程中添加更多的技能点
集合
集合主要是java.util包下的非线程安全和线程安全集合
非线程安全
- List: ArrayList与LinkedList的实现和区别
- Map:
- HashMap:了解其数据结构,源码,hash冲突如何解决(链表和红黑树),扩容时机,扩容时避免rehash优化
- LinkedHashMap:了解基本原理,哪两种有序,如何实现LRU
- TreeMap:了解数据结构,了解其key对象为什么必须要实现Compare接口,如何用它实现一致性哈希
- Set:基本上是由map实现,简单看看就好
常见问题
- hashmap 如何解决 hash 冲突,为什么 hashmap 中的链表需要转成红黑树?
- hashmap 什么时候会触发扩容?
- jdk1.8 之前并发操作 hashmap 时为什么会有死循环的问题?
- hashmap 扩容时每个 entry 需要再计算一次 hash 吗?
- hashmap 的数组长度为什么要保证是 2 的幂?
- 如何用 LinkedHashMap 实现 LRU ?
- 如何用 TreeMap 实现一致性 hash ?
线程安全的集合
- Collection.synchronized:了解其实现原理
- CopyOnWriteArrayList:了解写时复制机制,了解其适用场景,思考为什么没有ConcurrentArrayList
- ConcurrentHashMap:了解实现原理,扩容时做的优化,与HashTable的对比
- BlockingQueue:了解 LinkedBlockingQueue、ArrayBlockingQueue、DelayQueue、SynchronousQueue
常见问题
- ConcurrentHashMap 是如何在保证并发安全的同时提高性能?
- ConcurrentHashMap 是如何让多线程同时参与扩容?
- LinkedBlockingQueue、DelayQueue 是如何实现的?
- CopyOnWriteArrayList 是如何保证线程安全的?
并发
- synchronized:了解偏向锁、轻量级锁、重量级锁的概念以及升级机制、以及和 ReentrantLock 的区别
- CAS:了解 AtomicInteger 实现原理、CAS 适用场景、如何实现乐观锁
- AQS:了解 AQS 内部实现、及依靠 AQS 的同步类比如 ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier 等的实现
- ThreadLocal:了解 ThreadLocal 使用场景和内部实现
- ThreadPoolExecutor:了解线程池的工作原理以及几个重要参数的设置
常见问题
- synchronized 与 ReentrantLock 的区别?
- 乐观锁和悲观锁的区别?
- 如何实现一个乐观锁?
- AQS 是如何唤醒下一个线程的?
- ReentrantLock 如何实现公平和非公平锁是如何实现?
- CountDownLatch 和 CyclicBarrier 的区别?各自适用于什么场景?
- 适用 ThreadLocal 时要注意什么?比如说内存泄漏?
- 说一说往线程池里提交一个任务会发生什么?
- 线程池的几个参数如何设置?
- 线程池的非核心线程什么时候会被释放?
- 如何排查死锁?
引用
了解 Java 中的软引用、弱引用、虚引用的适用场景以及释放机制
常见问题
- 软引用什么时候会被释放
- 弱引用什么时候会被释放
类加载
了解双亲委派机制
常见问题
- 双亲委派机制的作用?
- Tomcat 的 classloader 结构
- 如何自己实现一个 classloader 打破双亲委派
IO
了解 BIO 和 NIO 的区别、了解多路复用机制
常见问题
- 同步阻塞、同步非阻塞、异步的区别?
- select、poll、eopll 的区别?
- java NIO 与 BIO 的区别?
- refactor 线程模型是什么?
JVM
了解GC和内存区域
- 垃圾回收基本原理、几种常见的垃圾回收器的特性、重点了解 CMS (或 G1 )以及一些重要的参数
- 能说清 jvm 的内存划分
常见问题
- CMS GC 回收分为哪几个阶段?分别做了什么事情?
- CMS 有哪些重要参数?
- Concurrent Model Failure 和 ParNew promotion failed 什么情况下会发生?
- CMS 的优缺点?
- 有做过哪些 GC 调优?
- 为什么要划分成年轻代和老年代?
- 年轻代为什么被划分成 eden、survivor 区域?
- 年轻代为什么采用的是复制算法?
- 老年代为什么采用的是标记清除、标记整理算法
- 什么情况下使用堆外内存?要注意些什么?
- 堆外内存如何被回收?
- jvm 内存区域划分是怎样的?
Spring
bean 的生命周期、循环依赖问题、spring cloud (如项目中有用过)、AOP 的实现、spring 事务传播
常见问题
- java 动态代理和 cglib 动态代理的区别(经常结合 spring 一起问所以就放这里了)
- spring 中 bean 的生命周期是怎样的?
- 属性注入和构造器注入哪种会有循环依赖的问题?
Mysql
事务隔离级别、锁、索引的数据结构、聚簇索引和非聚簇索引、最左匹配原则、查询优化( explain 等命令)
常见问题
- Mysql(innondb 下同) 有哪几种事务隔离级别?
- 不同事务隔离级别分别会加哪些锁?
- mysql 的行锁、表锁、间隙锁、意向锁分别是做什么的?
- 说说什么是最左匹配?
- 如何优化慢查询?
- mysql 索引为什么用的是 b+ tree 而不是 b tree、红黑树
- 分库分表如何选择分表键
- 分库分表的情况下,查询时一般是如何做排序的?
算法
准备一下leetcode上的算法(easy,medium)