Java工程师成神之路

来自:HollisChuang's Blog
链接:http://www.hollischuang.com/archives/489

自己也需要整理一下了,给自己的2016订一个计划
根据上面链接的文章整理,后续会继续完善

一、Java基础篇

1.1 JVM

1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收

1.1.2. 了解JVM各种参数及调优

1.1.3. 自己编写各种outofmemory,stackoverflow程序
HeapOutOfMemory、Young OutOfMemory、MethodArea OutOfMemory、ConstantPool OutOfMemory
DirectMemory OutOfMemory、Stack OutOfMemory、Stack OverFlow

1.1.4. 学习Java诊断工具
http://www.eclipse.org/mat/
http://visualvm.java.net/oqlhelp.html

1.1.6. 使用工具尝试解决以下问题,并写下总结
当一个Java程序响应很慢时如何查找问题
当一个Java程序频繁FullGC时如何解决问题,如何查看垃圾回收日志
当一个Java应用发生OutOfMemory时该如何解决,年轻代、年老代、永久代解决办法不同,导致原因也不同

1.2 Java基础知识

1.2.1. 阅读源代码
java.lang.String 、java.lang.Integer、java.lang.Long、java.lang.Enum、java.math.BigDecimal
java.lang.ThreadLocal 、java.lang.ClassLoader & java.net.URLClassLoader、java.util.ArrayList & java.util.LinkedList
java.util.HashMap & java.util.LinkedHashMap & java.util.TreeMap 、java.util.HashSet & java.util.LinkedHashSet & java.util.TreeSet

1.2.2. 熟悉Java中各种变量类型

1.2.3. 熟悉Java String的使用,熟悉String的各种函数

1.2.4. 熟悉Java中各种关键字

1.2.5. 学会使用List,Map,Stack,Queue,Set
上述数据结构的遍历
上述数据结构的使用场景
Java实现对Array/List排序
java.uti.Arrays.sort()
java.util.Collections.sort()
Java实现对List去重
Java实现对List去重,并且需要保留数据原始的出现顺序
Java实现最近最少使用cache,用LinkedHashMap

1.2.6. Java IO&Java NIO,并学会使用
java.io.* java.nio.* nio和reactor设计模式 文件编码,字符集

1.2.7. Java反射与javassist
反射与工厂模式 java.lang.reflect.*

1.2.8. Java序列化
java.io. Serializable
什么是序列化,为什么序列化
序列化与单例模式
google序列化protobuf

1.2.9. 虚引用,弱引用,软引用
java.lang.ref.* 实验这些引用的回收

1.2.10. 熟悉Java系统属性
java.util.Properties

1.2.11. 熟悉Annotation用法
java.lang.annotation.*

1.2.12. JMS
javax.jms.*

1.2.13. JMX
java.lang.management.* javax.management.*

1.2.14. 泛型和继承,泛型和擦除

1.2.15. 自动拆箱装箱与字节码

1.2.16. 实现Callback

1.2.17. java.lang.Void类使用

1.2.18. Java Agent,premain函数
java.lang.instrument

1.2.19. 单元测试
Junit,http://junit.org/
Jmockit,https://code.google.com/p/jmockit/
djUnit,http://works.dgic.co.jp/djunit/

1.2.20. 学习使用常用的Java工具库
commons.lang, commons.*…
guava-libraries
netty

1.2.21. 什么是API&SPI
http://en.wikipedia.org/wiki/Application_programming_interface
http://en.wikipedia.org/wiki/Service_provider_interface

1.2.22. 参考资料
JDK src.zip 源代码
http://openjdk.java.net/
http://commons.apache.org/
https://code.google.com/p/guava-libraries/
http://netty.io/
http://stackoverflow.com/questions/2954372/difference-between-spi-and-api
http://stackoverflow.com/questions/11404230/how-to-implement-the-api-spi-pattern-in-java

1.3. Java并发编程

1.3.1. 阅读源代码,并学会使用
java.lang.Thread 、java.lang.Runnable、java.util.concurrent.Callable、java.util.concurrent.locks.ReentrantLock
java.util.concurrent.locks.ReentrantReadWriteLock 、java.util.concurrent.atomic.Atomic*
java.util.concurrent.Semaphore 、java.util.concurrent.CountDownLatch、java.util.concurrent.CyclicBarrier
java.util.concurrent.ConcurrentHashMap 、java.util.concurrent.Executors

1.3.2. 学习使用线程池,自己设计线程池需要注意什么

1.3.3. 锁
什么是锁,锁的种类有哪些,每种锁有什么特点,适用场景是什么
在并发编程中锁的意义是什么

1.3.4. synchronized的作用是什么,synchronized和lock

1.3.5. sleep和wait

1.3.6. wait和notify

1.3.7. 写一个死锁的程序

1.3.8. 什么是守护线程,守护线程和非守护线程的区别以及用法

1.3.9. volatile关键字的理解
C++ volatile关键字和Java volatile关键字
happens-before语义
编译器指令重排和CPU指令重排
http://en.wikipedia.org/wiki/Memory_ordering
http://en.wikipedia.org/wiki/Volatile_variable
http://preshing.com/20130702/the-happens-before-relation/

1.3.10. 参考资料
http://book.douban.com/subject/10484692/
http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html

二、 Java进阶篇

2.1. Java底层知识

2.1.1. 学习了解字节码、class文件格式

http://en.wikipedia.org/wiki/Java_class_file
http://en.wikipedia.org/wiki/Java_bytecode
http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings
http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/
http://asm.ow2.org/

2.1.2. 写一个程序要求实现javap的功能(手工完成,不借助ASM等工具)

2.1.3. CPU缓存,L1,L2,L3和伪共享
http://duartes.org/gustavo/blog/post/intel-cpu-caches/
http://mechanical-sympathy.blogspot.com/2011/07/false-sharing.html

2.1.4. 什么是尾递归

2.1.5. 熟悉位运算
用位运算实现加、减、乘、除、取余

2.1.6. 参考资料
http://book.douban.com/subject/1138768/
http://book.douban.com/subject/6522893/
http://en.wikipedia.org/wiki/Java_class_file
http://en.wikipedia.org/wiki/Java_bytecode
http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings

2.2. 设计模式

2.2.1. 实现AOP
CGLIB和InvocationHandler的区别
http://cglib.sourceforge.net/
动态代理模式
Javassist实现AOP
http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/
ASM实现AOP
http://asm.ow2.org/

2.2.2. 使用模板方法设计模式和策略设计模式实现IOC

2.2.3. 不用synchronized和lock,实现线程安全的单例模式

2.2.4. nio和reactor设计模式

2.2.5. 参考资料
http://asm.ow2.org/
http://cglib.sourceforge.net/
http://www.javassist.org/

三、Java Web

3.1 Servlet

3.1.1 Http协议

3.1.2 Servlet API

3.1.3 Filter

3.1.4 Listener

3.2 Spring

3.2.1 基本用法,工程搭建

3.2.2 默认标签的解析
bean标签的解析及注册 alias、 import、嵌入式beans标签的解析 自定义标签使用

3.2.3 bean的加载
3.2.4 容器的功能扩展

3.2.5 数据库连接JDBC

3.2.6 事务

3.2.7 远程服务

3.3 SpringMVC

3.3.1 基本用法,工程搭建

3.3.2 ContextLoaderListener

3.3.3 DispatcherServlet

3.4 缓存

3.4.1 Ehcache

3.5 Java远程通讯可选技术及原理

3.5.1 Spring Remoting

3.5.2 Hessian

3.5.3 XFire/Axis (WebService)

3.5.4 MQ(JMS)

3.5.5 Mina(NIO)

3.6 其他

3.6.1 Spring boot

3.6.2 Maven

3.6.3 ORM(使用、缓存)

四、数据库及大数据
4.1MySQL

4.2 缓存

4.2.1 Redis

你可能感兴趣的:(Java工程师成神之路)