基礎知識儲備:
- Java SE
- Java語言(java.long.*)
- Java集合框架(java.util.*)
- Java I/O(java.io.*、java.nio.*.*)
- Java 網絡(java.net.*、java.rmi.*、javax.net.*)
- Java 並發(java.util.concurrent.*、java.util.concurrent.*.*)
實際上Jdk的內容非常多,除了上面提到的最常用的工具和方法,剩下的內容,比如像java security、java Swing、java awt等,可能平時不常用,但作為一名合格的程序員,那些都有必要了解。
- Java EE
- Servlet
- JDBC
- JPA
Servlet是現代web應用的基礎,基於其原理搭建的MVC框架,比如Spring MVC、Struts等,是我們這代Java工程師都一定會用到的。經典的Java EE容器Tomcat、Jetty等也是現在每天都會用到的工具,因此,Servlet技術一定要深入掌握。JDBC和JPA是Java持久層唯二的技術。JDBC更底層,更基礎,JPA則是針對ORM框架的接口規范。
Java EE覆蓋到企業開發的方方面面,但因為其臃腫的設計,已經越來越跟不上時代的腳步了,最近有傳言稱Oracle將放棄這項技術,但不論Java EE的前景如何,我上面提到的那三門技術,都不會輕易消失。
- JVM
- 操作字節碼:ASM、cglib、javassist
- JVM的內存和體系結構
Java的語言的方方面面又都和JVM有關,但這部分內容我還不是很了解,以后在補充 //TODO
常用框架:
- 數據庫連接池
- Apache DBCP
- Druid
- Tomcat jdbc pool
-
HikariCP
不知道為什么,我對連接池技術一直情有獨鍾,當年接觸到的第一個連接池是c3p0,也正是從那是開始,我才有所謂“性能”、“效率”這些概念。“池”,是經典的以空間換時間的方式,提升程序效率的概念。“池”的應用非常廣泛,不光有數據庫連接池,還有線程池,緩存池等等。這項技術發展到現在已經非常穩定,普通公司的項目只要使用連接池,一般就沒什么問題。隨着時代的發展,連接池的功能也在不斷擴充,阿里的Druid就提供了sql監控的功能。所以現在看連接池是相關內容,就不能僅是為了實現功能(本來功能就不多),而是要深入的理解原理,並能夠自己動手實踐,開發出高效穩定的服務組件。
- 持久層的中間件
- ottor
- yugong
- Cobar
- Sharding - JDBC
- myCat
Java持久層中間件通常分為兩類,一類是分庫分表,一類是數據遷移。前者是在融合了JDBC和數據庫連接池的基礎上,實現的面向數據庫的高級功能。當系統的數據量上升到一定級別之后,分庫分表是必然的選擇,使用中間件,就可以和應用分離,做到靈活的控制。而后者則是對Java I/O、並發技術的高級應用。一道經典的面試題是給你一個上GB的文件,問你如何快速的找到其中出現頻率最高的一組詞匯,或者問你如何快速的統計出一份報表。等你深入掌握了第二類框架的運行原理之后,這些都不是問題。
- ORM框架
- hibernate
- myBatis
- Jfinal
- nutz
SSH(Spring + Struts2 + Hibernate3)最火的時候,我剛剛工作,后來有人說hibernate不行了,大家都在用myBatis,於是緊跟着又有了SSM(myBatis)。再后來,“雲”、“微服務”成為當前最炙手可熱的概念,傳統的ORM框架也漸漸沒有了往日的熱度,大家都轉頭去搞自己的輕量級的ORM和MVC框架,國內比較著名的有Jfinal和nutz。ORM,實體映射成了老舊的代名詞.......但是,我不這么認為。現在打開
hibernate的官網,發現它保持的生命力,就在6月底,還發布了其最新的5.2.1版本。一個框架的成功都是有原因的,其中肯定有非常多值得學習的地方。只有你足夠了解它的時候,你才能准確的判斷,自己究竟需不需要它。
- Spring
- Spring JDBC
- Spring JPA
- Spring DATA
其實看上文也知道,各種框架變來變去,但是Spring的核心統治地方,一直屹立不倒。能做到這點是一件非常了不起的事情,這和Spring一直堅持高效,堅持給程序員各式各樣的“糖果”有關系。漸漸的,在應用端,Spring已經有了一統天下的姿勢。上面僅列舉了Spring在Java持久層的工作,除此之外,還有很多內容,就不在這里一一列舉了。
- 緩存
- Ehcache
- memcached
- J2Cache
- 非關系型數據庫
- redis
- mongoDB
緩存和非關系型數據庫很像,都是提供數據的冗余保存,從而提升性能,而且都可以分布式的部署,達到高可用。兩者有區別的地方,可能就在對數據結構和存儲方式的差異。
- 關系型數據庫
- Oracle
- MySQL
- postgresql
大公司里,都會有專門的DBA去做高可用和性能上的架構,那是一塊相對獨立而且門檻較高的領域。作為應用開發的技術人員,雖然不用考慮底層的架構,但也仍需對自己寫過的每一條sql負責,尤其是在輕型的架構中,底層更多的使用了原生的JDBC或myBatis,這些都需要程序員們自己些sql,當系統存在一條“無厘頭”的sql時,再強大的架構也有可能被搞垮。
其他技術
- MQ中間件,反向代理服務器
- linux操作系統