以下詳細介紹了如何學習Java,如果樓主有耐心的話,建議仔細看一下~
學習一門新的知識,不可能指望只看一本,或者兩本書就能夠完全掌握。需要有一個循序漸進的閱讀過程。我推薦Oreilly出版的Java系列書籍。
在這里我只想補充一點看法,很多人學習Java是從《Thinking in Java》這本書入手的,但是我認為這本書是不適合初學者的。我認為正確的使用這本書的方法應該是作為輔助的讀物。《Thinking in Java》並不是在完整的介紹Java的整個體系,而是一種跳躍式的寫作方法,是一種類似tips的方法來對Java很多知識點進行了深入的分析和解釋。
對於初學者來說,最好是找一本Java入門的書籍,但是比較完整的循序的介紹Java的語法,面向對象的特性,核心類庫等等,在看這本書的同時,可以同步來看《Thinking in Java》,來加深對Java的理解和原理的運用,同時又可以完整的了解Java的整個體系。
對於Java的入門書籍,蔡學鏞推薦的是Oreilly的《Exploring Java, 2nd Edition》 或者《Java in a Nutshell,2nd Edition(針對C++背景)》,我並沒有看過這兩本書。其實我覺得電子工業出版社的《Java 2編程詳解》或者《Java 2從入門到精通》就很不錯。
在所有的Java書籍當中,其實最最有用的,並不是O'reilly的 Java Serials,真正最最有用處是JDK的Documentation!幾乎你想獲得的所有的知識在Documentation裡面全部都有,其中最主要的部分當然是Java基礎類庫的API文檔,是按照package來組織的,對於每一個class都有詳細的解釋,它的繼承關系,是否實現了某個介面,通常用在哪些場合,還可以查到它所有的public的屬性和方法,每個屬性的解釋,意義,每個方法的用途,調用的參數,參數的意義,返回值的類型,以及方法可能拋出的異常等等。可以這樣來說,所有關於Java編程方面的書籍其實都不過是在用比較通俗易懂的語言,和良好的組織方式來介紹Documentation裡面的某個package裡麵包含的一些類的用法而已。所以萬變不離其宗,如果你有足夠的能力來直接通過Documentation來學習Java的類庫,那麼基本上就不需要看其他的書籍了。除此之外,Documentation也是編程必備的手冊,我的桌面上有三個Documentation的快捷方式,分別是J2SDK1.4.1的Documentation,Servlet2.3的Documentation和J2SDKEE1.3.1的Documentation。有了這個三個Documentation,什麼其他的書籍都不需要了。
對於Java Web 編程來說,最核心的是要熟悉和掌握HTTP協議,這個就和Java無關了,在熟悉HTTP協議之後,就需要熟悉Java的實現HTTP協議的類庫,也就是Servlet API,所以最重要的東西就是Servlet API。當然對於初學者而言,直接通過Servlet API來學習Web編程有很大的難度,我推薦O'reilly的《Java Server Pages 》這本書來學習Web 編程。
EJB的書籍當中,《Enterprise JavaBeans, 2nd Edition》是一本很不錯的書, EJB的學習門檻是比較高,入門很難,但是這本書完全降低了學習的難度,特別重要的一點是,EJB的學習需要結合一種App Server的具體實現,所以在學習EJB的同時,必須同步的學習某種App Server,而這本書相關的出了三本書,分別是Weblogic6.1,Websphere4.0和JBoss3.0上面部署書中例子的實做。真是既有理論,又有實踐。在學習EJB的同時,可以邊看邊做,EJB的學習會變得很輕松。
但是這本書也有一個問題,就是版本比較舊,主要講EJB1.1規范和部分EJB2.0的規范。而Ed Roman寫的《Mastering EJB 2.0》這本書完全是根據EJB2.0規范寫的,深入淺出,覆蓋了EJB編程的各個方面,並且還有很多編程經驗tips,也是學習EJB非常推薦的書籍之一。
如果是結合Weblogic來學習J2EE的話,《J2EE應用與BEA Weblogic Server》絕對是首選讀物,雖然是講述的Weblogic6.0,仍然值得購買,這本書是BEA官方推薦的教材,作者也是BEA公司的工程師。現在中文版已經隨處可見了。這本書結合Weblogic介紹了J2EE各個方面的技術在Weblogic平台上的開發和部署,實踐指導意義非常強。
在掌握了Java平台基礎知識和J2EE方面的知識以後,更進一步的是學習如何運用OO的方法進行軟體的設計,那麼就一定要學習「設計模式」。Sun公司出版了一本《J2EE核心模式》,是每個開發Java企業平台軟體的架構師必備的書籍。這本書全面的介紹了J2EE體系架構的各種設計模式,是設計師的必讀書籍。
Java Learning Path(三)過程篇
每個人的學習方法是不同的,一個人的方法不見得適合另一個人,我只能是談自己的學習方法。因為我學習Java是完全自學的,從來沒有問過別人,所以學習的過程基本上完全是自己摸索出來的。我也不知道這種方法是否是比較好的方法,只能給大家提供一點參考了。
學習Java的第一步是安裝好JDK,寫一個Hello World, 其實JDK的學習沒有那麼簡單,關於JDK有兩個問題是很容易一直困擾Java程序員的地方:一個是CLASSPATH的問題,其實從原理上來說,是要搞清楚JRE的ClassLoader是如何載入Class的;另一個問題是package和import問題,如何來尋找類的路徑問題。把這兩個問題摸索清楚了,就掃除了學習Java和使用JDK的最大障礙。推薦看一下王森的《Java深度歷險》,對這兩個問題進行了深入的探討。
第二步是學習Java的語法。Java的語法是類C++的,基本上主流的編程語言不是類C,就是類C++的,沒有什麼新東西,所以語法的學習,大概就是半天的時間足夠了。唯一需要注意的是有幾個不容易搞清楚的關鍵字的用法,public,protected,private,static,什麼時候用,為什麼要用,怎麼用,這可能需要有人來指點一下,我當初是完全自己琢磨出來的,花了很久的時間。不過後來我看到《Thinking in Java》這本書上面是講了這些概念的。
第三步是學習Java的面向對象的編程語言的特性的地方。比如繼承,構造器,抽象類,介面,方法的多態,重載,覆蓋,Java的異常處理機制。對於一個沒有面向對象語言背景的人來說,我覺得這個過程需要花很長很長時間,因為學習Java之前沒有C++的經驗,只有C的經驗,我是大概花了一個月左右吧,才徹底把這些概念都搞清楚,把書上面的例子反復的揣摩,修改,嘗試,把那幾章內容反復的看過來,看過去,看了不下5遍,才徹底領悟了。不過我想如果有C++經驗的話,應該一兩天時間足夠了。那麼在這個過程中,可以多看看《Thinking in Java》這本書,對面向對象的講解非常透徹。可惜的是我學習的時候,並沒有看到這本書,所以自己花了大量的時間,通過自己的嘗試和揣摩來學會的。
第四步就是開始熟悉Java的類庫。Java的基礎類庫其實就是JDK安裝目錄下面jre\lib\rt.jar這個包。學習基礎類庫就是學習rt.jar。基礎類庫裡面的類非常非常多。據說有3000多個,我沒有統計過。但是真正對於我們來說最核心的只有4個,分別是
java.lang.*;
java.io.*;
java.util.*;
java.sql.*;
這四個包的學習,每個包的學習都可以寫成一本厚厚的教材,而O'reilly也確實是這樣做的。我覺得如果時間比較緊,是不可能通過讀四本書來學習。我覺得比較好的學習方法是這樣的:
首先要通讀整個package的框架,了解整個package的class,interface,exception的構成,最好是能夠找到介紹整個包框架的文章。這些專門介紹包的書籍的前幾章應該就是這些總體的框架內容介紹。
對包整體框架的把握並不是要熟悉每個類的用法,記住它有哪些屬性,方法。想記也記不住的。而是要知道包有哪些方面的類構成的,這些類的用途是什麼,最核心的幾個類分別是完成什麼功能的。我在給人培訓的時候一般是一次課講一個包,所以不可能詳細的介紹每個類的用法,但是我反復強調,我給你們講這些包的不是要告訴你們類的方法是怎麼調用的,也不要求你們記住類的方法調用,而是要你們了解,Java給我們提供了哪些類,每個類是用在什麼場合,當我遇到問題的時候,我知道哪個類,或者哪幾個類的組合可以解決我的問題,That'all!,當我們具體寫程序的時候,只要你知道該用哪個類來完成你的工作就足夠了。編碼的時候,具體的方法調用,是邊寫代碼,邊查Documentation,所有的東西都在Documentation裡面,不要求你一定記住,實際你也記不住3000多個類的總共將近10萬個方法調用。所以對每個包的總體框架的把握就變得極為重要。
第五步,通過上面的學習,如果學的比較扎實的話,就打好了Java的基礎了,剩下要做的工作是掃清Documentation裡面除了上面4個包之外的其他一些比較有用處的類。相信進展到這一步,Java的自學能力已經被培養出來了,可以到了直接學習Documentation的水平了。除了要做GUI編程之外,JDK裡面其他會有用處的包是這些:
java.text.*;
java.net.*;
javax.naming.*;
這些包裡面真正用的比較多的類其實很少,只有幾個,所以不需要花很多時間。
第六步,Java Web 編程
Web編程的核心是HTTP協議,HTTP協議和Java無關,如果不熟悉HTTP協議的話,雖然也可以學好Servlet/JSP編程,但是達不到舉一反三,一通百通的境界。所以HTTP協議的學習是必備的。如果熟悉了HTTP協議的話,又有了Java編程的良好的基礎,學習Servlet/JSP簡直易如反掌,我學習Servlet/JSP就用了不到一周的時間,然後就開始用JSP來做項目了。
在Servlet/JSP的學習中,重頭仍然是Servlet Documentation。Servlet API最常用的類很少,花比較少的時間就可以掌握了。把這些類都看一遍,多寫幾個例子試試。Servlet/JSP編程本質就是在反復調用這些類來通過HTTP協議在Web Server和Brower之間交談。另外對JSP,還需要熟悉幾個常用JSP的標記,具體的寫法記不住的話,臨時查就是了。
此外Java Web編程學習的重點要放在Web Application的設計模式上,如何進行業務邏輯的分析,並且進行合理的設計,按照MVC設計模式的要求,運用Servlet和JSP分別完成不同的邏輯層,掌握如何在Servlet和JSP之間進行流程的控制和數據的共享,以及Web Application應該如何配置和部署。
第七步,J2EE編程
以上的學習過程如果是比較順利的話,進行到這一步,難度又陡然提高。因為上面的知識內容都是只涉及一個方面,而像EJB,JMS,JTA等核心的J2EE規范往往是幾種Java技術的綜合運用的結晶,所以掌握起來難度比較大。
首先一定要學習好JNDI,JNDI是App Server定位伺服器資源(EJB組件,Datasouce,JMS)查找方法,如果對JNDI不熟悉的話,EJB,JMS這些東西幾乎學不下去。JNDI其實就是javax.naming.*這個包,運用起來很簡單。難點在於伺服器資源文件的配置。對於伺服器資源文件的配置,就需要看看專門的文檔規范了,比如web.xml的寫法,ejb-jar.xml的寫法等等。針對每種不同的App Server,還有自己的服務資源配置文件,也是需要熟悉的。
然後可以學習JTA,主要是要理解JTA對於事務的控制的方法,以及該在什麼場合使用JTA。這里可以簡單的舉個例子,我們知道一般情況可以對於一個資料庫連接進行事務控制(conn.setAutoCommit(false),....,conn.commit()),做為一個原子操作,但是假設我的業務需求是要把對兩個不同資料庫的操作做為一個原子操作,你能做的到嗎?這時候只能用JTA了。假設操作過程是先往A資料庫插一條記錄,然後刪除B資料庫另一個記錄,我們自己寫代碼是控制不了把整個操作做為一個原子操作的。用JTA的話,由App Server來完成控制。
在學習EJB之前要學習對象序列化和RMI,RMI是EJB的基礎。接著學習JMS和EJB,對於EJB來說,最關鍵是要理解EJB是如何通過RMI來實現對遠端對象的調用的,以及在什麼情況下要用到EJB。
在學習完EJB,JMS這些東西之後,你可能會意識到要急不可待學習兩個領域的知識,一個是UML,另一個是Design Pattern。Java企業軟體的設計非常重視框架(Framework)的設計,一個好的軟體框架是軟體開發成功的必要條件。在這個時候,應該開始把學習的重點放在設計模式和框架的學習上,通過學習和實際的編程經驗來掌握EJB的設計模式和J2EE的核心模式。
J2EE規范裡面,除了EJB,JMS,JTA,Servlet/JSP,JDBC之外還有很多很多的企業技術,這里不一一進行介紹了。
另外還有一個最新領域Web Services。Web Services也完全沒有任何新東西,它像是一種黏合劑,可以把不同的服務統一起來提供一個統一的調用介面,作為使用者來說,我只要獲得服務提供者給我的WSDL(對服務的描述),就夠了,我完全不知道伺服器提供者提供的服務究竟是EJB組件,還是.Net組件,還是什麼CORBA組件,還是其他的什麼實現,我也不需要知道。Web Services最偉大的地方就在於通過統一的服務提供方式和調用方式,實現了整個Internet服務的共享,是一個非常令人激動的技術領域。Web Services好像目前還沒有什麼很好的書籍,但是可以通過在網路上面查資料的方式來學習。
Java Learning Path(四) 方法篇
Java作為一門編程語言,最好的學習方法就是寫代碼。當你學習一個類以後,你就可以自己寫個簡單的例子程序來運行一下,看看有什麼結果,然後再多調用幾個類的方法,看看運行結果,這樣非常直觀的把類給學會了,而且記憶非常深刻。然後不應該滿足把代碼調通,你應該想想看如果我不這樣寫,換個方式,再試試行不行。記得哪個高人說過學習編程就是個破壞的過程,把書上的例子,自己學習Documentation編寫的例子在運行通過以後,不斷的嘗試著用不同的方法實現,不斷的嘗試破壞代碼的結構,看看它會有什麼結果。通過這樣的方式,你會很徹底的很精通的掌握Java。
舉個例子,我們都編過Hello World
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
很多初學者不是很理解為什麼main方法一定要這樣來定義public static void main(String[] args),能不能不這樣寫?包括我剛學習Java的時候也有這樣的疑問。想知道答案嗎?很簡單,你把main改個名字運行一下,看看報什麼錯誤,然後根據出錯信息進行分析;把main的public取掉,在試試看,報什麼錯誤;static去掉還能不能運行;不知道main方法是否一定要傳一個String[]數組的,把String[]改掉,改成int[],或者String試試看;不知道是否必須寫args參數名稱的,也可以把args改成別的名字,看看運行結果如何。
我當初學習Java的時候就是這樣做的,把Hello World程序反復改了七八次,不斷運行,分析運行結果,最後就徹底明白為什麼了main方法是這樣定義的了。
此外,我對於staic,public,private,Exception,try{ }catch {}finally{}等等等等一開始都不是很懂,都是把參考書上面的例子運行成功,然後就開始破壞它,不斷的根據自己心裏面的疑問來重新改寫程序,看看能不能運行,運行出來是個什麼樣子,是否可以得到預期的結果。這樣雖然比較費時間,不過一個例子程序這樣反復破壞幾次之後。我就對這個相關的知識徹底學通了。有時候甚至故意寫一些錯誤的代碼來運行,看看能否得到預期的運行錯誤。這樣對於編程的掌握是及其深刻的。
其中特別值得一提的是JDK有一個非常棒的調試功能,-verbose
java –verbose
javac –verbose 以及其它很多JDK工具都有這個選項
-verbose 可以顯示在命令執行的過程中,JVM都依次載入哪裡Class,通過這些寶貴的調試信息,可以幫助我們分析出JVM在執行的過程中都幹了些什麼。
另外,自己在學習過程中,寫的很多的這種破壞常式,應該有意識的分門別類的保存下來,在工作中積累的典型常式也應該定期整理,日積月累,自己就有了一個代碼庫了。遇到類似的問題,到代碼庫裡面 Copy & Paste ,Search & Replace,就好了,極大提高了開發速度。最理想的情況是把一些通用的常式自己再抽象一層,形成一個通用的類庫,封裝好。那麼可復用性就更強了。
所以我覺得其實不是特別需要常式的,自己寫的破壞常式就是最好的例子,如果你實在對自己寫的代碼不放心的話,我強烈推薦你看看JDK基礎類庫的Java源代碼。在JDK安裝目錄下面會有一個src.zip,解開來就可以完整的看到整個JDK基礎類庫,也就是rt.jar的Java源代碼,你可以參考一下Sun是怎麼寫Java程序的,規范是什麼樣子的。我自己在學習Java的類庫的時候,當有些地方理解的不是很清楚的時候,或者想更加清晰的理解運作的細節的時候,往往會打開相應的類的源代碼,通過看源代碼,所有的問題都會一掃而空。
Java Learning Path(五)資源篇
1、 http://java.sun.com/ (英文)
Sun的Java網站,是一個應該經常去看的地方。不用多說。
2、http://www-900.ibm.com/developerWorks/cn/
IBM的developerWorks網站,英語好的直接去英文主站點看。這里不但是一個極好的面向對象的分析設計網站,也是Web Services,Java,Linux極好的網站。強烈推薦!!!
3、http://www.javaworld.com/ (英文)
關於Java很多新技術的討論和新聞。想多了解Java的方方面面的應用,這里比較好。
4、http://dev2dev.bea.com.cn/index.jsp
BEA的開發者園地,BEA作為最重要的App Server廠商,有很多獨到的技術,在Weblogic上做開發的朋友不容錯過。
5、http://www.huihoo.com/
灰狐動力網站,一個專業的中間件網站,雖然不是專業的Java網站,但是在J2EE企業應用技術方面有深厚的造詣。
6、http://www.theserverside.com/home/ (英文)
TheServerSide是一個著名的專門面向Java Server端應用的網站。
7、http://www.javaresearch.org/
Java研究組織,有很多優秀的Java方面的文章和教程,特別是在JDO方面的文章比較豐富。
8、http://www.cnjsp.org/
JSP技術網站,有相當多的Java方面的文章和資源。
9、http://www.jdon.com/
Jdon論壇,是一個個人性質的中文J2EE專業技術論壇,在眾多的Java的中文論壇中,Jdon一個是技術含量非常高,帖子質量非常好的論壇。
10、http://sourceforge.net/
SourgeForge是一個開放源代碼軟體的大本營,其中也有非常非常豐富的Java的開放源代碼的著名的軟體。
參考資料:http://www.itpub.net/showthread.php?threadid=159803&pagenumber=
參考資料:http://..com/question/751730.html
❷ Java哪些開源框架的源代碼值得一讀
Spring
spring做為現在最流行java web框架,可以作為任何一個項目的基礎框架,值得仔細研究學習
❸ GitHub上面有哪些經典的java框架源碼
Bazel:來自Google的構建工具,可以快速、可靠地構建代碼。官網
Gradle:使用Groovy(非XML)進行增量構建,可以很好地與Maven依賴管理配合工作。官網
Buck:Facebook構建工具。官網
位元組碼操作
編程方式操作位元組碼的開發庫。
ASM:通用底層位元組碼操作和分析開發庫。官網
Byte Buddy:使用流式API進一步簡化位元組碼生成。官網
Byteman:在運行時通過DSL(規則)操作位元組碼進行測試和故障排除。官網
Javassist:一個簡化位元組碼編輯嘗試。官網
集群管理
在集群內動態管理應用程序的框架。
Apache Aurora:Apache Aurora是一個Mesos框架,用於長時間運行服務和定時任務(cron job)。官網
Singularity:Singularity是一個Mesos框架,方便部署和操作。它支持Web Service、後台運行、調度作業和一次性任務。官網
代碼分析
測量代碼指標和質量工具。
Checkstyle:代碼編寫規范和標准靜態分析工具。官網
Error Prone:將常見編程錯誤作為運行時錯誤報告。官網
FindBugs:通過位元組碼靜態分析查找隱藏bug。官網
jQAssistant:使用基於Neo4J查詢語言進行代碼靜態分析。官網
PMD:對源代碼分析查找不良的編程習慣。官網
SonarQube:通過插件集成其它分析組件,對過去一段時間內的數據進行統計。官網
編譯器生成工具
用來創建解析器、解釋器或編譯器的框架。
ANTLR:復雜的全功能自頂向下解析框架。官網
JavaCC:JavaCC是更加專門的輕量級工具,易於上手且支持語法超前預測。官網
外部配置工具
支持外部配置的開發庫。
config:針對JVM語言的配置庫。官網
owner:減少冗餘配置屬性。官網
約束滿足問題求解程序
幫助解決約束滿足問題的開發庫。
Choco:可直接使用的約束滿足問題求解程序,使用了約束規劃技術。官網
JaCoP:為FlatZinc語言提供了一個介面,可以執行MiniZinc模型。官網
OptaPlanner:企業規劃與資源調度優化求解程序。官網
Sat4J:邏輯代數與優化問題最先進的求解程序。官網
持續集成
Bamboo:Atlassian解決方案,可以很好地集成Atlassian的其他產品。可以選擇開源許可,也可以購買商業版。官網
CircleCI:提供託管服務,可以免費試用。官網
Codeship:提供託管服務,提供有限的免費模式。官網
fabric8:容器集成平台。官網
Go:ThoughtWork開源解決方案。官網
Jenkins:支持基於伺服器的部署服務。官網
TeamCity:JetBrain的持續集成解決方案,有免費版。官網
Travis:通常用作開源項目的託管服務。官網
Buildkite: 持續集成工具,用簡單的腳本就能設置pipeline,而且能快速構建,可以免費試用。官網
CSV解析
簡化CSV數據讀寫的框架與開發庫
uniVocity-parsers:速度最快功能最全的CSV開發庫之一,同時支持TSV與固定寬度記錄的讀寫。官網
資料庫
簡化資料庫交互的相關工具。
Apache Phoenix:HBase針對低延時應用程序的高性能關系資料庫層。官網
Crate:實現了數據同步、分片、縮放、復制的分布式數據存儲。除此之外還可以使用基於SQL的語法跨集群查詢。官網
Flyway:簡單的資料庫遷移工具。官網
H2:小型SQL資料庫,以可以作為內存資料庫使用著稱。官網
HikariCP:高性能JDBC連接工具。官網
JDBI:便捷的JDBC抽象。官網
Protobuf:Google數據交換格式。官網
SBE:簡單二進制編碼,是最快速的消息格式之一。官網
Wire:整潔輕量級協議緩存。官網
幫實現依賴翻轉範式的開發庫。官網
Apache DeltaSpike:CDI擴展框架。官網
Dagger2:編譯時注入框架,不需要使用反射。官網
Guice:可以匹敵Dagger的輕量級注入框架。官網
HK2:輕量級動態依賴注入框架。官網
開發流程增強工具
從最基本的層面增強開發流程。
ADT4J:針對代數數據類型的JSR-269代碼生成器。官網
AspectJ:面向切面編程(AOP)的無縫擴展。官網
Auto:源代碼生成器集合。官網
DCEVM:通過修改JVM在運行時支持對已載入的類進行無限次重定義。官網
HotswapAgent:支持無限次重定義運行時類與資源。官網
Immutables:類似Scala的條件類。官網
JHipster:基於Spring Boot與AngularJS應用程序的Yeoman源代碼生成器。官網
JRebel:無需重新部署,可以即時重新載入代碼與配置的商業軟體。官網
Lombok:減少冗餘的代碼生成器。官網
Spring Loaded:類重載代理。官網
vert.x:多語言事件驅動應用框架。官網
分布式應用
用來編寫分布式容錯應用的開發庫和框架。
Akka:用來編寫分布式容錯並發事件驅動應用程序的工具和運行時。官網
Apache Storm:實時計算系統。官網
Apache ZooKeeper:針對大型分布式系統的協調服務,支持分布式配置、同步和名稱注冊。官網
Hazelcast:高可擴展內存數據網格。官網
Hystrix:提供延遲和容錯。官網
JGroups:提供可靠的消息傳遞和集群創建的工具。官網
Orbit:支持虛擬角色(Actor),在傳統角色的基礎上增加了另外一層抽象。官網
Quasar:為JVM提供輕量級線程和角色。官網
分布式資料庫
對應用程序而言,在分布式系統中的資料庫看起來就像是只有一個數據源。
Apache Cassandra:列式資料庫,可用性高且沒有單點故障。官網
Apache HBase:針對大數據的Hadoop資料庫。官網
Druid:實時和歷史OLAP數據存儲,在聚集查詢和近似查詢方面表現不俗。官網
Infinispan:針對緩存的高並發鍵值對數據存儲。官網
發布
以本機格式發布應用程序的工具。
Bintray:發布二進制文件版本控制工具。可以於Maven或Gradle一起配合使用。提供開源免費版本和幾種商業收費版本。官網
Central Repository:最大的二進制組件倉庫,面向開源社區提供免費服務。Apache Maven默認使用Central官網Repository,也可以在所有其他構建工具中使用。
IzPack:為跨平台部署建立創作工具(Authoring Tool)。官網
JitPack:打包GitHub倉庫的便捷工具。可根據需要構建Maven、Gradle項目,發布可立即使用的組件。官網
Launch4j:將JAR包裝為輕量級本機Windows可執行程序。官網
Nexus:支持代理和緩存功能的二進制管理工具。官網
packr:將JAR、資源和JVM打包成Windows、Linux和Mac OS X本地發布文件。官網
文檔處理工具
處理Office文檔的開發庫。
Apache POI:支持OOXML規范(XLSX、DOCX、PPTX)以及OLE2規范(XLS、DOC、PPT)。官網
documents4j:使用第三方轉換器進行文檔格式轉換,轉成類似MS Word這樣的格式。官網
jOpenDocument:處理OpenDocument格式(由Sun公司提出基於XML的文檔格式)。官網
函數式編程
函數式編程支持庫。
Cyclops:支持一元(Monad)操作和流操作工具類、comprehension(List語法)、模式匹配、trampoline等特性。官網
Fugue:Guava的函數式編程擴展。官網
Functional Java:實現了多種基礎和高級編程抽象,用來輔助面向組合開發(composition-oriented development)。官網
Javaslang:一個函數式組件庫,提供持久化數據類型和函數式控制結構。官網
jOOλ:旨在填補Java 8 lambda差距的擴展,提供了眾多缺失的類型和一組豐富的順序流API。官網
游戲開發
游戲開發框架。
jMonkeyEngine:現代3D游戲開發引擎。官網
libGDX:全面的跨平台高級框架。官網
LWJGL:對OpenGL/CL/AL等技術進行抽象的健壯框架。官網
GUI
現代圖形化用戶界面開發庫。
JavaFX:Swing的後繼者。官網
Scene Builder:開發JavaFX應用的可視化布局工具。官網
高性能計算
涵蓋了從集合到特定開發庫的高性能計算相關工具。
Agrona:高性能應用中常見的數據結構和工具方法。官網
Disruptor:線程間消息傳遞開發庫。官網
fastutil:快速緊湊的特定類型集合(Collection)。官網
GS Collections:受Smalltalk啟發的集合框架。官網
HPPC:基礎類型集合。官網
Javolution:實時和嵌入式系統的開發庫。官網
JCTools:JDK中缺失的並發工具。官網
Koloboke:Hash set和hash map。官網
Trove:基礎類型集合。官網
High-scale-bli:Cliff Click 個人開發的高性能並發庫官網
IDE
簡化開發的集成開發環境。
Eclipse:老牌開源項目,支持多種插件和編程語言。官網
IntelliJ IDEA:支持眾多JVM語言,是安卓開發者好的選擇。商業版主要針對企業客戶。官網
NetBeans:為多種技術提供集成化支持,包括Java SE、Java EE、資料庫訪問、HTML5
Imgscalr:純Java 2D實現,簡單、高效、支持硬體加速的圖像縮放開發庫。官網
Picasso:安卓圖片下載和圖片緩存開發庫。官網
Thumbnailator:Thumbnailator是一個高質量Java縮略圖開發庫。官網
ZXing:支持多種格式的一維、二維條形碼圖片處理開發庫。官網
im4java: 基於ImageMagick或GraphicsMagick命令行的圖片處理開發庫,基本上ImageMagick能夠支持的圖片格式和處理方式都能夠處理。官網
Apache Batik:在Java應用中程序以SVG格式顯示、生成及處理圖像的工具集,包括SVG解析器、SVG生成器、SVG DOM等模塊,可以集成使用也可以單獨使用,還可以擴展自定義的SVG標簽。官網
JSON
簡化JSON處理的開發庫。
Genson:強大且易於使用的Java到JSON轉換開發庫。官網
Gson:谷歌官方推出的JSON處理庫,支持在對象與JSON之間雙向序列化,性能良好且可以實時調用。官網
Jackson:與GSON類似,在頻繁使用時性能更佳。官網
LoganSquare:基於Jackson流式API,提供對JSON解析和序列化。比GSON與Jackson組合方式效果更好。官網
Fastjson:一個Java語言編寫的高性能功能完善的JSON庫。官網
Kyro:快速、高效、自動化的Java對象序列化和克隆庫。官網
JVM與JDK
目前的JVM和JDK實現。
JDK 9:JDK 9的早期訪問版本。官網
OpenJDK:JDK開源實現。官網
基於JVM的語言
除Java外,可以用來編寫JVM應用程序的編程語言。
Scala:融合了面向對象和函數式編程思想的靜態類型編程語言。官網
Groovy:類型可選(Optionally typed)的動態語言,支持靜態類型和靜態編譯。目前是一個Apache孵化器項目。官網
Clojure:可看做現代版Lisp的動態類型語言。官網
Ceylon:RedHat開發的面向對象靜態類型編程語言。官網
Kotlin:JetBrain針對JVM、安卓和瀏覽器提供的靜態類型編程語言。官網
Xtend:一種靜態編程語言,能夠將其代碼轉換為簡潔高效的Java代碼,並基於JVM運行。官網
日誌
記錄應用程序行為日誌的開發庫。
Apache Log4j 2:使用強大的插件和配置架構進行完全重寫。官網
kibana:分析及可視化日誌文件。官網
Logback:強健的日期開發庫,通過Groovy提供很多有趣的選項。官網
logstash:日誌文件管理工具。官網
Metrics:通過JMX或HTTP發布參數,並且支持存儲到資料庫。官網
SLF4J:日誌抽象層,需要與具體的實現配合使用。官網
機器學習
提供具體統計演算法的工具。其演算法可從數據中學習。
Apache Flink:快速、可靠的大規模數據處理引擎。官網
Apache Hadoop:在商用硬體集群上用來進行大規模數據存儲的開源軟體框架。官網
Apache Mahout:專注協同過濾、聚類和分類的可擴展演算法。官網
Apache Spark:開源數據分析集群計算框架。官網
DeepDive:從非結構化數據建立結構化信息並集成到已有資料庫的工具。官網
Deeplearning4j:分布式多線程深度學習開發庫。官網
H2O:用作大數據統計的分析引擎。官網
Weka:用作數據挖掘的演算法集合,包括從預處理到可視化的各個層次。官網
QuickML:高效機器學習庫。官網、GitHub
消息傳遞
在客戶端之間進行消息傳遞,確保協議獨立性的工具。
Aeron:高效可擴展的單播、多播消息傳遞工具。官網
Apache ActiveMQ:實現JMS的開源消息代理(broker),可將同步通訊轉為非同步通訊。官網
Apache Camel:通過企業級整合模式(Enterprise Integration Pattern EIP)將不同的消息傳輸API整合在一起。官網
Apache Kafka:高吞吐量分布式消息系統。官網
Hermes:快速、可靠的消息代理(Broker),基於Kafka構建。官網
JBoss HornetQ:清晰、准確、模塊化,可以方便嵌入的消息工具。官網
JeroMQ:ZeroMQ的純Java實現。官網
Smack:跨平台XMPP客戶端函數庫。官網
Openfire:是開源的、基於XMPP、採用Java編程語言開發的實時協作伺服器。 Openfire安裝和使用都非常簡單,並可利用Web界面進行管理。官網GitHub
Spark:是一個開源,跨平台IM客戶端。它的特性支持集組聊天,電話集成和強大安全性能。如果企業內部部署IM使用Openfire+Spark是最佳的組合。官網GitHub
Tigase: 是一個輕量級的可伸縮的 Jabber/XMPP 伺服器。無需其他第三方庫支持,可以處理非常高的復雜和大量的用戶數,可以根據需要進行水平擴展。官網
雜項
未分類其它資源。
Design Patterns:實現並解釋了最常見的設計模式。官網
Jimfs:內存文件系統。官網
Lanterna:類似curses的簡單console文本GUI函數庫。官網
LightAdmin:可插入式CRUD UI函數庫,可用來快速應用開發。官網
OpenRefine:用來處理混亂數據的工具,包括清理、轉換、使用Web Service進行擴展並將其關聯到資料庫。官網
RoboVM:Java編寫原生iOS應用。官網
Quartz:強大的任務調度庫.官網
應用監控工具
監控生產環境中應用程序的工具。
AppDynamics:性能監測商業工具。官網
JavaMelody:性能監測和分析工具。官網
Kamon:Kamon用來監測在JVM上運行的應用程序。官網
New Relic:性能監測商業工具。官網
SPM:支持對JVM應用程序進行分布式事務追蹤的性能監測商業工具。官網
Takipi:產品運行時錯誤監測及調試商業工具。官網
原生開發庫
用來進行特定平台開發的原生開發庫。
JNA:不使用JNI就可以使用原生開發庫。此外,還為常見系統函數提供了介面。官網
自然語言處理
用來專門處理文本的函數庫。
Apache OpenNLP:處理類似分詞等常見任務的工具。官網
CoreNLP:斯坦佛CoreNLP提供了一組基礎工具,可以處理類似標簽、實體名識別和情感分析這樣的任務。官網
LingPipe:一組可以處理各種任務的工具集,支持POS標簽、情感分析等。官網
Mallet:統計學自然語言處理、文檔分類、聚類、主題建模等。官網
網路
網路編程函數庫。
Async Http Client:非同步HTTP和WebSocket客戶端函數庫。官網
Grizzly:NIO框架,在Glassfish中作為網路層使用。官網
Netty:構建高性能網路應用程序開發框架。官網
OkHttp:一個Android和Java應用的HTTP+SPDY客戶端。官網
Undertow:基於NIO實現了阻塞和非阻塞API的Web伺服器,在WildFly中作為網路層使用。官網
ORM
處理對象持久化的API。
Ebean:支持快速數據訪問和編碼的ORM框架。官網
EclipseLink:支持許多持久化標准,JPA、JAXB、JCA和SDO。官網
Hibernate:廣泛使用、強健的持久化框架。Hibernate的技術社區非常活躍。官網
MyBatis:帶有存儲過程或者SQL語句的耦合對象(Couples object)。官網
OrmLite:輕量級開發包,免除了其它ORM產品中的復雜性和開銷。官網
Nutz:另一個SSH。官網,Github
JFinal:JAVA WEB + ORM框架。官網,Github
用來幫助創建PDF文件的資源。
Apache FOP:從XSL-FO創建PDF。官網
Apache PDFBox:用來創建和操作PDF的工具集。官網
DynamicReports:JasperReports的精簡版。官網
flyingsaucer:XML/XHTML和CSS 2.1渲染器。官網
iText:一個易於使用的PDF函數庫,用來編程創建PDF文件。注意,用於商業用途時需要許可證。官網
JasperReports:一個復雜的報表引擎。官網
性能分析
性能分析、性能剖析及基準測試工具。
jHiccup:提供平台中JVM暫停的日誌和記錄。官網
JMH:JVM基準測試工具。官網
JProfiler:商業分析器。官網
LatencyUtils:測量和報告延遲的工具。官網
VisualVM:對運行中的應用程序信息提供了可視化界面。官網
YourKit Java Profiler:商業分析器。官網
響應式開發庫
用來開發響應式應用程序的開發庫。
Reactive Streams:非同步流處理標准,支持非阻塞式反向壓力(backpressure)。官網
Reactor:構建響應式快速數據(fast-data)應用程序的開發庫。官網
RxJava:通過JVM可觀察序列(observable sequence)構建非同步和基於事件的程序。官網
REST框架
用來創建RESTful 服務的框架。
Dropwizard:偏向於自己使用的Web框架。用來構建Web應用程序,使用了Jetty、Jackson、Jersey和Metrics。官網
Feign:受Retrofit、JAXRS-2.0和WebSocket啟發的HTTP客戶端連接器(binder)。官網
Jersey:JAX-RS參考實現。官網
RESTEasy:經過JAX-RS規范完全認證的可移植實現。官網
RestExpress:一個Java類型安全的REST客戶端。官網
RestX:基於註解處理和編譯時源碼生成的框架。官網
Retrofit:類型安全的REST客戶端。官網
Spark:受到Sinatra啟發的Java REST框架。官網
Swagger:Swagger是一個規范且完整的框架,提供描述、生產、消費和可視化RESTful Web Service。官網
Blade:國人開發的一個輕量級的MVC框架. 它擁有簡潔的代碼,優雅的設計。官網
科學計算與分析
用於科學計算和分析的函數庫。
DataMelt:用於科學計算、數據分析及數據可視化的開發環境。官網
JGraphT:支持數學圖論對象和演算法的圖形庫。官網
JScience:用來進行科學測量和單位的一組類。官網
搜索引擎
文檔索引引擎,用於搜索和分析。
Apache Solr:一個完全的企業搜索引擎。為高吞吐量通信進行了優化。官網
Elasticsearch:一個分布式、支持多租戶(multitenant)全文本搜索引擎。提供了RESTful Web介面和無schema的JSON文檔。官網
Apache Lucene:是一個開放源代碼的全文檢索引擎工具包,是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎,部分文本分析引擎。官網
安全
用於處理安全、認證、授權或會話管理的函數庫。
Apache Shiro:執行認證、授權、加密和會話管理。官網
Bouncy Castle,涵蓋了從基礎的幫助函數到PGP/SMIME操作。官網:多途加密開發庫。支持JCA提供者(JCA provider)
Cryptomator:在雲上進行客戶端跨平台透明加密。官網
Keycloak:為瀏覽器應用和RESTful Web Service集成SSO和IDM。目前還處於beta版本,但是看起來非常有前途。官網
PicketLink:PicketLink是一個針對Java應用進行安全和身份認證管理的大型項目(Umbrella Project)。官網
序列化
用來高效處理序列化的函數庫。
FlatBuffers:高效利用內存的序列化函數庫,無需解包和解析即可高效訪問序列化數據。官網
Kryo:快速、高效的對象圖形序列化框架。官網
FST:提供兼容JDK的高性能對象圖形序列化。官網
MessagePack:一種高效的二進制序列化格式。官網
應用伺服器
用來部署應用程序的伺服器。
Apache Tomcat:針對Servlet和JSP的應用伺服器,健壯性好且適用性強。官網
Apache TomEE:Tomcat加Java EE。官網
Jetty:輕量級、小巧的應用伺服器,通常會嵌入到項目中。官網
WebSphere Liberty:輕量級、模塊化應用伺服器,由IBM開發。官網
WildFly:之前被稱作JBoss,由Red Hat開發。支持很多Java EE功能。官網
模板引擎
在模板中替換表達式的工具。
Apache Velocity:提供HTML頁面模板、email模板和通用開源代碼生成器模板。官網
FreeMarker:通用模板引擎,不需要任何重量級或自己使用的依賴關系。官網
Handlebars.java:使用Java編寫的模板引擎,邏輯簡單,支持語義擴展(semantic Mustache)。官網
Thymeleaf:旨在替換JSP,支持XML文件的工具。官網
測試
測試內容從對象到介面,涵蓋性能測試和基準測試工具。
Apache JMeter:功能性測試和性能評測。官網
Arquillian:集成測試和功能行測試平台,集成Java EE容器。官網
AssertJ:支持流式斷言提高測試的可讀性。官網
Awaitility:用來同步非同步操作的DSL。官網
Cucumber:BDD測試框架。官網
Gatling:設計為易於使用、可維護的和高性能負載測試工具。官網
Hamcrest:可用來靈活創建意圖(intent)表達式的匹配器。官網
JMockit:用來模擬靜態、final方法等。官網
JUnit:通用測試框架。官網
Mockito:在自動化單元測試中創建測試對象,為TDD或BDD提供支持。官網
PowerMock: 支持模擬靜態方法、構造函數、final類和方法、私有方法以及移除靜態初始化器的模擬工具。官網
REST Assured:為REST/HTTP服務提供方便測試的Java DSL。官網
Selenide:為Selenium提供精準的周邊API,用來編寫穩定且可讀的UI測試。官網
Selenium:為Web應用程序提供可移植軟體測試框架。官網
Spock:JUnit-compatible framework featuring an expressive Groovy-derived specification language.官網兼容JUnit框架,支持衍生的Groovy范的語言。
TestNG:測試框架。官網
Truth:Google的斷言和命題(proposition)框架。官網
Unitils:模塊化測試函數庫,支持單元測試和集成測試。官網
WireMock:Web Service測試樁(Stub)和模擬函數。官網
通用工具庫
通用工具類函數庫。
Apache Commons:提供各種用途的函數,比如配置、驗證、集合、文件上傳或XML處理等。官網
args4j:命令行參數解析器。官網
CRaSH:為運行進行提供CLI。官網
Gephi:可視化跨平台網路圖形化操作程序。官網
Guava:集合、緩存、支持基本類型、並發函數庫、通用註解、字元串處理、I/O等。官網
JADE:構建、調試多租戶系統的框架和環境。官網
javatuples:正如名字表示的那樣,提供tuple支持。盡管目前tuple的概念還有留有爭議。官網
JCommander:命令行參數解析器。官網
Protégé:提供存在論(ontology)編輯器以及構建知識系統的框架。官網
網路爬蟲
用於分析網站內容的函數庫。
Apache Nutch:可用於生產環境的高度可擴展、可伸縮的網路爬蟲。官網
Crawler4j:簡單的輕量級網路爬蟲。官網
JSoup:刮取、解析、操作和清理HTML。官網
Web框架
用於處理Web應用程序不同層次間通訊的框架。
Apache Tapestry:基於組件的框架,使用Java創建動態、強健的、高度可擴展的Web應用程序。官網
Apache Wicket:基於組件的Web應用框架,與Tapestry類似帶有狀態顯示GUI。官網
Google Web Toolkit:一組Web開發工具集,包含在客戶端將Java代碼轉為JavaScript的編譯器、XML解析器、RCP官網API、JUnit集成、國際化支持和GUI控制項。
Grails:Groovy框架,旨在提供一個高效開發環境,使用約定而非配置、沒有XML並支持混入(mixin)。官網
Ninja:Java全棧Web開發框架。非常穩固、快速和高效。官網
Pippo:小型、高度模塊化的類Sinatra框架。官網
Play:使用約定而非配置,支持代碼熱載入並在瀏覽器中顯示錯誤。官網
PrimeFaces:JSF框架,提供免費和帶支持的商業版本。包括若干前端組件。官網
Ratpack:一組Java開發函數庫,用於構建快速、高效、可擴展且測試完備的HTTP應用程序。官網
Spring Boot:微框架,簡化了Spring新程序的開發過程。官網
Spring:旨在簡化Java EE的開發過程,提供依賴注入相關組件並支持面向切面編程。官網
Vaadin:基於GWT構建的事件驅動框架。使用服務端架構,客戶端使用Ajax。官網
Blade:國人開發的一個輕量級的MVC框架. 它擁有簡潔的代碼,優雅的設計。官網
業務流程管理套件
流程驅動的軟體系統構建。
jBPM:非常靈活的業務流程管理框架,致力於構建開發與業務分析人員之間的橋梁。官網
Activity:輕量級工作流和業務流程管理框架。官網github
資源
社區
❹ java開源框架的源代碼怎麼讀
直接下載了就看,
如果是項目,直接導入到eclipse等工具就好。
❺ java有哪些框架需要學習呢
Java有三大框架:Struts,Hibernate和Spring。struts是開源軟體,通過學習struts的流程,架構,model部分,view部分和contorller組件來了解框架;Hibernate是開源代碼的對象關系映射框架,通過學習session介面等來了解框架。
1.三大框架簡介1、Spring Spring 是一個解決了許多在J2EE 開發中常見的問題的強大框架. Spring 提供了管理業務對 象的一致方法並且鼓勵了注入對介面編程而不是對類編程的良好習慣.Spring 的架構基礎是 基於使用JavaBean 屬性的Inversion Control容器.然而,這僅僅是完整圖景中的一部 分:Spri
跟著這個網站學吧:網站內容豐富,既有Java SE的基礎:中級:前端:J2EE:Java框架:還有實踐項目:我自己就是跟著上面的順序一路學過來...
2.Java 語言編寫的 AOP 框架,它給 POJOs 提供了聲明式的事務管理和其他企業事務--如... 開始的學習和應用非常的艱苦,很多東西都不 能一下子就很容易的理解.EJB 要嚴格地...
這是兩種以跨平台為特色的開發方式.Qt更多被認為是一種框架,但是Qt中有新增一些C... 博文 在博主認為,學習java的最佳學習方法莫過於視頻+博客+書籍+總結,前三者博主將...查看全部
2016年8月22日-根據每個人的學習方式、方法不同,可以制定具體的計劃。今天為大家整理了搭建Java知識框架的幾個方法... java框架SSM一. 序言本次培訓分四個階段進行,...
3.2008年1月3日-和如何學習JAVA框架的一點看法吧,希望對「望而生畏」的您,和「蠢蠢欲動... 自己需要的時候去過來就行,個人也認為這是很好的一種方式,往往自己從... 這就是第二個問題。 第二個問題,我想分兩方面來回答一下。1、學什麼?想要學好,當...
2016年8月3日- 用配置文件或者是Annonation的方式來代替New創建實例,可以說這是一個... Java框架學習 順序是哪些? Java框架學習 順序是哪些?詳細步驟具體如下:...
[ 圖文 ] 2013年12月9日- 三大框架簡介JAVA三大框架用來做WEB應用。struts主要負責表示層的顯示spring利用Java框架學習方法更多下載資源、學習資料請訪問CSDN文庫頻道....
Java 語言編寫的 AOP框架, 它給 POJOs 提供了聲明式的事務管理和其他企業事務--如... 在 EJB 開始的學習和應用非常的艱苦, 很多東西都不能一下子就很容易的理解.
希望能幫到你,謝謝!
❻ java框架學習方式有哪些
1、打好基礎是重中之重
基礎部分可能很枯燥,但是一定要耐心堅持下去。因為打基礎好比是在造輪子造汽車,沒有打好基礎在後面的學習就好比走路,可以說後面遇到的百分之七八十的問題都是基礎沒學好造成的。
2、多看官方文檔多讀源碼
一定要看JDK相關類庫、常用框架各種功能的源碼,去了解其底層實現的原理。總的來說這個也是在打基礎的部分,Java基礎非常扎實才能看懂,在我們學習一個類的源碼時,肯定會衍生出其他各種各樣的問題,供我們來了解和學習,這也就是我們下一步學習的目標和方向。慢慢的,我們就會學習更多的知識,並積累更多的經驗。
3、系統性學習,循序漸進
不要急於求成,每個知識點都要看,並且每個知識點都要勤加練習。有的同學在學習過程中覺得這個知識點簡單,就跳著學習,其實這是個很大的問題,知識點細節必須要了解。我們學習Java需要循序漸進,一步一步來,不能操之過急。
4、遇到問題
遇到不會做的問題,當然不能置之不理。先在網上查,目前網路上針對很多問題都有完美的解決方案,如果網上沒有類似的問題,那可能是你犯了什麼小錯誤。也不要在這個問題上花費太多時間,這需要一定的學習技巧。Java中的知識有很強的相關性,有不懂的地方,可以用其他周邊相關知識再回過頭來理解,這樣既不會耽誤學習進度,又能理解自己不懂的地方
1)jvm有很多種,其實jvm是一個標准,sun做的那個叫hotspot,作者就是後來v8的作者lars bak,其他公司也做過jvm,其中做得比較好的有bea的jrockit,其他的包括ibm的r9,apple的jvm等在內,都做得不行,所以jvm主要是整合淘汰掉這些做得不好的jvm(s),整合成一個統一的openjdk。
2)java是典型的oop語言,其執行效率的優化,最早就是lars bak等人從smalltalk等長期優化的經驗中總結出來並apply到hotspot上去滴,而smalltalk在早期apple機上搞出了那種拖拖拽拽就開發出app的做法,後來vc,delphi之類的其實都是抄襲或者說借鑒apple的smalltalk的做法,jobs說微軟從頭到尾都在抄襲apple是空穴來風,這里空穴來風跟王垠使用的空穴來風是一個意思,有趣的是,java的gui並沒有繼承這種搞法,反而對這種拖拖拽拽就作出app的做法批判有加,到今天,其實java的gui都還不能真正做到拖拖拽拽就作出來,問題很多,個人建議對於純java的gui開發,還是以寫代碼為主。
3)jee也是一個或者說是一堆標准,知乎上有些人把maven,jenkins都算做jee是不對滴,jee的標准核心是ejb,其實就是一個xml配置化的java文件,這個標准在4的時候,達到了頂峰狀態,幾乎所有的挨踢大廠都主動支持該標准,之後開始走下坡路,支持的廠越來越少。
4)java和javascript的關系比很多人認為的要密切,javascript裡面的java這四個字母可不是白叫的,比如js的版權和商標都控制在oracle手裡,oracle對於js的支持甚至超過其對java的支持,並且喜歡捆綁銷售,比如jvm裡面就有一個js引擎。
5)jvm裡面除了js engine以外還有一個瀏覽器排版引擎webkit,就是apple safari和google chrome用的那個那個。
6)java支持絕大多數腳本語言,你能叫得上名字的腳本語言,幾乎都可以在jvm上執行,比如常見的js,ruby,python,甚至php,lua,只不過除了js以外你需要找到相關的腳本引擎。
7)spring的版權被控制在vmware手裡,其實spring的那一大堆東西,本質上是一個非標準的jee實現,比如在jee裡面用的inject,在spring裡面就是autowire,當然spring曾經深刻滴影響了jee,所以有些東西比如di標准,是spring影響下制定出來的,所以spring的做法會比較特例一點。
8)maven上的jars數量前兩天突破800萬,其他語言的類庫,排名第二的是npm,大概數量是maven的十分之一,也就是幾十萬,不知道現在突破100萬沒有,然後是gem,也就是ruby那個,大概是十幾萬,下來是python的mole,大概數量級是幾萬,沒突破十萬。
9)java的標準是由一個叫做jcp的組織制定的,所有標准需要經過jcp的執行委員會通過方可執行,jcp幾乎包括了你所知道的絕大多數知名挨踢公司和組織,比如google,apple,ibm,intel,arm,red hat,twitter等,還有一些教育機構,比如我國的北京大學,阿里最近一次申請jcp執行委員會成員資格,似乎投票不通過,最近一次執行委員會新增兩個成員是arm和jetbrains。
10)微軟也曾經是jcp甚至是java的主要貢獻者,但是利益驅使下,想擴展java,從而破壞java跨平台的特性,所以跟sun鬧翻,其本質原因就是想讓客戶寫的java代碼跟windows綁定,sun堅決不同意,鬧翻,今天回頭看這個結果,只能說:雙輸,sun掛了,微軟的ria也離掛不太遠了,silverlight已經放棄了,比起當年ie自帶有jvm的支持來說,那完全就是兩回事。
11)除了微軟以外,jcp還缺少一個重要組織apache,因為apache跟oracle也鬧翻了,oracle似乎並不在乎開源組織,而更在意商業公司的支持。
12)java曾經有一個內置的資料庫,9之後被剝離。
13)j2me是j2se的子集。
14)vert.x作者tim fox最早在vmware做spring時候看到了node.js,萌生出了製作支持多核的node.x的想法,並在離開vmware後加入red hat將其實現,vmware看到後開始耍無賴,claim node.x後來改叫vert.x的版權,不惜跟red hat打官司,後來各方妥協,將其交給eclipse foundation。
15)oracle在收購bea之前,一開始的目標並不是bea和bea的weblogic,而是jboss,但是jboss表現出了極為有種的一面,在oracle收購成功之前,投入了red hat的懷抱,因為都是開源組織,從此jboss成了red hat的一個子部門,oracle收購jboss失敗之後,轉向bea,庄思浩氣死了,但是沒用,最後還是被惡意收購。
16)sun在玩不下去之前最早嘗試接觸的目標是ibm,ibm嫌太貴,放棄之後,被轉手給了oracle。(Java學習交流QQ群:589809992 我們一起學Java!)
17)vert.x的作者tim fox在離開red hat之前曾經發過twitter抱怨,外人比如我們,猜測是因為red hat內部已經有了一個jboss,所以跟vert.x在應用上有了重疊,所以導致tim fox的出走,但是出走之後,red hat答應對vert.x做持續性的戰略投入,所以vert.x core的幾個developers,其實拿的是red hat的工資,但是vert.x的版權並不在red hat手裡,而在eclipse foundation手裡。
18)vert.x的幾個核心開發人員都是google summer of code的導師,每年年初時候會招收在校大學生搞項目。
19)教育機構相關:scala的作者馬丁是德國人,eth的博導,groovy的主要領導人是法國人,jruby背後是東京大學,jboss的作者是法國大學校x的校友,x就是伽羅瓦考不進去的那所大學,伽羅瓦進不了x,所以改讀巴黎高師,tim fox畢業於帝國理工,主席去的那個,netty作者trustin lee是acm銀牌,現在line工作,畢業於sky裡面的延世大學,kotlin是毛子公司jetbrains的作品,看linkedin,很多人畢業自聖彼得堡大學,spring作者rod johnson是悉尼大學的音樂博士,hibernate作者gavin king是澳洲莫那什大學的數學本科畢業生,james gosling這種cmu和calgory的估計爛大街了,sun是斯坦福大學網路的意思,夾帶兩個私貨,aspectj有一個維護小組在mcgill,hbase跟waterloo關系密切。
20)java早期被人認為慢,跟java堅持不用硬體加速渲染有關,死活就是不肯接入directx和opengl,7之後總算開竅,搞了一個圖形引擎接入了directx/opengl。
21)casssandra是facebook做失敗的項目,被貢獻給了apache之後老樹開花。
22)groovy被貢獻給了apache,現在叫做apache groovy,ceylon被貢獻給了eclipse,現在叫做eclipse ceylon。
23)netflix現在是java shop,之前是用.net的。
先想到這么多,有空再寫。
❼ java開源框架的源代碼怎麼讀
Java開源框架的源代碼怎麼讀?說讀開源框架的源代碼對自己寫程序很有幫助的,我不知道從那裡下手
找一個你熟悉的項目,下回來源碼,然後單步跟蹤一遍,前題有一定基礎,至少會單步跟蹤調試對ide也得熟悉些,項目別選太大的,像apache裡面的項目都還可以。一開始還是比較艱難的,時間長了就好了。
如同你看不懂高手過招一樣。
還是一步一步的來吧。
先看一些基礎知識,寫一些東西,然後重點看自己用到的,或者即將用到的部分,這樣提高效果會更好。
開始的時候是把源代碼關聯,有不明白的地方可以ctrl直接過去看。之後有一些積攢之後,可以去看開源項目中的閃亮的地方,比如Spring中的IOC。然後參照自己去實現一個簡單的DEMO,之中可以參考一些資料。個人理解這樣會比較快速的將一個項目中的一部分較為深入的了解。畢竟一個成熟的開源項目技術的積攢及范圍都比較大。完全了解沒有必要也沒有可能。
我讀Spring的經驗。
首先要搞清它大體的處理步驟,然後再去詳細看每個類的具體內容。讀代碼,最忌從一開始就企圖詳細理解一個大工程的所有細節。先看大匡,然後再逐步掌握自己感興趣的細節。
讀代碼的時候可以把框架的代碼讀取到IDE的工程中去,
例如,用Eclipse讀代碼,方便得很。
或者在開發中設定classpath時,把代碼也帶上,
個人認為,多看例如JDK、Spring這樣優秀的代碼,對於掌握Java編程的精髓很有幫助。
初學者也不例外!
其實框架就是DB訪問,畫面顯示,資源管理。
首先要知道你的框架的特點,也就是他的側重點。
我看源代碼喜歡全局搜索,一直找到Java自帶的基礎類。一條先走到黑。嗬嗬,挺笨的
不過建議先會用,熟練用,在研讀。會快一些,少走彎路
不管是在校的學生還是剛參加工作的,都要從基礎開始,把一些經典的基礎問題搞明白了之後再去研究框架,其實感覺框架要先明白框架的總體,有時候不明白框架甚至看著源代碼都不知道屬於哪一類,引入也會產生問題,之後在去看源代碼。最主要的是光看不行,要親手做一下,即使是最簡單的程序也要親手做,如果是人家的程序照著手動敲一遍也會有很大的收獲的
對於開源項目,我覺得從如下方面著手比較好:
2.了解整體項目的技術架構
3.熟悉它用的技術與知識面,並逐個掌握
4.從單個模塊著手,調試代碼,熟悉基基本的流程與業務
5.在不修改其源碼的基礎上做一些擴展開發的工作,為我所用6.修改並優化其代碼
❽ 學習JAVA的書籍
1、《深入理解計算機系統》
從c語言到匯編語言到硬體再到操作系統,寫得非常好。是一本能幫助深入理解計算機系統的書。基本上把這本書吃透面試操作系統的大部分問題都不是問題。
2、《演算法導論(第三版)》
被很多acmer coder奉為學演算法的經典之作,但不太適合初學者,因為它這本書很多內容只提供了偽代碼,而沒有具體實現。但可以從這本書學數據結構和演算法好,因為日後的編程語言對實現而言實際上並沒有特別大的障礙,只是適合與不適合的選擇罷了,而把想法轉換成編程語言才是對演算法知識的考驗。如果不想太過深入的話可以忽略掉第四部分(高級設計和分析技術)第五部分(高級數據結構)和第七部分(演算法問題選編),你會發現書其實比你想像中薄很多噢!
3、《計算機網路:自頂向下方法》
軟體學院的計算機網路教材,非常適合初學者,裡面將計算機網路從頂層到底層逐章分析了一遍,如果能夠結合一些實驗來輔助理解會更好,因為裡面的講解比較抽象。
4、《STL源碼剖析》
如果你是經常用c++刷演算法題的同學,那麼一定經常用STL的各種集合, vector, set, stack, queue等等。它們的實現原理,在源碼面前,完全沒有秘密。
5、《圖解HTTP》
日本人著的介紹HTTP協 議的書,對理解HTTP協 議的一些細節有非常大的幫助,插畫也很多,感覺就像看漫畫一樣,很容易理解的。
6、《TCP/IP詳解卷一》
這本書能把枯燥的知識講得很細致,強烈推薦這本,看完相應章節後大概能夠明白為什麼TCP/IP要這么設計了。面試的時候經常問到三次握手和四次揮手,還有各種狀態的轉移, TIME_WAIT的時間為什麼是2*MSL······
7、《UNIX網路編程卷一:套接字聯網API(第三版)》
中文版快800頁,不過我只看了一些章節,這本書也是把TCP/IP的細節講得很深很深,此外還有非常重要的基本套接字編程,就是寫網路程序的時候那些bind, accept, listen, send, receive函數之類的,內容非常多,但是這些是理解多路復用模型所需要掌握的······select/poll/epoll這些系統調用解決了什麼問題?事件機制能不能理解?就看這本書的前六章了。
❾ 如何快速讀懂項目源碼javaWeb
一:學會如何讀一個JavaWeb項目源代碼 步驟:表結構->web.xml->mvc->db->spring
ioc->log-> 代碼
1、先了解項目資料庫的表結構,這個方面是最容易忘記 的,有時候我們只顧著看每一個方法是怎麼進行的,卻沒
有去了解資料庫之間的主外鍵關聯。其實如果先了解數據 庫表結構,再去看一個方法的實現會更加容易。
2、然後需要過一遍web.xml,知道項目中用到了什麼攔
截器,監聽器,過濾器,擁有哪些配置文件。如果是攔截 器,一般負責過濾請求,進行AOP 等;如果是監 可能是定時任務,初始化任務;配置文件有如使用了 spring
後的讀取mvc 相關,db 相關,service 相關,aop 相關的文件。
3、查看攔截器,監聽器代碼,知道攔截了什麼請求,這
個類完成了怎樣的工作。有的人就是因為缺少了這一步, 自己寫了一個action,配置文件也沒有寫錯,但是卻怎麼
調試也無法進入這個action,直到別人告訴他,請求被攔
4、接下來,看配置文件,首先一定是mvc相關的,如 springmvc
中,要請求哪些請求是靜態資源,使用了哪些 view 策略,controller 註解放在哪個包下等。 然後是db 相關配置文件,看使用了什麼資料庫,使用了
什麼orm框架,是否開啟了二級緩存,使用哪種產品作 為二級緩存,事務管理的處理,需要掃描的實體類放在什 么位置。最後是spring 核心的ioc
功能相關的配置文件, 知道介面與具體類的注入大致是怎樣的。當然還有一些如 apectj 置文件,也是在這個步驟中完成
5、log
相關文件,日誌的各個級別是如何處理的,在哪些 地方使用了log 記錄日誌
6、從上面幾點後知道了整個開源項目的整體框架,閱讀 每個方法就不再那麼難了。
7、當然如果有項目配套的開發文檔也是要閱讀的。
❿ 如何研究Java的一些框架源碼
基本的思路就是先將源碼構建出來,並且是可以運行的。比如CAS和activemq直接就是可以運行的。比如spring可以構建一個使用spring引用的web工程,然後去掉spring相應的jar包,改成spring的源碼依賴。簡言之就是能讓源碼跑起來。這樣才能打斷點,跟蹤調試。
再往下就是核心部分了。
首先,最好是熟悉這個產品和框架的使用。如果都不會用就去看源碼,會有很多地方理解不上去。所以一定要會用。不用每一個細節都會用,至少整體的工作流程要明白。
其次就是對於他包含了那幾個部分有所了解,比如一個一個應用可能會有容器類,存儲部分,網路通訊部分等組成,對整體框架結構要有所了解。
再次之就是可以提前找一些該框架深入的源碼分析作為輔助理解看看。
最後就是看源碼細節了。
一般來說,一個產品中都有幾個做類似事情 的不同實現。比如activemq,有多個持久層的實現,包括jdbc,kahadb還有內存存儲等。一般你抓住一個你最常用方式,比如jdbc看就好。其他的存儲方式都是相同的存儲介面的實現。