1. 程式人生 > >java大神的成神之路

java大神的成神之路

一、基礎篇

1.1 JVM

1.1.1. Java記憶體模型,Java記憶體管理,Java堆和棧,垃圾回收

1.1.2. 瞭解JVM各種引數及調優

1.1.3. 學習使用Java工具

1.1.4. 學習Java診斷工具

1.1.5. 自己編寫各種outofmemory,stackoverflow程式

HeapOutOfMemory
Young OutOfMemory
MethodArea OutOfMemory
ConstantPool OutOfMemory
DirectMemory OutOfMemory
Stack OutOfMemory
Stack OverFlow

1.1.6. 使用工具嘗試解決以下問題,並寫下總結

當一個Java程式響應很慢時如何查詢問題
當一個Java程式頻繁FullGC時如何解決問題,如何檢視垃圾回收日誌
當一個Java應用發生OutOfMemory時該如何解決,年輕代、年老代、永久代解決辦法不同,導致原因也不同

1.1.7. 參考資料

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. 單元測試

1.2.20. Java實現通過正則表示式提取一段文字中的電子郵件,並將@替換為#輸出

java.lang.util.regex.*

1.2.21. 學習使用常用的Java工具庫

commons.lang, commons.*…
guava-libraries
netty

1.2.22. 什麼是API&SPI

1.2.23. 參考資料

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關鍵字的理解

1.3.10. 以下程式碼是不是執行緒安全?為什麼?如果為count加上volatile修飾是否能夠做到執行緒安全?你覺得該怎麼做是執行緒安全的?

  1. publicclassSample{privatestaticint count =0;publicstaticvoid increment(){ count++;}}

1.3.11. 解釋一下下面兩段程式碼的差別

  1. // 程式碼1

  2. publicclassSample{

  3. privatestaticint count =0;

  4. synchronized publicstaticvoid increment(){

  5. count++;

  6. }

  7. }

  8. // 程式碼2

  9. publicclassSample{

  10. privatestaticAtomicInteger count =newAtomicInteger(0);

  11. publicstaticvoid increment(){

  12. count.getAndIncrement();

  13. }

  14. }

1.3.12. 參考資料

二、 進階篇

2.1. Java底層知識

2.1.1. 學習瞭解位元組碼、class檔案格式

2.1.2. 寫一個程式要求實現javap的功能(手工完成,不借助ASM等工具)

如Java原始碼:

  1. publicstaticvoid main(String[] args){

  2. int i =0;

  3. i +=1;

  4. i *=1;

  5. System.out.println(i);

  6. }

編譯後讀取class檔案輸出以下程式碼:

  1. publicstaticvoid main(java.lang.String[]);

  2. Code:

  3. Stack=2,Locals=2,Args_size=1

  4. 0: iconst_0

  5. 1: istore_1

  6. 2: iinc 1,1

  7. 5: iload_1

  8. 6: iconst_1

  9. 7: imul

  10. 8: istore_1

  11. 9: getstatic #2;//Field java/lang/System.out:Ljava/io/PrintStream;

  12. 12: iload_1

  13. 13: invokevirtual #3;//Method java/io/PrintStream.println:(I)V

  14. 16:return

  15. LineNumberTable:

  16. line 4:0

  17. line 5:2

  18. line 6:5

  19. line 7:9

  20. line 8:16

2.1.3. CPU快取,L1,L2,L3和偽共享

2.1.4. 什麼是尾遞迴

2.1.5. 熟悉位運算

用位運算實現加、減、乘、除、取餘

2.1.6. 參考資料

2.2. 設計模式

2.2.1. 實現AOP

2.2.2. 使用模板方法設計模式和策略設計模式實現IOC

2.2.3. 不用synchronized和lock,實現執行緒安全的單例模式

2.2.4. nio和reactor設計模式

2.2.5. 參考資料

2.3. 網路程式設計知識

2.3.1. Java RMI,Socket,HttpClient

2.3.2. 用Java寫一個簡單的靜態檔案的HTTP伺服器

實現客戶端快取功能,支援返回304
實現可併發下載一個檔案
使用執行緒池處理客戶端請求
使用nio處理客戶端請求
支援簡單的rewrite規則
上述功能在實現的時候需要滿足“開閉原則”

2.3.3. 瞭解nginx和apache伺服器的特性並搭建一個對應的伺服器

2.3.4. 用Java實現FTP、SMTP協議

2.3.5. 什麼是CDN?如果實現?DNS起到什麼作用?

2.3.6. 參考資料

2.4. 框架知識

spring,spring mvc,閱讀主要原始碼
ibatis,閱讀主要原始碼
用spring和ibatis搭建java server

2.5. 應用伺服器知識

三、 高階篇

3.1. 編譯原理知識

3.1.1. 用Java實現以下表達式解析並返回結果(語法和Oracle中的select sysdate-1 from dual類似)

  1. sysdate

  2. sysdate -1

  3. sysdate -1/24

  4. sysdate -1/(12*2)

3.1.2. 實現對一個List通過DSL篩選

  1. QList<Map<String,Object>> mapList =newQList<Map<String,Object>>;

  2. mapList.add({"name":"hatter test"});

  3. mapList.add({"id":-1,"name":"hatter test"});

  4. mapList.add({"id":0,"name":"hatter test"});

  5. mapList.add({"id":1,"name":"test test"});

  6. mapList.add({"id":2,"name":"hatter test"});

  7. mapList.add({"id":3,"name":"test hatter"});

  8. mapList.query("id is not null and id > 0 and name like '%hatter%'");

要求返回列表中匹配的物件,即最後兩個物件;

3.1.3. 用Java實現以下程式(語法和變數作用域處理都和JavaScript類似):

程式碼:

  1. var a =1;

  2. var b =2;

  3. var c =function(){

  4. var a =3;

  5. println(a);

  6. println(b);

  7. };

  8. c();

  9. println(a);

  10. println(b);

輸出:

  1. 3212

3.1.4. 參考資料

3.2. 作業系統知識

Ubuntu
Centos
使用linux,熟悉shell指令碼

3.3. 資料儲存知識

3.3.1. 關係型資料庫

MySQL
如何看執行計劃
如何搭建MySQL主備
binlog是什麼
Derby,H2,PostgreSQL
SQLite

3.3.2. NoSQL

Cache
Redis
Memcached
Leveldb
Bigtable
HBase
Cassandra
Mongodb
圖資料庫
neo4j

相關推薦

Java工程師的(年薪百萬不是夢!)

一、基礎篇JVMJVM記憶體結構堆、棧、方法區、直接記憶體、堆和棧區別Java記憶體模型記憶體可見性、重排序、順序一致性、volatile、鎖、final垃圾回收記憶體分配策略、垃圾收集器(G1)、GC演算法、GC引數、物件存活的判定JVM引數及調優Java物件模型oop-k

Java程式猿

一、基礎篇 1.1 JVM 1.1.1. Java記憶體模型,Java記憶體管理,Java堆和棧,垃圾回收 1.1.2. 瞭解JVM各種引數及調優 1.1.3. 學習使用Java工具 1.1.4. 學習Java診斷工具

理解C語言——從小菜到的晉級(3)——C源程式的基本結構與除錯方法

    本期視訊點選這裡        在上一篇中,我們進行了Visual Studio 2013的安裝以及第一個demo程式“HelloWorld”的建立。現在我們看一下其中的原始碼及相關的C語言基

理解C語言——從小菜到的晉級(15)——完結篇:C程式設計風格

本期視訊連結:點選這裡 有人說過:“程式原始碼其實是跟人閱讀的,只是恰好機器可以編譯而已”。程式設計初學者常常會有這樣一個觀念,就是我的程式只要編譯通過了,執行沒有問題那就萬事大吉了。至於程式碼的編寫規不規範,完全就是無關緊要的小事情。如果是處於學習階段,比如

理解C語言——從小菜到的晉級(8)——陣列、指標和字串

本期視訊點選這裡        在前面幾次我們接觸的資料型別都是簡單資料型別,使用一個數據個體表示一個元素。C語言中還提供了多種複雜資料型別,其中最簡單的一種就是陣列。陣列這一結構使用記憶體中一段連續的記憶體空間儲存一組相同型別的變數,這些變數通過陣列的下標/索引的不同相

1~5年一個Java程式設計師從入行到牛的晉升

在程式界流行著一種預設的說法叫“黃金5年”,也就是一個程式設計師從入職的時候算起,前五年的選擇直接影響著整個職業生涯中的職業發展方向和薪資走向,如何走好這5年,徹底從一個剛入行的菜鳥蛻變成可以以不變應萬變的職業大牛,這是一個涉及到自身專業知識儲備和選擇的大難題,那麼,這五年裡

Java程式設計師的黃金五年——1~5年一個Java程式設計師從入行到牛的晉升

在程式界流行著一種預設的說法叫“黃金5年”,也就是一個程式設計師從入職的時候算起,前五年的選擇直接影響著整個職業生涯中的職業發展方向和薪資走向,如何走好這5年,徹底從一個剛入行的菜鳥蛻變成可以以不變應萬變的職業大牛,這是一個涉及到自身專業知識儲備和選擇的大難題,那麼,這五年裡

JAVA資料的學習,就該這樣走(內附1T資料資料)

如今使用了 23 年的 Java不再免費了,Java程式設計師是時候該轉移了,現在大資料的時代下,更是Java程式設計師們轉型可遇而不可求的機遇。為什麼要這麼說呢? 因為Java程式設計師轉型大資料工程師有著天然進階優勢,不僅僅是前景和薪資。技術層面來說,大資料使用的Hadoop(在分散式伺服器

0~5年一個Java程式設計師從入行到牛的晉升

在程式界流行著一種預設的說法叫“黃金5年”,也就是一個程式設計師從入職的時候算起,前五年的選擇直接影響著整個職業生涯中的職業發展方向和薪資走向,如何走好這5年,徹底從一個剛入行的菜鳥蛻變成可以以不變應萬變的職業大牛,這是一個涉及到自身專業知識儲備和選擇的大難題,那麼,這五

Objective-C【8-訪問成員變量和屬性】

order 線程安全 ring 內容 時間 targe 簡化 音樂 blank 郝萌主傾心貢獻,尊重作者的勞動成果。請勿轉載。 假設文章對您有所幫助,歡迎給作者捐贈,支持郝萌主,捐贈數額任意,重在心意^_^ 我要捐贈: 點擊捐贈 Cocos2d-X源代碼

Java應用架構的演化

當前 分析 c51 阻塞 發展 分布式緩存 如何 分布式 查詢 當我們架設一個系統的時候通常需要考慮到如何與其他系統交互,所以我們首先需要知道各種系統之間是如何交互的,使用何種技術實現。 1. 不同系統不同語言之間的交互 現在我們常見的不同系統不同語言之間的交互使用WebS

五本書籍助你從零基礎學習java編程到精通

html 書籍 區域 快速 學會 即使 沒有 j2e j2se 前天的文章給大家介紹了Java初學者應該學習哪些基礎,亦是美網絡小編從Java的三個大方向:J2SE、J2EE、J2ME對大家做了前景分析,這兩天也收到了大家的很多反饋,很多小夥伴看了後對自己的Java編程方向

一個Java程式設計師的阿里

前言 最近有些朋友在面試阿里,加上 Java-Interview 專案的原因也有小夥伴和我討論,近期也在負責部門的招牌,這讓我想起年初那段長達三個月的奇葩面試經歷。 本來沒想拿出來說的,畢竟最後也沒成。 但由於那幾個月的經歷讓我瞭解到了大廠的工作方式、對候選同學的考察重點以及面試官的套路

資料分析學習

一、大資料分析的五個基本方面  二、如何選擇適合的資料分析工具 三、如何區分三個大資料熱門職業  四、從菜鳥成為資料科學家的 9步養成方案 五、從入門到精通——快速學會大資料分析   推薦下小編的大資料學習群;

JAVA架構師的成長

一、基礎篇 JVM Java基礎知識 二、進階篇

Java小白進階(一)

1、字串操作:replace方法(舊字串,新子串)。 Scanner scanner = new Scanner(System.in); System.out.println("請輸入"); // 接收使用者的輸入的字串 String s1 = scanner.next(); // 接受整型 i

一年java菜鳥的面試

華為社招(三面+機試+性格測試) 1.介紹專案 2.說一說git分支的概念 3.arraylist和linklist的區別 4.資料庫鎖和隔離級別,你專案中怎麼加的鎖,分散式鎖瞭解過嗎 5.jvm瞭解過嗎,說一說有什麼 6.執行緒的幾種狀態,多執行緒的排程 拖了很久,沒有

JAVA架構師打怪

一Java程式設計入門類 1《Java程式設計思想》 2《Agile Java》中文版 二Java程式設計進階類 1《重構 改善既有程式碼的設計》 2《測試驅動開發 by Example》 三Java架構師之路 1《Expert One-on-One J2EE

資料開發必經

大資料大資料,個個都在喊 但究竟什麼是大資料開發,如何成為一個大資料開發工程師? 大資料通用處理平臺 1. Spark 2. Flink 3. Hadoop 分散式儲存 HDFS 資源排程 Yarn Mesos 機器學習工具

百度,阿里,網易順豐為何紛紛丟擲橄欖枝?這位佬的求職

  2018,有過迷茫,有過努力,也有很多收穫。為了記錄這一年以來的感受,於是有了這篇文章。 offer一覽   前期準備 當然在學習Python的道路上肯定會困難,沒有好的學習資料,怎麼去學習呢? 所以小編準備了一份零基礎入門Python的學