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.langcommons.*... 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.Callablejava.util.concurrent.locks.ReentrantLockjava.util.concurrent.locks.ReentrantReadWriteLockjava.util.concurrent.atomic.Atomic* java.util.concurrent.Semaphorejava.util.concurrent.CountDownLatch java.util.concurrent.CyclicBarrierjava.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修飾是否能夠做到執行緒安全?你覺得該怎麼做是執行緒安全的?

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

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

// 程式碼1publicclassSample{privatestaticint count =0;synchronizedpublicstaticvoid increment(){
    count++;}}// 程式碼2publicclassSample{privatestaticAtomicInteger count =newAtomicInteger(0);publicstaticvoid increment(){
    count.getAndIncrement();}}

1.3.12. 參考資料

二、 進階篇

2.1. Java底層知識

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

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

如Java原始碼:

publicstaticvoid main(String[] args){int i =0;
    i +=1;
    i *=1;System.out.println(i);}

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

publicstaticvoid main(java.lang.String[]);Code:Stack=2,Locals=2,Args_size=10:   iconst_0
   1:   istore_1
   2:   iinc    1,15:   iload_1
   6:   iconst_1
   7:   imul
   8:   istore_1
   9:   getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;12:  iload_1
   13:  invokevirtual   #3; //Method java/io/PrintStream.println:(I)V16:returnLineNumberTable: 
   line 4:0
   line 5:2
   line 6:5
   line 7:9
   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類似)

 sysdate
 sysdate -1
 sysdate -1/24
 sysdate -1/(12*2)

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

QList<Map<String,Object>> mapList =newQList<Map<String,Object>>;
  mapList.add({"name":"hatter test"});
  mapList.add({"id":-1,"name":"hatter test"});
  mapList.add({"id":0,"name":"hatter test"});
  mapList.add({"id":1,"name":"test test"});
  mapList.add({"id":2,"name":"hatter test"});
  mapList.add({"id":3,"name":"test hatter"});
  mapList.query("id is not null and id > 0 and name like '%hatter%'");

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

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

程式碼:

var a =1;var b =2;var c =function()
            
           

相關推薦

Java

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

JAVA培養計劃Java零基礎入門

集合 輸出流 java工具 基礎語 百度網 高效率 字符 包裝類 利用 百度網盤下載 步驟一、Java基礎知識 基礎語法、循環、數組、方法,這些知識是你進入研發世界的必備技能 步驟二、面向對象繼承、封裝、多態、玩轉面向對象,你一定聽說過“面向對象”,這是理解編程這件事最重要

全棧的自學----趣談HTTP, HTTPS, 證書

的人 這就是 什麽是 了解 告訴 存錢 是我 span 我們   HTTP   首先我們先來了解下http協議, 我想大多數初學者對這個很迷茫. 不會用特別專業的術語讓你去學會它, 我會用最直白,最實用的,最有趣的例子來讓你們了解,理解一點.   1.什麽是http協議  

JAVA培養計劃從網頁搭建入門JavaWeb分享

重要知識點前端基礎:HTML、CSS、JavaScriptJava web 基礎 :JSP、Servlet、JSTL、EL表示式、過濾器、監聽器、MVCJava開發工具:Eclipse、IntelliJ IDEA項 目 實 戰校園網首頁、輪播圖效果登入、註冊、分頁、驗證碼、單點登入、匯入匯出、

JAVA培養計劃從網頁搭建入門Java Web

重要知識點前端基礎:HTML、CSS、JavaScriptJava web 基礎 :JSP、Servlet、JSTL、EL表示式、過濾器、監聽器、MVCJava開發工具:Eclipse、IntelliJ IDEA項 目 實 戰校園網首頁、輪播圖效果登入、註冊、分頁、驗證碼、單

Java技術整理(長期更新)

重復註解 java多線程 加載機制 rom 倒計時器 dad 免費 dcm servle 以下是Java技術棧微信公眾號發布的關於 Java 的技術幹貨,從以下幾個方面匯總。 Java 基礎篇 Java 集合篇 Java 多線程篇 Java JVM篇 Java 進階篇 J

Java工程師思維導圖

思維 ava inf png 更新 時間 nbsp 微信 bubuko   前面看Hollis的微信公眾號更新了Java工程師成神之路的文檔,想著有時間把它畫下來,畫下來之後分享出來: 主要內容: 基礎篇: 進階篇: 高級篇: 推薦書籍:

Java工程師-基礎篇》Java基礎知識——序列化(已完結)

本文是《成神之路系列文章》中的一篇,主要是關於Java中序列化的一些介紹。 持續更新中 Java物件的序列化與反序列化 深入分析Java的序列化與反序列化 單例與序列化的那些事兒 Google Protocol Buffer 的使用和原理 拓展內容 關於 Java

-基礎篇》JVM——Java記憶體模型(已完結)

Java記憶體模型 本文是《成神之路系列文章》的第一篇,主要是關於JVM的一些介紹。 持續更新中 Java記憶體模型 JVM記憶體結構 VS Java記憶體模型 VS Java物件模型(Hollis原創) 再有人問你Java記憶體模型是什麼,就把這篇文章發給他。(Hollis原創) 記

Java(2018版)

一、基礎篇 1. Java基礎知識 知識點 連結地址 Java快速入門 資源連結 IntelliJ IDEA教程 資源連結 JAVA程式設計思想指

Java(2018版)

一、基礎篇 1. Java基礎知識 知識點 連結地址 Java快速入門 資源連結 IntelliJ IDEA教程 資源連結 JAVA程式設計思想指導 資源連結 Java8新特性 資源連結 2. Java Web 知識點 連結地址 Java Web進階:資料庫與My

Java工程師(2018修訂版)

主要版本 更新時間 備註 v1.0 2015-08-01 首次釋出 v1.1 2018-03-12 增加新技術知識、完善知識體系 一、基礎篇 JVM JVM記憶體結構 堆、棧、方法區、直接記憶體、堆和棧區別 Java記憶

JVM記憶體結構(Java 工程師·基礎篇·JVM)

第一章 JVM記憶體結構 第一章 JVM記憶體結構 為什麼要了解JVM記憶體管理機制 JVM自動的管理記憶體的分配與回收,這會在不知不覺中浪費很多記憶體,導致JVM花費很多時間去進行垃圾回收(GC) 記憶體洩露,導致JVM記憶體最終不夠用 JVM記憶體結構

Java技術整理

   關於 Java 的技術乾貨,從以下幾個方面彙總。   Java 基礎篇   Java 集合篇   Java 多執行緒篇   Java JVM篇   Java 進階篇   Java 新特性篇   Java 工具篇   Java 書籍篇   Java基礎篇   8張圖帶你輕鬆溫習 Ja

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

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

Java 工程師

http://www.hollischuang.com/archives/489https://linux.cn/article-6739-1.html 一、基礎篇 1.1 JVM 1.1.1. Java記憶體模型,Java記憶體管理,Java堆和棧,垃圾回收 1.

Java工程師

一、基礎篇 1.1 JVM 1.1.1. Java記憶體模型,Java記憶體管理,Java堆和棧,垃圾回收 http://www.jcp.org/en/jsr/detail?id=133 http://ifeve.com/jmm-faq/ 1.1.2. 瞭解J

Java[轉]

阿里大牛珍藏架構資料,點選連結免費獲取 針對本文,博主最近在寫《成神之路系列文章》 ,分章分節介紹所有知識點。歡迎關注。 主要版本 更新時間 備註 v1.0 2015-08-01

【收藏篇】Java工程師

一、基礎篇 1.1 JVM 1.1.1. Java記憶體模型,Java記憶體管理,Java堆和棧,垃圾回收 http://www.jcp.org/en/jsr/detail?id=133http://ifeve.com/jmm-faq/ 1.1.2. 瞭解JVM各種引數及調優 1.1.3

Java 工程師(2018 年修訂版)

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