Java工程師成神之路

來自:HollisChuang's Blog
鏈接:http://www.hollischuang.com/archives/489

自己也需要整理一下了,給自己的2016訂一個計劃
根據(jù)上面鏈接的文章整理,后續(xù)會繼續(xù)完善

一、Java基礎篇

1.1 JVM

1.1.1. Java內存模型,Java內存管理,Java堆和棧,垃圾回收

1.1.2. 了解JVM各種參數(shù)及調優(yōu)

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應用發(fā)生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的各種函數(shù)

1.2.4. 熟悉Java中各種關鍵字

1.2.5. 學會使用List,Map,Stack,Queue,Set
上述數(shù)據(jù)結構的遍歷
上述數(shù)據(jù)結構的使用場景
Java實現(xiàn)對Array/List排序
java.uti.Arrays.sort()
java.util.Collections.sort()
Java實現(xiàn)對List去重
Java實現(xiàn)對List去重,并且需要保留數(shù)據(jù)原始的出現(xiàn)順序
Java實現(xiàn)最近最少使用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系統(tǒng)屬性
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. 自動拆箱裝箱與字節(jié)碼

1.2.16. 實現(xiàn)Callback

1.2.17. java.lang.Void類使用

1.2.18. Java Agent,premain函數(shù)
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并發(fā)編程

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. 鎖
什么是鎖,鎖的種類有哪些,每種鎖有什么特點,適用場景是什么
在并發(fā)編程中鎖的意義是什么

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

1.3.5. sleep和wait

1.3.6. wait和notify

1.3.7. 寫一個死鎖的程序

1.3.8. 什么是守護線程,守護線程和非守護線程的區(qū)別以及用法

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. 學習了解字節(jié)碼、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. 寫一個程序要求實現(xiàn)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. 熟悉位運算
用位運算實現(xiàn)加、減、乘、除、取余

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. 實現(xiàn)AOP
CGLIB和InvocationHandler的區(qū)別
http://cglib.sourceforge.net/
動態(tài)代理模式
Javassist實現(xiàn)AOP
http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/
ASM實現(xiàn)AOP
http://asm.ow2.org/

2.2.2. 使用模板方法設計模式和策略設計模式實現(xiàn)IOC

2.2.3. 不用synchronized和lock,實現(xiàn)線程安全的單例模式

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協(xié)議

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 數(shù)據(jù)庫連接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(使用、緩存)

四、數(shù)據(jù)庫及大數(shù)據(jù)
4.1MySQL

4.2 緩存

4.2.1 Redis

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容