JavaWeb的框架介紹

首先談談Java Web須要掌握哪些東西。這裏是一些知識點的蒐集,暫不作詳細說明,歡迎各位博友補充指正。java

1.底層

  • Java語言相關的就不說了,首先是JVM的結構和工做原理。比較重要的是Java內存模型,各類GC算法,Classloader的加載原理等。我的對底層的一些東西還算比較瞭解,因此不過多糾結,實際上程序編譯連接過程以及二進制文件的處理仍是很值得研究的。
  • JVM監控及調優。做爲一個開發人員並不必定須要很是熟悉JVM調優的方法,但若是具有JVM監控及調優的能力,將讓你對程序運行情況瞭如指掌,對於問題定位也會敏感得多。
  • Java多線程。對於線程安全的理解,以及如何在本身的程序中避免多線程形成的不一致問題等。
  • I/O。Java中經常提到的是BIO/NIO,即阻塞型I/O與非阻塞型I/O,其實並不難理解,結合Linux中的同步I/O和異步I/O的實現原理,基本都是相通的,每種I/O方式解決的問題,又存在什麼問題,爲何使用epoll。

2.Servlet

  Servlet是運行於服務端的java程序,通常實現本身的Java服務端應用都從HttpServlet類繼承,而後實現本身的init | doGet | doPost | service方法。Servlet的生命週期從其加載開始,首先執行一次初始化,調用init方法,以後即可運行自身的服務,當生命週期結束時,調用destroy方法回收資源,結束服務。面試

  僅瞭解原理固然是不夠的,還要實戰能力,在IDE中寫寫簡單的代碼誰都會,然而真正讓一個程序可以運行起來也還須要點其餘的東西,這裏我指的是Servlet的容器。servlet的容器有不少,經常使用的以Tomcat爲例,安裝好Tomcat後,在開發時必須包含進Tomcat的lib。IDE確實慣壞了好多人,目錄如何組織,程序如何編譯、如何部署這些問題都被IDE屏蔽掉了,若是要對總體有比較透徹的瞭解,建議一切從命令行動手。算法

  具體可參考:《Servlet與JSP核心編程》。數據庫

3.框架

  Java Web開發的用到的框架之多簡直使人髮指,並且由於版本的更新換代致使的問題也是層出不窮。然而這也是Web技術不斷演化的結果,要麼選擇接受,要麼引領節奏。編程

Spring

  Spring是一個強大而又「輕量級」的Java開發框架,之因此打引號是由於感受並非那麼輕量。Spring的主要目的在於簡化Java應用開發,以配置方式代替硬編碼方式的編程,模塊解耦,其架構以下圖所示。包括了數據訪問、遠程通訊、AOP、核心容器等部分。設計模式

 

 Figure 1 Spring體系架構安全

  Spring的核心主要有三點:restful

  • IoC:反轉控制。

  反轉控制就是指將控制權由類內部抽離到容器,由容器類的實例化及動做進行配置管理。session

  • Dependency-injection:依賴注入  

  對象的依賴關係由負責協調系統中各個對象的第三方組件在建立對象時設定。對象不自行建立或管理它們的依賴關係,依賴關係被自動注入到須要它們的對象中。經過參數和配置可以體會出「注入」這個詞在這裏有多形象。依賴注入的最大好處就是鬆耦合。不須要再類內部去和特定的類進行綁定,而是將一些依賴關係以參數的形式注入到類內部。多線程

  • Aspect Oriented Programming:面向切向編程

   在軟件開發中,分佈於應用中多處的功能被稱爲橫切關注點。這些橫切關注點每每和業務邏輯是相分離的,將這些橫切關注點與業務邏輯相分離正式AOP要解決的。AOP編程可以讓遍及在應用各處的功能分離出來造成可重用的組件。是高內聚低耦合的又一個體現,將通用實現模塊與核心業務模塊相分離。

   具體參考:《Spring In Action》

Hibernate

  數據持久化框架其實也有不少,須要掌握的不只是Hibernate,只是由於Hibernate在之前的企業級應用中用的比較多而已,另外MyBatis也佔有至關重要的份額。Hibernate是一個全自動的持久化框架,並非那麼方便,因此不少開發者更傾向於使用MyBatis,淘寶就是這樣。

  Hibernate的工做流程:首先經過configuration對象讀取配置文件;解析映射信息,建立StandardSessionFactory;調用openSession打開session;建立事務transaction,以後進行持久化操做;完成後提交事務,關閉session,關閉sessionFactory。

 Figuer 2 Hibernate工做流程

  要理解ORM的理念:ORM意爲對象關係映射。是一種爲了解決程序的面向對象模型與數據庫關係模型互不匹配問題的技術。

  hibernate中比較重要的是對象的4種狀態轉換及條件。分別是transient瞬時態、persistent持久態、detached遊離態和移除態,狀態轉換以下:

 

 Figure 3 Hibernate對象狀態轉換圖

Struts 2

  Struts出現的最先,也是思想提供者之一,從名字就能夠看得出其重要性,其設計目的是爲了簡化Java開發,統一事務切面化。

  Struts最關鍵的地方在於Action的執行,攔截器的原理、valuestack及OGNL。

   具體參考:《Struts in Action》

 4.HTTP

  這個不用多談,過重要了,做爲Web開發者,若是不特別熟悉Http將會是一件很麻煩的事。

  • Http的報頭格式
  • Http協議的各類返回碼是什麼意思
  • https如何實現
  • B/S架構的工做原理
  • Cookie和Session的原理
  • restful API

5.設計模式

  這裏就不列舉23種模式了,我的以爲純粹看書學習《設計模式》並無什麼用,要在實際應用中碰到,而且多問幾個爲何,並且本身寫代碼時能有使用設計模式的意識才能對各類設計模式有更深的領悟。

 

  固然Web開發遠不止這麼些東西,我這裏暫時也只好先列些重要的。應用開發後,還有部署的問題,所以又會涉及CDN和負載均衡等問題就更復雜了......

  另外在Web開發的過程當中,要養成良好的開發習慣,好比開發以前可以熟練地使用UML類圖,交互圖等,這將避免你犯不少錯誤。感謝面試官輕虐,本身以爲還有許多不紮實的地方,還須要繼續努力才能對得起此次機會。